/*! update time: 2025/9/4 20:01:23*/ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js": /*!*****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcz81YTQzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js": /*!***************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzP2MxMzUiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": /*!******************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzPzIyMzYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": /*!**********************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanM/M2M5NiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js": /*!*****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcz9jOTczIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": /*!***************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzPzk3MGIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/classCallCheck.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/construct.js": /*!**********************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/construct.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isNativeReflectConstruct = __webpack_require__(/*! ./isNativeReflectConstruct.js */ \"./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nfunction _construct(t, e, r) {\n if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n var o = [null];\n o.push.apply(o, e);\n var p = new (t.bind.apply(t, o))();\n return r && setPrototypeOf(p, r.prototype), p;\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jb25zdHJ1Y3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jb25zdHJ1Y3QuanM/YjE3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gcmVxdWlyZShcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCIpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfY29uc3RydWN0KHQsIGUsIHIpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSByZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBbbnVsbF07XG4gIG8ucHVzaC5hcHBseShvLCBlKTtcbiAgdmFyIHAgPSBuZXcgKHQuYmluZC5hcHBseSh0LCBvKSkoKTtcbiAgcmV0dXJuIHIgJiYgc2V0UHJvdG90eXBlT2YocCwgci5wcm90b3R5cGUpLCBwO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY29uc3RydWN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/construct.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/createClass.js": /*!************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzPzViYzMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/createClass.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": /*!***************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ \"./node_modules/@babel/runtime/helpers/toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzPzk1MjMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/defineProperty.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/get.js": /*!****************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/get.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var superPropBase = __webpack_require__(/*! ./superPropBase.js */ \"./node_modules/@babel/runtime/helpers/superPropBase.js\");\nfunction _get() {\n return module.exports = _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {\n var p = superPropBase(e, t);\n if (p) {\n var n = Object.getOwnPropertyDescriptor(p, t);\n return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;\n }\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _get.apply(null, arguments);\n}\nmodule.exports = _get, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXQuanM/ODk2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc3VwZXJQcm9wQmFzZSA9IHJlcXVpcmUoXCIuL3N1cGVyUHJvcEJhc2UuanNcIik7XG5mdW5jdGlvbiBfZ2V0KCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZ2V0ID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmdldCA/IFJlZmxlY3QuZ2V0LmJpbmQoKSA6IGZ1bmN0aW9uIChlLCB0LCByKSB7XG4gICAgdmFyIHAgPSBzdXBlclByb3BCYXNlKGUsIHQpO1xuICAgIGlmIChwKSB7XG4gICAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocCwgdCk7XG4gICAgICByZXR1cm4gbi5nZXQgPyBuLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gZSA6IHIpIDogbi52YWx1ZTtcbiAgICB9XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2dldC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/get.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js": /*!***************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _getPrototypeOf(t) {\n return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzPzM2YzYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/inherits.js": /*!*********************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/inherits.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzP2VkNmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/inherits.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/isNativeFunction.js": /*!*****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/isNativeFunction.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _isNativeFunction(t) {\n try {\n return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n } catch (n) {\n return \"function\" == typeof t;\n }\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pc05hdGl2ZUZ1bmN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVGdW5jdGlvbi5qcz9jNWY3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pc05hdGl2ZUZ1bmN0aW9uLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/isNativeFunction.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js": /*!*************************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports)();\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanM/NmY4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIHJldHVybiAhIXQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cykoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js": /*!****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanM/MTFiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHtcbiAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/iterableToArray.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": /*!*********************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzliNDIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js": /*!****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanM/YzI0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/nonIterableRest.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js": /*!******************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzPzA2NzYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": /*!**************************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz82YjU4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7XG4gIGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7XG4gIGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZCh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/readOnlyError.js": /*!**************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/readOnlyError.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _readOnlyError(r) {\n throw new TypeError('\"' + r + '\" is read-only');\n}\nmodule.exports = _readOnlyError, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWFkT25seUVycm9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVhZE9ubHlFcnJvci5qcz9kYTYwIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9yZWFkT25seUVycm9yKHIpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCInICsgciArICdcIiBpcyByZWFkLW9ubHknKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlYWRPbmx5RXJyb3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/readOnlyError.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js": /*!*******************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanM/N2VjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gT2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0LCBlKSB7XG4gICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7XG4gICAgICAgIHZhciBvID0gdGhpcy50cnlFbnRyaWVzW3JdO1xuICAgICAgICBpZiAoby50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIG4uY2FsbChvLCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGkgPSBvO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpICYmIChcImJyZWFrXCIgPT09IHQgfHwgXCJjb250aW51ZVwiID09PSB0KSAmJiBpLnRyeUxvYyA8PSBlICYmIGUgPD0gaS5maW5hbGx5TG9jICYmIChpID0gbnVsbCk7XG4gICAgICB2YXIgYSA9IGkgPyBpLmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gaS5maW5hbGx5TG9jLCB5KSA6IHRoaXMuY29tcGxldGUoYSk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodCwgZSkge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogXCJyZXR1cm5cIiA9PT0gdC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gdC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSB0LnR5cGUgJiYgZSAmJiAodGhpcy5uZXh0ID0gZSksIHk7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5O1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIudHJ5TG9jID09PSB0KSB7XG4gICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbi50eXBlKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG4uYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/regeneratorRuntime.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/set.js": /*!****************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/set.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var superPropBase = __webpack_require__(/*! ./superPropBase.js */ \"./node_modules/@babel/runtime/helpers/superPropBase.js\");\nvar defineProperty = __webpack_require__(/*! ./defineProperty.js */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\nfunction set(e, r, t, o) {\n return set = \"undefined\" != typeof Reflect && Reflect.set ? Reflect.set : function (e, r, t, o) {\n var f,\n i = superPropBase(e, r);\n if (i) {\n if ((f = Object.getOwnPropertyDescriptor(i, r)).set) return f.set.call(o, t), !0;\n if (!f.writable) return !1;\n }\n if (f = Object.getOwnPropertyDescriptor(o, r)) {\n if (!f.writable) return !1;\n f.value = t, Object.defineProperty(o, r, f);\n } else defineProperty(o, r, t);\n return !0;\n }, set(e, r, t, o);\n}\nfunction _set(e, r, t, o, f) {\n if (!set(e, r, t, o || e) && f) throw new TypeError(\"failed to set property\");\n return t;\n}\nmodule.exports = _set, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXQuanM/MDEwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc3VwZXJQcm9wQmFzZSA9IHJlcXVpcmUoXCIuL3N1cGVyUHJvcEJhc2UuanNcIik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiKTtcbmZ1bmN0aW9uIHNldChlLCByLCB0LCBvKSB7XG4gIHJldHVybiBzZXQgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3Quc2V0ID8gUmVmbGVjdC5zZXQgOiBmdW5jdGlvbiAoZSwgciwgdCwgbykge1xuICAgIHZhciBmLFxuICAgICAgaSA9IHN1cGVyUHJvcEJhc2UoZSwgcik7XG4gICAgaWYgKGkpIHtcbiAgICAgIGlmICgoZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSwgcikpLnNldCkgcmV0dXJuIGYuc2V0LmNhbGwobywgdCksICEwO1xuICAgICAgaWYgKCFmLndyaXRhYmxlKSByZXR1cm4gITE7XG4gICAgfVxuICAgIGlmIChmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCByKSkge1xuICAgICAgaWYgKCFmLndyaXRhYmxlKSByZXR1cm4gITE7XG4gICAgICBmLnZhbHVlID0gdCwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIHIsIGYpO1xuICAgIH0gZWxzZSBkZWZpbmVQcm9wZXJ0eShvLCByLCB0KTtcbiAgICByZXR1cm4gITA7XG4gIH0sIHNldChlLCByLCB0LCBvKTtcbn1cbmZ1bmN0aW9uIF9zZXQoZSwgciwgdCwgbywgZikge1xuICBpZiAoIXNldChlLCByLCB0LCBvIHx8IGUpICYmIGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmYWlsZWQgdG8gc2V0IHByb3BlcnR5XCIpO1xuICByZXR1cm4gdDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/set.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": /*!***************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _setPrototypeOf(t, e) {\n return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzRhNGIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js": /*!**************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithHoles.js\");\nvar iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ \"./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\nvar nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ \"./node_modules/@babel/runtime/helpers/nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcz8yNzhjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/slicedToArray.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/superPropBase.js": /*!**************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/superPropBase.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\nfunction _superPropBase(t, o) {\n for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););\n return t;\n}\nmodule.exports = _superPropBase, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zdXBlclByb3BCYXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc3VwZXJQcm9wQmFzZS5qcz85ZjcwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL2dldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2UodCwgbykge1xuICBmb3IgKDsgIXt9Lmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgbnVsbCAhPT0gKHQgPSBnZXRQcm90b3R5cGVPZih0KSk7KTtcbiAgcmV0dXJuIHQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zdXBlclByb3BCYXNlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/superPropBase.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js": /*!******************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/iterableToArray.js\");\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ \"./node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzPzQ0OGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXkocikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/toConsumableArray.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/toPrimitive.js": /*!************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/toPrimitive.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzP2U1MGQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/toPrimitive.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/toPropertyKey.js": /*!**************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/toPropertyKey.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var _typeof = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\nvar toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ \"./node_modules/@babel/runtime/helpers/toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcz9hMzk1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/toPropertyKey.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/typeof.js": /*!*******************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanM/NzAzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/typeof.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": /*!***************************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzPzY2MTMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcbiAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/helpers/wrapNativeSuper.js": /*!****************************************************************!*\ !*** ./node_modules/@babel/runtime/helpers/wrapNativeSuper.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\nvar isNativeFunction = __webpack_require__(/*! ./isNativeFunction.js */ \"./node_modules/@babel/runtime/helpers/isNativeFunction.js\");\nvar construct = __webpack_require__(/*! ./construct.js */ \"./node_modules/@babel/runtime/helpers/construct.js\");\nfunction _wrapNativeSuper(t) {\n var r = \"function\" == typeof Map ? new Map() : void 0;\n return module.exports = _wrapNativeSuper = function _wrapNativeSuper(t) {\n if (null === t || !isNativeFunction(t)) return t;\n if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== r) {\n if (r.has(t)) return r.get(t);\n r.set(t, Wrapper);\n }\n function Wrapper() {\n return construct(t, arguments, getPrototypeOf(this).constructor);\n }\n return Wrapper.prototype = Object.create(t.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), setPrototypeOf(Wrapper, t);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _wrapNativeSuper(t);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy93cmFwTmF0aXZlU3VwZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy93cmFwTmF0aXZlU3VwZXIuanM/YTEyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xudmFyIGlzTmF0aXZlRnVuY3Rpb24gPSByZXF1aXJlKFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCIpO1xudmFyIGNvbnN0cnVjdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdC5qc1wiKTtcbmZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIodCkge1xuICB2YXIgciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgTWFwID8gbmV3IE1hcCgpIDogdm9pZCAwO1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcih0KSB7XG4gICAgaWYgKG51bGwgPT09IHQgfHwgIWlzTmF0aXZlRnVuY3Rpb24odCkpIHJldHVybiB0O1xuICAgIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICBpZiAodm9pZCAwICE9PSByKSB7XG4gICAgICBpZiAoci5oYXModCkpIHJldHVybiByLmdldCh0KTtcbiAgICAgIHIuc2V0KHQsIFdyYXBwZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdCh0LCBhcmd1bWVudHMsIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH1cbiAgICB9KSwgc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgdCk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3dyYXBOYXRpdmVTdXBlciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/wrapNativeSuper.js\n"); /***/ }), /***/ "./node_modules/@babel/runtime/regenerator/index.js": /*!**********************************************************!*\ !*** ./node_modules/@babel/runtime/regenerator/index.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// TODO(Babel 8): Remove this file.\n\nvar runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ \"./node_modules/@babel/runtime/helpers/regeneratorRuntime.js\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanM/YTM0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/regenerator/index.js\n"); /***/ }), /***/ "./node_modules/js-md5/src/md5.js": /*!****************************************!*\ !*** ./node_modules/js-md5/src/md5.js ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \"./node_modules/webpack/buildin/amd-options.js\");\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return exports;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n }\n})();\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \"./node_modules/process/browser.js\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanMtbWQ1L3NyYy9tZDUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMtbWQ1L3NyYy9tZDUuanM/ODIzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFtqcy1tZDVde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvanMtbWQ1fVxuICpcbiAqIEBuYW1lc3BhY2UgbWQ1XG4gKiBAdmVyc2lvbiAwLjcuM1xuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNC0yMDE3XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBFUlJPUiA9ICdpbnB1dCBpcyBpbnZhbGlkIHR5cGUnO1xuICB2YXIgV0lORE9XID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIHZhciByb290ID0gV0lORE9XID8gd2luZG93IDoge307XG4gIGlmIChyb290LkpTX01ENV9OT19XSU5ET1cpIHtcbiAgICBXSU5ET1cgPSBmYWxzZTtcbiAgfVxuICB2YXIgV0VCX1dPUktFUiA9ICFXSU5ET1cgJiYgdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnO1xuICB2YXIgTk9ERV9KUyA9ICFyb290LkpTX01ENV9OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgaWYgKE5PREVfSlMpIHtcbiAgICByb290ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFdFQl9XT1JLRVIpIHtcbiAgICByb290ID0gc2VsZjtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSlNfTUQ1X05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICFyb290LkpTX01ENV9OT19BUlJBWV9CVUZGRVIgJiYgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIEhFWF9DSEFSUyA9ICcwMTIzNDU2Nzg5YWJjZGVmJy5zcGxpdCgnJyk7XG4gIHZhciBFWFRSQSA9IFsxMjgsIDMyNzY4LCA4Mzg4NjA4LCAtMjE0NzQ4MzY0OF07XG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xuICB2YXIgT1VUUFVUX1RZUEVTID0gWydoZXgnLCAnYXJyYXknLCAnZGlnZXN0JywgJ2J1ZmZlcicsICdhcnJheUJ1ZmZlcicsICdiYXNlNjQnXTtcbiAgdmFyIEJBU0U2NF9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbiAgdmFyIGJsb2NrcyA9IFtdLCBidWZmZXI4O1xuICBpZiAoQVJSQVlfQlVGRkVSKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2OCk7XG4gICAgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgYmxvY2tzID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIH1cblxuICBpZiAocm9vdC5KU19NRDVfTk9fTk9ERV9KUyB8fCAhQXJyYXkuaXNBcnJheSkge1xuICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChBUlJBWV9CVUZGRVIgJiYgKHJvb3QuSlNfTUQ1X05PX0FSUkFZX0JVRkZFUl9JU19WSUVXIHx8ICFBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iai5idWZmZXIgJiYgb2JqLmJ1ZmZlci5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXI7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGhleFxuICAgKiBAbWVtYmVyb2YgbWQ1XG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBoZXggc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IEhleCBzdHJpbmdcbiAgICogQGV4YW1wbGVcbiAgICogbWQ1LmhleCgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xuICAgKiAvLyBlcXVhbCB0b1xuICAgKiBtZDUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKTtcbiAgICovXG4gIC8qKlxuICAgKiBAbWV0aG9kIGRpZ2VzdFxuICAgKiBAbWVtYmVyb2YgbWQ1XG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBieXRlcyBhcnJheVxuICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxVaW50OEFycmF5fEFycmF5QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gaGFzaFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEJ5dGVzIGFycmF5XG4gICAqIEBleGFtcGxlXG4gICAqIG1kNS5kaWdlc3QoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKTtcbiAgICovXG4gIC8qKlxuICAgKiBAbWV0aG9kIGFycmF5XG4gICAqIEBtZW1iZXJvZiBtZDVcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGJ5dGVzIGFycmF5XG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQnl0ZXMgYXJyYXlcbiAgICogQGV4YW1wbGVcbiAgICogbWQ1LmFycmF5KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XG4gICAqL1xuICAvKipcbiAgICogQG1ldGhvZCBhcnJheUJ1ZmZlclxuICAgKiBAbWVtYmVyb2YgbWQ1XG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBBcnJheUJ1ZmZlclxuICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxVaW50OEFycmF5fEFycmF5QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gaGFzaFxuICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IEFycmF5QnVmZmVyXG4gICAqIEBleGFtcGxlXG4gICAqIG1kNS5hcnJheUJ1ZmZlcignVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xuICAgKi9cbiAgLyoqXG4gICAqIEBtZXRob2QgYnVmZmVyXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWF5YmUgY29uZnVzZSB3aXRoIEJ1ZmZlciBpbiBub2RlLmpzLiBQbGVhc2UgdXNlIGFycmF5QnVmZmVyIGluc3RlYWQuXG4gICAqIEBtZW1iZXJvZiBtZDVcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIEFycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXG4gICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gQXJyYXlCdWZmZXJcbiAgICogQGV4YW1wbGVcbiAgICogbWQ1LmJ1ZmZlcignVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xuICAgKi9cbiAgLyoqXG4gICAqIEBtZXRob2QgYmFzZTY0XG4gICAqIEBtZW1iZXJvZiBtZDVcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGJhc2U2NCBzdHJpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcbiAgICogQHJldHVybnMge1N0cmluZ30gYmFzZTY0IHN0cmluZ1xuICAgKiBAZXhhbXBsZVxuICAgKiBtZDUuYmFzZTY0KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XG4gICAqL1xuICB2YXIgY3JlYXRlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKG91dHB1dFR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBuZXcgTWQ1KHRydWUpLnVwZGF0ZShtZXNzYWdlKVtvdXRwdXRUeXBlXSgpO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgY3JlYXRlXG4gICAqIEBtZW1iZXJvZiBtZDVcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBNZDUgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtNZDV9IE1kNSBvYmplY3QuXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBoYXNoID0gbWQ1LmNyZWF0ZSgpO1xuICAgKi9cbiAgLyoqXG4gICAqIEBtZXRob2QgdXBkYXRlXG4gICAqIEBtZW1iZXJvZiBtZDVcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhbmQgdXBkYXRlIE1kNSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcbiAgICogQHJldHVybnMge01kNX0gTWQ1IG9iamVjdC5cbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGhhc2ggPSBtZDUudXBkYXRlKCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XG4gICAqIC8vIGVxdWFsIHRvXG4gICAqIHZhciBoYXNoID0gbWQ1LmNyZWF0ZSgpO1xuICAgKiBoYXNoLnVwZGF0ZSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xuICAgKi9cbiAgdmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlT3V0cHV0TWV0aG9kKCdoZXgnKTtcbiAgICBpZiAoTk9ERV9KUykge1xuICAgICAgbWV0aG9kID0gbm9kZVdyYXAobWV0aG9kKTtcbiAgICB9XG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBuZXcgTWQ1KCk7XG4gICAgfTtcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKCkudXBkYXRlKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB0eXBlID0gT1VUUFVUX1RZUEVTW2ldO1xuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlT3V0cHV0TWV0aG9kKHR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG4gIHZhciBub2RlV3JhcCA9IGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICB2YXIgY3J5cHRvID0gZXZhbChcInJlcXVpcmUoJ2NyeXB0bycpXCIpO1xuICAgIHZhciBCdWZmZXIgPSBldmFsKFwicmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyXCIpO1xuICAgIHZhciBub2RlTWV0aG9kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUobWVzc2FnZSwgJ3V0ZjgnKS5kaWdlc3QoJ2hleCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgRVJST1I7XG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpIHx8IEFycmF5QnVmZmVyLmlzVmlldyhtZXNzYWdlKSB8fFxuICAgICAgICBtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUobmV3IEJ1ZmZlcihtZXNzYWdlKSkuZGlnZXN0KCdoZXgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtZXRob2QobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbm9kZU1ldGhvZDtcbiAgfTtcblxuICAvKipcbiAgICogTWQ1IGNsYXNzXG4gICAqIEBjbGFzcyBNZDVcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgaW50ZXJuYWwgY2xhc3MuXG4gICAqIEBzZWUge0BsaW5rIG1kNS5jcmVhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBNZDUoc2hhcmVkTWVtb3J5KSB7XG4gICAgaWYgKHNoYXJlZE1lbW9yeSkge1xuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzWzE2XSA9IGJsb2Nrc1sxXSA9IGJsb2Nrc1syXSA9IGJsb2Nrc1szXSA9XG4gICAgICBibG9ja3NbNF0gPSBibG9ja3NbNV0gPSBibG9ja3NbNl0gPSBibG9ja3NbN10gPVxuICAgICAgYmxvY2tzWzhdID0gYmxvY2tzWzldID0gYmxvY2tzWzEwXSA9IGJsb2Nrc1sxMV0gPVxuICAgICAgYmxvY2tzWzEyXSA9IGJsb2Nrc1sxM10gPSBibG9ja3NbMTRdID0gYmxvY2tzWzE1XSA9IDA7XG4gICAgICB0aGlzLmJsb2NrcyA9IGJsb2NrcztcbiAgICAgIHRoaXMuYnVmZmVyOCA9IGJ1ZmZlcjg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChBUlJBWV9CVUZGRVIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2OCk7XG4gICAgICAgIHRoaXMuYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIHRoaXMuYmxvY2tzID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJsb2NrcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5oMCA9IHRoaXMuaDEgPSB0aGlzLmgyID0gdGhpcy5oMyA9IHRoaXMuc3RhcnQgPSB0aGlzLmJ5dGVzID0gdGhpcy5oQnl0ZXMgPSAwO1xuICAgIHRoaXMuZmluYWxpemVkID0gdGhpcy5oYXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcnN0ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIHVwZGF0ZVxuICAgKiBAbWVtYmVyb2YgTWQ1XG4gICAqIEBpbnN0YW5jZVxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlIGhhc2hcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcbiAgICogQHJldHVybnMge01kNX0gTWQ1IG9iamVjdC5cbiAgICogQHNlZSB7QGxpbmsgbWQ1LnVwZGF0ZX1cbiAgICovXG4gIE1kNS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5maW5hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm90U3RyaW5nLCB0eXBlID0gdHlwZW9mIG1lc3NhZ2U7XG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBFUlJPUjtcbiAgICAgICAgfSBlbHNlIGlmIChBUlJBWV9CVUZGRVIgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcbiAgICAgICAgICBpZiAoIUFSUkFZX0JVRkZFUiB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBFUlJPUjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVSUk9SO1xuICAgICAgfVxuICAgICAgbm90U3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGNvZGUsIGluZGV4ID0gMCwgaSwgbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGgsIGJsb2NrcyA9IHRoaXMuYmxvY2tzO1xuICAgIHZhciBidWZmZXI4ID0gdGhpcy5idWZmZXI4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5oYXNoZWQpIHtcbiAgICAgICAgdGhpcy5oYXNoZWQgPSBmYWxzZTtcbiAgICAgICAgYmxvY2tzWzBdID0gYmxvY2tzWzE2XTtcbiAgICAgICAgYmxvY2tzWzE2XSA9IGJsb2Nrc1sxXSA9IGJsb2Nrc1syXSA9IGJsb2Nrc1szXSA9XG4gICAgICAgIGJsb2Nrc1s0XSA9IGJsb2Nrc1s1XSA9IGJsb2Nrc1s2XSA9IGJsb2Nrc1s3XSA9XG4gICAgICAgIGJsb2Nrc1s4XSA9IGJsb2Nrc1s5XSA9IGJsb2Nrc1sxMF0gPSBibG9ja3NbMTFdID1cbiAgICAgICAgYmxvY2tzWzEyXSA9IGJsb2Nrc1sxM10gPSBibG9ja3NbMTRdID0gYmxvY2tzWzE1XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgICAgaWYgKEFSUkFZX0JVRkZFUikge1xuICAgICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCA2NDsgKytpbmRleCkge1xuICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gbWVzc2FnZVtpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCA2NDsgKytpbmRleCkge1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gbWVzc2FnZVtpbmRleF0gPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQVJSQVlfQlVGRkVSKSB7XG4gICAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IDY0OyArK2luZGV4KSB7XG4gICAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSBjb2RlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gMHhjMCB8IChjb2RlID4+IDYpO1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XG4gICAgICAgICAgICAgIGJ1ZmZlcjhbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpO1xuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XG4gICAgICAgICAgICAgIGJ1ZmZlcjhbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNjQ7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IGNvZGUgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhjMCB8IChjb2RlID4+IDYpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhlMCB8IChjb2RlID4+IDEyKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhmMCB8IChjb2RlID4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RCeXRlSW5kZXggPSBpO1xuICAgICAgdGhpcy5ieXRlcyArPSBpIC0gdGhpcy5zdGFydDtcbiAgICAgIGlmIChpID49IDY0KSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBpIC0gNjQ7XG4gICAgICAgIHRoaXMuaGFzaCgpO1xuICAgICAgICB0aGlzLmhhc2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuYnl0ZXMgPiA0Mjk0OTY3Mjk1KSB7XG4gICAgICB0aGlzLmhCeXRlcyArPSB0aGlzLmJ5dGVzIC8gNDI5NDk2NzI5NiA8PCAwO1xuICAgICAgdGhpcy5ieXRlcyA9IHRoaXMuYnl0ZXMgJSA0Mjk0OTY3Mjk2O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBNZDUucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmZpbmFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbmFsaXplZCA9IHRydWU7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4O1xuICAgIGJsb2Nrc1tpID4+IDJdIHw9IEVYVFJBW2kgJiAzXTtcbiAgICBpZiAoaSA+PSA1Nikge1xuICAgICAgaWYgKCF0aGlzLmhhc2hlZCkge1xuICAgICAgICB0aGlzLmhhc2goKTtcbiAgICAgIH1cbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1sxNl07XG4gICAgICBibG9ja3NbMTZdID0gYmxvY2tzWzFdID0gYmxvY2tzWzJdID0gYmxvY2tzWzNdID1cbiAgICAgIGJsb2Nrc1s0XSA9IGJsb2Nrc1s1XSA9IGJsb2Nrc1s2XSA9IGJsb2Nrc1s3XSA9XG4gICAgICBibG9ja3NbOF0gPSBibG9ja3NbOV0gPSBibG9ja3NbMTBdID0gYmxvY2tzWzExXSA9XG4gICAgICBibG9ja3NbMTJdID0gYmxvY2tzWzEzXSA9IGJsb2Nrc1sxNF0gPSBibG9ja3NbMTVdID0gMDtcbiAgICB9XG4gICAgYmxvY2tzWzE0XSA9IHRoaXMuYnl0ZXMgPDwgMztcbiAgICBibG9ja3NbMTVdID0gdGhpcy5oQnl0ZXMgPDwgMyB8IHRoaXMuYnl0ZXMgPj4+IDI5O1xuICAgIHRoaXMuaGFzaCgpO1xuICB9O1xuXG4gIE1kNS5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYSwgYiwgYywgZCwgYmMsIGRhLCBibG9ja3MgPSB0aGlzLmJsb2NrcztcblxuICAgIGlmICh0aGlzLmZpcnN0KSB7XG4gICAgICBhID0gYmxvY2tzWzBdIC0gNjgwODc2OTM3O1xuICAgICAgYSA9IChhIDw8IDcgfCBhID4+PiAyNSkgLSAyNzE3MzM4NzkgPDwgMDtcbiAgICAgIGQgPSAoLTE3MzI1ODQxOTQgXiBhICYgMjAwNDMxODA3MSkgKyBibG9ja3NbMV0gLSAxMTc4MzA3MDg7XG4gICAgICBkID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIDw8IDA7XG4gICAgICBjID0gKC0yNzE3MzM4NzkgXiAoZCAmIChhIF4gLTI3MTczMzg3OSkpKSArIGJsb2Nrc1syXSAtIDExMjY0NzgzNzU7XG4gICAgICBjID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIDw8IDA7XG4gICAgICBiID0gKGEgXiAoYyAmIChkIF4gYSkpKSArIGJsb2Nrc1szXSAtIDEzMTYyNTkyMDk7XG4gICAgICBiID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIDw8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSB0aGlzLmgwO1xuICAgICAgYiA9IHRoaXMuaDE7XG4gICAgICBjID0gdGhpcy5oMjtcbiAgICAgIGQgPSB0aGlzLmgzO1xuICAgICAgYSArPSAoZCBeIChiICYgKGMgXiBkKSkpICsgYmxvY2tzWzBdIC0gNjgwODc2OTM2O1xuICAgICAgYSA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIDw8IDA7XG4gICAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbMV0gLSAzODk1NjQ1ODY7XG4gICAgICBkID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIDw8IDA7XG4gICAgICBjICs9IChiIF4gKGQgJiAoYSBeIGIpKSkgKyBibG9ja3NbMl0gKyA2MDYxMDU4MTk7XG4gICAgICBjID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIDw8IDA7XG4gICAgICBiICs9IChhIF4gKGMgJiAoZCBeIGEpKSkgKyBibG9ja3NbM10gLSAxMDQ0NTI1MzMwO1xuICAgICAgYiA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyA8PCAwO1xuICAgIH1cblxuICAgIGEgKz0gKGQgXiAoYiAmIChjIF4gZCkpKSArIGJsb2Nrc1s0XSAtIDE3NjQxODg5NztcbiAgICBhID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgPDwgMDtcbiAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbNV0gKyAxMjAwMDgwNDI2O1xuICAgIGQgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgPDwgMDtcbiAgICBjICs9IChiIF4gKGQgJiAoYSBeIGIpKSkgKyBibG9ja3NbNl0gLSAxNDczMjMxMzQxO1xuICAgIGMgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgPDwgMDtcbiAgICBiICs9IChhIF4gKGMgJiAoZCBeIGEpKSkgKyBibG9ja3NbN10gLSA0NTcwNTk4MztcbiAgICBiID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIDw8IDA7XG4gICAgYSArPSAoZCBeIChiICYgKGMgXiBkKSkpICsgYmxvY2tzWzhdICsgMTc3MDAzNTQxNjtcbiAgICBhID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgPDwgMDtcbiAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbOV0gLSAxOTU4NDE0NDE3O1xuICAgIGQgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgPDwgMDtcbiAgICBjICs9IChiIF4gKGQgJiAoYSBeIGIpKSkgKyBibG9ja3NbMTBdIC0gNDIwNjM7XG4gICAgYyA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCA8PCAwO1xuICAgIGIgKz0gKGEgXiAoYyAmIChkIF4gYSkpKSArIGJsb2Nrc1sxMV0gLSAxOTkwNDA0MTYyO1xuICAgIGIgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgPDwgMDtcbiAgICBhICs9IChkIF4gKGIgJiAoYyBeIGQpKSkgKyBibG9ja3NbMTJdICsgMTgwNDYwMzY4MjtcbiAgICBhID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgPDwgMDtcbiAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbMTNdIC0gNDAzNDExMDE7XG4gICAgZCA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSA8PCAwO1xuICAgIGMgKz0gKGIgXiAoZCAmIChhIF4gYikpKSArIGJsb2Nrc1sxNF0gLSAxNTAyMDAyMjkwO1xuICAgIGMgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgPDwgMDtcbiAgICBiICs9IChhIF4gKGMgJiAoZCBeIGEpKSkgKyBibG9ja3NbMTVdICsgMTIzNjUzNTMyOTtcbiAgICBiID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChkICYgKGIgXiBjKSkpICsgYmxvY2tzWzFdIC0gMTY1Nzk2NTEwO1xuICAgIGEgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiA8PCAwO1xuICAgIGQgKz0gKGIgXiAoYyAmIChhIF4gYikpKSArIGJsb2Nrc1s2XSAtIDEwNjk1MDE2MzI7XG4gICAgZCA9IChkIDw8IDkgfCBkID4+PiAyMykgKyBhIDw8IDA7XG4gICAgYyArPSAoYSBeIChiICYgKGQgXiBhKSkpICsgYmxvY2tzWzExXSArIDY0MzcxNzcxMztcbiAgICBjID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIDw8IDA7XG4gICAgYiArPSAoZCBeIChhICYgKGMgXiBkKSkpICsgYmxvY2tzWzBdIC0gMzczODk3MzAyO1xuICAgIGIgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgPDwgMDtcbiAgICBhICs9IChjIF4gKGQgJiAoYiBeIGMpKSkgKyBibG9ja3NbNV0gLSA3MDE1NTg2OTE7XG4gICAgYSA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIDw8IDA7XG4gICAgZCArPSAoYiBeIChjICYgKGEgXiBiKSkpICsgYmxvY2tzWzEwXSArIDM4MDE2MDgzO1xuICAgIGQgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSA8PCAwO1xuICAgIGMgKz0gKGEgXiAoYiAmIChkIF4gYSkpKSArIGJsb2Nrc1sxNV0gLSA2NjA0NzgzMzU7XG4gICAgYyA9IChjIDw8IDE0IHwgYyA+Pj4gMTgpICsgZCA8PCAwO1xuICAgIGIgKz0gKGQgXiAoYSAmIChjIF4gZCkpKSArIGJsb2Nrc1s0XSAtIDQwNTUzNzg0ODtcbiAgICBiID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChkICYgKGIgXiBjKSkpICsgYmxvY2tzWzldICsgNTY4NDQ2NDM4O1xuICAgIGEgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiA8PCAwO1xuICAgIGQgKz0gKGIgXiAoYyAmIChhIF4gYikpKSArIGJsb2Nrc1sxNF0gLSAxMDE5ODAzNjkwO1xuICAgIGQgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSA8PCAwO1xuICAgIGMgKz0gKGEgXiAoYiAmIChkIF4gYSkpKSArIGJsb2Nrc1szXSAtIDE4NzM2Mzk2MTtcbiAgICBjID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIDw8IDA7XG4gICAgYiArPSAoZCBeIChhICYgKGMgXiBkKSkpICsgYmxvY2tzWzhdICsgMTE2MzUzMTUwMTtcbiAgICBiID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChkICYgKGIgXiBjKSkpICsgYmxvY2tzWzEzXSAtIDE0NDQ2ODE0Njc7XG4gICAgYSA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIDw8IDA7XG4gICAgZCArPSAoYiBeIChjICYgKGEgXiBiKSkpICsgYmxvY2tzWzJdIC0gNTE0MDM3ODQ7XG4gICAgZCA9IChkIDw8IDkgfCBkID4+PiAyMykgKyBhIDw8IDA7XG4gICAgYyArPSAoYSBeIChiICYgKGQgXiBhKSkpICsgYmxvY2tzWzddICsgMTczNTMyODQ3MztcbiAgICBjID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIDw8IDA7XG4gICAgYiArPSAoZCBeIChhICYgKGMgXiBkKSkpICsgYmxvY2tzWzEyXSAtIDE5MjY2MDc3MzQ7XG4gICAgYiA9IChiIDw8IDIwIHwgYiA+Pj4gMTIpICsgYyA8PCAwO1xuICAgIGJjID0gYiBeIGM7XG4gICAgYSArPSAoYmMgXiBkKSArIGJsb2Nrc1s1XSAtIDM3ODU1ODtcbiAgICBhID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgPDwgMDtcbiAgICBkICs9IChiYyBeIGEpICsgYmxvY2tzWzhdIC0gMjAyMjU3NDQ2MztcbiAgICBkID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIDw8IDA7XG4gICAgZGEgPSBkIF4gYTtcbiAgICBjICs9IChkYSBeIGIpICsgYmxvY2tzWzExXSArIDE4MzkwMzA1NjI7XG4gICAgYyA9IChjIDw8IDE2IHwgYyA+Pj4gMTYpICsgZCA8PCAwO1xuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbMTRdIC0gMzUzMDk1NTY7XG4gICAgYiA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIDw8IDA7XG4gICAgYmMgPSBiIF4gYztcbiAgICBhICs9IChiYyBeIGQpICsgYmxvY2tzWzFdIC0gMTUzMDk5MjA2MDtcbiAgICBhID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgPDwgMDtcbiAgICBkICs9IChiYyBeIGEpICsgYmxvY2tzWzRdICsgMTI3Mjg5MzM1MztcbiAgICBkID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIDw8IDA7XG4gICAgZGEgPSBkIF4gYTtcbiAgICBjICs9IChkYSBeIGIpICsgYmxvY2tzWzddIC0gMTU1NDk3NjMyO1xuICAgIGMgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgPDwgMDtcbiAgICBiICs9IChkYSBeIGMpICsgYmxvY2tzWzEwXSAtIDEwOTQ3MzA2NDA7XG4gICAgYiA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIDw8IDA7XG4gICAgYmMgPSBiIF4gYztcbiAgICBhICs9IChiYyBeIGQpICsgYmxvY2tzWzEzXSArIDY4MTI3OTE3NDtcbiAgICBhID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgPDwgMDtcbiAgICBkICs9IChiYyBeIGEpICsgYmxvY2tzWzBdIC0gMzU4NTM3MjIyO1xuICAgIGQgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgPDwgMDtcbiAgICBkYSA9IGQgXiBhO1xuICAgIGMgKz0gKGRhIF4gYikgKyBibG9ja3NbM10gLSA3MjI1MjE5Nzk7XG4gICAgYyA9IChjIDw8IDE2IHwgYyA+Pj4gMTYpICsgZCA8PCAwO1xuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbNl0gKyA3NjAyOTE4OTtcbiAgICBiID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgPDwgMDtcbiAgICBiYyA9IGIgXiBjO1xuICAgIGEgKz0gKGJjIF4gZCkgKyBibG9ja3NbOV0gLSA2NDAzNjQ0ODc7XG4gICAgYSA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIDw8IDA7XG4gICAgZCArPSAoYmMgXiBhKSArIGJsb2Nrc1sxMl0gLSA0MjE4MTU4MzU7XG4gICAgZCA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSA8PCAwO1xuICAgIGRhID0gZCBeIGE7XG4gICAgYyArPSAoZGEgXiBiKSArIGJsb2Nrc1sxNV0gKyA1MzA3NDI1MjA7XG4gICAgYyA9IChjIDw8IDE2IHwgYyA+Pj4gMTYpICsgZCA8PCAwO1xuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbMl0gLSA5OTUzMzg2NTE7XG4gICAgYiA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGJsb2Nrc1swXSAtIDE5ODYzMDg0NDtcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcbiAgICBkICs9IChiIF4gKGEgfCB+YykpICsgYmxvY2tzWzddICsgMTEyNjg5MTQxNTtcbiAgICBkID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIDw8IDA7XG4gICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGJsb2Nrc1sxNF0gLSAxNDE2MzU0OTA1O1xuICAgIGMgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgPDwgMDtcbiAgICBiICs9IChkIF4gKGMgfCB+YSkpICsgYmxvY2tzWzVdIC0gNTc0MzQwNTU7XG4gICAgYiA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyA8PCAwO1xuICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBibG9ja3NbMTJdICsgMTcwMDQ4NTU3MTtcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcbiAgICBkICs9IChiIF4gKGEgfCB+YykpICsgYmxvY2tzWzNdIC0gMTg5NDk4NjYwNjtcbiAgICBkID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIDw8IDA7XG4gICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGJsb2Nrc1sxMF0gLSAxMDUxNTIzO1xuICAgIGMgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgPDwgMDtcbiAgICBiICs9IChkIF4gKGMgfCB+YSkpICsgYmxvY2tzWzFdIC0gMjA1NDkyMjc5OTtcbiAgICBiID0gKGIgPDwgMjEgfCBiID4+PiAxMSkgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGJsb2Nrc1s4XSArIDE4NzMzMTMzNTk7XG4gICAgYSA9IChhIDw8IDYgfCBhID4+PiAyNikgKyBiIDw8IDA7XG4gICAgZCArPSAoYiBeIChhIHwgfmMpKSArIGJsb2Nrc1sxNV0gLSAzMDYxMTc0NDtcbiAgICBkID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIDw8IDA7XG4gICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGJsb2Nrc1s2XSAtIDE1NjAxOTgzODA7XG4gICAgYyA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCA8PCAwO1xuICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBibG9ja3NbMTNdICsgMTMwOTE1MTY0OTtcbiAgICBiID0gKGIgPDwgMjEgfCBiID4+PiAxMSkgKyBjIDw8IDA7XG4gICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGJsb2Nrc1s0XSAtIDE0NTUyMzA3MDtcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcbiAgICBkICs9IChiIF4gKGEgfCB+YykpICsgYmxvY2tzWzExXSAtIDExMjAyMTAzNzk7XG4gICAgZCA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSA8PCAwO1xuICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBibG9ja3NbMl0gKyA3MTg3ODcyNTk7XG4gICAgYyA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCA8PCAwO1xuICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBibG9ja3NbOV0gLSAzNDM0ODU1NTE7XG4gICAgYiA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyA8PCAwO1xuXG4gICAgaWYgKHRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuaDAgPSBhICsgMTczMjU4NDE5MyA8PCAwO1xuICAgICAgdGhpcy5oMSA9IGIgLSAyNzE3MzM4NzkgPDwgMDtcbiAgICAgIHRoaXMuaDIgPSBjIC0gMTczMjU4NDE5NCA8PCAwO1xuICAgICAgdGhpcy5oMyA9IGQgKyAyNzE3MzM4NzggPDwgMDtcbiAgICAgIHRoaXMuZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oMCA9IHRoaXMuaDAgKyBhIDw8IDA7XG4gICAgICB0aGlzLmgxID0gdGhpcy5oMSArIGIgPDwgMDtcbiAgICAgIHRoaXMuaDIgPSB0aGlzLmgyICsgYyA8PCAwO1xuICAgICAgdGhpcy5oMyA9IHRoaXMuaDMgKyBkIDw8IDA7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGhleFxuICAgKiBAbWVtYmVyb2YgTWQ1XG4gICAqIEBpbnN0YW5jZVxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgaGV4IHN0cmluZ1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIZXggc3RyaW5nXG4gICAqIEBzZWUge0BsaW5rIG1kNS5oZXh9XG4gICAqIEBleGFtcGxlXG4gICAqIGhhc2guaGV4KCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZpbmFsaXplKCk7XG5cbiAgICB2YXIgaDAgPSB0aGlzLmgwLCBoMSA9IHRoaXMuaDEsIGgyID0gdGhpcy5oMiwgaDMgPSB0aGlzLmgzO1xuXG4gICAgcmV0dXJuIEhFWF9DSEFSU1soaDAgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1toMCAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDAgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgwID4+IDgpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMCA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDAgPj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMCA+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDAgPj4gMjQpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMSA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2gxICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMSA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soaDEgPj4gOCkgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgxID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMSA+PiAxNikgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgxID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMSA+PiAyNCkgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgyID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDIgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgyID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMiA+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4gMjApICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgyID4+IDE2KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4gMjgpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgyID4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDMgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1toMyAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDMgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgzID4+IDgpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMyA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDMgPj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMyA+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDMgPj4gMjQpICYgMHgwRl07XG4gIH07XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgdG9TdHJpbmdcbiAgICogQG1lbWJlcm9mIE1kNVxuICAgKiBAaW5zdGFuY2VcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGhleCBzdHJpbmdcbiAgICogQHJldHVybnMge1N0cmluZ30gSGV4IHN0cmluZ1xuICAgKiBAc2VlIHtAbGluayBtZDUuaGV4fVxuICAgKiBAZXhhbXBsZVxuICAgKiBoYXNoLnRvU3RyaW5nKCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLnRvU3RyaW5nID0gTWQ1LnByb3RvdHlwZS5oZXg7XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgZGlnZXN0XG4gICAqIEBtZW1iZXJvZiBNZDVcbiAgICogQGluc3RhbmNlXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBieXRlcyBhcnJheVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEJ5dGVzIGFycmF5XG4gICAqIEBzZWUge0BsaW5rIG1kNS5kaWdlc3R9XG4gICAqIEBleGFtcGxlXG4gICAqIGhhc2guZGlnZXN0KCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZpbmFsaXplKCk7XG5cbiAgICB2YXIgaDAgPSB0aGlzLmgwLCBoMSA9IHRoaXMuaDEsIGgyID0gdGhpcy5oMiwgaDMgPSB0aGlzLmgzO1xuICAgIHJldHVybiBbXG4gICAgICBoMCAmIDB4RkYsIChoMCA+PiA4KSAmIDB4RkYsIChoMCA+PiAxNikgJiAweEZGLCAoaDAgPj4gMjQpICYgMHhGRixcbiAgICAgIGgxICYgMHhGRiwgKGgxID4+IDgpICYgMHhGRiwgKGgxID4+IDE2KSAmIDB4RkYsIChoMSA+PiAyNCkgJiAweEZGLFxuICAgICAgaDIgJiAweEZGLCAoaDIgPj4gOCkgJiAweEZGLCAoaDIgPj4gMTYpICYgMHhGRiwgKGgyID4+IDI0KSAmIDB4RkYsXG4gICAgICBoMyAmIDB4RkYsIChoMyA+PiA4KSAmIDB4RkYsIChoMyA+PiAxNikgJiAweEZGLCAoaDMgPj4gMjQpICYgMHhGRlxuICAgIF07XG4gIH07XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgYXJyYXlcbiAgICogQG1lbWJlcm9mIE1kNVxuICAgKiBAaW5zdGFuY2VcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGJ5dGVzIGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX0gQnl0ZXMgYXJyYXlcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmFycmF5fVxuICAgKiBAZXhhbXBsZVxuICAgKiBoYXNoLmFycmF5KCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLmFycmF5ID0gTWQ1LnByb3RvdHlwZS5kaWdlc3Q7XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgYXJyYXlCdWZmZXJcbiAgICogQG1lbWJlcm9mIE1kNVxuICAgKiBAaW5zdGFuY2VcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIEFycmF5QnVmZmVyXG4gICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gQXJyYXlCdWZmZXJcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmFycmF5QnVmZmVyfVxuICAgKiBAZXhhbXBsZVxuICAgKiBoYXNoLmFycmF5QnVmZmVyKCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLmFycmF5QnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZmluYWxpemUoKTtcblxuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMTYpO1xuICAgIHZhciBibG9ja3MgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgICBibG9ja3NbMF0gPSB0aGlzLmgwO1xuICAgIGJsb2Nrc1sxXSA9IHRoaXMuaDE7XG4gICAgYmxvY2tzWzJdID0gdGhpcy5oMjtcbiAgICBibG9ja3NbM10gPSB0aGlzLmgzO1xuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgYnVmZmVyXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWF5YmUgY29uZnVzZSB3aXRoIEJ1ZmZlciBpbiBub2RlLmpzLiBQbGVhc2UgdXNlIGFycmF5QnVmZmVyIGluc3RlYWQuXG4gICAqIEBtZW1iZXJvZiBNZDVcbiAgICogQGluc3RhbmNlXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBBcnJheUJ1ZmZlclxuICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IEFycmF5QnVmZmVyXG4gICAqIEBzZWUge0BsaW5rIG1kNS5idWZmZXJ9XG4gICAqIEBleGFtcGxlXG4gICAqIGhhc2guYnVmZmVyKCk7XG4gICAqL1xuICBNZDUucHJvdG90eXBlLmJ1ZmZlciA9IE1kNS5wcm90b3R5cGUuYXJyYXlCdWZmZXI7XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgYmFzZTY0XG4gICAqIEBtZW1iZXJvZiBNZDVcbiAgICogQGluc3RhbmNlXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBiYXNlNjQgc3RyaW5nXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGJhc2U2NCBzdHJpbmdcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmJhc2U2NH1cbiAgICogQGV4YW1wbGVcbiAgICogaGFzaC5iYXNlNjQoKTtcbiAgICovXG4gIE1kNS5wcm90b3R5cGUuYmFzZTY0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2MSwgdjIsIHYzLCBiYXNlNjRTdHIgPSAnJywgYnl0ZXMgPSB0aGlzLmFycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNTspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2U2NFN0ciArPSBCQVNFNjRfRU5DT0RFX0NIQVJbdjEgPj4+IDJdICtcbiAgICAgICAgQkFTRTY0X0VOQ09ERV9DSEFSWyh2MSA8PCA0IHwgdjIgPj4+IDQpICYgNjNdICtcbiAgICAgICAgQkFTRTY0X0VOQ09ERV9DSEFSWyh2MiA8PCAyIHwgdjMgPj4+IDYpICYgNjNdICtcbiAgICAgICAgQkFTRTY0X0VOQ09ERV9DSEFSW3YzICYgNjNdO1xuICAgIH1cbiAgICB2MSA9IGJ5dGVzW2ldO1xuICAgIGJhc2U2NFN0ciArPSBCQVNFNjRfRU5DT0RFX0NIQVJbdjEgPj4+IDJdICtcbiAgICAgIEJBU0U2NF9FTkNPREVfQ0hBUlsodjEgPDwgNCkgJiA2M10gK1xuICAgICAgJz09JztcbiAgICByZXR1cm4gYmFzZTY0U3RyO1xuICB9O1xuXG4gIHZhciBleHBvcnRzID0gY3JlYXRlTWV0aG9kKCk7XG5cbiAgaWYgKENPTU1PTl9KUykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cztcbiAgfSBlbHNlIHtcbiAgICAvKipcbiAgICAgKiBAbWV0aG9kIG1kNVxiXG4gICAgICogQGRlc2NyaXB0aW9uIE1kNSBoYXNoIGZ1bmN0aW9uLCBleHBvcnQgdG8gZ2xvYmFsIGluIGJyb3dzZXJzLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXG4gICAgICogQHJldHVybnMge1N0cmluZ30gbWQ1IGhhc2hlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWQ1KCcnKTsgLy8gZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2VcbiAgICAgKiBtZDUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKTsgLy8gOWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDZcbiAgICAgKiBtZDUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuJyk7IC8vIGU0ZDkwOWMyOTBkMGZiMWNhMDY4ZmZhZGRmMjJjYmQwXG4gICAgICpcbiAgICAgKiAvLyBJdCBhbHNvIHN1cHBvcnRzIFVURi04IGVuY29kaW5nXG4gICAgICogbWQ1KCfkuK3mlocnKTsgLy8gYTdiYWMyMjM5ZmNkY2IzYTA2NzkwM2Q4MDc3YzRhMDdcbiAgICAgKlxuICAgICAqIC8vIEl0IGFsc28gc3VwcG9ydHMgYnl0ZSBgQXJyYXlgLCBgVWludDhBcnJheWAsIGBBcnJheUJ1ZmZlcmBcbiAgICAgKiBtZDUoW10pOyAvLyBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZVxuICAgICAqIG1kNShuZXcgVWludDhBcnJheShbXSkpOyAvLyBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZVxuICAgICAqL1xuICAgIHJvb3QubWQ1ID0gZXhwb3J0cztcbiAgICBpZiAoQU1EKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/js-md5/src/md5.js\n"); /***/ }), /***/ "./node_modules/process/browser.js": /*!*****************************************!*\ !*** ./node_modules/process/browser.js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcz9mMjhjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n"); /***/ }), /***/ "./node_modules/webpack/buildin/amd-options.js": /*!****************************************!*\ !*** (webpack)/buildin/amd-options.js ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {\"toUrlUndefined\":true}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2FtZC1vcHRpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzPzAwODYiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/amd-options.js\n"); /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanM/Y2QwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n"); /***/ }), /***/ "./src/BaseDialog/index.js": /*!*********************************!*\ !*** ./src/BaseDialog/index.js ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar BaseDialog = /*#__PURE__*/function () {\n function BaseDialog(container) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var only = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, BaseDialog);\n this.container = container;\n this.options = _objectSpread({}, options);\n this.options.ismove = true;\n if (options.ismove === false) {\n this.options.ismove = options.ismove;\n }\n this.closeCallBack = options.closeCallBack;\n this._element = {};\n this._element_style = undefined;\n this.only = only;\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(BaseDialog, [{\n key: \"init\",\n value: function () {\n var _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n var _this2 = this;\n var curtain, closeBtnsBox, closeBtns, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (this.only) {\n this.closeAll();\n }\n DialogAll.push(this);\n this.isDestroy = false;\n // body\n this._element.body = document.createElement('div');\n this._element.body.className = 'YJ-custom-base-dialog';\n this._element.body.style.top = this.options.top;\n this._element.body.style.bottom = this.options.bottom;\n this._element.body.style.left = this.options.left;\n this._element.body.style.right = this.options.right;\n this.container.appendChild(this._element.body);\n\n //title\n this._element.title = document.createElement('div');\n this._element.title.className = 'title-box';\n this._element.title.innerHTML = \"\".concat(this.options.title || '', \"\") + \"\";\n this._element.body.appendChild(this._element.title);\n\n //content\n _context.next = 16;\n return document.createElement('div');\n case 16:\n this._element.content = _context.sent;\n this._element.content.className = 'content';\n this._element.body.appendChild(this._element.content);\n\n // foot\n _context.next = 21;\n return document.createElement('div');\n case 21:\n this._element.foot = _context.sent;\n this._element.foot.className = 'foot';\n // this._element.foot.innerHTML = `\n // \n // \n // \n // \n // `\n this._element.foot.innerHTML = \"\\n \\n \";\n this._element.body.appendChild(this._element.foot);\n _context.next = 27;\n return document.createElement('div');\n case 27:\n curtain = _context.sent;\n curtain.style.position = 'absolute';\n curtain.style.top = '0';\n curtain.style.left = '0';\n curtain.style.width = '100%';\n curtain.style.height = '100%';\n curtain.style.backdropFilter = 'blur(2px)';\n curtain.style.zIndex = '-999999';\n this._element.body.appendChild(curtain);\n\n // 关闭\n closeBtnsBox = this._element.body.getElementsByClassName('close-box')[0];\n closeBtnsBox.addEventListener('click', function () {\n _this2.close();\n });\n closeBtns = this._element.body.getElementsByClassName('close');\n for (i = 0; i < closeBtns.length; i++) {\n closeBtns[i].addEventListener('click', function () {\n _this2.close();\n });\n }\n if (this.options.ismove) {\n this.moveDiv();\n }\n case 41:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function init() {\n return _init.apply(this, arguments);\n }\n return init;\n }()\n }, {\n key: \"close\",\n value: function close() {\n var styles = document.getElementsByTagName(\"style\");\n for (var i = styles.length - 1; i >= 0; i--) {\n if (styles[i].dataset) {\n if (styles[i].dataset.name === 'YJ_style_dialog') {\n document.getElementsByTagName('head')[0].removeChild(styles[i]);\n }\n }\n }\n if (this._element.body && this._element.body.parentNode) {\n this.container.removeChild(this._element.body);\n }\n this._element.body = null;\n this._element.title = null;\n this._element.content = null;\n this._element.foot = null;\n this._element_style = null;\n this.isDestroy = true;\n if (this.closeCallBack) {\n this.closeCallBack();\n this.closeCallBack = null;\n }\n }\n }, {\n key: \"closeAll\",\n value: function closeAll() {\n for (var i = DialogAll.length - 1; i >= 0; i--) {\n DialogAll[i].close();\n DialogAll.splice(i, 1);\n }\n return;\n var styles = document.getElementsByTagName(\"style\");\n for (var _i = styles.length - 1; _i >= 0; _i--) {\n if (styles[_i].dataset) {\n if (styles[_i].dataset.name === 'YJ_style_dialog') {\n document.getElementsByTagName('head')[0].removeChild(styles[_i]);\n }\n }\n }\n if (this._element_style) {\n this._element_style = null;\n }\n var elms = this.container.getElementsByClassName('YJ-custom-base-dialog');\n for (var _i2 = elms.length - 1; _i2 >= 0; _i2--) {\n this.container.removeChild(elms[_i2]);\n }\n this._element.body = null;\n this._element.title = null;\n this._element.content = null;\n this._element.foot = null;\n }\n }, {\n key: \"titleAppChild\",\n value: function titleAppChild(node) {\n this._element.title.appendChild(node);\n }\n }, {\n key: \"contentAppChild\",\n value: function contentAppChild(node) {\n this._element.content.appendChild(node);\n }\n }, {\n key: \"footAppChild\",\n value: function footAppChild(node, target) {\n if (target) {\n this._element.foot.insertBefore(node, target);\n } else {\n this._element.foot.prepend(node);\n }\n }\n }, {\n key: \"moveDiv\",\n value: function moveDiv() {\n var _this3 = this;\n var x = 0;\n var y = 0;\n var l = 0;\n var t = 0;\n var oClickDiv = this._element.body;\n var _this = this;\n oClickDiv.onmousedown = function (e) {\n if (e.toElement.className !== 'title-box') {\n return;\n }\n // dialog的宽度、高度\n // let oMoveDivHeight = that.oMoveDiv.offsetHeight\n var oMoveDivHeight = _this3._element.body.offsetHeight;\n // let oMoveDivWidth = that.oMoveDiv.offsetWidth\n var oMoveDivWidth = _this3._element.body.offsetWidth;\n x = e.clientX;\n y = e.clientY;\n var leftPx = window.getComputedStyle(_this3._element.body).left;\n var topPx = window.getComputedStyle(_this3._element.body).top;\n l = leftPx.substr(0, leftPx.indexOf('px')) * 1;\n t = topPx.substr(0, topPx.indexOf('px')) * 1;\n // 视口大小\n var windowHeight = document.documentElement.clientHeight;\n var windowWidth = document.documentElement.clientWidth;\n\n //鼠标移动\n window.onmousemove = function (e) {\n e.preventDefault();\n //获取x和y\n var nx = e.clientX;\n var ny = e.clientY;\n //计算移动后的左偏移量和顶部的偏移量\n var leftPx = nx - (x - l);\n var topPx = ny - (y - t);\n if (leftPx < 0) {\n leftPx = 0;\n } else if (leftPx + oMoveDivWidth > windowWidth) {\n leftPx = windowWidth - oMoveDivWidth;\n }\n if (topPx <= 0) {\n topPx = 0;\n } else if (topPx + oMoveDivHeight > windowHeight) {\n topPx = windowHeight - oMoveDivHeight;\n }\n _this._element.body.style.left = leftPx + 'px';\n _this._element.body.style.top = topPx + 'px';\n _this._element.body.style.bottom = 'unset';\n _this._element.body.style.right = 'unset';\n };\n\n //鼠标抬起事件\n document.onmouseup = function (e) {\n window.onmousemove = null;\n };\n window.ondragend = function (e) {\n window.onmousemove = null;\n };\n };\n\n //鼠标抬起事件\n document.onmouseup = function (e) {\n window.onmousemove = null;\n };\n window.ondragend = function (e) {\n window.onmousemove = null;\n };\n }\n }]);\n}();\nvar DialogAll = [];\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseDialog);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQmFzZURpYWxvZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9CYXNlRGlhbG9nL2luZGV4LmpzPzg2ZWQiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQmFzZURpYWxvZyB7XHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvcHRpb25zID0ge30sIG9ubHkgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxyXG4gICAgdGhpcy5vcHRpb25zID0geyAuLi5vcHRpb25zIH1cclxuICAgIHRoaXMub3B0aW9ucy5pc21vdmUgPSB0cnVlXHJcbiAgICBpZiAob3B0aW9ucy5pc21vdmUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5pc21vdmUgPSBvcHRpb25zLmlzbW92ZVxyXG4gICAgfVxyXG4gICAgdGhpcy5jbG9zZUNhbGxCYWNrID0gb3B0aW9ucy5jbG9zZUNhbGxCYWNrXHJcbiAgICB0aGlzLl9lbGVtZW50ID0ge31cclxuICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMub25seSA9IG9ubHlcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vbmx5KSB7XHJcbiAgICAgIHRoaXMuY2xvc2VBbGwoKVxyXG4gICAgfVxyXG4gICAgRGlhbG9nQWxsLnB1c2godGhpcylcclxuICAgIHRoaXMuaXNEZXN0cm95ID0gZmFsc2VcclxuICAgIC8vIGJvZHlcclxuICAgIHRoaXMuX2VsZW1lbnQuYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9ICdZSi1jdXN0b20tYmFzZS1kaWFsb2cnO1xyXG4gICAgdGhpcy5fZWxlbWVudC5ib2R5LnN0eWxlLnRvcCA9IHRoaXMub3B0aW9ucy50b3BcclxuICAgIHRoaXMuX2VsZW1lbnQuYm9keS5zdHlsZS5ib3R0b20gPSB0aGlzLm9wdGlvbnMuYm90dG9tXHJcbiAgICB0aGlzLl9lbGVtZW50LmJvZHkuc3R5bGUubGVmdCA9IHRoaXMub3B0aW9ucy5sZWZ0XHJcbiAgICB0aGlzLl9lbGVtZW50LmJvZHkuc3R5bGUucmlnaHQgPSB0aGlzLm9wdGlvbnMucmlnaHRcclxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQuYm9keSlcclxuXHJcbiAgICAvL3RpdGxlXHJcbiAgICB0aGlzLl9lbGVtZW50LnRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLl9lbGVtZW50LnRpdGxlLmNsYXNzTmFtZSA9ICd0aXRsZS1ib3gnO1xyXG4gICAgdGhpcy5fZWxlbWVudC50aXRsZS5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPiR7KHRoaXMub3B0aW9ucy50aXRsZSB8fCAnJyl9PC9zcGFuPmAgKyBgPHNwYW4gY2xhc3M9XCJjbG9zZS1ib3hcIj48c3BhbiBjbGFzcz1cImNsb3NlXCI+PC9zcGFuPjxpPiYjMTAwMDU8L2k+PC9zcGFuPmBcclxuICAgIHRoaXMuX2VsZW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50LnRpdGxlKVxyXG5cclxuICAgIC8vY29udGVudFxyXG4gICAgdGhpcy5fZWxlbWVudC5jb250ZW50ID0gYXdhaXQgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLl9lbGVtZW50LmNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQnO1xyXG4gICAgdGhpcy5fZWxlbWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQuY29udGVudClcclxuXHJcbiAgICAvLyBmb290XHJcbiAgICB0aGlzLl9lbGVtZW50LmZvb3QgPSBhd2FpdCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMuX2VsZW1lbnQuZm9vdC5jbGFzc05hbWUgPSAnZm9vdCc7XHJcbiAgICAvLyB0aGlzLl9lbGVtZW50LmZvb3QuaW5uZXJIVE1MID0gYFxyXG4gICAgLy8gPGJ1dHRvbiBjbGFzcz1cInRyYW5zbGF0aW9uYWxcIj7lubPnp7s8L2J1dHRvbj5cclxuICAgIC8vIDxidXR0b24gY2xhc3M9XCJyZXNldHRpbmdcIj7ph43nva48L2J1dHRvbj5cclxuICAgIC8vIDxidXR0b24gY2xhc3M9XCJkZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgIC8vIDxidXR0b24gY2xhc3M9XCJjbG9zZVwiPuWFs+mXrTwvYnV0dG9uPlxyXG4gICAgLy8gYFxyXG4gICAgdGhpcy5fZWxlbWVudC5mb290LmlubmVySFRNTCA9IGBcclxuICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZVwiPuWFs+mXrTwvYnV0dG9uPlxyXG4gICAgYFxyXG4gICAgdGhpcy5fZWxlbWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQuZm9vdClcclxuICAgIGxldCBjdXJ0YWluID0gYXdhaXQgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIGN1cnRhaW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICBjdXJ0YWluLnN0eWxlLnRvcCA9ICcwJ1xyXG4gICAgY3VydGFpbi5zdHlsZS5sZWZ0ID0gJzAnXHJcbiAgICBjdXJ0YWluLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICBjdXJ0YWluLnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gICAgY3VydGFpbi5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDJweCknXHJcbiAgICBjdXJ0YWluLnN0eWxlLnpJbmRleCA9ICctOTk5OTk5J1xyXG4gICAgdGhpcy5fZWxlbWVudC5ib2R5LmFwcGVuZENoaWxkKGN1cnRhaW4pXHJcblxyXG4gICAgLy8g5YWz6ZetXHJcbiAgICBsZXQgY2xvc2VCdG5zQm94ID0gdGhpcy5fZWxlbWVudC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nsb3NlLWJveCcpWzBdO1xyXG4gICAgY2xvc2VCdG5zQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsb3NlKClcclxuICAgIH0pO1xyXG4gICAgbGV0IGNsb3NlQnRucyA9IHRoaXMuX2VsZW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9zZScpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9zZUJ0bnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY2xvc2VCdG5zW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzbW92ZSkge1xyXG4gICAgICB0aGlzLm1vdmVEaXYoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBsZXQgc3R5bGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKVxyXG4gICAgZm9yIChsZXQgaSA9IHN0eWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoc3R5bGVzW2ldLmRhdGFzZXQpIHtcclxuICAgICAgICBpZiAoc3R5bGVzW2ldLmRhdGFzZXQubmFtZSA9PT0gJ1lKX3N0eWxlX2RpYWxvZycpIHtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQoc3R5bGVzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuYm9keSAmJiB0aGlzLl9lbGVtZW50LmJvZHkucGFyZW50Tm9kZSkge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50LmJvZHkpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbGVtZW50LmJvZHkgPSBudWxsXHJcbiAgICB0aGlzLl9lbGVtZW50LnRpdGxlID0gbnVsbFxyXG4gICAgdGhpcy5fZWxlbWVudC5jb250ZW50ID0gbnVsbFxyXG4gICAgdGhpcy5fZWxlbWVudC5mb290ID0gbnVsbFxyXG4gICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuICAgIHRoaXMuaXNEZXN0cm95ID0gdHJ1ZVxyXG4gICAgaWYgKHRoaXMuY2xvc2VDYWxsQmFjaykge1xyXG4gICAgICB0aGlzLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICB0aGlzLmNsb3NlQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZUFsbCgpIHtcclxuICAgIGZvciAobGV0IGkgPSBEaWFsb2dBbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgRGlhbG9nQWxsW2ldLmNsb3NlKClcclxuICAgICAgRGlhbG9nQWxsLnNwbGljZShpLCAxKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuXHJcbiAgICBsZXQgc3R5bGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKVxyXG4gICAgZm9yIChsZXQgaSA9IHN0eWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoc3R5bGVzW2ldLmRhdGFzZXQpIHtcclxuICAgICAgICBpZiAoc3R5bGVzW2ldLmRhdGFzZXQubmFtZSA9PT0gJ1lKX3N0eWxlX2RpYWxvZycpIHtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQoc3R5bGVzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnRfc3R5bGUpIHtcclxuICAgICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuICAgIH1cclxuICAgIGxldCBlbG1zID0gdGhpcy5jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLWJhc2UtZGlhbG9nJylcclxuICAgIGZvciAobGV0IGkgPSBlbG1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKGVsbXNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbGVtZW50LmJvZHkgPSBudWxsXHJcbiAgICB0aGlzLl9lbGVtZW50LnRpdGxlID0gbnVsbFxyXG4gICAgdGhpcy5fZWxlbWVudC5jb250ZW50ID0gbnVsbFxyXG4gICAgdGhpcy5fZWxlbWVudC5mb290ID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgdGl0bGVBcHBDaGlsZChub2RlKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50LnRpdGxlLmFwcGVuZENoaWxkKG5vZGUpXHJcbiAgfVxyXG4gIGNvbnRlbnRBcHBDaGlsZChub2RlKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50LmNvbnRlbnQuYXBwZW5kQ2hpbGQobm9kZSlcclxuICB9XHJcbiAgZm9vdEFwcENoaWxkKG5vZGUsIHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLl9lbGVtZW50LmZvb3QuaW5zZXJ0QmVmb3JlKG5vZGUsIHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZWxlbWVudC5mb290LnByZXBlbmQobm9kZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdmVEaXYoKSB7XHJcbiAgICBsZXQgeCA9IDBcclxuICAgIGxldCB5ID0gMFxyXG4gICAgbGV0IGwgPSAwXHJcbiAgICBsZXQgdCA9IDBcclxuICAgIGxldCBvQ2xpY2tEaXYgPSB0aGlzLl9lbGVtZW50LmJvZHlcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIG9DbGlja0Rpdi5vbm1vdXNlZG93biA9IChlKSA9PiB7XHJcbiAgICAgIGlmIChlLnRvRWxlbWVudC5jbGFzc05hbWUgIT09ICd0aXRsZS1ib3gnKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgLy8gZGlhbG9n55qE5a695bqm44CB6auY5bqmXHJcbiAgICAgIC8vIGxldCBvTW92ZURpdkhlaWdodCA9IHRoYXQub01vdmVEaXYub2Zmc2V0SGVpZ2h0XHJcbiAgICAgIGxldCBvTW92ZURpdkhlaWdodCA9IHRoaXMuX2VsZW1lbnQuYm9keS5vZmZzZXRIZWlnaHRcclxuICAgICAgLy8gbGV0IG9Nb3ZlRGl2V2lkdGggPSB0aGF0Lm9Nb3ZlRGl2Lm9mZnNldFdpZHRoXHJcbiAgICAgIGxldCBvTW92ZURpdldpZHRoID0gdGhpcy5fZWxlbWVudC5ib2R5Lm9mZnNldFdpZHRoXHJcblxyXG4gICAgICB4ID0gZS5jbGllbnRYXHJcbiAgICAgIHkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgIGxldCBsZWZ0UHggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50LmJvZHkpLmxlZnRcclxuICAgICAgbGV0IHRvcFB4ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudC5ib2R5KS50b3BcclxuXHJcbiAgICAgIGwgPSBsZWZ0UHguc3Vic3RyKDAsIGxlZnRQeC5pbmRleE9mKCdweCcpKSAqIDFcclxuICAgICAgdCA9IHRvcFB4LnN1YnN0cigwLCB0b3BQeC5pbmRleE9mKCdweCcpKSAqIDFcclxuICAgICAgLy8g6KeG5Y+j5aSn5bCPXHJcbiAgICAgIGxldCB3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XHJcbiAgICAgIGxldCB3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aFxyXG5cclxuICAgICAgLy/pvKDmoIfnp7vliqhcclxuICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAvL+iOt+WPlnjlkox5XHJcbiAgICAgICAgbGV0IG54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgbGV0IG55ID0gZS5jbGllbnRZXHJcbiAgICAgICAgLy/orqHnrpfnp7vliqjlkI7nmoTlt6blgY/np7vph4/lkozpobbpg6jnmoTlgY/np7vph49cclxuICAgICAgICBsZXQgbGVmdFB4ID0gbnggLSAoeCAtIGwpXHJcbiAgICAgICAgbGV0IHRvcFB4ID0gbnkgLSAoeSAtIHQpXHJcbiAgICAgICAgaWYgKGxlZnRQeCA8IDApIHtcclxuICAgICAgICAgIGxlZnRQeCA9IDBcclxuICAgICAgICB9IGVsc2UgaWYgKGxlZnRQeCArIG9Nb3ZlRGl2V2lkdGggPiB3aW5kb3dXaWR0aCkge1xyXG4gICAgICAgICAgbGVmdFB4ID0gd2luZG93V2lkdGggLSBvTW92ZURpdldpZHRoXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9wUHggPD0gMCkge1xyXG4gICAgICAgICAgdG9wUHggPSAwXHJcbiAgICAgICAgfSBlbHNlIGlmICh0b3BQeCArIG9Nb3ZlRGl2SGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7XHJcbiAgICAgICAgICB0b3BQeCA9IHdpbmRvd0hlaWdodCAtIG9Nb3ZlRGl2SGVpZ2h0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLl9lbGVtZW50LmJvZHkuc3R5bGUubGVmdCA9IGxlZnRQeCArICdweCdcclxuICAgICAgICBfdGhpcy5fZWxlbWVudC5ib2R5LnN0eWxlLnRvcCA9IHRvcFB4ICsgJ3B4J1xyXG4gICAgICAgIF90aGlzLl9lbGVtZW50LmJvZHkuc3R5bGUuYm90dG9tID0gJ3Vuc2V0J1xyXG4gICAgICAgIF90aGlzLl9lbGVtZW50LmJvZHkuc3R5bGUucmlnaHQgPSAndW5zZXQnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8v6byg5qCH5oqs6LW35LqL5Lu2XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIHdpbmRvdy5vbmRyYWdlbmQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHdpbmRvdy5vbm1vdXNlbW92ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v6byg5qCH5oqs6LW35LqL5Lu2XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICB3aW5kb3cub25tb3VzZW1vdmUgPSBudWxsXHJcbiAgICB9XHJcbiAgICB3aW5kb3cub25kcmFnZW5kID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubGV0IERpYWxvZ0FsbCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYXNlRGlhbG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaEVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/BaseDialog/index.js\n"); /***/ }), /***/ "./src/BaseDialog/rule.js": /*!********************************!*\ !*** ./src/BaseDialog/rule.js ***! \********************************/ /*! exports provided: check */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"check\", function() { return check; });\nfunction check(elm, rule) {\n var input = elm.getElementsByTagName('input')[0];\n rules[rule.validator](input, rule.trigger, function (s, error) {\n if (s) {\n elm.className = 'input-box';\n var eElm = elm.getElementsByClassName('input-error-text')[0];\n if (eElm) {\n elm.removeChild(eElm);\n }\n } else {\n elm.className = 'input-box error';\n var e = rule.message || error;\n var _eElm = document.createElement('span');\n _eElm.className = 'input-error-text';\n _eElm.innerHTML = e;\n elm.appendChild(_eElm);\n }\n });\n}\nvar rules = {\n notEmpty: function notEmpty(input, trigger, cd) {\n input.addEventListener(trigger, function () {\n if (input.value) {\n cd(true);\n } else {\n cd(false, '不能为空!');\n }\n });\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQmFzZURpYWxvZy9ydWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0Jhc2VEaWFsb2cvcnVsZS5qcz82NWJlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNoZWNrKGVsbSwgcnVsZSkge1xyXG4gIGxldCBpbnB1dCA9IGVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gIHJ1bGVzW3J1bGUudmFsaWRhdG9yXShpbnB1dCwgcnVsZS50cmlnZ2VyLCAocywgZXJyb3IpID0+IHtcclxuICAgIGlmIChzKSB7XHJcbiAgICAgIGVsbS5jbGFzc05hbWUgPSAnaW5wdXQtYm94J1xyXG4gICAgICBsZXQgZUVsbSA9IGVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1lcnJvci10ZXh0JylbMF1cclxuICAgICAgaWYoZUVsbSkge1xyXG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlRWxtKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1ib3ggZXJyb3InXHJcbiAgICAgIGxldCBlID0gcnVsZS5tZXNzYWdlIHx8IGVycm9yXHJcbiAgICAgIGxldCBlRWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBlRWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1lcnJvci10ZXh0J1xyXG4gICAgICBlRWxtLmlubmVySFRNTCA9IGVcclxuICAgICAgZWxtLmFwcGVuZENoaWxkKGVFbG0pXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgcnVsZXMgPSB7XHJcbiAgbm90RW1wdHk6IChpbnB1dCwgdHJpZ2dlciwgY2QpID0+IHtcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIodHJpZ2dlciwgKCk9PntcclxuICAgICAgaWYgKGlucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgY2QodHJ1ZSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjZChmYWxzZSwgJ+S4jeiDveS4uuepuu+8gScpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBjaGVjayB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/BaseDialog/rule.js\n"); /***/ }), /***/ "./src/Controller/index.js": /*!*********************************!*\ !*** ./src/Controller/index.js ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/**\r\n * @description 平移旋转-改\r\n */\n\nvar ControllerObject = /*#__PURE__*/function () {\n function ControllerObject(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ControllerObject);\n this.sdk = sdk;\n this.viwer = this.sdk.viewer;\n this.options = options;\n this.options.position = options.position || {};\n this.options.rotate = options.rotate || {};\n this.options.position.lng = this.options.position.lng || 0;\n this.options.position.lat = this.options.position.lat || 0;\n this.options.position.alt = this.options.position.alt || 0;\n this.options.rotate.x = this.options.rotate.x || 0;\n this.options.rotate.y = this.options.rotate.y || 0;\n this.options.rotate.z = this.options.rotate.z || 0;\n this.activeAxis;\n this.activeCircle;\n this.activeModelParam;\n this.origin;\n this.rayX;\n this.rayY;\n this.rayZ;\n this.arrow = {};\n this.activeState;\n this.coordArrows = [];\n this.coordCircles = [];\n this.MapEvent = new _Event__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.sdk);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ControllerObject, [{\n key: \"position\",\n get: function get() {\n return this.options.position;\n },\n set: function set(v) {\n this.options.position = v;\n this.againArrow();\n this.againCircle();\n }\n }, {\n key: \"rotate\",\n get: function get() {\n return this.options.rotate;\n },\n set: function set(v) {\n this.options.rotate = v;\n }\n }, {\n key: \"initParam\",\n value: function initParam() {\n this._params = {\n tx: this.options.position.lng,\n //模型中心X轴坐标(经度,单位:十进制度)\n ty: this.options.position.lat,\n //模型中心Y轴坐标(纬度,单位:十进制度)\n tz: this.options.position.alt,\n //模型中心Z轴坐标(高程,单位:米)\n rx: this.options.rotate.x,\n //X轴(经度)方向旋转角度(单位:度)\n ry: this.options.rotate.y,\n //Y轴(纬度)方向旋转角度(单位:度)\n rz: this.options.rotate.z //Z轴(高程)方向旋转角度(单位:度)\n };\n return _objectSpread(_objectSpread({}, this.options.position), this.options.rotate);\n }\n\n /**\r\n * 开始编辑平移\r\n */\n }, {\n key: \"editTranslational\",\n value: (function () {\n var _editTranslational = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n var _this2 = this;\n var _this, param, lng, lat, h, viewer, directionVectorX, directionVectorY, directionVectorZ, matrix, cameraPosition, distance, newRadius, scale, axisArrowX, axisArrowY, axisArrowZ, positions, radius, coordinatesDiffer, lastPickTime, timeoutEvent, moveEvent;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n moveEvent = function _moveEvent(movement) {\n if (!_this.activeAxis) {\n var now = Date.now();\n if (now - lastPickTime < 100) {\n clearTimeout(timeoutEvent);\n timeoutEvent = setTimeout(function () {\n moveEvent(movement);\n }, 100);\n return;\n }\n clearTimeout(timeoutEvent);\n lastPickTime = now;\n var primitives = _this.coordArrows;\n for (var i = 0; i < primitives.length; i++) {\n if (primitives[i].getGeometryInstanceAttributes) {\n switch (primitives[i]._name) {\n case 'model_edit_xAxis':\n primitives[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.RED\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n case 'model_edit_yAxis':\n primitives[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.LIME\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n case 'model_edit_zAxis':\n primitives[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.BLUE\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n default:\n }\n }\n }\n var pickedObjectArray = _this.viwer.scene.drillPick(movement.endPosition, 10);\n for (var _i = pickedObjectArray.length - 1; _i >= 0; _i--) {\n var pick = pickedObjectArray[_i];\n if (pick && pick.primitive && pick.id) {\n switch (pick.primitive._name) {\n case 'model_edit_xAxis':\n case 'model_edit_yAxis':\n case 'model_edit_zAxis':\n pick.primitive.appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.YELLOW\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n return;\n default:\n }\n }\n }\n } else {\n var y = movement.startPosition.y - movement.endPosition.y; //负数往下\n\n var endPosition = {\n x: movement.endPosition.x - coordinatesDiffer.x,\n y: movement.endPosition.y - coordinatesDiffer.y\n };\n var ray = viewer.camera.getPickRay(endPosition); //获取一条射线\n var position = viewer.scene.globe.pick(ray, viewer.scene);\n var finalPosition = new Cesium.Cartesian3();\n var matrix4 = Cesium.Transforms.eastNorthUpToFixedFrame(viewer.camera.position);\n Cesium.Matrix4.inverse(matrix4, matrix4);\n Cesium.Matrix4.multiplyByPoint(matrix4, position, finalPosition);\n Cesium.Cartesian3.normalize(finalPosition, finalPosition);\n var _param = _this.initParam();\n var pitch = 90 + Cesium.Math.toDegrees(Math.asin(finalPosition.z));\n var camera_cartographic = Cesium.Cartographic.fromCartesian(viewer.camera.position);\n var a = camera_cartographic.height;\n var b = _this.activeModelParam.alt;\n // let d = Cesium.Cartesian3.distance(viewer.camera.position, position);\n var d = a / Math.cos(Cesium.Math.toRadians(pitch));\n var geodesic = new Cesium.EllipsoidGeodesic(Cesium.Cartographic.fromCartesian(position), Cesium.Cartographic.fromCartesian(viewer.camera.position));\n position = Cesium.Ray.getPoint(ray, d * (1 - b / a));\n var cartographic = Cesium.Cartographic.fromCartesian(position);\n var _lng = Cesium.Math.toDegrees(cartographic.longitude); // 经度\n var _lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度\n var m;\n switch (_this.activeAxis._name) {\n case 'model_edit_xAxis':\n _this._params.tx = _lng;\n _this._params.ty = _this.activeModelParam.lat;\n _this._params.tz = b;\n _this.origin = Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _param.alt);\n // 计算xyz轴方向\n var _directionVectorX = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng - 0.001, _param.lat, _param.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var _directionVectorY = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat - 0.001, _param.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var _directionVectorZ = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _param.alt - 1), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n _this.rayX = new Cesium.Ray(_this.origin, _directionVectorX);\n _this.rayY = new Cesium.Ray(_this.origin, _directionVectorY);\n _this.rayZ = new Cesium.Ray(_this.origin, _directionVectorZ);\n break;\n case 'model_edit_yAxis':\n _this._params.tx = _this.activeModelParam.lng;\n _this._params.ty = _lat;\n _this._params.tz = b;\n _this.origin = Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _param.alt);\n // 计算xyz轴方向\n var directionVectorX2 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng - 0.001, _param.lat, _param.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var directionVectorY2 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat - 0.001, _param.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var directionVectorZ2 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _param.alt - 1), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n _this.rayX = new Cesium.Ray(_this.origin, directionVectorX2);\n _this.rayY = new Cesium.Ray(_this.origin, directionVectorY2);\n _this.rayZ = new Cesium.Ray(_this.origin, directionVectorZ2);\n break;\n case 'model_edit_zAxis':\n _this.activeModelParam.alt += Cesium.Cartesian3.distance(viewer.camera.position, Cesium.Cartesian3.fromDegrees(_this.options.position.lng, _this.options.position.lat, _this.options.position.alt)) / 4300 * y * 3;\n _this._params.tx = _this.activeModelParam.lng;\n _this._params.ty = _this.activeModelParam.lat;\n _this._params.tz = _this.activeModelParam.alt;\n _this.origin = Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _this.activeModelParam.alt);\n // 计算xyz轴方向\n var directionVectorX3 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng - 0.001, _param.lat, _this.activeModelParam.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var directionVectorY3 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat - 0.001, _this.activeModelParam.alt), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var directionVectorZ3 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(_this.origin, Cesium.Cartesian3.fromDegrees(_param.lng, _param.lat, _this.activeModelParam.alt - 1), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n _this.rayX = new Cesium.Ray(_this.origin, directionVectorX3);\n _this.rayY = new Cesium.Ray(_this.origin, directionVectorY3);\n _this.rayZ = new Cesium.Ray(_this.origin, directionVectorZ3);\n break;\n default:\n }\n _this.updateModel(_this._params.tx, _this._params.ty, _this._params.tz, _this._params.rx, _this._params.ry, _this._params.rz);\n _this.againArrow();\n }\n };\n this.destroy();\n this.activeState = 'translational';\n this.MapEvent = new _Event__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.sdk);\n // this.viwer.scene.camera.flyTo({\n // destination: new Cesium.Cartesian3.fromDegrees(104.17401, 30.63593, 1000),\n // orientation: {\n // pitch: Cesium.Math.toRadians(-35.0)\n // },\n // duration: 1\n // })\n /**\r\n * 创建一条射线\r\n */\n _this = this;\n param = this.initParam();\n lng = param.lng;\n lat = param.lat;\n h = param.alt;\n viewer = this.viwer; // let lon = 104.17401\n // let lat = 30.64593\n // let h = 0\n // 原点\n this.origin = Cesium.Cartesian3.fromDegrees(lng, lat, h);\n // 计算xyz轴方向\n directionVectorX = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(this.origin, Cesium.Cartesian3.fromDegrees(lng - 0.001, lat, h), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n directionVectorY = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(this.origin, Cesium.Cartesian3.fromDegrees(lng, lat - 0.001, h), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n directionVectorZ = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(this.origin, Cesium.Cartesian3.fromDegrees(lng, lat, h - 1), new Cesium.Cartesian3()), new Cesium.Cartesian3());\n this.rayX = new Cesium.Ray(this.origin, directionVectorX);\n this.rayY = new Cesium.Ray(this.origin, directionVectorY);\n this.rayZ = new Cesium.Ray(this.origin, directionVectorZ);\n this.arrow.positionX = Cesium.Ray.getPoint(this.rayX, 0);\n this.arrow.positionY = Cesium.Ray.getPoint(this.rayY, 0);\n this.arrow.positionZ = Cesium.Ray.getPoint(this.rayZ, 0);\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(lng, lat, h)); // 获取相机的位置\n cameraPosition = viewer.camera.position; // 计算相机与目标坐标之间的距离\n distance = Cesium.Cartesian3.distance(cameraPosition, this.origin);\n newRadius = distance / 15;\n scale = newRadius;\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(scale, scale, scale), matrix);\n axisArrowX = this.createAxisArrow('model_edit_xAxis', [new Cesium.Cartesian3(0, 0.001, 0), new Cesium.Cartesian3(1, 0, 0)], matrix, Cesium.Color.RED);\n axisArrowY = this.createAxisArrow('model_edit_yAxis', [new Cesium.Cartesian3(0, 0.001, 0), new Cesium.Cartesian3(0, 1, 0)], matrix, Cesium.Color.LIME);\n axisArrowZ = this.createAxisArrow('model_edit_zAxis', [new Cesium.Cartesian3(0, 0.001, 0), new Cesium.Cartesian3(0, 0, 1)], matrix, Cesium.Color.BLUE);\n positions = [];\n radius = 1; // for (let i = 0; i <= 360; i += 3) {\n // const sin = Math.sin(Cesium.Math.toRadians(i))\n // const cos = Math.cos(Cesium.Math.toRadians(i))\n // const x = radius * cos\n // const y = radius * sin\n // positions.push(new Cesium.Cartesian3(x, y, 0))\n // }\n // console.log('positions', positions)\n // let axisCircular = this.createAxisCircular('model_edit_circular', positions, matrix)\n this.viwer.scene.primitives.add(axisArrowX);\n this.viwer.scene.primitives.add(axisArrowY);\n this.viwer.scene.primitives.add(axisArrowZ);\n // this.viwer.scene.primitives.add(axisCircular)\n\n this.againArrow();\n\n // this.viwer.entities.add({\n // id: \"tool-position_plane_xy\",\n // rectangle: {\n // coordinates: new Cesium.CallbackProperty(function () {\n // return Cesium.Rectangle.fromCartesianArray([positionX, positionY])\n // }, false),\n // material: Cesium.Color.YELLOW.withAlpha(0),\n // }\n // });\n\n // 监听相机移动\n this.viwer.camera.percentageChanged = 0.001;\n this.viwer.camera.changed.addEventListener(this.againArrow, {\n _that: this\n });\n coordinatesDiffer = {\n x: 0,\n y: 0\n };\n lastPickTime = 0;\n this.MapEvent.mouse_move(function (e, cartesian) {\n moveEvent(e);\n });\n this.MapEvent.mouse_left_down(function (event, cartesian) {\n var canvasCoordinates = viewer.scene.cartesianToCanvasCoordinates(_this2.origin);\n coordinatesDiffer.x = event.position.x - Math.floor(canvasCoordinates.x);\n coordinatesDiffer.y = event.position.y - Math.floor(canvasCoordinates.y);\n var pickedObjectArray = viewer.scene.drillPick(event.position, 10);\n for (var i = pickedObjectArray.length - 1; i >= 0; i--) {\n var pickedObject = pickedObjectArray[i];\n if (pickedObject && pickedObject.primitive && pickedObject.primitive._name) {\n if (_this.activeAxis) {\n _this.activeAxis = null;\n _this.activeModelParam = null;\n _this.controllerCallBack;\n } else {\n switch (pickedObject.primitive._name) {\n case 'model_edit_xAxis':\n case 'model_edit_yAxis':\n case 'model_edit_zAxis':\n viewer.scene.screenSpaceCameraController.enableRotate = false;\n _this.activeAxis = pickedObject.primitive;\n _this.activeModelParam = _this.initParam();\n pickedObject.primitive.appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.YELLOW\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n return;\n default:\n }\n }\n }\n }\n });\n this.MapEvent.mouse_left_up(function (event) {\n viewer.scene.screenSpaceCameraController.enableRotate = true;\n for (var i = 0; i < _this.coordArrows.length; i++) {\n switch (_this.coordArrows[i]._name) {\n case 'model_edit_xAxis':\n _this.coordArrows[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.RED\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n case 'model_edit_yAxis':\n _this.coordArrows[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.LIME\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n case 'model_edit_zAxis':\n _this.coordArrows[i].appearance = new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: Cesium.Color.BLUE\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n });\n break;\n default:\n }\n }\n if (_this.activeAxis) {\n _this.activeAxis = null;\n _this.activeModelParam = null;\n _this.controllerCallBack;\n }\n });\n case 42:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function editTranslational() {\n return _editTranslational.apply(this, arguments);\n }\n return editTranslational;\n }() // 重新计算箭头位置\n )\n }, {\n key: \"againArrow\",\n value: function againArrow() {\n var _that = this._that || this;\n if (!_that.origin) {\n return;\n }\n _that.initParam();\n _that.origin = new Cesium.Cartesian3.fromDegrees(_that._params.tx, _that._params.ty, _that._params.tz);\n var viewer = _that.viwer;\n // 获取相机的位置\n var cameraPosition = viewer.camera.position;\n // 计算相机与目标坐标之间的距离\n var distance = Cesium.Cartesian3.distance(cameraPosition, _that.origin);\n var scale = distance / 15;\n var matrix = Cesium.Transforms.eastNorthUpToFixedFrame(_that.origin);\n var primitives = _that.coordArrows;\n for (var i = 0; i < primitives.length; i++) {\n switch (primitives[i]._name) {\n case 'model_edit_xAxis':\n case 'model_edit_yAxis':\n case 'model_edit_zAxis':\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(scale, scale, scale), primitives[i].modelMatrix);\n break;\n default:\n }\n }\n }\n\n //重新计算圆\n }, {\n key: \"againCircle\",\n value: function againCircle() {\n var _that = this._that || this;\n if (!_that.origin) {\n return;\n }\n _that.initParam();\n _that.origin = new Cesium.Cartesian3.fromDegrees(_that._params.tx, _that._params.ty, _that._params.tz);\n var viewer = _that.viwer;\n // 获取相机的位置\n var cameraPosition = viewer.camera.position;\n // 计算相机与目标坐标之间的距离\n var distance = Cesium.Cartesian3.distance(cameraPosition, _that.origin);\n var radius = distance / 15;\n var matrix = Cesium.Transforms.eastNorthUpToFixedFrame(_that.origin);\n var primitives = _that.coordCircles;\n for (var i = 0; i < primitives.length; i++) {\n // _that.viwer.scene.primitives.lowerToBottom(primitives[i])\n switch (primitives[i]._name) {\n case 'model_edit_zCircle':\n case 'model_edit_yCircle':\n case 'model_edit_xCircle':\n var scale = radius / 20;\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(scale, scale, scale), primitives[i].modelMatrix);\n primitives[i]._radius = radius;\n break;\n default:\n }\n }\n }\n\n /**\r\n * 开始旋转编辑\r\n */\n }, {\n key: \"editRtation\",\n value: (function () {\n var _editRtation = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2() {\n var param;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n this.destroy();\n this.activeState = 'rtation';\n this.MapEvent = new _Event__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.sdk);\n param = this.initParam();\n this.origin = Cesium.Cartesian3.fromDegrees(param.lng, param.lat, param.alt);\n this.createCircle(param.lng, param.lat, param.alt, 20);\n // 监听相机移动\n this.viwer.camera.percentageChanged = 0.001;\n this.viwer.camera.changed.addEventListener(this.againCircle, {\n _that: this\n });\n case 8:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function editRtation() {\n return _editRtation.apply(this, arguments);\n }\n return editRtation;\n }())\n }, {\n key: \"createCircle\",\n value: function () {\n var _createCircle = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee3(lng, lat, height, radius) {\n var _that, _this, viewer, position, i, sin, cos, x, y, matrix, cameraPosition, distance, newRadius, scale, axisSphereZ, axisSphereY, my, rotationY, axisSphereX, mx, rotationX, lastPickTime, timeoutEvent, moveEvent;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n moveEvent = function _moveEvent2(movement) {\n if (!_this.activeCircle) {\n var now = Date.now();\n if (now - lastPickTime < 100) {\n clearTimeout(timeoutEvent);\n timeoutEvent = setTimeout(function () {\n moveEvent(movement);\n }, 100);\n return;\n }\n clearTimeout(timeoutEvent);\n lastPickTime = now;\n var primitives = _that.coordCircles;\n for (var _i2 = 0; _i2 < primitives.length; _i2++) {\n if (primitives[_i2].getGeometryInstanceAttributes) {\n var attributes = primitives[_i2].getGeometryInstanceAttributes(primitives[_i2]._name);\n switch (primitives[_i2]._name) {\n case 'model_edit_zCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED).value;\n break;\n case 'model_edit_yCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE).value;\n break;\n case 'model_edit_xCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.LIME).value;\n break;\n default:\n }\n }\n }\n var pickedObjectArray = viewer.scene.drillPick(movement.endPosition, 10);\n for (var _i3 = 0; _i3 < pickedObjectArray.length; _i3++) {\n var pick = pickedObjectArray[_i3];\n if (pick && pick.primitive && pick.id) {\n var _attributes = pick.primitive.getGeometryInstanceAttributes(pick.id);\n switch (pick.primitive._name) {\n case 'model_edit_zCircle':\n _attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW).value;\n return;\n case 'model_edit_yCircle':\n _attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW).value;\n return;\n case 'model_edit_xCircle':\n _attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW).value;\n return;\n default:\n }\n }\n }\n } else {\n var position1 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, _that.ciclkPosition);\n var _rx = 0,\n _ry = 0,\n _rz = 0; //xyz方向的旋转量(度)\n if (!position1) {\n return;\n }\n var _yPix = movement.startPosition.y - movement.endPosition.y;\n var _xPix = movement.startPosition.x - movement.endPosition.x;\n switch (_this.activeCircle._name) {\n case 'model_edit_xCircle':\n _ry = 1 * _xPix;\n break;\n case 'model_edit_yCircle':\n _rx = 1 * _yPix;\n break;\n case 'model_edit_zCircle':\n _rz = 1 * _xPix;\n break;\n default:\n }\n _this._params.rx -= _rx;\n if (_this._params.rx > 360) {\n _this._params.rx = 1;\n }\n if (_this._params.rx < 0) {\n _this._params.rx = 360;\n }\n var _mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(_this._params.rx));\n _this._params.ry -= _ry;\n if (_this._params.ry > 360) {\n _this._params.ry = 1;\n }\n if (_this._params.ry < 0) {\n _this._params.ry = 360;\n }\n _this._params.rz -= _rz;\n if (_this._params.rz > 360) {\n _this._params.rz = 1;\n }\n if (_this._params.rz < 0) {\n _this._params.rz = 360;\n }\n _this.updateModel(_this._params.tx, _this._params.ty, _this._params.tz, _this._params.rx, _this._params.ry, _this._params.rz);\n }\n };\n _that = this._that || this;\n _this = this;\n viewer = this.viwer;\n position = [];\n for (i = 0; i <= 360; i += 3) {\n sin = Math.sin(Cesium.Math.toRadians(i));\n cos = Math.cos(Cesium.Math.toRadians(i));\n x = radius * cos;\n y = radius * sin;\n position.push(new Cesium.Cartesian3(x, y, 0));\n }\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(lng, lat, height)); // 获取相机的位置\n cameraPosition = viewer.camera.position; // 计算相机与目标坐标之间的距离\n distance = Cesium.Cartesian3.distance(cameraPosition, this.origin);\n newRadius = distance / 15;\n scale = newRadius / radius;\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(scale, scale, scale), matrix);\n // Cesium.Matrix4.multiply(\n // matrix,\n // x,\n // matrix\n // )\n //绕Z轴\n _context3.next = 14;\n return this.createAxisSphere('model_edit_zCircle', position, matrix, Cesium.Color.RED, newRadius);\n case 14:\n axisSphereZ = _context3.sent;\n viewer.scene.primitives.add(axisSphereZ);\n\n //绕Y周\n _context3.next = 18;\n return this.createAxisSphere('model_edit_yCircle', position, matrix, Cesium.Color.BLUE, newRadius);\n case 18:\n axisSphereY = _context3.sent;\n viewer.scene.primitives.add(axisSphereY);\n my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(90));\n rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n Cesium.Matrix4.multiply(axisSphereY.geometryInstances.modelMatrix, rotationY, axisSphereY.geometryInstances.modelMatrix);\n\n //绕X周\n _context3.next = 25;\n return this.createAxisSphere('model_edit_xCircle', position, matrix, Cesium.Color.LIME, newRadius);\n case 25:\n axisSphereX = _context3.sent;\n viewer.scene.primitives.add(axisSphereX);\n mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(90));\n rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n Cesium.Matrix4.multiply(axisSphereX.geometryInstances.modelMatrix, rotationX, axisSphereX.geometryInstances.modelMatrix);\n lastPickTime = 0;\n this.MapEvent.mouse_move(function (movement) {\n moveEvent(movement);\n });\n this.MapEvent.mouse_left_down(function (event) {\n var cartesian = viewer.scene.pickPosition(event.position);\n _that.ciclkPosition = cartesian;\n var pickedObjectArray = viewer.scene.drillPick(event.position, 10);\n for (var _i4 = 0; _i4 < pickedObjectArray.length; _i4++) {\n var pickedObject = pickedObjectArray[_i4];\n if (pickedObject && pickedObject.primitive && pickedObject.id) {\n switch (pickedObject.primitive._name) {\n case 'model_edit_xCircle':\n case 'model_edit_yCircle':\n case 'model_edit_zCircle':\n viewer.scene.screenSpaceCameraController.enableRotate = false;\n var attributes = pickedObject.primitive.getGeometryInstanceAttributes(pickedObject.primitive._name);\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW).value;\n _this.activeCircle = pickedObject.primitive;\n _this.activeModelParam = _this.initParam();\n return;\n default:\n }\n }\n }\n _this.activeCircle = null;\n _this.activeModelParam = null;\n viewer.scene.screenSpaceCameraController.enableRotate = true;\n });\n this.MapEvent.mouse_left_up(function (event) {\n viewer.scene.screenSpaceCameraController.enableRotate = true;\n var primitives = _this.coordCircles;\n _this.activeCircle = null;\n _this.activeModelParam = null;\n for (var _i5 = 0; _i5 < primitives.length; _i5++) {\n if (primitives[_i5].getGeometryInstanceAttributes) {\n var attributes = primitives[_i5].getGeometryInstanceAttributes(primitives[_i5]._name);\n switch (primitives[_i5]._name) {\n case 'model_edit_zCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED).value;\n break;\n case 'model_edit_yCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE).value;\n break;\n case 'model_edit_xCircle':\n attributes.color = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.LIME).value;\n break;\n default:\n }\n }\n }\n });\n case 34:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function createCircle(_x, _x2, _x3, _x4) {\n return _createCircle.apply(this, arguments);\n }\n return createCircle;\n }() //更新模型位置\n }, {\n key: \"updateModel\",\n value: function updateModel(_tx, _ty, _tz) {\n var _rx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var _ry = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var _rz = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n this._params.tx = _tx = parseFloat(parseFloat(_tx).toFixed(8));\n this._params.ty = _ty = parseFloat(parseFloat(_ty).toFixed(8));\n this._params.tz = _tz = parseFloat(parseFloat(_tz).toFixed(2));\n this._params.rx = _rx = parseFloat(_rx);\n this._params.ry = _ry = parseFloat(_ry);\n this._params.rz = _rz = parseFloat(_rz);\n this.options.position.lng = _tx;\n this.options.position.lat = _ty;\n this.options.position.alt = _tz;\n this.options.rotate = {\n x: _rx,\n y: _ry,\n z: _rz\n };\n // this.model.position = new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz)\n // this.model.rotate = { x: _rx, y: _ry, z: _rz }\n // let mx = Cesium.Matrix3.fromRotationX(\n // Cesium.Math.toRadians(_rx)\n // )\n // let my = Cesium.Matrix3.fromRotationY(\n // Cesium.Math.toRadians(_ry)\n // )\n // let mz = Cesium.Matrix3.fromRotationZ(\n // Cesium.Math.toRadians(_rz)\n // )\n // // 平移\n // let m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz))\n // // 旋转\n // let rotationX = Cesium.Matrix4.fromRotationTranslation(mx)\n // let rotationY = Cesium.Matrix4.fromRotationTranslation(my)\n // let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz)\n // let originalMatrix = new Cesium.Matrix4()\n // Cesium.Matrix4.multiply(m, rotationX, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationZ, this.model.modelMatrix)\n this.controllerCallBack;\n }\n }, {\n key: \"controllerCallBack\",\n get: function get() {\n this._controllerCallBack && this._controllerCallBack(this.options, this.activeAxis ? false : true);\n },\n set: function set(callback) {\n this._controllerCallBack = callback;\n }\n }, {\n key: \"createAxisArrow\",\n value: function createAxisArrow(name, position, matrix, color) {\n var result = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: name,\n geometry: new Cesium.PolylineGeometry({\n positions: position,\n width: 20\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(color)\n }\n }),\n releaseGeometryInstances: false,\n appearance: new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType(Cesium.Material.PolylineArrowType, {\n color: color\n }),\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n }),\n modelMatrix: matrix\n });\n result._name = name;\n this.coordArrows.push(result);\n return result;\n }\n }, {\n key: \"createAxisCircular\",\n value: function createAxisCircular(name, position, matrix, color) {\n var result = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: new Cesium.EllipseGeometry({\n center: {\n x: 1,\n y: 1,\n z: 1\n },\n semiMinorAxis: 500000.0,\n semiMajorAxis: 1000000.0,\n rotation: Cesium.Math.PI_OVER_FOUR,\n vertexFormat: Cesium.VertexFormat.POSITION_AND_ST\n })\n }),\n releaseGeometryInstances: false,\n appearance: new Cesium.EllipsoidSurfaceAppearance({\n material: new Cesium.Material({\n fabric: {\n type: 'Color',\n uniforms: {\n color: Cesium.Color.YELLOW\n }\n }\n })\n }),\n modelMatrix: matrix\n });\n result._name = name;\n this.coordArrows.push(result);\n return result;\n }\n }, {\n key: \"createAxisSphere\",\n value: function createAxisSphere(name, position, matrix, color, radius) {\n var result = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: name,\n geometry: new Cesium.PolylineGeometry({\n positions: position,\n width: 5\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(color)\n }\n }),\n releaseGeometryInstances: false,\n appearance: new Cesium.PolylineColorAppearance({\n translucent: true,\n renderState: {\n depthTest: {\n enabled: false\n },\n depthMask: false,\n depthFunction: Cesium.DepthFunction.ALWAYS\n }\n }),\n modelMatrix: matrix\n });\n result._radius = radius;\n result._name = name;\n this.coordCircles.push(result);\n return result;\n }\n }, {\n key: \"removeCoordArrows\",\n value: function removeCoordArrows() {\n for (var i = 0; i < this.coordArrows.length; i++) {\n this.viwer.scene.primitives.remove(this.coordArrows[i]);\n }\n this.coordArrows = [];\n }\n }, {\n key: \"removeCoordCircle\",\n value: function removeCoordCircle() {\n for (var i = 0; i < this.coordCircles.length; i++) {\n this.viwer.scene.primitives.remove(this.coordCircles[i]);\n }\n this.coordCircles = [];\n }\n }, {\n key: \"removeAllTools\",\n value: function removeAllTools() {\n this.removeCoordArrows();\n this.removeCoordCircle();\n }\n\n /**\r\n * 关闭/注销\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllTools();\n this.activeAxis = undefined;\n this.activeState = undefined;\n this.MapEvent && this.MapEvent.destroy();\n this.viwer.camera.changed.removeEventListener(this.againArrow);\n this.viwer.camera.changed.removeEventListener(this.againCircle);\n }\n }, {\n key: \"getActiveState\",\n value: function getActiveState() {\n return this.activeState;\n }\n }, {\n key: \"update\",\n value: function update() {\n this.againArrow();\n this.againCircle();\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ControllerObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQ29udHJvbGxlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9Db250cm9sbGVyL2luZGV4LmpzPzc1NGMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiDlubPnp7vml4vovawt5pS5XHJcbiAqL1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi9FdmVudCdcclxuY2xhc3MgQ29udHJvbGxlck9iamVjdCB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMuc2RrID0gc2RrXHJcbiAgICB0aGlzLnZpd2VyID0gdGhpcy5zZGsudmlld2VyXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlID0gb3B0aW9ucy5yb3RhdGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueCA9IHRoaXMub3B0aW9ucy5yb3RhdGUueCB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnkgPSB0aGlzLm9wdGlvbnMucm90YXRlLnkgfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZS56ID0gdGhpcy5vcHRpb25zLnJvdGF0ZS56IHx8IDBcclxuICAgIHRoaXMuYWN0aXZlQXhpc1xyXG4gICAgdGhpcy5hY3RpdmVDaXJjbGVcclxuICAgIHRoaXMuYWN0aXZlTW9kZWxQYXJhbVxyXG4gICAgdGhpcy5vcmlnaW5cclxuICAgIHRoaXMucmF5WFxyXG4gICAgdGhpcy5yYXlZXHJcbiAgICB0aGlzLnJheVpcclxuICAgIHRoaXMuYXJyb3cgPSB7fVxyXG4gICAgdGhpcy5hY3RpdmVTdGF0ZVxyXG4gICAgdGhpcy5jb29yZEFycm93cyA9IFtdXHJcbiAgICB0aGlzLmNvb3JkQ2lyY2xlcyA9IFtdXHJcblxyXG4gICAgdGhpcy5NYXBFdmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvblxyXG4gIH1cclxuICBzZXQgcG9zaXRpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gdlxyXG4gICAgdGhpcy5hZ2FpbkFycm93KClcclxuICAgIHRoaXMuYWdhaW5DaXJjbGUoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvdGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucm90YXRlXHJcbiAgfVxyXG4gIHNldCByb3RhdGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZSA9IHZcclxuICB9XHJcblxyXG4gIGluaXRQYXJhbSgpIHtcclxuICAgIHRoaXMuX3BhcmFtcyA9IHtcclxuICAgICAgdHg6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIC8v5qih5Z6L5Lit5b+DWOi9tOWdkOagh++8iOe7j+W6pu+8jOWNleS9je+8muWNgei/m+WItuW6pu+8iVxyXG4gICAgICB0eTogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgLy/mqKHlnovkuK3lv4NZ6L205Z2Q5qCH77yI57qs5bqm77yM5Y2V5L2N77ya5Y2B6L+b5Yi25bqm77yJXHJcbiAgICAgIHR6OiB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0LCAvL+aooeWei+S4reW/g1rovbTlnZDmoIfvvIjpq5jnqIvvvIzljZXkvY3vvJrnsbPvvIlcclxuICAgICAgcng6IHRoaXMub3B0aW9ucy5yb3RhdGUueCwgLy9Y6L2077yI57uP5bqm77yJ5pa55ZCR5peL6L2s6KeS5bqm77yI5Y2V5L2N77ya5bqm77yJXHJcbiAgICAgIHJ5OiB0aGlzLm9wdGlvbnMucm90YXRlLnksIC8vWei9tO+8iOe6rOW6pu+8ieaWueWQkeaXi+i9rOinkuW6pu+8iOWNleS9je+8muW6pu+8iVxyXG4gICAgICByejogdGhpcy5vcHRpb25zLnJvdGF0ZS56IC8vWui9tO+8iOmrmOeoi++8ieaWueWQkeaXi+i9rOinkuW6pu+8iOWNleS9je+8muW6pu+8iVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uLCAuLi50aGlzLm9wdGlvbnMucm90YXRlIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW8gOWni+e8lui+keW5s+enu1xyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXRUcmFuc2xhdGlvbmFsKCkge1xyXG4gICAgdGhpcy5kZXN0cm95KClcclxuICAgIHRoaXMuYWN0aXZlU3RhdGUgPSAndHJhbnNsYXRpb25hbCdcclxuICAgIHRoaXMuTWFwRXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIC8vIHRoaXMudml3ZXIuc2NlbmUuY2FtZXJhLmZseVRvKHtcclxuICAgIC8vICAgZGVzdGluYXRpb246IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygxMDQuMTc0MDEsIDMwLjYzNTkzLCAxMDAwKSxcclxuICAgIC8vICAgb3JpZW50YXRpb246IHtcclxuICAgIC8vICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0zNS4wKVxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBkdXJhdGlvbjogMVxyXG4gICAgLy8gfSlcclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65LiA5p2h5bCE57q/XHJcbiAgICAgKi9cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGxldCBwYXJhbSA9IHRoaXMuaW5pdFBhcmFtKClcclxuICAgIGxldCBsbmcgPSBwYXJhbS5sbmdcclxuICAgIGxldCBsYXQgPSBwYXJhbS5sYXRcclxuICAgIGxldCBoID0gcGFyYW0uYWx0XHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aXdlclxyXG4gICAgLy8gbGV0IGxvbiA9IDEwNC4xNzQwMVxyXG4gICAgLy8gbGV0IGxhdCA9IDMwLjY0NTkzXHJcbiAgICAvLyBsZXQgaCA9IDBcclxuICAgIC8vIOWOn+eCuVxyXG4gICAgdGhpcy5vcmlnaW4gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgaClcclxuICAgIC8vIOiuoeeul3h5eui9tOaWueWQkVxyXG4gICAgY29uc3QgZGlyZWN0aW9uVmVjdG9yWCA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdCh0aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nIC0gMC4wMDEsIGxhdCwgaCksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgY29uc3QgZGlyZWN0aW9uVmVjdG9yWSA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdCh0aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQgLSAwLjAwMSwgaCksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgY29uc3QgZGlyZWN0aW9uVmVjdG9yWiA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdCh0aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGggLSAxKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICB0aGlzLnJheVggPSBuZXcgQ2VzaXVtLlJheSh0aGlzLm9yaWdpbiwgZGlyZWN0aW9uVmVjdG9yWClcclxuICAgIHRoaXMucmF5WSA9IG5ldyBDZXNpdW0uUmF5KHRoaXMub3JpZ2luLCBkaXJlY3Rpb25WZWN0b3JZKVxyXG4gICAgdGhpcy5yYXlaID0gbmV3IENlc2l1bS5SYXkodGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclopXHJcbiAgICB0aGlzLmFycm93LnBvc2l0aW9uWCA9IENlc2l1bS5SYXkuZ2V0UG9pbnQodGhpcy5yYXlYLCAwKVxyXG4gICAgdGhpcy5hcnJvdy5wb3NpdGlvblkgPSBDZXNpdW0uUmF5LmdldFBvaW50KHRoaXMucmF5WSwgMClcclxuICAgIHRoaXMuYXJyb3cucG9zaXRpb25aID0gQ2VzaXVtLlJheS5nZXRQb2ludCh0aGlzLnJheVosIDApXHJcblxyXG4gICAgY29uc3QgbWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoXHJcbiAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgaClcclxuICAgIClcclxuICAgIC8vIOiOt+WPluebuOacuueahOS9jee9rlxyXG4gICAgdmFyIGNhbWVyYVBvc2l0aW9uID0gdmlld2VyLmNhbWVyYS5wb3NpdGlvbjtcclxuICAgIC8vIOiuoeeul+ebuOacuuS4juebruagh+WdkOagh+S5i+mXtOeahOi3neemu1xyXG4gICAgdmFyIGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UoY2FtZXJhUG9zaXRpb24sIHRoaXMub3JpZ2luKTtcclxuICAgIGxldCBuZXdSYWRpdXMgPSBkaXN0YW5jZSAvIDE1XHJcbiAgICBsZXQgc2NhbGUgPSBuZXdSYWRpdXNcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhzY2FsZSwgc2NhbGUsIHNjYWxlKSwgbWF0cml4KVxyXG4gICAgbGV0IGF4aXNBcnJvd1ggPSB0aGlzLmNyZWF0ZUF4aXNBcnJvdygnbW9kZWxfZWRpdF94QXhpcycsIFtuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMCwgMC4wMDEsIDApLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMSwgMCwgMCldLCBtYXRyaXgsIENlc2l1bS5Db2xvci5SRUQpXHJcbiAgICBsZXQgYXhpc0Fycm93WSA9IHRoaXMuY3JlYXRlQXhpc0Fycm93KCdtb2RlbF9lZGl0X3lBeGlzJywgW25ldyBDZXNpdW0uQ2FydGVzaWFuMygwLCAwLjAwMSwgMCksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygwLCAxLCAwKV0sIG1hdHJpeCwgQ2VzaXVtLkNvbG9yLkxJTUUpXHJcbiAgICBsZXQgYXhpc0Fycm93WiA9IHRoaXMuY3JlYXRlQXhpc0Fycm93KCdtb2RlbF9lZGl0X3pBeGlzJywgW25ldyBDZXNpdW0uQ2FydGVzaWFuMygwLCAwLjAwMSwgMCksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygwLCAwLCAxKV0sIG1hdHJpeCwgQ2VzaXVtLkNvbG9yLkJMVUUpXHJcbiAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgIGxldCByYWRpdXMgPSAxXHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8PSAzNjA7IGkgKz0gMykge1xyXG4gICAgLy8gICBjb25zdCBzaW4gPSBNYXRoLnNpbihDZXNpdW0uTWF0aC50b1JhZGlhbnMoaSkpXHJcbiAgICAvLyAgIGNvbnN0IGNvcyA9IE1hdGguY29zKENlc2l1bS5NYXRoLnRvUmFkaWFucyhpKSlcclxuICAgIC8vICAgY29uc3QgeCA9IHJhZGl1cyAqIGNvc1xyXG4gICAgLy8gICBjb25zdCB5ID0gcmFkaXVzICogc2luXHJcbiAgICAvLyAgIHBvc2l0aW9ucy5wdXNoKG5ldyBDZXNpdW0uQ2FydGVzaWFuMyh4LCB5LCAwKSlcclxuICAgIC8vIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdwb3NpdGlvbnMnLCBwb3NpdGlvbnMpXHJcbiAgICAvLyBsZXQgYXhpc0NpcmN1bGFyID0gdGhpcy5jcmVhdGVBeGlzQ2lyY3VsYXIoJ21vZGVsX2VkaXRfY2lyY3VsYXInLCBwb3NpdGlvbnMsIG1hdHJpeClcclxuICAgIHRoaXMudml3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoYXhpc0Fycm93WClcclxuICAgIHRoaXMudml3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoYXhpc0Fycm93WSlcclxuICAgIHRoaXMudml3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoYXhpc0Fycm93WilcclxuICAgIC8vIHRoaXMudml3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoYXhpc0NpcmN1bGFyKVxyXG5cclxuICAgIHRoaXMuYWdhaW5BcnJvdygpXHJcblxyXG4gICAgLy8gdGhpcy52aXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgLy8gICBpZDogXCJ0b29sLXBvc2l0aW9uX3BsYW5lX3h5XCIsXHJcbiAgICAvLyAgIHJlY3RhbmdsZToge1xyXG4gICAgLy8gICAgIGNvb3JkaW5hdGVzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgICAgcmV0dXJuIENlc2l1bS5SZWN0YW5nbGUuZnJvbUNhcnRlc2lhbkFycmF5KFtwb3NpdGlvblgsIHBvc2l0aW9uWV0pXHJcbiAgICAvLyAgICAgfSwgZmFsc2UpLFxyXG4gICAgLy8gICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuWUVMTE9XLndpdGhBbHBoYSgwKSxcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8g55uR5ZCs55u45py656e75YqoXHJcbiAgICB0aGlzLnZpd2VyLmNhbWVyYS5wZXJjZW50YWdlQ2hhbmdlZCA9IDAuMDAxXHJcbiAgICB0aGlzLnZpd2VyLmNhbWVyYS5jaGFuZ2VkLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5hZ2FpbkFycm93LCB7IF90aGF0OiB0aGlzIH0pO1xyXG5cclxuICAgIGxldCBjb29yZGluYXRlc0RpZmZlciA9IHsgeDogMCwgeTogMCB9XHJcbiAgICBsZXQgbGFzdFBpY2tUaW1lID0gMDtcclxuICAgIGxldCB0aW1lb3V0RXZlbnRcclxuICAgIHRoaXMuTWFwRXZlbnQubW91c2VfbW92ZSgoZSwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIG1vdmVFdmVudChlKVxyXG4gICAgfSlcclxuICAgIGZ1bmN0aW9uIG1vdmVFdmVudChtb3ZlbWVudCkge1xyXG4gICAgICBpZiAoIV90aGlzLmFjdGl2ZUF4aXMpIHtcclxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGlmIChub3cgLSBsYXN0UGlja1RpbWUgPCAxMDApIHtcclxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0RXZlbnQpXHJcbiAgICAgICAgICB0aW1lb3V0RXZlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbW92ZUV2ZW50KG1vdmVtZW50KVxyXG4gICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEV2ZW50KVxyXG4gICAgICAgIGxhc3RQaWNrVGltZSA9IG5vdztcclxuICAgICAgICBsZXQgcHJpbWl0aXZlcyA9IF90aGlzLmNvb3JkQXJyb3dzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmltaXRpdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocHJpbWl0aXZlc1tpXS5nZXRHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZXNbaV0uX25hbWUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3hBeGlzJzpcclxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbaV0uYXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKENlc2l1bS5NYXRlcmlhbC5Qb2x5bGluZUFycm93VHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuUkVELFxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeUF4aXMnOlxyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tpXS5hcHBlYXJhbmNlID0gbmV3IENlc2l1bS5Qb2x5bGluZU1hdGVyaWFsQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoQ2VzaXVtLk1hdGVyaWFsLlBvbHlsaW5lQXJyb3dUeXBlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5MSU1FLFxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekF4aXMnOlxyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tpXS5hcHBlYXJhbmNlID0gbmV3IENlc2l1bS5Qb2x5bGluZU1hdGVyaWFsQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoQ2VzaXVtLk1hdGVyaWFsLlBvbHlsaW5lQXJyb3dUeXBlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5CTFVFLFxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwaWNrZWRPYmplY3RBcnJheSA9IF90aGlzLnZpd2VyLnNjZW5lLmRyaWxsUGljayhtb3ZlbWVudC5lbmRQb3NpdGlvbiwgMTApO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBwaWNrZWRPYmplY3RBcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgbGV0IHBpY2sgPSBwaWNrZWRPYmplY3RBcnJheVtpXVxyXG4gICAgICAgICAgaWYgKHBpY2sgJiYgcGljay5wcmltaXRpdmUgJiYgcGljay5pZCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHBpY2sucHJpbWl0aXZlLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF94QXhpcyc6XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95QXhpcyc6XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF96QXhpcyc6XHJcbiAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZS5hcHBlYXJhbmNlID0gbmV3IENlc2l1bS5Qb2x5bGluZU1hdGVyaWFsQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoQ2VzaXVtLk1hdGVyaWFsLlBvbHlsaW5lQXJyb3dUeXBlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5ZRUxMT1csXHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aEZ1bmN0aW9uOiBDZXNpdW0uRGVwdGhGdW5jdGlvbi5BTFdBWVMsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgeSA9IG1vdmVtZW50LnN0YXJ0UG9zaXRpb24ueSAtIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLy/otJ/mlbDlvoDkuItcclxuXHJcbiAgICAgICAgbGV0IGVuZFBvc2l0aW9uID0geyB4OiBtb3ZlbWVudC5lbmRQb3NpdGlvbi54IC0gY29vcmRpbmF0ZXNEaWZmZXIueCwgeTogbW92ZW1lbnQuZW5kUG9zaXRpb24ueSAtIGNvb3JkaW5hdGVzRGlmZmVyLnkgfVxyXG4gICAgICAgIGxldCByYXkgPSB2aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkoZW5kUG9zaXRpb24pOy8v6I635Y+W5LiA5p2h5bCE57q/XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB2aWV3ZXIuc2NlbmUpO1xyXG4gICAgICAgIGxldCBmaW5hbFBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICAgICAgbGV0IG1hdHJpeDQgPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh2aWV3ZXIuY2FtZXJhLnBvc2l0aW9uKTtcclxuICAgICAgICBDZXNpdW0uTWF0cml4NC5pbnZlcnNlKG1hdHJpeDQsIG1hdHJpeDQpO1xyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlQb2ludChtYXRyaXg0LCBwb3NpdGlvbiwgZmluYWxQb3NpdGlvbik7XHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pO1xyXG4gICAgICAgIGxldCBwYXJhbSA9IF90aGlzLmluaXRQYXJhbSgpXHJcbiAgICAgICAgbGV0IHBpdGNoID0gOTAgKyBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoTWF0aC5hc2luKGZpbmFsUG9zaXRpb24ueikpXHJcbiAgICAgICAgbGV0IGNhbWVyYV9jYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4odmlld2VyLmNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgbGV0IGEgPSBjYW1lcmFfY2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgICAgIGxldCBiID0gX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5hbHRcclxuICAgICAgICAvLyBsZXQgZCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHZpZXdlci5jYW1lcmEucG9zaXRpb24sIHBvc2l0aW9uKTtcclxuICAgICAgICBsZXQgZCA9IGEgLyBNYXRoLmNvcyhDZXNpdW0uTWF0aC50b1JhZGlhbnMocGl0Y2gpKVxyXG4gICAgICAgIGxldCBnZW9kZXNpYyA9IG5ldyBDZXNpdW0uRWxsaXBzb2lkR2VvZGVzaWMoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHBvc2l0aW9uKSwgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHZpZXdlci5jYW1lcmEucG9zaXRpb24pKVxyXG5cclxuICAgICAgICBwb3NpdGlvbiA9IENlc2l1bS5SYXkuZ2V0UG9pbnQocmF5LCBkICogKDEgLSAoYiAvIGEpKSlcclxuICAgICAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHBvc2l0aW9uKTtcclxuICAgICAgICBsZXQgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpOyAvLyDnu4/luqZcclxuICAgICAgICBsZXQgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSk7IC8vIOe6rOW6plxyXG4gICAgICAgIGxldCBtXHJcbiAgICAgICAgc3dpdGNoIChfdGhpcy5hY3RpdmVBeGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3hBeGlzJzpcclxuICAgICAgICAgICAgX3RoaXMuX3BhcmFtcy50eCA9IGxuZ1xyXG4gICAgICAgICAgICBfdGhpcy5fcGFyYW1zLnR5ID0gX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5sYXRcclxuICAgICAgICAgICAgX3RoaXMuX3BhcmFtcy50eiA9IGJcclxuXHJcbiAgICAgICAgICAgIF90aGlzLm9yaWdpbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBhcmFtLmxuZywgcGFyYW0ubGF0LCBwYXJhbS5hbHQpXHJcbiAgICAgICAgICAgIC8vIOiuoeeul3h5eui9tOaWueWQkVxyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb25WZWN0b3JYID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KF90aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nIC0gMC4wMDEsIHBhcmFtLmxhdCwgcGFyYW0uYWx0KSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvblZlY3RvclkgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoX3RoaXMub3JpZ2luLCBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwYXJhbS5sbmcsIHBhcmFtLmxhdCAtIDAuMDAxLCBwYXJhbS5hbHQpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uVmVjdG9yWiA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChfdGhpcy5vcmlnaW4sIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBhcmFtLmxuZywgcGFyYW0ubGF0LCBwYXJhbS5hbHQgLSAxKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIF90aGlzLnJheVggPSBuZXcgQ2VzaXVtLlJheShfdGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclgpXHJcbiAgICAgICAgICAgIF90aGlzLnJheVkgPSBuZXcgQ2VzaXVtLlJheShfdGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclkpXHJcbiAgICAgICAgICAgIF90aGlzLnJheVogPSBuZXcgQ2VzaXVtLlJheShfdGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclopXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3lBeGlzJzpcclxuICAgICAgICAgICAgX3RoaXMuX3BhcmFtcy50eCA9IF90aGlzLmFjdGl2ZU1vZGVsUGFyYW0ubG5nXHJcbiAgICAgICAgICAgIF90aGlzLl9wYXJhbXMudHkgPSBsYXRcclxuICAgICAgICAgICAgX3RoaXMuX3BhcmFtcy50eiA9IGJcclxuICAgICAgICAgICAgX3RoaXMub3JpZ2luID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nLCBwYXJhbS5sYXQsIHBhcmFtLmFsdClcclxuICAgICAgICAgICAgLy8g6K6h566XeHl66L205pa55ZCRXHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvblZlY3RvclgyID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KF90aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nIC0gMC4wMDEsIHBhcmFtLmxhdCwgcGFyYW0uYWx0KSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvblZlY3RvclkyID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KF90aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nLCBwYXJhbS5sYXQgLSAwLjAwMSwgcGFyYW0uYWx0KSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvblZlY3RvcloyID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KF90aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nLCBwYXJhbS5sYXQsIHBhcmFtLmFsdCAtIDEpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgICAgICAgX3RoaXMucmF5WCA9IG5ldyBDZXNpdW0uUmF5KF90aGlzLm9yaWdpbiwgZGlyZWN0aW9uVmVjdG9yWDIpXHJcbiAgICAgICAgICAgIF90aGlzLnJheVkgPSBuZXcgQ2VzaXVtLlJheShfdGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclkyKVxyXG4gICAgICAgICAgICBfdGhpcy5yYXlaID0gbmV3IENlc2l1bS5SYXkoX3RoaXMub3JpZ2luLCBkaXJlY3Rpb25WZWN0b3JaMilcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekF4aXMnOlxyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtLmFsdCArPSAoQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2Uodmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoX3RoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIF90aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCBfdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCkpIC8gNDMwMCkgKiB5ICogM1xyXG4gICAgICAgICAgICBfdGhpcy5fcGFyYW1zLnR4ID0gX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5sbmdcclxuICAgICAgICAgICAgX3RoaXMuX3BhcmFtcy50eSA9IF90aGlzLmFjdGl2ZU1vZGVsUGFyYW0ubGF0XHJcbiAgICAgICAgICAgIF90aGlzLl9wYXJhbXMudHogPSBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtLmFsdFxyXG4gICAgICAgICAgICBfdGhpcy5vcmlnaW4gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwYXJhbS5sbmcsIHBhcmFtLmxhdCwgX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5hbHQpXHJcbiAgICAgICAgICAgIC8vIOiuoeeul3h5eui9tOaWueWQkVxyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb25WZWN0b3JYMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChfdGhpcy5vcmlnaW4sIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBhcmFtLmxuZyAtIDAuMDAxLCBwYXJhbS5sYXQsIF90aGlzLmFjdGl2ZU1vZGVsUGFyYW0uYWx0KSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvblZlY3RvclkzID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KF90aGlzLm9yaWdpbiwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW0ubG5nLCBwYXJhbS5sYXQgLSAwLjAwMSwgX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5hbHQpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSksIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uVmVjdG9yWjMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoX3RoaXMub3JpZ2luLCBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwYXJhbS5sbmcsIHBhcmFtLmxhdCwgX3RoaXMuYWN0aXZlTW9kZWxQYXJhbS5hbHQgLSAxKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgICAgIF90aGlzLnJheVggPSBuZXcgQ2VzaXVtLlJheShfdGhpcy5vcmlnaW4sIGRpcmVjdGlvblZlY3RvclgzKVxyXG4gICAgICAgICAgICBfdGhpcy5yYXlZID0gbmV3IENlc2l1bS5SYXkoX3RoaXMub3JpZ2luLCBkaXJlY3Rpb25WZWN0b3JZMylcclxuICAgICAgICAgICAgX3RoaXMucmF5WiA9IG5ldyBDZXNpdW0uUmF5KF90aGlzLm9yaWdpbiwgZGlyZWN0aW9uVmVjdG9yWjMpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMudXBkYXRlTW9kZWwoX3RoaXMuX3BhcmFtcy50eCwgX3RoaXMuX3BhcmFtcy50eSwgX3RoaXMuX3BhcmFtcy50eiwgX3RoaXMuX3BhcmFtcy5yeCwgX3RoaXMuX3BhcmFtcy5yeSwgX3RoaXMuX3BhcmFtcy5yeilcclxuICAgICAgICBfdGhpcy5hZ2FpbkFycm93KClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuTWFwRXZlbnQubW91c2VfbGVmdF9kb3duKChldmVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIGxldCBjYW52YXNDb29yZGluYXRlcyA9IHZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHRoaXMub3JpZ2luKVxyXG4gICAgICBjb29yZGluYXRlc0RpZmZlci54ID0gZXZlbnQucG9zaXRpb24ueCAtIE1hdGguZmxvb3IoY2FudmFzQ29vcmRpbmF0ZXMueClcclxuICAgICAgY29vcmRpbmF0ZXNEaWZmZXIueSA9IGV2ZW50LnBvc2l0aW9uLnkgLSBNYXRoLmZsb29yKGNhbnZhc0Nvb3JkaW5hdGVzLnkpXHJcbiAgICAgIGxldCBwaWNrZWRPYmplY3RBcnJheSA9IHZpZXdlci5zY2VuZS5kcmlsbFBpY2soZXZlbnQucG9zaXRpb24sIDEwKTtcclxuICAgICAgZm9yIChsZXQgaSA9IHBpY2tlZE9iamVjdEFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgbGV0IHBpY2tlZE9iamVjdCA9IHBpY2tlZE9iamVjdEFycmF5W2ldXHJcbiAgICAgICAgaWYgKHBpY2tlZE9iamVjdCAmJiBwaWNrZWRPYmplY3QucHJpbWl0aXZlICYmIHBpY2tlZE9iamVjdC5wcmltaXRpdmUuX25hbWUpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5hY3RpdmVBeGlzKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmFjdGl2ZUF4aXMgPSBudWxsXHJcbiAgICAgICAgICAgIF90aGlzLmFjdGl2ZU1vZGVsUGFyYW0gPSBudWxsXHJcbiAgICAgICAgICAgIF90aGlzLmNvbnRyb2xsZXJDYWxsQmFja1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocGlja2VkT2JqZWN0LnByaW1pdGl2ZS5fbmFtZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeEF4aXMnOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeUF4aXMnOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekF4aXMnOlxyXG4gICAgICAgICAgICAgICAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVSb3RhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2ZUF4aXMgPSBwaWNrZWRPYmplY3QucHJpbWl0aXZlXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtID0gX3RoaXMuaW5pdFBhcmFtKClcclxuICAgICAgICAgICAgICAgIHBpY2tlZE9iamVjdC5wcmltaXRpdmUuYXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKENlc2l1bS5NYXRlcmlhbC5Qb2x5bGluZUFycm93VHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuWUVMTE9XLFxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5NYXBFdmVudC5tb3VzZV9sZWZ0X3VwKChldmVudCkgPT4ge1xyXG4gICAgICB2aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVJvdGF0ZSA9IHRydWU7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3RoaXMuY29vcmRBcnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzd2l0Y2ggKF90aGlzLmNvb3JkQXJyb3dzW2ldLl9uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3hBeGlzJzpcclxuICAgICAgICAgICAgX3RoaXMuY29vcmRBcnJvd3NbaV0uYXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoQ2VzaXVtLk1hdGVyaWFsLlBvbHlsaW5lQXJyb3dUeXBlLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLlJFRCxcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZSxcclxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZToge1xyXG4gICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkZXB0aEZ1bmN0aW9uOiBDZXNpdW0uRGVwdGhGdW5jdGlvbi5BTFdBWVMsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3lBeGlzJzpcclxuICAgICAgICAgICAgX3RoaXMuY29vcmRBcnJvd3NbaV0uYXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoQ2VzaXVtLk1hdGVyaWFsLlBvbHlsaW5lQXJyb3dUeXBlLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLkxJTUUsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGU6IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoVGVzdDoge1xyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF96QXhpcyc6XHJcbiAgICAgICAgICAgIF90aGlzLmNvb3JkQXJyb3dzW2ldLmFwcGVhcmFuY2UgPSBuZXcgQ2VzaXVtLlBvbHlsaW5lTWF0ZXJpYWxBcHBlYXJhbmNlKHtcclxuICAgICAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKENlc2l1bS5NYXRlcmlhbC5Qb2x5bGluZUFycm93VHlwZSwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5CTFVFLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxyXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICBkZXB0aFRlc3Q6IHtcclxuICAgICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlcHRoRnVuY3Rpb246IENlc2l1bS5EZXB0aEZ1bmN0aW9uLkFMV0FZUyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChfdGhpcy5hY3RpdmVBeGlzKSB7XHJcbiAgICAgICAgX3RoaXMuYWN0aXZlQXhpcyA9IG51bGxcclxuICAgICAgICBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtID0gbnVsbFxyXG4gICAgICAgIF90aGlzLmNvbnRyb2xsZXJDYWxsQmFja1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g6YeN5paw6K6h566X566t5aS05L2N572uXHJcbiAgYWdhaW5BcnJvdygpIHtcclxuICAgIGxldCBfdGhhdCA9ICh0aGlzLl90aGF0IHx8IHRoaXMpXHJcbiAgICBpZiAoIV90aGF0Lm9yaWdpbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIF90aGF0LmluaXRQYXJhbSgpXHJcbiAgICBfdGhhdC5vcmlnaW4gPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoX3RoYXQuX3BhcmFtcy50eCwgX3RoYXQuX3BhcmFtcy50eSwgX3RoYXQuX3BhcmFtcy50eilcclxuICAgIGxldCB2aWV3ZXIgPSBfdGhhdC52aXdlclxyXG4gICAgLy8g6I635Y+W55u45py655qE5L2N572uXHJcbiAgICB2YXIgY2FtZXJhUG9zaXRpb24gPSB2aWV3ZXIuY2FtZXJhLnBvc2l0aW9uO1xyXG4gICAgLy8g6K6h566X55u45py65LiO55uu5qCH5Z2Q5qCH5LmL6Ze055qE6Led56a7XHJcbiAgICB2YXIgZGlzdGFuY2UgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShjYW1lcmFQb3NpdGlvbiwgX3RoYXQub3JpZ2luKTtcclxuICAgIGxldCBzY2FsZSA9IGRpc3RhbmNlIC8gMTVcclxuICAgIGNvbnN0IG1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKF90aGF0Lm9yaWdpbilcclxuXHJcbiAgICBsZXQgcHJpbWl0aXZlcyA9IF90aGF0LmNvb3JkQXJyb3dzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3dpdGNoIChwcmltaXRpdmVzW2ldLl9uYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF94QXhpcyc6XHJcbiAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95QXhpcyc6XHJcbiAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF96QXhpcyc6XHJcbiAgICAgICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUobWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoc2NhbGUsIHNjYWxlLCBzY2FsZSksIHByaW1pdGl2ZXNbaV0ubW9kZWxNYXRyaXgpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+mHjeaWsOiuoeeul+WchlxyXG4gIGFnYWluQ2lyY2xlKCkge1xyXG4gICAgbGV0IF90aGF0ID0gKHRoaXMuX3RoYXQgfHwgdGhpcylcclxuICAgIGlmICghX3RoYXQub3JpZ2luKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgX3RoYXQuaW5pdFBhcmFtKClcclxuICAgIF90aGF0Lm9yaWdpbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdGhhdC5fcGFyYW1zLnR4LCBfdGhhdC5fcGFyYW1zLnR5LCBfdGhhdC5fcGFyYW1zLnR6KVxyXG4gICAgbGV0IHZpZXdlciA9IF90aGF0LnZpd2VyXHJcbiAgICAvLyDojrflj5bnm7jmnLrnmoTkvY3nva5cclxuICAgIHZhciBjYW1lcmFQb3NpdGlvbiA9IHZpZXdlci5jYW1lcmEucG9zaXRpb247XHJcbiAgICAvLyDorqHnrpfnm7jmnLrkuI7nm67moIflnZDmoIfkuYvpl7TnmoTot53nprtcclxuICAgIHZhciBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKGNhbWVyYVBvc2l0aW9uLCBfdGhhdC5vcmlnaW4pO1xyXG4gICAgbGV0IHJhZGl1cyA9IGRpc3RhbmNlIC8gMTVcclxuICAgIGNvbnN0IG1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKF90aGF0Lm9yaWdpbilcclxuICAgIGxldCBwcmltaXRpdmVzID0gX3RoYXQuY29vcmRDaXJjbGVzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gX3RoYXQudml3ZXIuc2NlbmUucHJpbWl0aXZlcy5sb3dlclRvQm90dG9tKHByaW1pdGl2ZXNbaV0pXHJcbiAgICAgIHN3aXRjaCAocHJpbWl0aXZlc1tpXS5fbmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekNpcmNsZSc6XHJcbiAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95Q2lyY2xlJzpcclxuICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3hDaXJjbGUnOlxyXG4gICAgICAgICAgbGV0IHNjYWxlID0gcmFkaXVzIC8gMjBcclxuICAgICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhzY2FsZSwgc2NhbGUsIHNjYWxlKSwgcHJpbWl0aXZlc1tpXS5tb2RlbE1hdHJpeClcclxuICAgICAgICAgIHByaW1pdGl2ZXNbaV0uX3JhZGl1cyA9IHJhZGl1c1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5byA5aeL5peL6L2s57yW6L6RXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdFJ0YXRpb24oKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5hY3RpdmVTdGF0ZSA9ICdydGF0aW9uJ1xyXG4gICAgdGhpcy5NYXBFdmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmluaXRQYXJhbSgpXHJcbiAgICB0aGlzLm9yaWdpbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBhcmFtLmxuZywgcGFyYW0ubGF0LCBwYXJhbS5hbHQpXHJcbiAgICB0aGlzLmNyZWF0ZUNpcmNsZShcclxuICAgICAgcGFyYW0ubG5nLFxyXG4gICAgICBwYXJhbS5sYXQsXHJcbiAgICAgIHBhcmFtLmFsdCxcclxuICAgICAgMjBcclxuICAgIClcclxuICAgIC8vIOebkeWQrOebuOacuuenu+WKqFxyXG4gICAgdGhpcy52aXdlci5jYW1lcmEucGVyY2VudGFnZUNoYW5nZWQgPSAwLjAwMVxyXG4gICAgdGhpcy52aXdlci5jYW1lcmEuY2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKHRoaXMuYWdhaW5DaXJjbGUsIHsgX3RoYXQ6IHRoaXMgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVDaXJjbGUobG5nLCBsYXQsIGhlaWdodCwgcmFkaXVzKSB7XHJcbiAgICBsZXQgX3RoYXQgPSAodGhpcy5fdGhhdCB8fCB0aGlzKVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudml3ZXJcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDM2MDsgaSArPSAzKSB7XHJcbiAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKENlc2l1bS5NYXRoLnRvUmFkaWFucyhpKSlcclxuICAgICAgY29uc3QgY29zID0gTWF0aC5jb3MoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGkpKVxyXG4gICAgICBjb25zdCB4ID0gcmFkaXVzICogY29zXHJcbiAgICAgIGNvbnN0IHkgPSByYWRpdXMgKiBzaW5cclxuICAgICAgcG9zaXRpb24ucHVzaChuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoeCwgeSwgMCkpXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShcclxuICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBoZWlnaHQpXHJcbiAgICApXHJcbiAgICAvLyDojrflj5bnm7jmnLrnmoTkvY3nva5cclxuICAgIHZhciBjYW1lcmFQb3NpdGlvbiA9IHZpZXdlci5jYW1lcmEucG9zaXRpb247XHJcbiAgICAvLyDorqHnrpfnm7jmnLrkuI7nm67moIflnZDmoIfkuYvpl7TnmoTot53nprtcclxuICAgIHZhciBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKGNhbWVyYVBvc2l0aW9uLCB0aGlzLm9yaWdpbik7XHJcbiAgICBsZXQgbmV3UmFkaXVzID0gZGlzdGFuY2UgLyAxNVxyXG4gICAgbGV0IHNjYWxlID0gbmV3UmFkaXVzIC8gcmFkaXVzXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUobWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoc2NhbGUsIHNjYWxlLCBzY2FsZSksIG1hdHJpeClcclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KFxyXG4gICAgLy8gICBtYXRyaXgsXHJcbiAgICAvLyAgIHgsXHJcbiAgICAvLyAgIG1hdHJpeFxyXG4gICAgLy8gKVxyXG4gICAgLy/nu5Va6L20XHJcbiAgICBjb25zdCBheGlzU3BoZXJlWiA9IGF3YWl0IHRoaXMuY3JlYXRlQXhpc1NwaGVyZShcclxuICAgICAgJ21vZGVsX2VkaXRfekNpcmNsZScsXHJcbiAgICAgIHBvc2l0aW9uLFxyXG4gICAgICBtYXRyaXgsXHJcbiAgICAgIENlc2l1bS5Db2xvci5SRUQsXHJcbiAgICAgIG5ld1JhZGl1c1xyXG4gICAgKVxyXG4gICAgdmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKGF4aXNTcGhlcmVaKVxyXG5cclxuICAgIC8v57uVWeWRqFxyXG4gICAgY29uc3QgYXhpc1NwaGVyZVkgPSBhd2FpdCB0aGlzLmNyZWF0ZUF4aXNTcGhlcmUoXHJcbiAgICAgICdtb2RlbF9lZGl0X3lDaXJjbGUnLFxyXG4gICAgICBwb3NpdGlvbixcclxuICAgICAgbWF0cml4LFxyXG4gICAgICBDZXNpdW0uQ29sb3IuQkxVRSxcclxuICAgICAgbmV3UmFkaXVzXHJcbiAgICApXHJcbiAgICB2aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoYXhpc1NwaGVyZVkpXHJcbiAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKENlc2l1bS5NYXRoLnRvUmFkaWFucyg5MCkpXHJcbiAgICBsZXQgcm90YXRpb25ZID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obXkpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShcclxuICAgICAgYXhpc1NwaGVyZVkuZ2VvbWV0cnlJbnN0YW5jZXMubW9kZWxNYXRyaXgsXHJcbiAgICAgIHJvdGF0aW9uWSxcclxuICAgICAgYXhpc1NwaGVyZVkuZ2VvbWV0cnlJbnN0YW5jZXMubW9kZWxNYXRyaXhcclxuICAgIClcclxuXHJcbiAgICAvL+e7lVjlkahcclxuICAgIGNvbnN0IGF4aXNTcGhlcmVYID0gYXdhaXQgdGhpcy5jcmVhdGVBeGlzU3BoZXJlKFxyXG4gICAgICAnbW9kZWxfZWRpdF94Q2lyY2xlJyxcclxuICAgICAgcG9zaXRpb24sXHJcbiAgICAgIG1hdHJpeCxcclxuICAgICAgQ2VzaXVtLkNvbG9yLkxJTUUsXHJcbiAgICAgIG5ld1JhZGl1c1xyXG4gICAgKVxyXG4gICAgdmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKGF4aXNTcGhlcmVYKVxyXG4gICAgbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChDZXNpdW0uTWF0aC50b1JhZGlhbnMoOTApKVxyXG4gICAgbGV0IHJvdGF0aW9uWCA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG14KVxyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkoXHJcbiAgICAgIGF4aXNTcGhlcmVYLmdlb21ldHJ5SW5zdGFuY2VzLm1vZGVsTWF0cml4LFxyXG4gICAgICByb3RhdGlvblgsXHJcbiAgICAgIGF4aXNTcGhlcmVYLmdlb21ldHJ5SW5zdGFuY2VzLm1vZGVsTWF0cml4XHJcbiAgICApXHJcblxyXG4gICAgbGV0IGxhc3RQaWNrVGltZSA9IDA7XHJcbiAgICBsZXQgdGltZW91dEV2ZW50XHJcbiAgICB0aGlzLk1hcEV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIG1vdmVFdmVudChtb3ZlbWVudClcclxuICAgIH0pXHJcblxyXG4gICAgZnVuY3Rpb24gbW92ZUV2ZW50KG1vdmVtZW50KSB7XHJcbiAgICAgIGlmICghX3RoaXMuYWN0aXZlQ2lyY2xlKSB7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobm93IC0gbGFzdFBpY2tUaW1lIDwgMTAwKSB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEV2ZW50KVxyXG4gICAgICAgICAgdGltZW91dEV2ZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vdmVFdmVudChtb3ZlbWVudClcclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRFdmVudClcclxuICAgICAgICBsYXN0UGlja1RpbWUgPSBub3c7XHJcbiAgICAgICAgbGV0IHByaW1pdGl2ZXMgPSBfdGhhdC5jb29yZENpcmNsZXNcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChwcmltaXRpdmVzW2ldLmdldEdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gcHJpbWl0aXZlc1tpXS5nZXRHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlcyhwcmltaXRpdmVzW2ldLl9uYW1lKTtcclxuICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVzW2ldLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF96Q2lyY2xlJzpcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sb3IgPSBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihDZXNpdW0uQ29sb3IuUkVEKS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95Q2lyY2xlJzpcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sb3IgPSBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihDZXNpdW0uQ29sb3IuQkxVRSkudmFsdWVcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeENpcmNsZSc6XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmNvbG9yID0gQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoQ2VzaXVtLkNvbG9yLkxJTUUpLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwaWNrZWRPYmplY3RBcnJheSA9IHZpZXdlci5zY2VuZS5kcmlsbFBpY2sobW92ZW1lbnQuZW5kUG9zaXRpb24sIDEwKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgcGljayA9IHBpY2tlZE9iamVjdEFycmF5W2ldXHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLnByaW1pdGl2ZSAmJiBwaWNrLmlkKSB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gcGljay5wcmltaXRpdmUuZ2V0R2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZXMocGljay5pZCk7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocGljay5wcmltaXRpdmUuX25hbWUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3pDaXJjbGUnOlxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xvciA9IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKENlc2l1bS5Db2xvci5ZRUxMT1cpLnZhbHVlXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95Q2lyY2xlJzpcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sb3IgPSBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihDZXNpdW0uQ29sb3IuWUVMTE9XKS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeENpcmNsZSc6XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmNvbG9yID0gQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoQ2VzaXVtLkNvbG9yLllFTExPVykudmFsdWVcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjEgPSBDZXNpdW0uU2NlbmVUcmFuc2Zvcm1zLndnczg0VG9XaW5kb3dDb29yZGluYXRlcyh2aWV3ZXIuc2NlbmUsIF90aGF0LmNpY2xrUG9zaXRpb24pO1xyXG5cclxuICAgICAgICBsZXQgX3J4ID0gMCxcclxuICAgICAgICAgIF9yeSA9IDAsXHJcbiAgICAgICAgICBfcnogPSAwIC8veHl65pa55ZCR55qE5peL6L2s6YeP77yI5bqm77yJXHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbjEpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBfeVBpeCA9IG1vdmVtZW50LnN0YXJ0UG9zaXRpb24ueSAtIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICBjb25zdCBfeFBpeCA9IG1vdmVtZW50LnN0YXJ0UG9zaXRpb24ueCAtIG1vdmVtZW50LmVuZFBvc2l0aW9uLnhcclxuICAgICAgICBzd2l0Y2ggKF90aGlzLmFjdGl2ZUNpcmNsZS5fbmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF94Q2lyY2xlJzpcclxuICAgICAgICAgICAgX3J5ID0gMSAqIF94UGl4XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF95Q2lyY2xlJzpcclxuICAgICAgICAgICAgX3J4ID0gMSAqIF95UGl4XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbW9kZWxfZWRpdF96Q2lyY2xlJzpcclxuICAgICAgICAgICAgX3J6ID0gMSAqIF94UGl4XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMuX3BhcmFtcy5yeCAtPSBfcnhcclxuICAgICAgICBpZiAoX3RoaXMuX3BhcmFtcy5yeCA+IDM2MCkge1xyXG4gICAgICAgICAgX3RoaXMuX3BhcmFtcy5yeCA9IDFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLl9wYXJhbXMucnggPCAwKSB7XHJcbiAgICAgICAgICBfdGhpcy5fcGFyYW1zLnJ4ID0gMzYwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBteCA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblgoXHJcbiAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3RoaXMuX3BhcmFtcy5yeClcclxuICAgICAgICApXHJcbiAgICAgICAgX3RoaXMuX3BhcmFtcy5yeSAtPSBfcnlcclxuICAgICAgICBpZiAoX3RoaXMuX3BhcmFtcy5yeSA+IDM2MCkge1xyXG4gICAgICAgICAgX3RoaXMuX3BhcmFtcy5yeSA9IDFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLl9wYXJhbXMucnkgPCAwKSB7XHJcbiAgICAgICAgICBfdGhpcy5fcGFyYW1zLnJ5ID0gMzYwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLl9wYXJhbXMucnogLT0gX3J6XHJcbiAgICAgICAgaWYgKF90aGlzLl9wYXJhbXMucnogPiAzNjApIHtcclxuICAgICAgICAgIF90aGlzLl9wYXJhbXMucnogPSAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfdGhpcy5fcGFyYW1zLnJ6IDwgMCkge1xyXG4gICAgICAgICAgX3RoaXMuX3BhcmFtcy5yeiA9IDM2MFxyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcy51cGRhdGVNb2RlbChfdGhpcy5fcGFyYW1zLnR4LCBfdGhpcy5fcGFyYW1zLnR5LCBfdGhpcy5fcGFyYW1zLnR6LCBfdGhpcy5fcGFyYW1zLnJ4LCBfdGhpcy5fcGFyYW1zLnJ5LCBfdGhpcy5fcGFyYW1zLnJ6KVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuTWFwRXZlbnQubW91c2VfbGVmdF9kb3duKChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgY2FydGVzaWFuID0gdmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihldmVudC5wb3NpdGlvbik7XHJcbiAgICAgIF90aGF0LmNpY2xrUG9zaXRpb24gPSBjYXJ0ZXNpYW5cclxuICAgICAgbGV0IHBpY2tlZE9iamVjdEFycmF5ID0gdmlld2VyLnNjZW5lLmRyaWxsUGljayhldmVudC5wb3NpdGlvbiwgMTApO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpY2tlZE9iamVjdCA9IHBpY2tlZE9iamVjdEFycmF5W2ldXHJcbiAgICAgICAgaWYgKHBpY2tlZE9iamVjdCAmJiBwaWNrZWRPYmplY3QucHJpbWl0aXZlICYmIHBpY2tlZE9iamVjdC5pZCkge1xyXG4gICAgICAgICAgc3dpdGNoIChwaWNrZWRPYmplY3QucHJpbWl0aXZlLl9uYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeENpcmNsZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeUNpcmNsZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekNpcmNsZSc6XHJcbiAgICAgICAgICAgICAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVSb3RhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHBpY2tlZE9iamVjdC5wcmltaXRpdmUuZ2V0R2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZXMocGlja2VkT2JqZWN0LnByaW1pdGl2ZS5fbmFtZSk7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xvciA9IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKENlc2l1bS5Db2xvci5ZRUxMT1cpLnZhbHVlXHJcbiAgICAgICAgICAgICAgX3RoaXMuYWN0aXZlQ2lyY2xlID0gcGlja2VkT2JqZWN0LnByaW1pdGl2ZVxyXG4gICAgICAgICAgICAgIF90aGlzLmFjdGl2ZU1vZGVsUGFyYW0gPSBfdGhpcy5pbml0UGFyYW0oKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgX3RoaXMuYWN0aXZlQ2lyY2xlID0gbnVsbFxyXG4gICAgICBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtID0gbnVsbFxyXG4gICAgICB2aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVJvdGF0ZSA9IHRydWVcclxuICAgIH0pXHJcbiAgICB0aGlzLk1hcEV2ZW50Lm1vdXNlX2xlZnRfdXAoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlUm90YXRlID0gdHJ1ZTtcclxuICAgICAgbGV0IHByaW1pdGl2ZXMgPSBfdGhpcy5jb29yZENpcmNsZXNcclxuICAgICAgX3RoaXMuYWN0aXZlQ2lyY2xlID0gbnVsbFxyXG4gICAgICBfdGhpcy5hY3RpdmVNb2RlbFBhcmFtID0gbnVsbFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAocHJpbWl0aXZlc1tpXS5nZXRHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSBwcmltaXRpdmVzW2ldLmdldEdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGVzKHByaW1pdGl2ZXNbaV0uX25hbWUpO1xyXG4gICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVzW2ldLl9uYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfekNpcmNsZSc6XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xvciA9IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKENlc2l1bS5Db2xvci5SRUQpLnZhbHVlXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vZGVsX2VkaXRfeUNpcmNsZSc6XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xvciA9IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKENlc2l1bS5Db2xvci5CTFVFKS52YWx1ZVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtb2RlbF9lZGl0X3hDaXJjbGUnOlxyXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sb3IgPSBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihDZXNpdW0uQ29sb3IuTElNRSkudmFsdWVcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL+abtOaWsOaooeWei+S9jee9rlxyXG4gIHVwZGF0ZU1vZGVsKF90eCwgX3R5LCBfdHosIF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDApIHtcclxuICAgIHRoaXMuX3BhcmFtcy50eCA9IF90eCA9IHBhcnNlRmxvYXQocGFyc2VGbG9hdChfdHgpLnRvRml4ZWQoOCkpXHJcbiAgICB0aGlzLl9wYXJhbXMudHkgPSBfdHkgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoX3R5KS50b0ZpeGVkKDgpKVxyXG4gICAgdGhpcy5fcGFyYW1zLnR6ID0gX3R6ID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KF90eikudG9GaXhlZCgyKSlcclxuICAgIHRoaXMuX3BhcmFtcy5yeCA9IF9yeCA9IHBhcnNlRmxvYXQoX3J4KVxyXG4gICAgdGhpcy5fcGFyYW1zLnJ5ID0gX3J5ID0gcGFyc2VGbG9hdChfcnkpXHJcbiAgICB0aGlzLl9wYXJhbXMucnogPSBfcnogPSBwYXJzZUZsb2F0KF9yeilcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSBfdHhcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSBfdHlcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBfdHpcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUgPSB7IHg6IF9yeCwgeTogX3J5LCB6OiBfcnogfVxyXG4gICAgLy8gdGhpcy5tb2RlbC5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdHgsIF90eSwgX3R6KVxyXG4gICAgLy8gdGhpcy5tb2RlbC5yb3RhdGUgPSB7IHg6IF9yeCwgeTogX3J5LCB6OiBfcnogfVxyXG4gICAgLy8gbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChcclxuICAgIC8vICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeClcclxuICAgIC8vIClcclxuICAgIC8vIGxldCBteSA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblkoXHJcbiAgICAvLyAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcnkpXHJcbiAgICAvLyApXHJcbiAgICAvLyBsZXQgbXogPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25aKFxyXG4gICAgLy8gICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J6KVxyXG4gICAgLy8gKVxyXG4gICAgLy8gLy8g5bmz56e7XHJcbiAgICAvLyBsZXQgbSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdHgsIF90eSwgX3R6KSlcclxuICAgIC8vIC8vIOaXi+i9rFxyXG4gICAgLy8gbGV0IHJvdGF0aW9uWCA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG14KVxyXG4gICAgLy8gbGV0IHJvdGF0aW9uWSA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG15KVxyXG4gICAgLy8gbGV0IHJvdGF0aW9uWiA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG16KVxyXG4gICAgLy8gbGV0IG9yaWdpbmFsTWF0cml4ID0gbmV3IENlc2l1bS5NYXRyaXg0KClcclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG0sIHJvdGF0aW9uWCwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICAvLyBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25ZLCBvcmlnaW5hbE1hdHJpeClcclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblosIHRoaXMubW9kZWwubW9kZWxNYXRyaXgpXHJcbiAgICB0aGlzLmNvbnRyb2xsZXJDYWxsQmFja1xyXG4gIH1cclxuXHJcbiAgc2V0IGNvbnRyb2xsZXJDYWxsQmFjayhjYWxsYmFjaykge1xyXG4gICAgdGhpcy5fY29udHJvbGxlckNhbGxCYWNrID0gY2FsbGJhY2tcclxuICB9XHJcbiAgZ2V0IGNvbnRyb2xsZXJDYWxsQmFjaygpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xsZXJDYWxsQmFjayAmJiB0aGlzLl9jb250cm9sbGVyQ2FsbEJhY2sodGhpcy5vcHRpb25zLCB0aGlzLmFjdGl2ZUF4aXMgPyBmYWxzZSA6IHRydWUpXHJcbiAgfVxyXG5cclxuICBjcmVhdGVBeGlzQXJyb3cobmFtZSwgcG9zaXRpb24sIG1hdHJpeCwgY29sb3IpIHtcclxuICAgIGxldCByZXN1bHQgPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZSh7XHJcbiAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgIGlkOiBuYW1lLFxyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ2VzaXVtLlBvbHlsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBwb3NpdGlvbixcclxuICAgICAgICAgIHdpZHRoOiAyMFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihjb2xvcilcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICByZWxlYXNlR2VvbWV0cnlJbnN0YW5jZXM6IGZhbHNlLFxyXG4gICAgICBhcHBlYXJhbmNlOiBuZXcgQ2VzaXVtLlBvbHlsaW5lTWF0ZXJpYWxBcHBlYXJhbmNlKHtcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKENlc2l1bS5NYXRlcmlhbC5Qb2x5bGluZUFycm93VHlwZSwge1xyXG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxyXG4gICAgICAgIHJlbmRlclN0YXRlOiB7XHJcbiAgICAgICAgICBkZXB0aFRlc3Q6IHtcclxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgIGRlcHRoRnVuY3Rpb246IENlc2l1bS5EZXB0aEZ1bmN0aW9uLkFMV0FZUyxcclxuICAgICAgICB9LFxyXG4gICAgICB9KSxcclxuICAgICAgbW9kZWxNYXRyaXg6IG1hdHJpeFxyXG4gICAgfSlcclxuICAgIHJlc3VsdC5fbmFtZSA9IG5hbWVcclxuICAgIHRoaXMuY29vcmRBcnJvd3MucHVzaChyZXN1bHQpXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG4gIGNyZWF0ZUF4aXNDaXJjdWxhcihuYW1lLCBwb3NpdGlvbiwgbWF0cml4LCBjb2xvcikge1xyXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBDZXNpdW0uUHJpbWl0aXZlKHtcclxuICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDZXNpdW0uRWxsaXBzZUdlb21ldHJ5KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjZW50ZXI6IHsgeDogMSwgeTogMSwgejogMSB9LFxyXG4gICAgICAgICAgICBzZW1pTWlub3JBeGlzOiA1MDAwMDAuMCxcclxuICAgICAgICAgICAgc2VtaU1ham9yQXhpczogMTAwMDAwMC4wLFxyXG4gICAgICAgICAgICByb3RhdGlvbjogQ2VzaXVtLk1hdGguUElfT1ZFUl9GT1VSLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhGb3JtYXQ6IENlc2l1bS5WZXJ0ZXhGb3JtYXQuUE9TSVRJT05fQU5EX1NUXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9KSxcclxuICAgICAgcmVsZWFzZUdlb21ldHJ5SW5zdGFuY2VzOiBmYWxzZSxcclxuICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5FbGxpcHNvaWRTdXJmYWNlQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgZmFicmljOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdDb2xvcicsXHJcbiAgICAgICAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5ZRUxMT1dcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pLFxyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0cml4XHJcbiAgICB9KVxyXG4gICAgcmVzdWx0Ll9uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5jb29yZEFycm93cy5wdXNoKHJlc3VsdClcclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcblxyXG4gIGNyZWF0ZUF4aXNTcGhlcmUobmFtZSwgcG9zaXRpb24sIG1hdHJpeCwgY29sb3IsIHJhZGl1cykge1xyXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBDZXNpdW0uUHJpbWl0aXZlKHtcclxuICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgaWQ6IG5hbWUsXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDZXNpdW0uUG9seWxpbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICBwb3NpdGlvbnM6IHBvc2l0aW9uLFxyXG4gICAgICAgICAgd2lkdGg6IDVcclxuICAgICAgICB9KSxcclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoY29sb3IpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgcmVsZWFzZUdlb21ldHJ5SW5zdGFuY2VzOiBmYWxzZSxcclxuICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5Qb2x5bGluZUNvbG9yQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXHJcbiAgICAgICAgcmVuZGVyU3RhdGU6IHtcclxuICAgICAgICAgIGRlcHRoVGVzdDoge1xyXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgZGVwdGhGdW5jdGlvbjogQ2VzaXVtLkRlcHRoRnVuY3Rpb24uQUxXQVlTLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pLFxyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0cml4XHJcbiAgICB9KVxyXG4gICAgcmVzdWx0Ll9yYWRpdXMgPSByYWRpdXNcclxuICAgIHJlc3VsdC5fbmFtZSA9IG5hbWVcclxuICAgIHRoaXMuY29vcmRDaXJjbGVzLnB1c2gocmVzdWx0KVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29vcmRBcnJvd3MoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29vcmRBcnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy52aXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmNvb3JkQXJyb3dzW2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb29yZEFycm93cyA9IFtdXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb29yZENpcmNsZSgpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb29yZENpcmNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy52aXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmNvb3JkQ2lyY2xlc1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMuY29vcmRDaXJjbGVzID0gW11cclxuICB9XHJcblxyXG4gIHJlbW92ZUFsbFRvb2xzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVDb29yZEFycm93cygpXHJcbiAgICB0aGlzLnJlbW92ZUNvb3JkQ2lyY2xlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWFs+mXrS/ms6jplIBcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZW1vdmVBbGxUb29scygpXHJcbiAgICB0aGlzLmFjdGl2ZUF4aXMgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuTWFwRXZlbnQgJiYgdGhpcy5NYXBFdmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudml3ZXIuY2FtZXJhLmNoYW5nZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmFnYWluQXJyb3cpXHJcbiAgICB0aGlzLnZpd2VyLmNhbWVyYS5jaGFuZ2VkLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5hZ2FpbkNpcmNsZSlcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZVN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3RhdGVcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYWdhaW5BcnJvdygpXHJcbiAgICB0aGlzLmFnYWluQ2lyY2xlKClcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQ29udHJvbGxlck9iamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQXVGQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaldBO0FBQUE7QUFBQTtBQUFBO0FBbVdBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFmQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBO0FBNkVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWhMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQU9BO0FBTkE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBT0E7QUFOQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFPQTtBQU5BO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQXdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQW5PQTtBQUFBO0FBQUE7QUFBQTtBQXFPQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Controller/index.js\n"); /***/ }), /***/ "./src/DZ/XJ/BatchLoadObjModel/index.js": /*!**********************************************!*\ !*** ./src/DZ/XJ/BatchLoadObjModel/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BatchLoadObjModel; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Obj_Base_LoadObjModel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../Obj/Base/LoadObjModel */ \"./src/Obj/Base/LoadObjModel/index.js\");\n/* harmony import */ var _LoadObjModel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../LoadObjModel */ \"./src/DZ/XJ/LoadObjModel/index.js\");\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\nvar BatchLoadObjModel = /*#__PURE__*/function () {\n function BatchLoadObjModel(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, BatchLoadObjModel);\n this.sdk = sdk;\n this.options = _objectSpread({}, options);\n this.options.show = options.show || options.show === false ? options.show : true;\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getHost\"])();\n this.objModelObject = [];\n this._loaded = false;\n this._loadEvent = void 0;\n this.on();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(BatchLoadObjModel, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n var _this = this;\n if (typeof v === \"boolean\") {\n this.options.show = v;\n var _loop = function _loop(i) {\n _this.objModelObject[i].load(function () {\n _this.objModelObject[i].show = v;\n });\n };\n for (var i = 0; i < this.objModelObject.length; i++) {\n _loop(i);\n }\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"on\",\n value: function () {\n var _on = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n var url, res, i, options, object;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n url = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) url = this.options.host + '/api/v1/source/obj';else url = this.options.host + '/yjearth4.0/api/v1/source/obj';\n if (this.options.code) {\n url = url + '?code=' + this.options.code;\n }\n _context.next = 5;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getToken\"])()\n }\n });\n case 5:\n res = _context.sent;\n if (!res.ok) {\n _context.next = 15;\n break;\n }\n this.objModelObject = [];\n _context.next = 10;\n return res.json();\n case 10:\n this.list = _context.sent.data;\n if (this.options.count) {\n this.list = this.list.splice(0, this.options.count);\n }\n for (i = 0; i < this.list.length; i++) {\n options = JSON.parse(this.list[i].detail);\n options.host = this.options.host;\n if (this.options.show || this.options.show === false) {\n options.show = this.options.show;\n }\n object = new _LoadObjModel__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this.sdk, options);\n this.objModelObject.push(object);\n }\n this._loaded = true;\n if (this._loadEvent) {\n this._loadEvent();\n }\n case 15:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function on() {\n return _on.apply(this, arguments);\n }\n return on;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n var _this2 = this;\n var _loop2 = function _loop2(i) {\n _this2.objModelObject[i].load(function () {\n _this2.objModelObject[i].remove();\n });\n };\n for (var i = 0; i < this.objModelObject.length; i++) {\n _loop2(i);\n }\n }\n }, {\n key: \"load\",\n value: function load(callback) {\n if (this._loaded) {\n callback();\n } else {\n this._loadEvent = callback;\n }\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRFovWEovQmF0Y2hMb2FkT2JqTW9kZWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRFovWEovQmF0Y2hMb2FkT2JqTW9kZWwvaW5kZXguanM/ZmUyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRIb3N0LCBnZXRUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9vblwiO1xyXG5pbXBvcnQgQmFzZUxvYWRPYmpNb2RlbCBmcm9tICcuLi8uLi8uLi9PYmovQmFzZS9Mb2FkT2JqTW9kZWwnXHJcbmltcG9ydCBMb2FkT2JqTW9kZWwgZnJvbSAnLi4vTG9hZE9iak1vZGVsJ1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXRjaExvYWRPYmpNb2RlbCB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMuc2RrID0gc2RrXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmhvc3QgPSB0aGlzLm9wdGlvbnMuaG9zdCB8fCBnZXRIb3N0KClcclxuICAgIHRoaXMub2JqTW9kZWxPYmplY3QgPSBbXVxyXG4gICAgdGhpcy5fbG9hZGVkID0gZmFsc2VcclxuICAgIHRoaXMuX2xvYWRFdmVudCA9IHZvaWQgMFxyXG4gICAgdGhpcy5vbigpXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIH1cclxuXHJcbiAgc2V0IHNob3codikge1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHZcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iak1vZGVsT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5vYmpNb2RlbE9iamVjdFtpXS5sb2FkKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub2JqTW9kZWxPYmplY3RbaV0uc2hvdyA9IHZcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb24oKSB7XHJcbiAgICBsZXQgdXJsID0gXCJcIlxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ob3N0LmVuZHNXaXRoKFwieWplYXJ0aDQuMFwiKSlcclxuICAgICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL2FwaS92MS9zb3VyY2Uvb2JqJ1xyXG4gICAgZWxzZVxyXG4gICAgICB1cmwgPSB0aGlzLm9wdGlvbnMuaG9zdCArICcveWplYXJ0aDQuMC9hcGkvdjEvc291cmNlL29iaidcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29kZSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyAnP2NvZGU9JyArIHRoaXMub3B0aW9ucy5jb2RlXHJcbiAgICB9XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgXCJ0b2tlblwiOiBnZXRUb2tlbigpLFxyXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGdldFRva2VuKCksXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHJlcy5vaykge1xyXG4gICAgICB0aGlzLm9iak1vZGVsT2JqZWN0ID0gW11cclxuICAgICAgdGhpcy5saXN0ID0gKGF3YWl0IHJlcy5qc29uKCkpLmRhdGE7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY291bnQpIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3Quc3BsaWNlKDAsIHRoaXMub3B0aW9ucy5jb3VudClcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gSlNPTi5wYXJzZSh0aGlzLmxpc3RbaV0uZGV0YWlsKVxyXG4gICAgICAgIG9wdGlvbnMuaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93IHx8IHRoaXMub3B0aW9ucy5zaG93ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgb3B0aW9ucy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9iamVjdCA9IG5ldyBMb2FkT2JqTW9kZWwodGhpcy5zZGssIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMub2JqTW9kZWxPYmplY3QucHVzaChvYmplY3QpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZVxyXG4gICAgICBpZiAodGhpcy5fbG9hZEV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZEV2ZW50KClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iak1vZGVsT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMub2JqTW9kZWxPYmplY3RbaV0ubG9hZCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vYmpNb2RlbE9iamVjdFtpXS5yZW1vdmUoKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZChjYWxsYmFjaykge1xyXG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gICAgICBjYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvYWRFdmVudCA9IGNhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXJDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/DZ/XJ/BatchLoadObjModel/index.js\n"); /***/ }), /***/ "./src/DZ/XJ/LoadObjModel/index.js": /*!*****************************************!*\ !*** ./src/DZ/XJ/LoadObjModel/index.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return LoadObjModel; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Obj_Base_LoadObjModel_AModelLoader__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Obj/Base/LoadObjModel/AModelLoader */ \"./src/Obj/Base/LoadObjModel/AModelLoader.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Obj_Base_LoadObjModel__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Obj/Base/LoadObjModel */ \"./src/Obj/Base/LoadObjModel/index.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\nvar LoadObjModel = /*#__PURE__*/function (_BaseLoadObjModel) {\n function LoadObjModel(sdk, options, CallBack) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, LoadObjModel);\n _this = _callSuper(this, LoadObjModel, [sdk, options, CallBack]);\n _this._loadEvent = void 0;\n _this._loaded = false;\n _this.options.objId = options.objId;\n _this.options.videoId = options.videoId;\n _this.options.videoType = options.videoType || 'flv';\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(LoadObjModel, _BaseLoadObjModel);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(LoadObjModel, [{\n key: \"addResource\",\n value: function () {\n var _addResource = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var that, xml, xmlString, parser, xmlDoc, position, crs, result, scene, origin, obj_modelMatrix, objLoader, obj;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n that = this;\n that.options.xmlURL = that.options.objUrl.replace('.obj', '.xml');\n if (!(that.options.xmlURL !== '')) {\n _context.next = 35;\n break;\n }\n _context.next = 5;\n return fetch(that.options.xmlURL);\n case 5:\n xml = _context.sent;\n if (!xml.ok) {\n _context.next = 33;\n break;\n }\n _context.next = 9;\n return xml.text();\n case 9:\n xmlString = _context.sent;\n parser = new DOMParser();\n xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // console.log('xmlDocxmlDocxmlDoc', xmlDoc)\n position = xmlDoc.getElementsByTagName('Position')[0].textContent.split(','); // const bbox = xmlDoc.getElementsByTagName('bbox')[0]\n crs = xmlDoc.getElementsByTagName('Crs')[0].textContent;\n result = that.convert([{\n x: position[0],\n y: position[1],\n z: position[2]\n }], crs, 'EPSG:4326');\n that.options.position = that.options.position || {\n lng: result.points[0].x,\n lat: result.points[0].y,\n alt: result.points[0].z\n };\n that.ControllerObject.position = that.options.position;\n scene = that.viwer.scene;\n origin = Cesium.Cartesian3.fromDegrees(that.options.position.lng, that.options.position.lat, that.options.position.alt);\n obj_modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(origin, new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(0.85), Cesium.Math.toRadians(0), Cesium.Math.toRadians(0)));\n objLoader = new _Obj_Base_LoadObjModel_AModelLoader__WEBPACK_IMPORTED_MODULE_8__[\"default\"](that.viwer.scene.context);\n _context.next = 23;\n return objLoader.Load(that.options.objUrl, that.options.videoId, that.options.host);\n case 23:\n obj = _context.sent;\n obj.modelMatrix = obj_modelMatrix;\n obj.show = that.options.show;\n obj.setFlvVideo(that.options.videoUrl);\n scene.primitives.add(obj);\n that.primitive = obj;\n that.controllerCallBack({\n rotate: {\n x: that.options.roll,\n y: -that.options.pitch,\n z: -that.options.heading\n },\n position: _objectSpread({}, that.options.position)\n });\n that.loaded = true;\n that._loaded = true;\n if (that._loadEvent) {\n that._loadEvent();\n }\n case 33:\n _context.next = 36;\n break;\n case 35:\n return _context.abrupt(\"return\");\n case 36:\n if (!(that.options.objUrl === '')) {\n _context.next = 38;\n break;\n }\n return _context.abrupt(\"return\");\n case 38:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function addResource() {\n return _addResource.apply(this, arguments);\n }\n return addResource;\n }()\n }, {\n key: \"requestResource\",\n value: function () {\n var _requestResource = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var that;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n that = this;\n if (that._loaded) {\n _context2.next = 12;\n break;\n }\n if (!that.options.objId) {\n _context2.next = 6;\n break;\n }\n _context2.next = 5;\n return that.requestObjResource();\n case 5:\n that.options.objUrl = _context2.sent;\n case 6:\n if (!that.options.videoId) {\n _context2.next = 10;\n break;\n }\n _context2.next = 9;\n return that.requestVideoResource();\n case 9:\n that.options.videoUrl = _context2.sent;\n case 10:\n _context2.next = 12;\n return that.addResource();\n case 12:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function requestResource() {\n return _requestResource.apply(this, arguments);\n }\n return requestResource;\n }()\n }, {\n key: \"requestObjResource\",\n value: function requestObjResource() {\n var host = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) host = this.options.host;else host = this.options.host + '/yjearth4.0';\n var url = host + '/obj/' + this.options.objId;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])()\n }\n }).then(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3(res) {\n var text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return res.text();\n case 2:\n text = _context3.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context3.next = 13;\n break;\n }\n if (!text.data.objPath.length) {\n _context3.next = 9;\n break;\n }\n return _context3.abrupt(\"return\", host + '/obj/wirte/file/' + text.data.objPath);\n case 9:\n console.warn('资源不存在');\n case 10:\n return _context3.abrupt(\"return\");\n case 13:\n console.warn(text.msg || text.message);\n return _context3.abrupt(\"return\");\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n }\n }, {\n key: \"requestVideoResource\",\n value: function requestVideoResource() {\n var host = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) host = this.options.host;else host = this.options.host + '/yjearth4.0';\n var url = host + '/videoFusion/' + this.options.videoId;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])()\n }\n }).then(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5(res) {\n var text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return res.text();\n case 2:\n text = _context5.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context5.next = 13;\n break;\n }\n if (!text.data.deviceCode.length) {\n _context5.next = 9;\n break;\n }\n return _context5.abrupt(\"return\", fetch(host + '/videoFusion/vide/stream', {\n method: 'post',\n body: JSON.stringify({\n type: 'flv',\n deviceCode: text.data.deviceCode\n }),\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])()\n }\n }).then(/*#__PURE__*/function () {\n var _ref3 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4(res2) {\n var text2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return res2.text();\n case 2:\n text2 = _context4.sent;\n text2 = JSON.parse(text2);\n if (![0, 200].includes(text2.code)) {\n _context4.next = 13;\n break;\n }\n if (!(text2.data.flv && text2.data.flv.length)) {\n _context4.next = 9;\n break;\n }\n return _context4.abrupt(\"return\", text2.data.flv);\n case 9:\n console.warn('地址不存在');\n case 10:\n return _context4.abrupt(\"return\");\n case 13:\n console.warn(text2.msg || text2.message);\n return _context4.abrupt(\"return\");\n case 15:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }()));\n case 9:\n console.warn('设备不存在');\n case 10:\n return _context5.abrupt(\"return\");\n case 13:\n console.warn(text.msg || text.message);\n return _context5.abrupt(\"return\");\n case 15:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n }\n }, {\n key: \"load\",\n value: function load(callback) {\n if (this._loaded) {\n callback();\n } else {\n this._loadEvent = callback;\n }\n }\n }]);\n}(_Obj_Base_LoadObjModel__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRFovWEovTG9hZE9iak1vZGVsL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0RaL1hKL0xvYWRPYmpNb2RlbC9pbmRleC5qcz9iZTM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBTW9kZWxMb2FkZXIgZnJvbSAnLi4vLi4vLi4vT2JqL0Jhc2UvTG9hZE9iak1vZGVsL0FNb2RlbExvYWRlcidcclxuaW1wb3J0IHsgZ2V0SG9zdCwgZ2V0VG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vb25cIjtcclxuaW1wb3J0IEJhc2VMb2FkT2JqTW9kZWwgZnJvbSAnLi4vLi4vLi4vT2JqL0Jhc2UvTG9hZE9iak1vZGVsJ1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2FkT2JqTW9kZWwgZXh0ZW5kcyBCYXNlTG9hZE9iak1vZGVsIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIENhbGxCYWNrKSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMsIENhbGxCYWNrKVxyXG4gICAgdGhpcy5fbG9hZEV2ZW50ID0gdm9pZCAwXHJcbiAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLm9iaklkID0gb3B0aW9ucy5vYmpJZFxyXG4gICAgdGhpcy5vcHRpb25zLnZpZGVvSWQgPSBvcHRpb25zLnZpZGVvSWRcclxuICAgIHRoaXMub3B0aW9ucy52aWRlb1R5cGUgPSBvcHRpb25zLnZpZGVvVHlwZSB8fCAnZmx2J1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmVzb3VyY2UoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIHRoYXQub3B0aW9ucy54bWxVUkwgPSB0aGF0Lm9wdGlvbnMub2JqVXJsLnJlcGxhY2UoJy5vYmonLCAnLnhtbCcpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnhtbFVSTCAhPT0gJycpIHtcclxuICAgICAgY29uc3QgeG1sID0gYXdhaXQgZmV0Y2godGhhdC5vcHRpb25zLnhtbFVSTClcclxuICAgICAgaWYgKHhtbC5vaykge1xyXG4gICAgICAgIGNvbnN0IHhtbFN0cmluZyA9IGF3YWl0IHhtbC50ZXh0KClcclxuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKClcclxuICAgICAgICBjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgJ3RleHQveG1sJylcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygneG1sRG9jeG1sRG9jeG1sRG9jJywgeG1sRG9jKVxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0geG1sRG9jXHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1Bvc2l0aW9uJylbMF1cclxuICAgICAgICAgIC50ZXh0Q29udGVudC5zcGxpdCgnLCcpXHJcbiAgICAgICAgLy8gY29uc3QgYmJveCA9IHhtbERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmJveCcpWzBdXHJcbiAgICAgICAgY29uc3QgY3JzID0geG1sRG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdDcnMnKVswXS50ZXh0Q29udGVudFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoYXQuY29udmVydChcclxuICAgICAgICAgIFt7IHg6IHBvc2l0aW9uWzBdLCB5OiBwb3NpdGlvblsxXSwgejogcG9zaXRpb25bMl0gfV0sXHJcbiAgICAgICAgICBjcnMsXHJcbiAgICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uIHx8IHsgbG5nOiByZXN1bHQucG9pbnRzWzBdLngsIGxhdDogcmVzdWx0LnBvaW50c1swXS55LCBhbHQ6IHJlc3VsdC5wb2ludHNbMF0ueiB9XHJcbiAgICAgICAgdGhhdC5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uXHJcbiAgICAgICAgY29uc3Qgc2NlbmUgPSB0aGF0LnZpd2VyLnNjZW5lXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICApXHJcbiAgICAgICAgY29uc3Qgb2JqX21vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShcclxuICAgICAgICAgIG9yaWdpbixcclxuICAgICAgICAgIG5ldyBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbChcclxuICAgICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuODUpLFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMCksXHJcbiAgICAgICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucygwKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICBsZXQgb2JqTG9hZGVyID0gbmV3IEFNb2RlbExvYWRlcih0aGF0LnZpd2VyLnNjZW5lLmNvbnRleHQpXHJcbiAgICAgICAgbGV0IG9iaiA9IGF3YWl0IG9iakxvYWRlci5Mb2FkKHRoYXQub3B0aW9ucy5vYmpVcmwsIHRoYXQub3B0aW9ucy52aWRlb0lkLCB0aGF0Lm9wdGlvbnMuaG9zdClcclxuICAgICAgICBvYmoubW9kZWxNYXRyaXggPSBvYmpfbW9kZWxNYXRyaXhcclxuICAgICAgICBvYmouc2hvdyA9IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICAgICAgb2JqLnNldEZsdlZpZGVvKHRoYXQub3B0aW9ucy52aWRlb1VybClcclxuICAgICAgICBzY2VuZS5wcmltaXRpdmVzLmFkZChvYmopXHJcbiAgICAgICAgdGhhdC5wcmltaXRpdmUgPSBvYmpcclxuICAgICAgICB0aGF0LmNvbnRyb2xsZXJDYWxsQmFjayh7XHJcbiAgICAgICAgICByb3RhdGU6IHsgeDogdGhhdC5vcHRpb25zLnJvbGwsIHk6IC10aGF0Lm9wdGlvbnMucGl0Y2gsIHo6IC10aGF0Lm9wdGlvbnMuaGVhZGluZyB9LFxyXG4gICAgICAgICAgcG9zaXRpb246IHsgLi4udGhhdC5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoYXQubG9hZGVkID0gdHJ1ZVxyXG4gICAgICAgIHRoYXQuX2xvYWRlZCA9IHRydWVcclxuICAgICAgICBpZiAodGhhdC5fbG9hZEV2ZW50KSB7XHJcbiAgICAgICAgICB0aGF0Ll9sb2FkRXZlbnQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhhdC5vcHRpb25zLm9ialVybCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0UmVzb3VyY2UoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGlmKCF0aGF0Ll9sb2FkZWQpIHtcclxuICAgICAgaWYodGhhdC5vcHRpb25zLm9iaklkKSB7XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLm9ialVybCA9IGF3YWl0IHRoYXQucmVxdWVzdE9ialJlc291cmNlKClcclxuICAgICAgfVxyXG4gICAgICBpZih0aGF0Lm9wdGlvbnMudmlkZW9JZCkge1xyXG4gICAgICAgIHRoYXQub3B0aW9ucy52aWRlb1VybCA9IGF3YWl0IHRoYXQucmVxdWVzdFZpZGVvUmVzb3VyY2UoKVxyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoYXQuYWRkUmVzb3VyY2UoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWVzdE9ialJlc291cmNlKCkge1xyXG4gICAgbGV0IGhvc3QgPSBcIlwiXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QuZW5kc1dpdGgoXCJ5amVhcnRoNC4wXCIpKVxyXG4gICAgICBob3N0ID0gdGhpcy5vcHRpb25zLmhvc3RcclxuICAgIGVsc2VcclxuICAgICAgaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy95amVhcnRoNC4wJ1xyXG4gICAgbGV0IHVybCA9IGhvc3QgKyAnL29iai8nICsgdGhpcy5vcHRpb25zLm9iaklkXHJcbiAgICByZXR1cm4gZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgbGV0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpXHJcbiAgICAgIHRleHQgPSBKU09OLnBhcnNlKHRleHQpXHJcbiAgICAgIGlmIChbMCwgMjAwXS5pbmNsdWRlcyh0ZXh0LmNvZGUpKSB7XHJcbiAgICAgICAgaWYgKHRleHQuZGF0YS5vYmpQYXRoLmxlbmd0aClcclxuICAgICAgICAgIHJldHVybiBob3N0ICsgJy9vYmovd2lydGUvZmlsZS8nICsgdGV4dC5kYXRhLm9ialBhdGhcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ+i1hOa6kOS4jeWtmOWcqCcpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKHRleHQubXNnIHx8IHRleHQubWVzc2FnZSlcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlcXVlc3RWaWRlb1Jlc291cmNlKCkge1xyXG4gICAgbGV0IGhvc3QgPSBcIlwiXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QuZW5kc1dpdGgoXCJ5amVhcnRoNC4wXCIpKVxyXG4gICAgICBob3N0ID0gdGhpcy5vcHRpb25zLmhvc3RcclxuICAgIGVsc2VcclxuICAgICAgaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy95amVhcnRoNC4wJ1xyXG4gICAgbGV0IHVybCA9IGhvc3QgKyAnL3ZpZGVvRnVzaW9uLycgKyB0aGlzLm9wdGlvbnMudmlkZW9JZFxyXG4gICAgcmV0dXJuIGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBcInRva2VuXCI6IGdldFRva2VuKCksXHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgZ2V0VG9rZW4oKSxcclxuICAgICAgfVxyXG4gICAgfSkudGhlbihhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgIGxldCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICB0ZXh0ID0gSlNPTi5wYXJzZSh0ZXh0KVxyXG4gICAgICBpZiAoWzAsIDIwMF0uaW5jbHVkZXModGV4dC5jb2RlKSkge1xyXG4gICAgICAgIGlmICh0ZXh0LmRhdGEuZGV2aWNlQ29kZS5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiBmZXRjaChob3N0KycvdmlkZW9GdXNpb24vdmlkZS9zdHJlYW0nLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxyXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7dHlwZTogJ2ZsdicsIGRldmljZUNvZGU6IHRleHQuZGF0YS5kZXZpY2VDb2RlfSksXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS50aGVuKGFzeW5jIChyZXMyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0MiA9IGF3YWl0IHJlczIudGV4dCgpXHJcbiAgICAgICAgICAgIHRleHQyID0gSlNPTi5wYXJzZSh0ZXh0MilcclxuICAgICAgICAgICAgaWYgKFswLCAyMDBdLmluY2x1ZGVzKHRleHQyLmNvZGUpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRleHQyLmRhdGEuZmx2ICYmIHRleHQyLmRhdGEuZmx2Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQyLmRhdGEuZmx2XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign5Zyw5Z2A5LiN5a2Y5ZyoJylcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4odGV4dDIubXNnIHx8IHRleHQyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGNvbnNvbGUud2Fybign6K6+5aSH5LiN5a2Y5ZyoJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4odGV4dC5tc2cgfHwgdGV4dC5tZXNzYWdlKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbG9hZChjYWxsYmFjaykge1xyXG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gICAgICBjYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvYWRFdmVudCA9IGNhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBUUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQTVEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOERBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/DZ/XJ/LoadObjModel/index.js\n"); /***/ }), /***/ "./src/Draw/draw.js": /*!**************************!*\ !*** ./src/Draw/draw.js ***! \**************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @name: draw\r\n * @author: Administrator\r\n * @date: 2022-06-14 16:29\r\n * @description:draw\r\n * @update: 2022-06-14 16:29\r\n */\n\n\nvar Draw = /*#__PURE__*/function (_Tools) {\n /**\r\n * @constructor\r\n * */\n function Draw(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var is2D = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Draw);\n _this = _callSuper(this, Draw, [sdk, options]);\n _this.viewer = sdk.viewer;\n _this.entityHasCreated = false;\n _this.event = null;\n _this.tip = null;\n _this.points_ids = [];\n _this.color = options.color || 'rgba(185,14,14,0.58)';\n _this._is2D = is2D;\n _this._sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_6__[\"get2DView\"])();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Draw, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Draw, [{\n key: \"create_point\",\n value: function create_point(cartesian) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.viewer;\n var id = this.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n position: cartesian,\n billboard: {\n image: this.getSourceRootPath() + '/img/point.png',\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n // disableDepthTestDistance: 1000000\n }\n }));\n return id;\n }\n }, {\n key: \"remove_entity\",\n value: function remove_entity(id) {\n this.viewer.entities.removeById(id);\n if (!this._is2D && this._sdk2D && this._sdk2D.viewer && this._sdk2D.viewer.entities) {\n this._sdk2D.viewer.entities.removeById(id);\n }\n }\n }, {\n key: \"start\",\n value: function start() {\n // this.setPickStatus(false)\n }\n }, {\n key: \"end\",\n value: function end() {\n var _this2 = this;\n // this.setPickStatus(true)\n\n YJ.Measure.SetMeasureStatus(false);\n this.entityHasCreated = false;\n this.event && this.event.destroy();\n this.event2D && this.event2D.destroy();\n this.tip && this.tip.destroy();\n this.points_ids.forEach(function (id) {\n _this2.remove_entity(id);\n });\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Draw);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0RyYXcvZHJhdy5qcz9kYmU3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogZHJhd1xyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA2LTE0IDE2OjI5XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmRyYXdcclxuICogQHVwZGF0ZTogMjAyMi0wNi0xNCAxNjoyOVxyXG4gKi9cclxuaW1wb3J0IFRvb2xzIGZyb20gJy4uL1Rvb2xzJ1xyXG5pbXBvcnQgeyBnZXQyRFZpZXcgfSBmcm9tICcuLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcblxyXG5jbGFzcyBEcmF3IGV4dGVuZHMgVG9vbHMge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIGlzMkQgPSBmYWxzZSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy52aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgICB0aGlzLmVudGl0eUhhc0NyZWF0ZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5ldmVudCA9IG51bGxcclxuICAgIHRoaXMudGlwID0gbnVsbFxyXG4gICAgdGhpcy5wb2ludHNfaWRzID0gW11cclxuICAgIHRoaXMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICdyZ2JhKDE4NSwxNCwxNCwwLjU4KSdcclxuICAgIHRoaXMuX2lzMkQgPSBpczJEXHJcbiAgICB0aGlzLl9zZGsyRCA9IGdldDJEVmlldygpXHJcbiAgfVxyXG5cclxuICBjcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB2aWV3ZXIgPSB0aGlzLnZpZXdlcikge1xyXG4gICAgbGV0IGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKVxyXG4gICAgdmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBwb3NpdGlvbjogY2FydGVzaWFuLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAvLyB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAvLyBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IDEwMDAwMDBcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlkXHJcbiAgfVxyXG5cclxuICByZW1vdmVfZW50aXR5KGlkKSB7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmVCeUlkKGlkKVxyXG4gICAgaWYgKCF0aGlzLl9pczJEICYmIHRoaXMuX3NkazJEICYmIHRoaXMuX3NkazJELnZpZXdlciAmJiB0aGlzLl9zZGsyRC52aWV3ZXIuZW50aXRpZXMpIHtcclxuICAgICAgdGhpcy5fc2RrMkQudmlld2VyLmVudGl0aWVzLnJlbW92ZUJ5SWQoaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIC8vIHRoaXMuc2V0UGlja1N0YXR1cyhmYWxzZSlcclxuICB9XHJcblxyXG4gIGVuZCgpIHtcclxuICAgIC8vIHRoaXMuc2V0UGlja1N0YXR1cyh0cnVlKVxyXG5cclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoaXMuZW50aXR5SGFzQ3JlYXRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLmV2ZW50MkQgJiYgdGhpcy5ldmVudDJELmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnBvaW50c19pZHMuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KGlkKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERyYXdcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Draw/draw.js\n"); /***/ }), /***/ "./src/Draw/drawAssemble.js": /*!**********************************!*\ !*** ./src/Draw/drawAssemble.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\nvar transformCartesianToWGS84 = function transformCartesianToWGS84(cartesian) {\n var ellipsoid = Cesium.Ellipsoid.WGS84;\n var cartographic = ellipsoid.cartesianToCartographic(cartesian);\n var x = Cesium.Math.toDegrees(cartographic.longitude);\n var y = Cesium.Math.toDegrees(cartographic.latitude);\n var z = cartographic.height;\n return {\n x: x,\n y: y,\n z: z\n };\n};\n\n/**\r\n * @extends Draw*/\nvar DrawAssemble = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @param [options] {object} 面属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n * */\n function DrawAssemble(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawAssemble);\n _this = _callSuper(this, DrawAssemble, [sdk, options]);\n _this.points = null;\n _this.polygonHasCreated = false;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawAssemble, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawAssemble, [{\n key: \"start\",\n value:\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPolygon\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n function start(cb) {\n var _this2 = this;\n var that = this;\n // eslint-disable-next-line no-undef\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawAssemble, \"start\", this, 3)([]);\n // eslint-disable-next-line no-undef\n YJ.Measure.SetMeasureStatus(true);\n var into;\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('左键确定,右键取消;', that.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](that.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var cache_84_position = [];\n this.anchorpoints = [];\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n if (!cartesian) return;\n if (_this2.anchorpoints.length === 3) {\n _this2.anchorpoints[1] = cartesian;\n } else {\n _this2.anchorpoints.push(cartesian);\n }\n cache_positions.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n if (_this2.points_ids.length === 3) {\n var array = [cache_positions[0], cache_positions[2], cache_positions[1]];\n cb(null, array);\n _this2.end();\n }\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (!cartesian || _this2.points_ids.length === 0) return;\n if (cache_positions.length > 1) {\n _this2.positions = [cache_positions[0], _this2.cartesian3Towgs84(cartesian, _this2.viewer), cache_positions[1]];\n } else {\n _this2.positions = [cache_positions[0], _this2.cartesian3Towgs84(cartesian, _this2.viewer)];\n }\n if (_this2.points_ids.length === 1 && !Cesium.defined(_this2.assemblePolygon)) {\n _this2.assemblePolygon = DrawAssemble.polygon(_this2);\n }\n if (_this2.anchorpoints.length >= 2) {\n if (_this2.points_ids.length === 1) {\n var pnts = new Array();\n _this2.positions.forEach(function (item) {\n pnts.push([item.lng, item.lat]);\n });\n var mid = P.PlotUtils.mid(pnts[0], pnts[1]);\n var d = P.PlotUtils.distance(pnts[0], mid) / 0.9;\n var pnt = P.PlotUtils.getThirdPoint(pnts[0], mid, P.Constants.HALF_PI, d, true);\n _this2.positions = [_this2.positions[0], {\n lng: pnt[0],\n lat: pnt[1]\n }, _this2.positions[1]];\n }\n //替换中间点\n _this2.anchorpoints[1] = cartesian;\n } else {\n _this2.anchorpoints.push(cartesian);\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n cb(null);\n _this2.end();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this2.end();\n cb(false);\n } else {\n if (_this2.anchorpoints.length === 2) {\n _this2.anchorpoints.push(cartesian);\n cb(null, _this2.positions);\n _this2.end();\n } else {\n if (!cartesian || Cesium.defined(_this2.assemblePolygon)) return;\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n _this2.anchorpoints.push(cartesian);\n _this2.assemblePolygon = DrawAssemble.polygon(_this2);\n cache_positions.push(_this2.cartesian3Towgs84(cartesian));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n }\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n if (!cartesian) return;\n if (_this2.anchorpoints.length === 3) {\n _this2.anchorpoints[1] = cartesian;\n } else {\n _this2.anchorpoints.push(cartesian);\n }\n cache_positions.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n if (_this2.points_ids.length === 3) {\n var array = [cache_positions[0], cache_positions[2], cache_positions[1]];\n cb(null, array);\n _this2.end();\n }\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n if (!cartesian || _this2.points_ids.length === 0) return;\n if (cache_positions.length > 1) {\n _this2.positions = [cache_positions[0], _this2.cartesian3Towgs84(cartesian, _this2.viewer), cache_positions[1]];\n } else {\n _this2.positions = [cache_positions[0], _this2.cartesian3Towgs84(cartesian, _this2.viewer)];\n }\n if (_this2.points_ids.length === 1 && !Cesium.defined(_this2.assemblePolygon)) {\n _this2.assemblePolygon = DrawAssemble.polygon(_this2, _this2._sdk2D.viewer);\n }\n if (_this2.anchorpoints.length >= 2) {\n if (_this2.points_ids.length === 1) {\n var pnts = new Array();\n _this2.positions.forEach(function (item) {\n pnts.push([item.lng, item.lat]);\n });\n var mid = P.PlotUtils.mid(pnts[0], pnts[1]);\n var d = P.PlotUtils.distance(pnts[0], mid) / 0.9;\n var pnt = P.PlotUtils.getThirdPoint(pnts[0], mid, P.Constants.HALF_PI, d, true);\n _this2.positions = [_this2.positions[0], {\n lng: pnt[0],\n lat: pnt[1]\n }, _this2.positions[1]];\n }\n //替换中间点\n _this2.anchorpoints[1] = cartesian;\n } else {\n _this2.anchorpoints.push(cartesian);\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n cb(null);\n _this2.end();\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this2.end();\n cb(false);\n } else {\n if (_this2.anchorpoints.length === 2) {\n _this2.anchorpoints.push(cartesian);\n cb(null, _this2.positions);\n _this2.end();\n } else {\n if (!cartesian || Cesium.defined(_this2.assemblePolygon)) return;\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n _this2.anchorpoints.push(cartesian);\n _this2.assemblePolygon = DrawAssemble.polygon(_this2, _this2._sdk2D.viewer);\n cache_positions.push(_this2.cartesian3Towgs84(cartesian));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n }\n }\n });\n });\n }\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(DrawAssemble, \"end\", this, 3)([]);\n this.viewer.entities.remove(this.assemblePolygon);\n if (!this._is2D && this._sdk2D) {\n this._sdk2D.viewer.entities.remove(this.assemblePolygon);\n }\n }\n\n // computeAssemblePoints(anchorpoints) {\n // let points = []\n\n // let originP = transformCartesianToWGS84(anchorpoints[0])\n // let lastP = anchorpoints[1]\n // ? transformCartesianToWGS84(anchorpoints[1])\n // : { x: originP.x + 0.00001, y: originP.y + 0.00001, z: originP.z }\n // let vectorOL = { x: lastP.x - originP.x, y: lastP.y - originP.y }\n // let dOL = Math.sqrt(vectorOL.x * vectorOL.x + vectorOL.y * vectorOL.y)\n // let v_O_P1_lr = this.calculateVector(\n // vectorOL,\n // Math.PI / 3,\n // (Math.sqrt(3) / 12) * dOL\n // )\n // let originP_P1 = v_O_P1_lr[1]\n // let p1 = { x: originP.x + originP_P1.x, y: originP.y + originP_P1.y }\n // let p2 = { x: (originP.x + lastP.x) / 2, y: (originP.y + lastP.y) / 2 }\n // let v_L_P3_lr = this.calculateVector(\n // vectorOL,\n // (Math.PI * 2) / 3,\n // (Math.sqrt(3) / 12) * dOL\n // )\n // let lastP_P3 = v_L_P3_lr[1]\n // let p3 = { x: lastP.x + lastP_P3.x, y: lastP.y + lastP_P3.y }\n // let v_O_P5_lr = this.calculateVector(vectorOL, Math.PI / 2, (1 / 2) * dOL)\n // let v_O_P5 = v_O_P5_lr[0]\n // let p5 = { x: v_O_P5.x + p2.x, y: v_O_P5.y + p2.y }\n // let p0 = originP\n // let p4 = lastP\n // points.push(p0, p1, p2, p3, p4, p5)\n // const closeCardinal = this.createCloseCardinal(points)\n // const fb_points = this.calculatePointsFBZ3(closeCardinal, 100)\n // let result = []\n // let result2 = []\n // for (let index = 0; index < fb_points.length; index++) {\n // const ele = fb_points[index]\n // let obj = {\n // lng: ele.x,\n // lat: ele.y,\n // alt: 0\n // }\n // result.push(ele.x, ele.y, 0)\n // result2.push(obj)\n // }\n // this.position = result2\n // this.points = result\n // }\n\n // computeAssemblePoints2(anchorpoints) {\n // let points = anchorpoints.length;\n // if (points < 2) {\n // return false\n // } else {\n // let pnts = new Array();\n // anchorpoints.forEach((item) => {\n // let posLonLat = this.cartesian3Towgs84(item, this.viewer);;\n // pnts.push([posLonLat.lng, posLonLat.lat]);\n // });\n // //console.log(\"pnts6666\",pnts);\n // // pnts.push(tailPoint);\n // // pnts.push(headerPoint);\n\n // if (pnts.length === 2) {\n // let mid = P.PlotUtils.mid(pnts[0], pnts[1])\n // //let d = utils.MathDistance(pnts[0], mid) / 0.9\n // let d = P.PlotUtils.distance(pnts[0], mid) / 0.9\n // //console.log(\"d\",d);\n // let pnt = P.PlotUtils.getThirdPoint(pnts[0], mid, P.Constants.HALF_PI, d, true)\n // pnts = [pnts[0], pnt, pnts[1]];\n // //console.log(\"pnt\",pnt);\n // //createPoint(Cesium.Cartesian3.fromDegrees(pnt[0], pnt[1]));\n // }\n // let mid = P.PlotUtils.mid(pnts[0], pnts[2])\n // pnts.push(mid, pnts[0], pnts[1])\n\n // let [normals, pnt1, pnt2, pnt3, result, result2] = [[], undefined, undefined, undefined, [], []]\n // for (let i = 0; i < pnts.length - 2; i++) {\n // pnt1 = pnts[i]\n // pnt2 = pnts[i + 1]\n // pnt3 = pnts[i + 2]\n // let normalPoints = P.PlotUtils.getBisectorNormals(0.4, pnt1, pnt2, pnt3)\n // normals = normals.concat(normalPoints)\n // }\n // let count = normals.length\n // normals = [normals[count - 1]].concat(normals.slice(0, count - 1))\n // for (let i = 0; i < pnts.length - 2; i++) {\n // pnt1 = pnts[i]\n // pnt2 = pnts[i + 1]\n // result = result.concat([...pnt1, 0])\n // result2.push(\n // {\n // lng: pnt1[0],\n // lat: pnt1[1],\n // alt: 0\n // }\n // )\n // for (let t = 0; t <= P.Constants.FITTING_COUNT; t++) {\n // let pnt = P.PlotUtils.getCubicValue(t / P.Constants.FITTING_COUNT, pnt1, normals[i * 2], normals[i * 2 + 1], pnt2)\n // result = result.concat([...pnt, 0])\n // result2.push(\n // {\n // lng: pnt[0],\n // lat: pnt[1],\n // alt: 0\n // }\n // )\n // }\n // result = result.concat([...pnt2, 0])\n // result2.push(\n // {\n // lng: pnt2[0],\n // lat: pnt2[1],\n // alt: 0\n // }\n // )\n // }\n // this.position = result2\n // this.points = result\n // }\n // }\n }, {\n key: \"calculateVector\",\n value: function calculateVector(v, theta, d) {\n if (!theta) theta = Math.PI / 2;\n if (!d) d = 1;\n var x_1;\n var x_2;\n var y_1;\n var y_2;\n var v_l;\n var v_r;\n var d_v = Math.sqrt(v.x * v.x + v.y * v.y);\n if (v.y == 0) {\n x_1 = x_2 = d_v * d * Math.cos(theta) / v.x;\n if (v.x > 0) {\n y_1 = Math.sqrt(d * d - x_1 * x_1);\n y_2 = -y_1;\n } else if (v.x < 0) {\n y_2 = Math.sqrt(d * d - x_1 * x_1);\n y_1 = -y_2;\n }\n v_l = {\n x: x_1,\n y: y_1\n };\n v_r = {\n x: x_2,\n y: y_2\n };\n } else {\n var n = -v.x / v.y;\n var m = d * d_v * Math.cos(theta) / v.y;\n var a = 1 + n * n;\n var b = 2 * n * m;\n var c = m * m - d * d;\n x_1 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n x_2 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n y_1 = n * x_1 + m;\n y_2 = n * x_2 + m;\n if (v.y >= 0) {\n v_l = {\n x: x_1,\n y: y_1\n };\n v_r = {\n x: x_2,\n y: y_2\n };\n } else if (v.y < 0) {\n v_l = {\n x: x_2,\n y: y_2\n };\n v_r = {\n x: x_1,\n y: y_1\n };\n }\n }\n return [v_l, v_r];\n }\n }, {\n key: \"createCloseCardinal\",\n value: function createCloseCardinal(points) {\n if (points == null || points.length < 3) {\n return points;\n }\n //获取起点,作为终点,以闭合曲线。\n var lastP = points[0];\n points.push(lastP);\n //定义传入的点数组,将在点数组中央(每两个点)插入两个控制点\n var cPoints = points;\n //包含输入点和控制点的数组\n var cardinalPoints = [];\n //至少三个点以上\n //这些都是相关资料测出的经验数值\n //定义张力系数,取值在0 0) {\n scale = 1 / part;\n }\n for (var i = 0; i < points.length - 3;) {\n //起始点\n var pointS = points[i];\n //第一个控制点\n var pointC1 = points[i + 1];\n //第二个控制点\n var pointC2 = points[i + 2];\n //结束点\n var pointE = points[i + 3];\n bezierPts.push(pointS);\n for (var t = 0; t < 1;) {\n //三次贝塞尔曲线公式\n var x = (1 - t) * (1 - t) * (1 - t) * pointS.x + 3 * t * (1 - t) * (1 - t) * pointC1.x + 3 * t * t * (1 - t) * pointC2.x + t * t * t * pointE.x;\n var y = (1 - t) * (1 - t) * (1 - t) * pointS.y + 3 * t * (1 - t) * (1 - t) * pointC1.y + 3 * t * t * (1 - t) * pointC2.y + t * t * t * pointE.y;\n var point = {\n x: x,\n y: y\n };\n bezierPts.push(point);\n t += scale;\n }\n i += 3;\n if (i >= points.length) {\n bezierPts.push(pointS);\n }\n }\n return bezierPts;\n }\n }], [{\n key: \"polygon\",\n value: function polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n var id = that.randomString();\n return viewer.entities.add(new Cesium.Entity({\n name: 'AssemblePolygon',\n id: id,\n polygon: {\n hierarchy: new Cesium.CallbackProperty(function (e) {\n var arr = that.computeAssemble(that.positions);\n for (var i = 0; i < arr.length; i++) {\n if (isNaN(arr[i].x)) {\n arr = [];\n break;\n }\n }\n return new Cesium.PolygonHierarchy(arr);\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n outline: true,\n outlineColor: Cesium.Color.GREEN,\n zIndex: 99999999\n }\n }));\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawAssemble);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3QXNzZW1ibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3QXNzZW1ibGUuanM/YjkwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vTW91c2VUaXAnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uL0V2ZW50J1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuL2RyYXcnXHJcblxyXG5jb25zdCB0cmFuc2Zvcm1DYXJ0ZXNpYW5Ub1dHUzg0ID0gY2FydGVzaWFuID0+IHtcclxuICBsZXQgZWxsaXBzb2lkID0gQ2VzaXVtLkVsbGlwc29pZC5XR1M4NFxyXG4gIGxldCBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoY2FydGVzaWFuKVxyXG4gIGNvbnN0IHggPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSlcclxuICBjb25zdCB5ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSlcclxuICBjb25zdCB6ID0gY2FydG9ncmFwaGljLmhlaWdodFxyXG4gIHJldHVybiB7IHgsIHksIHogfVxyXG59XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgRHJhdyovXHJcbmNsYXNzIERyYXdBc3NlbWJsZSBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IOmdouWxnuaAp1xyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5jb2xvcj1yZ2JhKDE4NSwxNCwxNCwwLjU4KV0ge29iamVjdH0g57q/5bGe5oCnXHJcblxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMucG9pbnRzID0gbnVsbFxyXG4gICAgdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcG9seWdvbih0aGF0LCB2aWV3ZXIgPSB0aGF0LnZpZXdlcikge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgcmV0dXJuIHZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICBuYW1lOiAnQXNzZW1ibGVQb2x5Z29uJyxcclxuICAgICAgICBpZCxcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShlID0+IHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IHRoYXQuY29tcHV0ZUFzc2VtYmxlKHRoYXQucG9zaXRpb25zKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChpc05hTihhcnJbaV0ueCkpIHtcclxuICAgICAgICAgICAgICAgIGFyciA9IFtdXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGFycilcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgb3V0bGluZTogdHJ1ZSxcclxuICAgICAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLkdSRUVOLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIOW8gOWni+WKqOaAgee7mOWItumdolxyXG4gICAqIEBtZXRob2Qgc3RhcnRcclxuICAgKiBAcGFyYW0gY2Ige2Z1bmN0aW9ufSDlm57osIPlh73mlbBcclxuICAgKiBAbWVtYmVyT2YgRHJhd1BvbHlnb25cclxuICAgKiBAZXhhbXBsZSBkcmF3LnN0YXJ0KChlcnIscG9zaXRpb25zKT0+e1xyXG4gICAqXHJcbiAgICogfSlcclxuICAgKiAqL1xyXG4gIHN0YXJ0KGNiKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIGxldCBpbnRvXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCflt6bplK7noa7lrprvvIzlj7PplK7lj5bmtojvvJsnLCB0aGF0LnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9pbnRzX2lkcyA9IFtdIC8v5a2Y5pS+5bem6ZSu54K55Ye75pe25Li05pe25re75Yqg55qEcG9pbnTnmoRpZFxyXG4gICAgICBsZXQgY2FjaGVfcG9zaXRpb25zID0gW11cclxuICAgICAgbGV0IGNhY2hlXzg0X3Bvc2l0aW9uID0gW11cclxuICAgICAgdGhpcy5hbmNob3Jwb2ludHMgPSBbXVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmFuY2hvcnBvaW50cy5sZW5ndGggPT09IDMpIHtcclxuICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzWzFdID0gY2FydGVzaWFuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbikpXHJcbiAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuKSlcclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgICAgbGV0IGFycmF5ID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgY2FjaGVfcG9zaXRpb25zWzJdLCBjYWNoZV9wb3NpdGlvbnNbMV1dXHJcbiAgICAgICAgICBjYihudWxsLCBhcnJheSlcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoIWNhcnRlc2lhbiB8fCB0aGlzLnBvaW50c19pZHMubGVuZ3RoID09PSAwKSByZXR1cm5cclxuICAgICAgICBpZiAoY2FjaGVfcG9zaXRpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSwgY2FjaGVfcG9zaXRpb25zWzFdXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKV1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPT09IDEgJiYgIUNlc2l1bS5kZWZpbmVkKHRoaXMuYXNzZW1ibGVQb2x5Z29uKSkge1xyXG4gICAgICAgICAgdGhpcy5hc3NlbWJsZVBvbHlnb24gPSBEcmF3QXNzZW1ibGUucG9seWdvbih0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbmNob3Jwb2ludHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGxldCBwbnRzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBwbnRzLnB1c2goW2l0ZW0ubG5nLCBpdGVtLmxhdF0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBtaWQgPSBQLlBsb3RVdGlscy5taWQocG50c1swXSwgcG50c1sxXSlcclxuICAgICAgICAgICAgbGV0IGQgPSBQLlBsb3RVdGlscy5kaXN0YW5jZShwbnRzWzBdLCBtaWQpIC8gMC45XHJcbiAgICAgICAgICAgIGxldCBwbnQgPSBQLlBsb3RVdGlscy5nZXRUaGlyZFBvaW50KHBudHNbMF0sIG1pZCwgUC5Db25zdGFudHMuSEFMRl9QSSwgZCwgdHJ1ZSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbdGhpcy5wb3NpdGlvbnNbMF0sIHsgbG5nOiBwbnRbMF0sIGxhdDogcG50WzFdIH0sIHRoaXMucG9zaXRpb25zWzFdXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8v5pu/5o2i5Lit6Ze054K5XHJcbiAgICAgICAgICB0aGlzLmFuY2hvcnBvaW50c1sxXSA9IGNhcnRlc2lhbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFuY2hvcnBvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNiKG51bGwpXHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbmNob3Jwb2ludHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbmNob3Jwb2ludHMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgY2IobnVsbCwgdGhpcy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuIHx8IENlc2l1bS5kZWZpbmVkKHRoaXMuYXNzZW1ibGVQb2x5Z29uKSkgcmV0dXJuXHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB0aGlzLmFuY2hvcnBvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICB0aGlzLmFzc2VtYmxlUG9seWdvbiA9IERyYXdBc3NlbWJsZS5wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICghdGhpcy5faXMyRCAmJiB0aGlzLl9zZGsyRCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQyRCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuX3NkazJEKVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludG8gPSAnMkQnXHJcbiAgICAgICAgICBpZiAoIWNhcnRlc2lhbikgcmV0dXJuXHJcbiAgICAgICAgICBpZiAodGhpcy5hbmNob3Jwb2ludHMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzWzFdID0gY2FydGVzaWFuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbikpXHJcbiAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMuX3NkazJELnZpZXdlcikpXHJcbiAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBbY2FjaGVfcG9zaXRpb25zWzBdLCBjYWNoZV9wb3NpdGlvbnNbMl0sIGNhY2hlX3Bvc2l0aW9uc1sxXV1cclxuICAgICAgICAgICAgY2IobnVsbCwgYXJyYXkpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnggKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmICghY2FydGVzaWFuIHx8IHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPT09IDApIHJldHVyblxyXG4gICAgICAgICAgaWYgKGNhY2hlX3Bvc2l0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSwgY2FjaGVfcG9zaXRpb25zWzFdXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKV1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID09PSAxICYmICFDZXNpdW0uZGVmaW5lZCh0aGlzLmFzc2VtYmxlUG9seWdvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hc3NlbWJsZVBvbHlnb24gPSBEcmF3QXNzZW1ibGUucG9seWdvbih0aGlzLCB0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5hbmNob3Jwb2ludHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICBsZXQgcG50cyA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHBudHMucHVzaChbaXRlbS5sbmcsIGl0ZW0ubGF0XSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBQLlBsb3RVdGlscy5taWQocG50c1swXSwgcG50c1sxXSlcclxuICAgICAgICAgICAgICBsZXQgZCA9IFAuUGxvdFV0aWxzLmRpc3RhbmNlKHBudHNbMF0sIG1pZCkgLyAwLjlcclxuICAgICAgICAgICAgICBsZXQgcG50ID0gUC5QbG90VXRpbHMuZ2V0VGhpcmRQb2ludChwbnRzWzBdLCBtaWQsIFAuQ29uc3RhbnRzLkhBTEZfUEksIGQsIHRydWUpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbdGhpcy5wb3NpdGlvbnNbMF0sIHsgbG5nOiBwbnRbMF0sIGxhdDogcG50WzFdIH0sIHRoaXMucG9zaXRpb25zWzFdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+abv+aNouS4remXtOeCuVxyXG4gICAgICAgICAgICB0aGlzLmFuY2hvcnBvaW50c1sxXSA9IGNhcnRlc2lhbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFuY2hvcnBvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYihudWxsKVxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFuY2hvcnBvaW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgdGhpcy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4gfHwgQ2VzaXVtLmRlZmluZWQodGhpcy5hc3NlbWJsZVBvbHlnb24pKSByZXR1cm5cclxuICAgICAgICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAgICgobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyKSArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3Jwb2ludHMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VtYmxlUG9seWdvbiA9IERyYXdBc3NlbWJsZS5wb2x5Z29uKHRoaXMsIHRoaXMuX3NkazJELnZpZXdlcilcclxuICAgICAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5hc3NlbWJsZVBvbHlnb24pXHJcbiAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgdGhpcy5fc2RrMkQudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmFzc2VtYmxlUG9seWdvbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNvbXB1dGVBc3NlbWJsZVBvaW50cyhhbmNob3Jwb2ludHMpIHtcclxuICAvLyAgIGxldCBwb2ludHMgPSBbXVxyXG5cclxuICAvLyAgIGxldCBvcmlnaW5QID0gdHJhbnNmb3JtQ2FydGVzaWFuVG9XR1M4NChhbmNob3Jwb2ludHNbMF0pXHJcbiAgLy8gICBsZXQgbGFzdFAgPSBhbmNob3Jwb2ludHNbMV1cclxuICAvLyAgICAgPyB0cmFuc2Zvcm1DYXJ0ZXNpYW5Ub1dHUzg0KGFuY2hvcnBvaW50c1sxXSlcclxuICAvLyAgICAgOiB7IHg6IG9yaWdpblAueCArIDAuMDAwMDEsIHk6IG9yaWdpblAueSArIDAuMDAwMDEsIHo6IG9yaWdpblAueiB9XHJcbiAgLy8gICBsZXQgdmVjdG9yT0wgPSB7IHg6IGxhc3RQLnggLSBvcmlnaW5QLngsIHk6IGxhc3RQLnkgLSBvcmlnaW5QLnkgfVxyXG4gIC8vICAgbGV0IGRPTCA9IE1hdGguc3FydCh2ZWN0b3JPTC54ICogdmVjdG9yT0wueCArIHZlY3Rvck9MLnkgKiB2ZWN0b3JPTC55KVxyXG4gIC8vICAgbGV0IHZfT19QMV9sciA9IHRoaXMuY2FsY3VsYXRlVmVjdG9yKFxyXG4gIC8vICAgICB2ZWN0b3JPTCxcclxuICAvLyAgICAgTWF0aC5QSSAvIDMsXHJcbiAgLy8gICAgIChNYXRoLnNxcnQoMykgLyAxMikgKiBkT0xcclxuICAvLyAgIClcclxuICAvLyAgIGxldCBvcmlnaW5QX1AxID0gdl9PX1AxX2xyWzFdXHJcbiAgLy8gICBsZXQgcDEgPSB7IHg6IG9yaWdpblAueCArIG9yaWdpblBfUDEueCwgeTogb3JpZ2luUC55ICsgb3JpZ2luUF9QMS55IH1cclxuICAvLyAgIGxldCBwMiA9IHsgeDogKG9yaWdpblAueCArIGxhc3RQLngpIC8gMiwgeTogKG9yaWdpblAueSArIGxhc3RQLnkpIC8gMiB9XHJcbiAgLy8gICBsZXQgdl9MX1AzX2xyID0gdGhpcy5jYWxjdWxhdGVWZWN0b3IoXHJcbiAgLy8gICAgIHZlY3Rvck9MLFxyXG4gIC8vICAgICAoTWF0aC5QSSAqIDIpIC8gMyxcclxuICAvLyAgICAgKE1hdGguc3FydCgzKSAvIDEyKSAqIGRPTFxyXG4gIC8vICAgKVxyXG4gIC8vICAgbGV0IGxhc3RQX1AzID0gdl9MX1AzX2xyWzFdXHJcbiAgLy8gICBsZXQgcDMgPSB7IHg6IGxhc3RQLnggKyBsYXN0UF9QMy54LCB5OiBsYXN0UC55ICsgbGFzdFBfUDMueSB9XHJcbiAgLy8gICBsZXQgdl9PX1A1X2xyID0gdGhpcy5jYWxjdWxhdGVWZWN0b3IodmVjdG9yT0wsIE1hdGguUEkgLyAyLCAoMSAvIDIpICogZE9MKVxyXG4gIC8vICAgbGV0IHZfT19QNSA9IHZfT19QNV9sclswXVxyXG4gIC8vICAgbGV0IHA1ID0geyB4OiB2X09fUDUueCArIHAyLngsIHk6IHZfT19QNS55ICsgcDIueSB9XHJcbiAgLy8gICBsZXQgcDAgPSBvcmlnaW5QXHJcbiAgLy8gICBsZXQgcDQgPSBsYXN0UFxyXG4gIC8vICAgcG9pbnRzLnB1c2gocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSlcclxuICAvLyAgIGNvbnN0IGNsb3NlQ2FyZGluYWwgPSB0aGlzLmNyZWF0ZUNsb3NlQ2FyZGluYWwocG9pbnRzKVxyXG4gIC8vICAgY29uc3QgZmJfcG9pbnRzID0gdGhpcy5jYWxjdWxhdGVQb2ludHNGQlozKGNsb3NlQ2FyZGluYWwsIDEwMClcclxuICAvLyAgIGxldCByZXN1bHQgPSBbXVxyXG4gIC8vICAgbGV0IHJlc3VsdDIgPSBbXVxyXG4gIC8vICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZiX3BvaW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAvLyAgICAgY29uc3QgZWxlID0gZmJfcG9pbnRzW2luZGV4XVxyXG4gIC8vICAgICBsZXQgb2JqID0ge1xyXG4gIC8vICAgICAgIGxuZzogZWxlLngsXHJcbiAgLy8gICAgICAgbGF0OiBlbGUueSxcclxuICAvLyAgICAgICBhbHQ6IDBcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICByZXN1bHQucHVzaChlbGUueCwgZWxlLnksIDApXHJcbiAgLy8gICAgIHJlc3VsdDIucHVzaChvYmopXHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnBvc2l0aW9uID0gcmVzdWx0MlxyXG4gIC8vICAgdGhpcy5wb2ludHMgPSByZXN1bHRcclxuICAvLyB9XHJcblxyXG4gIC8vIGNvbXB1dGVBc3NlbWJsZVBvaW50czIoYW5jaG9ycG9pbnRzKSB7XHJcbiAgLy8gICBsZXQgcG9pbnRzID0gYW5jaG9ycG9pbnRzLmxlbmd0aDtcclxuICAvLyAgIGlmIChwb2ludHMgPCAyKSB7XHJcbiAgLy8gICAgIHJldHVybiBmYWxzZVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgbGV0IHBudHMgPSBuZXcgQXJyYXkoKTtcclxuICAvLyAgICAgYW5jaG9ycG9pbnRzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAvLyAgICAgICBsZXQgcG9zTG9uTGF0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGlzLnZpZXdlcik7O1xyXG4gIC8vICAgICAgIHBudHMucHVzaChbcG9zTG9uTGF0LmxuZywgcG9zTG9uTGF0LmxhdF0pO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhcInBudHM2NjY2XCIscG50cyk7XHJcbiAgLy8gICAgIC8vIHBudHMucHVzaCh0YWlsUG9pbnQpO1xyXG4gIC8vICAgICAvLyBwbnRzLnB1c2goaGVhZGVyUG9pbnQpO1xyXG5cclxuICAvLyAgICAgaWYgKHBudHMubGVuZ3RoID09PSAyKSB7XHJcbiAgLy8gICAgICAgbGV0IG1pZCA9IFAuUGxvdFV0aWxzLm1pZChwbnRzWzBdLCBwbnRzWzFdKVxyXG4gIC8vICAgICAgIC8vbGV0IGQgPSB1dGlscy5NYXRoRGlzdGFuY2UocG50c1swXSwgbWlkKSAvIDAuOVxyXG4gIC8vICAgICAgIGxldCBkID0gUC5QbG90VXRpbHMuZGlzdGFuY2UocG50c1swXSwgbWlkKSAvIDAuOVxyXG4gIC8vICAgICAgIC8vY29uc29sZS5sb2coXCJkXCIsZCk7XHJcbiAgLy8gICAgICAgbGV0IHBudCA9IFAuUGxvdFV0aWxzLmdldFRoaXJkUG9pbnQocG50c1swXSwgbWlkLCBQLkNvbnN0YW50cy5IQUxGX1BJLCBkLCB0cnVlKVxyXG4gIC8vICAgICAgIHBudHMgPSBbcG50c1swXSwgcG50LCBwbnRzWzFdXTtcclxuICAvLyAgICAgICAvL2NvbnNvbGUubG9nKFwicG50XCIscG50KTtcclxuICAvLyAgICAgICAvL2NyZWF0ZVBvaW50KENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBudFswXSwgcG50WzFdKSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgbGV0IG1pZCA9IFAuUGxvdFV0aWxzLm1pZChwbnRzWzBdLCBwbnRzWzJdKVxyXG4gIC8vICAgICBwbnRzLnB1c2gobWlkLCBwbnRzWzBdLCBwbnRzWzFdKVxyXG5cclxuICAvLyAgICAgbGV0IFtub3JtYWxzLCBwbnQxLCBwbnQyLCBwbnQzLCByZXN1bHQsIHJlc3VsdDJdID0gW1tdLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbXSwgW11dXHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG50cy5sZW5ndGggLSAyOyBpKyspIHtcclxuICAvLyAgICAgICBwbnQxID0gcG50c1tpXVxyXG4gIC8vICAgICAgIHBudDIgPSBwbnRzW2kgKyAxXVxyXG4gIC8vICAgICAgIHBudDMgPSBwbnRzW2kgKyAyXVxyXG4gIC8vICAgICAgIGxldCBub3JtYWxQb2ludHMgPSBQLlBsb3RVdGlscy5nZXRCaXNlY3Rvck5vcm1hbHMoMC40LCBwbnQxLCBwbnQyLCBwbnQzKVxyXG4gIC8vICAgICAgIG5vcm1hbHMgPSBub3JtYWxzLmNvbmNhdChub3JtYWxQb2ludHMpXHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgbGV0IGNvdW50ID0gbm9ybWFscy5sZW5ndGhcclxuICAvLyAgICAgbm9ybWFscyA9IFtub3JtYWxzW2NvdW50IC0gMV1dLmNvbmNhdChub3JtYWxzLnNsaWNlKDAsIGNvdW50IC0gMSkpXHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG50cy5sZW5ndGggLSAyOyBpKyspIHtcclxuICAvLyAgICAgICBwbnQxID0gcG50c1tpXVxyXG4gIC8vICAgICAgIHBudDIgPSBwbnRzW2kgKyAxXVxyXG4gIC8vICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoWy4uLnBudDEsIDBdKVxyXG4gIC8vICAgICAgIHJlc3VsdDIucHVzaChcclxuICAvLyAgICAgICAgIHtcclxuICAvLyAgICAgICAgICAgbG5nOiBwbnQxWzBdLFxyXG4gIC8vICAgICAgICAgICBsYXQ6IHBudDFbMV0sXHJcbiAgLy8gICAgICAgICAgIGFsdDogMFxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8PSBQLkNvbnN0YW50cy5GSVRUSU5HX0NPVU5UOyB0KyspIHtcclxuICAvLyAgICAgICAgIGxldCBwbnQgPSBQLlBsb3RVdGlscy5nZXRDdWJpY1ZhbHVlKHQgLyBQLkNvbnN0YW50cy5GSVRUSU5HX0NPVU5ULCBwbnQxLCBub3JtYWxzW2kgKiAyXSwgbm9ybWFsc1tpICogMiArIDFdLCBwbnQyKVxyXG4gIC8vICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbLi4ucG50LCAwXSlcclxuICAvLyAgICAgICAgIHJlc3VsdDIucHVzaChcclxuICAvLyAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgIGxuZzogcG50WzBdLFxyXG4gIC8vICAgICAgICAgICAgIGxhdDogcG50WzFdLFxyXG4gIC8vICAgICAgICAgICAgIGFsdDogMFxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoWy4uLnBudDIsIDBdKVxyXG4gIC8vICAgICAgIHJlc3VsdDIucHVzaChcclxuICAvLyAgICAgICAgIHtcclxuICAvLyAgICAgICAgICAgbG5nOiBwbnQyWzBdLFxyXG4gIC8vICAgICAgICAgICBsYXQ6IHBudDJbMV0sXHJcbiAgLy8gICAgICAgICAgIGFsdDogMFxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICB0aGlzLnBvc2l0aW9uID0gcmVzdWx0MlxyXG4gIC8vICAgICB0aGlzLnBvaW50cyA9IHJlc3VsdFxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgY2FsY3VsYXRlVmVjdG9yKHYsIHRoZXRhLCBkKSB7XHJcbiAgICBpZiAoIXRoZXRhKSB0aGV0YSA9IE1hdGguUEkgLyAyXHJcbiAgICBpZiAoIWQpIGQgPSAxXHJcbiAgICBsZXQgeF8xXHJcbiAgICBsZXQgeF8yXHJcbiAgICBsZXQgeV8xXHJcbiAgICBsZXQgeV8yXHJcbiAgICBsZXQgdl9sXHJcbiAgICBsZXQgdl9yXHJcbiAgICBsZXQgZF92ID0gTWF0aC5zcXJ0KHYueCAqIHYueCArIHYueSAqIHYueSlcclxuICAgIGlmICh2LnkgPT0gMCkge1xyXG4gICAgICB4XzEgPSB4XzIgPSAoZF92ICogZCAqIE1hdGguY29zKHRoZXRhKSkgLyB2LnhcclxuICAgICAgaWYgKHYueCA+IDApIHtcclxuICAgICAgICB5XzEgPSBNYXRoLnNxcnQoZCAqIGQgLSB4XzEgKiB4XzEpXHJcbiAgICAgICAgeV8yID0gLXlfMVxyXG4gICAgICB9IGVsc2UgaWYgKHYueCA8IDApIHtcclxuICAgICAgICB5XzIgPSBNYXRoLnNxcnQoZCAqIGQgLSB4XzEgKiB4XzEpXHJcbiAgICAgICAgeV8xID0gLXlfMlxyXG4gICAgICB9XHJcbiAgICAgIHZfbCA9IHsgeDogeF8xLCB5OiB5XzEgfVxyXG4gICAgICB2X3IgPSB7IHg6IHhfMiwgeTogeV8yIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBuID0gLXYueCAvIHYueVxyXG4gICAgICBsZXQgbSA9IChkICogZF92ICogTWF0aC5jb3ModGhldGEpKSAvIHYueVxyXG4gICAgICBsZXQgYSA9IDEgKyBuICogblxyXG4gICAgICBsZXQgYiA9IDIgKiBuICogbVxyXG4gICAgICBsZXQgYyA9IG0gKiBtIC0gZCAqIGRcclxuICAgICAgeF8xID0gKC1iIC0gTWF0aC5zcXJ0KGIgKiBiIC0gNCAqIGEgKiBjKSkgLyAoMiAqIGEpXHJcbiAgICAgIHhfMiA9ICgtYiArIE1hdGguc3FydChiICogYiAtIDQgKiBhICogYykpIC8gKDIgKiBhKVxyXG4gICAgICB5XzEgPSBuICogeF8xICsgbVxyXG4gICAgICB5XzIgPSBuICogeF8yICsgbVxyXG4gICAgICBpZiAodi55ID49IDApIHtcclxuICAgICAgICB2X2wgPSB7IHg6IHhfMSwgeTogeV8xIH1cclxuICAgICAgICB2X3IgPSB7IHg6IHhfMiwgeTogeV8yIH1cclxuICAgICAgfSBlbHNlIGlmICh2LnkgPCAwKSB7XHJcbiAgICAgICAgdl9sID0geyB4OiB4XzIsIHk6IHlfMiB9XHJcbiAgICAgICAgdl9yID0geyB4OiB4XzEsIHk6IHlfMSB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbdl9sLCB2X3JdXHJcbiAgfVxyXG5cclxuICBjcmVhdGVDbG9zZUNhcmRpbmFsKHBvaW50cykge1xyXG4gICAgaWYgKHBvaW50cyA9PSBudWxsIHx8IHBvaW50cy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHJldHVybiBwb2ludHNcclxuICAgIH1cclxuICAgIC8v6I635Y+W6LW354K577yM5L2c5Li657uI54K577yM5Lul6Zet5ZCI5puy57q/44CCXHJcbiAgICBsZXQgbGFzdFAgPSBwb2ludHNbMF1cclxuICAgIHBvaW50cy5wdXNoKGxhc3RQKVxyXG4gICAgLy/lrprkuYnkvKDlhaXnmoTngrnmlbDnu4TvvIzlsIblnKjngrnmlbDnu4TkuK3lpK7vvIjmr4/kuKTkuKrngrnvvInmj5LlhaXkuKTkuKrmjqfliLbngrlcclxuICAgIGxldCBjUG9pbnRzID0gcG9pbnRzXHJcbiAgICAvL+WMheWQq+i+k+WFpeeCueWSjOaOp+WItueCueeahOaVsOe7hFxyXG4gICAgbGV0IGNhcmRpbmFsUG9pbnRzID0gW11cclxuICAgIC8v6Iez5bCR5LiJ5Liq54K55Lul5LiKXHJcbiAgICAvL+i/meS6m+mDveaYr+ebuOWFs+i1hOaWmea1i+WHuueahOe7j+mqjOaVsOWAvFxyXG4gICAgLy/lrprkuYnlvKDlipvns7vmlbDvvIzlj5blgLzlnKgwPHQ8MC41XHJcbiAgICBsZXQgdCA9IDAuNFxyXG4gICAgLy/kuLrnq6/ngrnlvKDlipvns7vmlbDlm6DlrZDvvIzlj5blgLzlnKgwPGI8MVxyXG4gICAgLy8gbGV0IGIgPSAwLjU7XHJcbiAgICAvL+ivr+W3ruaOp+WItu+8jOaYr+S4gOS4quWkp+S6juetieS6jjDnmoTmlbDvvIznlKjkuo7kuInngrnpnZ7luLjotovov5HkuI7kuIDmnaHnm7Tnur/ml7bvvIzlh4/lsJHorqHnrpfph49cclxuICAgIGxldCBlID0gMC4wMDVcclxuICAgIC8v5Lyg5YWl55qE54K55pWw6YeP77yM6Iez5bCR5pyJ5LiJ5Liq77yMbuiHs+WwkeS4ujJcclxuICAgIGxldCBuID0gY1BvaW50cy5sZW5ndGggLSAxXHJcbiAgICAvL+S7juW8gOWni+mBjeWOhuWIsOWAkuaVsOesrOS6jOS4qu+8jOWFtuS4reWAkuaVsOesrOS6jOS4queUqOS6juiuoeeul+i1t+eCue+8iOe7iOeCue+8ieeahOaPkuWAvOaOp+WItueCuVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPD0gbiAtIDE7IGsrKykge1xyXG4gICAgICBsZXQgcDAsIHAxLCBwMlxyXG4gICAgICAvL+iuoeeul+i1t+eCue+8iOe7iOeCue+8ieeahOW3puWPs+aOp+WItueCuVxyXG4gICAgICBpZiAoayA9PSBuIC0gMSkge1xyXG4gICAgICAgIC8v5LiJ5Liq5Z+656GA6L6T5YWl54K5XHJcbiAgICAgICAgcDAgPSBjUG9pbnRzW24gLSAxXVxyXG4gICAgICAgIHAxID0gY1BvaW50c1swXVxyXG4gICAgICAgIHAyID0gY1BvaW50c1sxXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHAwID0gY1BvaW50c1trXVxyXG4gICAgICAgIHAxID0gY1BvaW50c1trICsgMV1cclxuICAgICAgICBwMiA9IGNQb2ludHNbayArIDJdXHJcbiAgICAgIH1cclxuICAgICAgLy/lrprkuYlwMeeahOW3puaOp+WItueCueWSjOWPs+aOp+WItueCuVxyXG4gICAgICBsZXQgcDFsID0geyB4OiB1bmRlZmluZWQsIHk6IHVuZGVmaW5lZCB9XHJcbiAgICAgIGxldCBwMXIgPSB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkIH1cclxuICAgICAgLy/pgJrov4dwMOOAgXAx44CBcDLorqHnrpdwMeeCueeahOWBmuaOp+WItueCuXAxbOWSjOWPiOaOp+WItueCuXAxclxyXG4gICAgICAvL+iuoeeul+WQkemHj3AwX3Ax5ZKMcDFfcDJcclxuICAgICAgbGV0IHAwX3AxID0geyB4OiBwMS54IC0gcDAueCwgeTogcDEueSAtIHAwLnkgfVxyXG4gICAgICBsZXQgcDFfcDIgPSB7IHg6IHAyLnggLSBwMS54LCB5OiBwMi55IC0gcDEueSB9XHJcbiAgICAgIC8v5bm26K6h566X5qihXHJcbiAgICAgIGxldCBkMDEgPSBNYXRoLnNxcnQocDBfcDEueCAqIHAwX3AxLnggKyBwMF9wMS55ICogcDBfcDEueSlcclxuICAgICAgbGV0IGQxMiA9IE1hdGguc3FydChwMV9wMi54ICogcDFfcDIueCArIHAxX3AyLnkgKiBwMV9wMi55KVxyXG4gICAgICAvL+WQkemHj+WNleS9jeWMllxyXG4gICAgICBsZXQgcDBfcDFfMSA9IHsgeDogcDBfcDEueCAvIGQwMSwgeTogcDBfcDEueSAvIGQwMSB9XHJcbiAgICAgIGxldCBwMV9wMl8xID0geyB4OiBwMV9wMi54IC8gZDEyLCB5OiBwMV9wMi55IC8gZDEyIH1cclxuICAgICAgLy/orqHnrpflkJHph49wMF9wMeWSjHAxX3Ay55qE5aS56KeS5bmz5YiG57q/5ZCR6YePXHJcbiAgICAgIGxldCBwMF9wMV9wMiA9IHsgeDogcDBfcDFfMS54ICsgcDFfcDJfMS54LCB5OiBwMF9wMV8xLnkgKyBwMV9wMl8xLnkgfVxyXG4gICAgICAvL+iuoeeul+WQkemHjyBwMF9wMV9wMiDnmoTmqKFcclxuICAgICAgbGV0IGQwMTIgPSBNYXRoLnNxcnQocDBfcDFfcDIueCAqIHAwX3AxX3AyLnggKyBwMF9wMV9wMi55ICogcDBfcDFfcDIueSlcclxuICAgICAgLy/ljZXkvY3ljJblkJHph49wMF9wMV9wMlxyXG4gICAgICBsZXQgcDBfcDFfcDJfMSA9IHsgeDogcDBfcDFfcDIueCAvIGQwMTIsIHk6IHAwX3AxX3AyLnkgLyBkMDEyIH1cclxuICAgICAgLy/liKTmlq1wMOOAgXAx44CBcDLmmK/lkKblhbHnur/vvIzov5nph4zliKTlrprlkJHph49wMF9wMeWSjHAxX3Ay55qE5aS56KeS55qE5L2Z5bym5ZKMMeeahOW3ruWAvOWwj+S6jmXlsLHorqTkuLrkuInngrnlhbHnur9cclxuICAgICAgbGV0IGNvc0VfcDBwMXAyID0gKHAwX3AxXzEueCAqIHAxX3AyXzEueCArIHAwX3AxXzEueSAqIHAxX3AyXzEueSkgLyAxXHJcbiAgICAgIC8v5YWx57q/XHJcbiAgICAgIGlmIChNYXRoLmFicygxIC0gY29zRV9wMHAxcDIpIDwgZSkge1xyXG4gICAgICAgIC8v6K6h566XcDFs55qE5Z2Q5qCHXHJcbiAgICAgICAgcDFsLnggPSBwMS54IC0gcDFfcDJfMS54ICogZDAxICogdFxyXG4gICAgICAgIHAxbC55ID0gcDEueSAtIHAxX3AyXzEueSAqIGQwMSAqIHRcclxuICAgICAgICAvL+iuoeeul3AxcueahOWdkOagh1xyXG4gICAgICAgIHAxci54ID0gcDEueCArIHAwX3AxXzEueCAqIGQxMiAqIHRcclxuICAgICAgICBwMXIueSA9IHAxLnkgKyBwMF9wMV8xLnkgKiBkMTIgKiB0XHJcbiAgICAgIH1cclxuICAgICAgLy/pnZ7lhbHnur9cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy/orqHnrpdwMWznmoTlnZDmoIdcclxuICAgICAgICBwMWwueCA9IHAxLnggLSBwMF9wMV9wMl8xLnggKiBkMDEgKiB0XHJcbiAgICAgICAgcDFsLnkgPSBwMS55IC0gcDBfcDFfcDJfMS55ICogZDAxICogdFxyXG4gICAgICAgIC8v6K6h566XcDFy55qE5Z2Q5qCHXHJcbiAgICAgICAgcDFyLnggPSBwMS54ICsgcDBfcDFfcDJfMS54ICogZDEyICogdFxyXG4gICAgICAgIHAxci55ID0gcDEueSArIHAwX3AxX3AyXzEueSAqIGQxMiAqIHRcclxuICAgICAgfVxyXG4gICAgICAvL+iusOW9lei1t+eCue+8iOe7iOeCue+8ieeahOW3puWPs+aPkuWAvOaOp+WItueCueWPiuWAkuaVsOesrOS6jOS4quaOp+WItueCuVxyXG4gICAgICBpZiAoayA9PSBuIC0gMSkge1xyXG4gICAgICAgIGNhcmRpbmFsUG9pbnRzWzBdID0gcDFcclxuICAgICAgICBjYXJkaW5hbFBvaW50c1sxXSA9IHAxclxyXG4gICAgICAgIGNhcmRpbmFsUG9pbnRzWyhuIC0gMikgKiAzICsgMiArIDNdID0gcDFsXHJcbiAgICAgICAgY2FyZGluYWxQb2ludHNbKG4gLSAyKSAqIDMgKyAyICsgNF0gPSBjUG9pbnRzW25dXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy/orrDlvZXkuIvov5nkuInkuKrmjqfliLbngrlcclxuICAgICAgICBjYXJkaW5hbFBvaW50c1trICogMyArIDIgKyAwXSA9IHAxbFxyXG4gICAgICAgIGNhcmRpbmFsUG9pbnRzW2sgKiAzICsgMiArIDFdID0gcDFcclxuICAgICAgICBjYXJkaW5hbFBvaW50c1trICogMyArIDIgKyAyXSA9IHAxclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FyZGluYWxQb2ludHNcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVBvaW50c0ZCWjMocG9pbnRzLCBwYXJ0KSB7XHJcbiAgICBpZiAoIXBhcnQpIHBhcnQgPSAyMFxyXG4gICAgLy/ojrflj5blvoXmi4bliIbnmoTngrlcclxuICAgIGxldCBiZXppZXJQdHMgPSBbXVxyXG4gICAgbGV0IHNjYWxlID0gMC4wNVxyXG4gICAgaWYgKHBhcnQgPiAwKSB7XHJcbiAgICAgIHNjYWxlID0gMSAvIHBhcnRcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDM7KSB7XHJcbiAgICAgIC8v6LW35aeL54K5XHJcbiAgICAgIGxldCBwb2ludFMgPSBwb2ludHNbaV1cclxuICAgICAgLy/nrKzkuIDkuKrmjqfliLbngrlcclxuICAgICAgbGV0IHBvaW50QzEgPSBwb2ludHNbaSArIDFdXHJcbiAgICAgIC8v56ys5LqM5Liq5o6n5Yi254K5XHJcbiAgICAgIGxldCBwb2ludEMyID0gcG9pbnRzW2kgKyAyXVxyXG4gICAgICAvL+e7k+adn+eCuVxyXG4gICAgICBsZXQgcG9pbnRFID0gcG9pbnRzW2kgKyAzXVxyXG4gICAgICBiZXppZXJQdHMucHVzaChwb2ludFMpXHJcbiAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMTspIHtcclxuICAgICAgICAvL+S4ieasoei0neWhnuWwlOabsue6v+WFrOW8j1xyXG4gICAgICAgIGxldCB4ID1cclxuICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogKDEgLSB0KSAqIHBvaW50Uy54ICtcclxuICAgICAgICAgIDMgKiB0ICogKDEgLSB0KSAqICgxIC0gdCkgKiBwb2ludEMxLnggK1xyXG4gICAgICAgICAgMyAqIHQgKiB0ICogKDEgLSB0KSAqIHBvaW50QzIueCArXHJcbiAgICAgICAgICB0ICogdCAqIHQgKiBwb2ludEUueFxyXG4gICAgICAgIGxldCB5ID1cclxuICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogKDEgLSB0KSAqIHBvaW50Uy55ICtcclxuICAgICAgICAgIDMgKiB0ICogKDEgLSB0KSAqICgxIC0gdCkgKiBwb2ludEMxLnkgK1xyXG4gICAgICAgICAgMyAqIHQgKiB0ICogKDEgLSB0KSAqIHBvaW50QzIueSArXHJcbiAgICAgICAgICB0ICogdCAqIHQgKiBwb2ludEUueVxyXG4gICAgICAgIGxldCBwb2ludCA9IHsgeDogeCwgeTogeSB9XHJcbiAgICAgICAgYmV6aWVyUHRzLnB1c2gocG9pbnQpXHJcbiAgICAgICAgdCArPSBzY2FsZVxyXG4gICAgICB9XHJcbiAgICAgIGkgKz0gM1xyXG4gICAgICBpZiAoaSA+PSBwb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgYmV6aWVyUHRzLnB1c2gocG9pbnRTKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmV6aWVyUHRzXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3QXNzZW1ibGVcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBbGpCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQTZoQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Draw/drawAssemble.js\n"); /***/ }), /***/ "./src/Draw/drawAttackArrow.js": /*!*************************************!*\ !*** ./src/Draw/drawAttackArrow.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DrawAttackArrow; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: drawAttackArrow\r\n * @author: Administrator\r\n * @date: 2022-06-15 16:38\r\n * @description:drawAttackArrow\r\n * @update: 2022-06-15 16:38\r\n */\n\n\n\nvar DrawAttackArrow = /*#__PURE__*/function (_Draw) {\n function DrawAttackArrow(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawAttackArrow);\n return _callSuper(this, DrawAttackArrow, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawAttackArrow, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawAttackArrow, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawAttackArrow, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键确定,右键结束;CTRL+右键撤销', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var isMove = false;\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n var pos84 = _this.cartesian3Towgs84(cartesian, _this.viewer);\n var lastPos84 = cache_positions[cache_positions.length - 1];\n if (lastPos84 && lastPos84.lng === pos84.lng && lastPos84.lat === pos84.lat) {\n return;\n }\n if (!_this.entityHasCreated) {\n var polyline_id = DrawAttackArrow.create_arrow_polygon(_this);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian));\n cache_positions.push(pos84);\n isMove = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n if (isMove) {\n _this.positions.pop();\n }\n cb(null, _this.positions, c);\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n isMove = true;\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '2D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, _this.positions, c);\n } else {\n if (!_this.entityHasCreated) {\n var polyline_id = DrawAttackArrow.create_arrow_polygon(_this);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n if (!_this.entityHasCreated) {\n var polyline_id = DrawAttackArrow.create_arrow_polygon(_this, _this._sdk2D.viewer);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n isMove = false;\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.event2D.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n if (isMove) {\n _this.positions.pop();\n }\n cb(null, _this.positions, c);\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n isMove = true;\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n });\n this.event2D.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event2D.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '3D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, _this.positions, c);\n } else {\n if (!_this.entityHasCreated) {\n var polyline_id = DrawAttackArrow.create_arrow_polygon(_this, _this._sdk2D.viewer);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n }\n });\n });\n }\n }\n }\n }], [{\n key: \"create_arrow_polygon\",\n value: function create_arrow_polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n that.entityHasCreated = true;\n var id = that.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n var arr = that.computeAttackArrow(that.positions);\n for (var i = 0; i < arr.length; i++) {\n if (isNaN(arr[i].x)) {\n arr = [];\n break;\n }\n }\n return new Cesium.PolygonHierarchy(arr);\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3QXR0YWNrQXJyb3cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3QXR0YWNrQXJyb3cuanM/ZGQ0YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGRyYXdBdHRhY2tBcnJvd1xyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA2LTE1IDE2OjM4XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmRyYXdBdHRhY2tBcnJvd1xyXG4gKiBAdXBkYXRlOiAyMDIyLTA2LTE1IDE2OjM4XHJcbiAqL1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuL2RyYXcnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3QXR0YWNrQXJyb3cgZXh0ZW5kcyBEcmF3IHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9hcnJvd19wb2x5Z29uKHRoYXQsIHZpZXdlciA9IHRoYXQudmlld2VyKSB7XHJcbiAgICB0aGF0LmVudGl0eUhhc0NyZWF0ZWQgPSB0cnVlXHJcbiAgICBsZXQgaWQgPSB0aGF0LnJhbmRvbVN0cmluZygpXHJcbiAgICB2aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5CT1RILFxyXG4gICAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IHRoYXQuY29tcHV0ZUF0dGFja0Fycm93KHRoYXQucG9zaXRpb25zKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChpc05hTihhcnJbaV0ueCkpIHtcclxuICAgICAgICAgICAgICAgIGFyciA9IFtdXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGFycilcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIHN0YXJ0KGNiKSB7XHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcblxyXG4gICAgICBsZXQgaW50b1xyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUruehruWumu+8jOWPs+mUrue7k+adn++8m0NUUkwr5Y+z6ZSu5pKk6ZSAJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLnBvaW50c19pZHMgPSBbXSAvL+WtmOaUvuW3pumUrueCueWHu+aXtuS4tOaXtua3u+WKoOeahHBvaW5055qEaWRcclxuICAgICAgbGV0IGNhY2hlX3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBpc01vdmUgPSBmYWxzZVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaW50byA9ICczRCdcclxuICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgbGV0IGxhc3RQb3M4NCA9IGNhY2hlX3Bvc2l0aW9uc1tjYWNoZV9wb3NpdGlvbnMubGVuZ3RoIC0gMV1cclxuICAgICAgICBpZihsYXN0UG9zODQgJiYgKGxhc3RQb3M4NC5sbmcgPT09IHBvczg0LmxuZyAmJiBsYXN0UG9zODQubGF0ID09PSBwb3M4NC5sYXQpKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdBdHRhY2tBcnJvdy5jcmVhdGVfYXJyb3dfcG9seWdvbih0aGlzKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2gocG9zODQpXHJcbiAgICAgICAgaXNNb3ZlID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYyA9IFtdXHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLnBvaW50c19pZHNbMF0pLnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaChpdCA9PiB7XHJcbiAgICAgICAgICAgIGMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0LCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgaWYgKGlzTW92ZSkge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgICAgY2IobnVsbCwgdGhpcy5wb3NpdGlvbnMsIGMpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpc01vdmUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KFxyXG4gICAgICAgICAgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnRfa2V5Ym9hcmRfY3RybCgoKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnBvcCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICBsZXQgYyA9IFtdXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMucG9pbnRzX2lkc1swXSkucG9seWdvbi5oaWVyYXJjaHkuZ2V0VmFsdWUoKS5wb3NpdGlvbnNcclxuICAgICAgICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaChpdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdCwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICBjYihudWxsLCB0aGlzLnBvc2l0aW9ucywgYylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZW50aXR5SGFzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdBdHRhY2tBcnJvdy5jcmVhdGVfYXJyb3dfcG9seWdvbih0aGlzKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgICAgICB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICghdGhpcy5faXMyRCAmJiB0aGlzLl9zZGsyRCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQyRCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuX3NkazJEKVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50byA9ICcyRCdcclxuICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdBdHRhY2tBcnJvdy5jcmVhdGVfYXJyb3dfcG9seWdvbih0aGlzLCB0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpKVxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgIGlzTW92ZSA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgYyA9IFtdXHJcbiAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuZXZlbnQyRC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLnBvaW50c19pZHNbMF0pLnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5mb3JFYWNoKGl0ID0+IHtcclxuICAgICAgICAgICAgICBjLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdCwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgaWYgKGlzTW92ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2IobnVsbCwgdGhpcy5wb3NpdGlvbnMsIGMpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlzTW92ZSA9IHRydWVcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgICAgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19zdGFydF9rZXlib2FyZF9jdHJsKCgpID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGMgPSBbXVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5wb2ludHNfaWRzWzBdKS5wb2x5Z29uLmhpZXJhcmNoeS5nZXRWYWx1ZSgpLnBvc2l0aW9uc1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLmZvckVhY2goaXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdCwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgIGNiKG51bGwsIHRoaXMucG9zaXRpb25zLCBjKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9seWxpbmVfaWQgPSBEcmF3QXR0YWNrQXJyb3cuY3JlYXRlX2Fycm93X3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAoKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMikgKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUExUEE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Draw/drawAttackArrow.js\n"); /***/ }), /***/ "./src/Draw/drawCircle.js": /*!********************************!*\ !*** ./src/Draw/drawCircle.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DrawCircle; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: drawCircle\r\n * @author: Administrator\r\n * @date: 2022-06-15 14:55\r\n * @description:drawCircle\r\n * @update: 2022-06-15 14:55\r\n */\n\n\n\nvar DrawCircle = /*#__PURE__*/function (_Draw) {\n function DrawCircle(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawCircle);\n return _callSuper(this, DrawCircle, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawCircle, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawCircle, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createCirclePolygon = function createCirclePolygon() {\n var viewer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : that.viewer;\n var a = viewer.entities.add(new Cesium.Entity({\n id: that.circle_id,\n position: new Cesium.CallbackProperty(function (e) {\n if (endpoint) {\n var c = that.computeMidpoint(center, endpoint);\n return Cesium.Cartesian3.fromDegrees(c.lng, c.lat, endpoint.alt);\n } else {\n return Cesium.Cartesian3();\n }\n }, false),\n label: {\n text: new Cesium.CallbackProperty(function (e) {\n if (radius > 1000) {\n return '半径:' + (radius / 1000).toFixed(2) + ' 公里';\n }\n return '半径:' + radius + ' 米';\n }, false),\n font: '20px Microsoft YaHei',\n distanceDisplayCondition: 10000000,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n fillColor: Cesium.Color.fromCssColorString('#f5ce0a'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE\n },\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(positions));\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function (e) {\n return radius_points;\n }, false),\n width: 2,\n material: Cesium.Color.fromCssColorString('#c1c505').withAlpha(0.5),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n };\n _superPropGet(DrawCircle, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键开始,右键取消', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n var clickNum = 0;\n this.circle_id = this.randomString(); //圆id\n var radius_points = [];\n var cache_points = [];\n var radius = 1; //默认半径\n var positions = [];\n var center = {};\n var endpoint = null;\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n if (clickNum === 1) {\n _this.point_id = _this.create_point(cartesian);\n center = _this.cartesian3Towgs84(cartesian, _this.viewer);\n positions = _this.createCircle(center, 0.01);\n cache_points.push(cartesian);\n createCirclePolygon();\n }\n if (clickNum === 2) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n _this.end();\n cb(null, {\n center: center,\n radius: Number(radius)\n });\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.end();\n cb(false);\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (clickNum) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb(false);\n } else {\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n if (clickNum === 1) {\n _this.point_id = _this.create_point(cartesian);\n center = _this.cartesian3Towgs84(cartesian, _this.viewer);\n cache_points.push(cartesian);\n createCirclePolygon();\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n }\n if (clickNum === 2) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n _this.end();\n cb(null, {\n center: center,\n radius: Number(radius)\n });\n }\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n if (clickNum === 1) {\n _this.point_id = _this.create_point(cartesian, _this._sdk2D.viewer);\n center = _this.cartesian3Towgs84(cartesian, _this.viewer);\n positions = _this.createCircle(center, 0.01);\n cache_points.push(cartesian);\n createCirclePolygon(_this._sdk2D.viewer);\n }\n if (clickNum === 2) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n _this.end();\n cb(null, {\n center: center,\n radius: Number(radius)\n });\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.end();\n cb(false);\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n if (clickNum) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb(false);\n } else {\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n if (clickNum === 1) {\n _this.point_id = _this.create_point(cartesian, _this._sdk2D.viewer);\n center = _this.cartesian3Towgs84(cartesian, _this.viewer);\n cache_points.push(cartesian);\n createCirclePolygon(_this._sdk2D.viewer);\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n }\n if (clickNum === 2) {\n radius_points = cache_points.concat(cartesian);\n endpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n radius = _this.computeDistance2([center, endpoint]);\n positions = _this.createCircle(center, radius);\n _this.end();\n cb(null, {\n center: center,\n radius: Number(radius)\n });\n }\n }\n });\n });\n }\n var that = this;\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n this.remove_entity(this.circle_id);\n this.remove_entity(this.point_id);\n YJ.Measure.SetMeasureStatus(false);\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.event2D && this.event2D.destroy();\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3Q2lyY2xlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0RyYXcvZHJhd0NpcmNsZS5qcz9jYmFmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogZHJhd0NpcmNsZVxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA2LTE1IDE0OjU1XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmRyYXdDaXJjbGVcclxuICogQHVwZGF0ZTogMjAyMi0wNi0xNSAxNDo1NVxyXG4gKi9cclxuaW1wb3J0IERyYXcgZnJvbSAnLi9kcmF3J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vTW91c2VUaXAnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uL0V2ZW50J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhd0NpcmNsZSBleHRlbmRzIERyYXcge1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICBzdGFydChjYikge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICBsZXQgaW50b1xyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUruW8gOWni++8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICAgIGxldCBjbGlja051bSA9IDBcclxuICAgICAgdGhpcy5jaXJjbGVfaWQgPSB0aGlzLnJhbmRvbVN0cmluZygpIC8v5ZyGaWRcclxuICAgICAgbGV0IHJhZGl1c19wb2ludHMgPSBbXVxyXG4gICAgICBsZXQgY2FjaGVfcG9pbnRzID0gW11cclxuICAgICAgbGV0IHJhZGl1cyA9IDEgLy/pu5jorqTljYrlvoRcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBjZW50ZXIgPSB7fVxyXG4gICAgICBsZXQgZW5kcG9pbnQgPSBudWxsXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaW50byA9ICczRCdcclxuICAgICAgICB0aGlzLnRpcC5zZXRfdGV4dCgn5YaN5qyh5bem6ZSu77yM5a6M5oiQ57uY5Yi277yb5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICBjbGlja051bSsrXHJcbiAgICAgICAgaWYgKGNsaWNrTnVtID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnBvaW50X2lkID0gdGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgY2VudGVyID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgcG9zaXRpb25zID0gdGhpcy5jcmVhdGVDaXJjbGUoY2VudGVyLCAwLjAxKVxyXG4gICAgICAgICAgY2FjaGVfcG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgY3JlYXRlQ2lyY2xlUG9seWdvbigpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbGlja051bSA9PT0gMikge1xyXG4gICAgICAgICAgcmFkaXVzX3BvaW50cyA9IGNhY2hlX3BvaW50cy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICByYWRpdXMgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW2NlbnRlciwgZW5kcG9pbnRdKVxyXG4gICAgICAgICAgcG9zaXRpb25zID0gdGhpcy5jcmVhdGVDaXJjbGUoY2VudGVyLCByYWRpdXMpXHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYihudWxsLCB7IGNlbnRlciwgcmFkaXVzOiBOdW1iZXIocmFkaXVzKSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgY2IoZmFsc2UpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChjbGlja051bSkge1xyXG4gICAgICAgICAgcmFkaXVzX3BvaW50cyA9IGNhY2hlX3BvaW50cy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICByYWRpdXMgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW2NlbnRlciwgZW5kcG9pbnRdKVxyXG4gICAgICAgICAgcG9zaXRpb25zID0gdGhpcy5jcmVhdGVDaXJjbGUoY2VudGVyLCByYWRpdXMpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRpcC5zZXRfdGV4dCgn5YaN5qyh5bem6ZSu77yM5a6M5oiQ57uY5Yi277yb5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgICAgY2xpY2tOdW0rK1xyXG4gICAgICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50X2lkID0gdGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgIGNlbnRlciA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgICBjYWNoZV9wb2ludHMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgY3JlYXRlQ2lyY2xlUG9seWdvbigpXHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDIpIHtcclxuICAgICAgICAgICAgICByYWRpdXNfcG9pbnRzID0gY2FjaGVfcG9pbnRzLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgcmFkaXVzID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtjZW50ZXIsIGVuZHBvaW50XSlcclxuICAgICAgICAgICAgICBwb3NpdGlvbnMgPSB0aGlzLmNyZWF0ZUNpcmNsZShjZW50ZXIsIHJhZGl1cylcclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgY2IobnVsbCwgeyBjZW50ZXIsIHJhZGl1czogTnVtYmVyKHJhZGl1cykgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50MkQgPSBuZXcgTW91c2VFdmVudCh0aGlzLl9zZGsyRClcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludG8gPSAnMkQnXHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRfdGV4dCgn5YaN5qyh5bem6ZSu77yM5a6M5oiQ57uY5Yi277yb5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgIGNsaWNrTnVtKytcclxuICAgICAgICAgIGlmIChjbGlja051bSA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50X2lkID0gdGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICAgIGNlbnRlciA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgcG9zaXRpb25zID0gdGhpcy5jcmVhdGVDaXJjbGUoY2VudGVyLCAwLjAxKVxyXG4gICAgICAgICAgICBjYWNoZV9wb2ludHMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgIGNyZWF0ZUNpcmNsZVBvbHlnb24odGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNsaWNrTnVtID09PSAyKSB7XHJcbiAgICAgICAgICAgIHJhZGl1c19wb2ludHMgPSBjYWNoZV9wb2ludHMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIHJhZGl1cyA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbY2VudGVyLCBlbmRwb2ludF0pXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IHRoaXMuY3JlYXRlQ2lyY2xlKGNlbnRlciwgcmFkaXVzKVxyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIGNiKG51bGwsIHsgY2VudGVyLCByYWRpdXM6IE51bWJlcihyYWRpdXMpIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKGNsaWNrTnVtKSB7XHJcbiAgICAgICAgICAgIHJhZGl1c19wb2ludHMgPSBjYWNoZV9wb2ludHMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIHJhZGl1cyA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbY2VudGVyLCBlbmRwb2ludF0pXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IHRoaXMuY3JlYXRlQ2lyY2xlKGNlbnRlciwgcmFkaXVzKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudGlwLnNldF90ZXh0KCflho3mrKHlt6bplK7vvIzlrozmiJDnu5jliLbvvJvlj7PplK7lj5bmtognKVxyXG4gICAgICAgICAgICAgIGNsaWNrTnVtKytcclxuICAgICAgICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRfaWQgPSB0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMuX3NkazJELnZpZXdlcilcclxuICAgICAgICAgICAgICAgIGNlbnRlciA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgICAgIGNhY2hlX3BvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNpcmNsZVBvbHlnb24odGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgICAgICAgKChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIpICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjbGlja051bSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmFkaXVzX3BvaW50cyA9IGNhY2hlX3BvaW50cy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICByYWRpdXMgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW2NlbnRlciwgZW5kcG9pbnRdKVxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zID0gdGhpcy5jcmVhdGVDaXJjbGUoY2VudGVyLCByYWRpdXMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgICBjYihudWxsLCB7IGNlbnRlciwgcmFkaXVzOiBOdW1iZXIocmFkaXVzKSB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNpcmNsZVBvbHlnb24odmlld2VyID0gdGhhdC52aWV3ZXIpIHtcclxuICAgICAgICBsZXQgYSA9IHZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGF0LmNpcmNsZV9pZCxcclxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlbmRwb2ludCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSB0aGF0LmNvbXB1dGVNaWRwb2ludChjZW50ZXIsIGVuZHBvaW50KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGMubG5nLCBjLmxhdCwgZW5kcG9pbnQuYWx0KVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhZGl1cyA+IDEwMDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICfljYrlvoTvvJonICsgKHJhZGl1cyAvIDEwMDApLnRvRml4ZWQoMikgKyAnIOWFrOmHjCdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAn5Y2K5b6E77yaJyArIHJhZGl1cyArICcg57GzJ1xyXG4gICAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgICBmb250OiAnMjBweCBNaWNyb3NvZnQgWWFIZWknLFxyXG4gICAgICAgICAgICAgIGRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbjogMTAwMDAwMDAsXHJcbiAgICAgICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2Y1Y2UwYScpLFxyXG4gICAgICAgICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvblR5cGU6IENlc2l1bS5DbGFzc2lmaWNhdGlvblR5cGUuQk9USCxcclxuICAgICAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShwb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhZGl1c19wb2ludHNcclxuICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgICAgbWF0ZXJpYWw6XHJcbiAgICAgICAgICAgICAgICBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjYzFjNTA1Jykud2l0aEFscGhhKDAuNSksXHJcbiAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmQoKSB7XHJcbiAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5jaXJjbGVfaWQpXHJcbiAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludF9pZClcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudDJEICYmIHRoaXMuZXZlbnQyRC5kZXN0cm95KClcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBOExBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTlPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQW9EQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Draw/drawCircle.js\n"); /***/ }), /***/ "./src/Draw/drawElliptic.js": /*!**********************************!*\ !*** ./src/Draw/drawElliptic.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DrawElliptic; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\nvar DrawElliptic = /*#__PURE__*/function (_Draw) {\n function DrawElliptic(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawElliptic);\n return _callSuper(this, DrawElliptic, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawElliptic, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawElliptic, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var calculateElliptic = function calculateElliptic() {\n var pointA = Cesium.Cartesian3.fromDegrees(cache_84_position[0].lng, cache_84_position[0].lat);\n var pointB = Cesium.Cartesian3.fromDegrees(cache_84_position[1].lng, cache_84_position[1].lat);\n var pointC = Cesium.Cartesian3.fromDegrees(cache_84_position[2].lng, cache_84_position[2].lat);\n if (clickNum === 1) {\n distanceAB = Cesium.Cartesian3.distance(pointA, pointB);\n semiMajorAxis = distanceAB;\n semiMinorAxis = semiMajorAxis / 2;\n var _start = {\n x: center.lng,\n y: center.lat\n };\n var end = {\n x: cache_84_position[1].lng,\n y: cache_84_position[1].lat\n };\n var rad = Math.PI / 180,\n lat1 = _start.y * rad,\n lat2 = end.y * rad,\n lon1 = _start.x * rad,\n lon2 = end.x * rad;\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n var radians = Math.atan2(a, b);\n var degrees = radians % (2 * Math.PI);\n bearing = 450 - (degrees * 180 / Math.PI < 0 ? 360 + degrees * 180 / Math.PI : degrees * 180 / Math.PI);\n }\n if (clickNum === 2) {\n distanceAC = Cesium.Cartesian3.distance(pointA, pointC);\n distanceBC = Cesium.Cartesian3.distance(pointB, pointC);\n var point1 = turf.point([cache_84_position[0].lng, cache_84_position[0].lat]);\n var point2 = turf.point([cache_84_position[1].lng, cache_84_position[1].lat]);\n var point3 = turf.point([cache_84_position[2].lng, cache_84_position[2].lat]);\n var bearing1 = turf.rhumbBearing(point1, point2);\n var bearing2 = turf.rhumbBearing(point2, point3);\n var angleDiff = Math.abs(bearing1 - bearing2);\n var finalAngle = angleDiff > 180 ? 360 - angleDiff : angleDiff;\n finalAngle = 180 - finalAngle;\n semiMinorAxis = distanceBC * Math.sin(Cesium.Math.toRadians(finalAngle));\n }\n };\n var createEllipticPolygon = function createEllipticPolygon() {\n var viewer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : that.viewer;\n viewer.entities.add(new Cesium.Entity({\n id: that.elliptic_id,\n position: Cesium.Cartesian3.fromDegrees(center.lng, center.lat),\n ellipse: {\n semiMinorAxis: new Cesium.CallbackProperty(function (e) {\n return semiMinorAxis;\n }, false),\n semiMajorAxis: new Cesium.CallbackProperty(function (e) {\n return semiMajorAxis;\n }, false),\n granularity: Cesium.Math.toRadians(0.1),\n rotation: new Cesium.CallbackProperty(function (e) {\n return Cesium.Math.toRadians(bearing);\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n }\n }));\n };\n _superPropGet(DrawElliptic, \"start\", this, 3)([]);\n var into;\n this.entity_ids = [];\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键开始,右键取消', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n var clickNum = 0;\n this.elliptic_id = this.randomString(); //圆id\n var radius_points = [];\n var cache_points = [];\n var cache_84_position = [];\n var radius = 1; //默认半径\n var positions = [];\n var center;\n var semiMinorAxis = 0;\n var semiMajorAxis = 0;\n var endpoint = null;\n var distanceAB = 0;\n var distanceAC = 0;\n var distanceBC = 0;\n var bearing = 0;\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n _this.points_ids.push(_this.create_point(cartesian));\n cache_points.push(cartesian);\n if (clickNum === 1) {\n cache_points = [cartesian, cartesian, cartesian];\n var pos84 = _this.cartesian3Towgs84(cartesian, _this.viewer);\n center = pos84;\n cache_84_position = [pos84, pos84, pos84];\n calculateElliptic();\n createEllipticPolygon();\n }\n if (clickNum === 2) {\n cache_points[1] = cartesian;\n cache_points[2] = cartesian;\n var _pos = _this.cartesian3Towgs84(cartesian, _this.viewer);\n cache_84_position[1] = _pos;\n cache_84_position[2] = _pos;\n }\n if (clickNum >= 3) {\n _this.end();\n cb(null, {\n center: center,\n bearing: bearing,\n semiMajorAxis: semiMajorAxis,\n semiMinorAxis: semiMinorAxis\n });\n }\n // if (clickNum === 2) {\n // radius_points = cache_points.concat(cartesian)\n // endpoint = this.cartesian3Towgs84(cartesian, this.viewer)\n // radius = this.computeDistance([center, endpoint])\n // positions = this.createCircle(center, radius)\n // this.end()\n // cb(null, { center, radius: Number(radius) })\n // }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.end();\n cb(false);\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n cache_points[clickNum] = cartesian;\n cache_84_position[clickNum] = _this.cartesian3Towgs84(cartesian, _this.viewer);\n if (clickNum !== 0) {\n calculateElliptic();\n }\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n _this.tip.set_text('再次左键,完成绘制;右键取消');\n clickNum++;\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n cache_points.push(cartesian);\n if (clickNum === 1) {\n cache_points = [cartesian, cartesian, cartesian];\n var pos84 = _this.cartesian3Towgs84(cartesian, _this.viewer);\n center = pos84;\n cache_84_position = [pos84, pos84, pos84];\n calculateElliptic();\n createEllipticPolygon(_this._sdk2D.viewer);\n }\n if (clickNum === 2) {\n cache_points[1] = cartesian;\n cache_points[2] = cartesian;\n var _pos2 = _this.cartesian3Towgs84(cartesian, _this.viewer);\n cache_84_position[1] = _pos2;\n cache_84_position[2] = _pos2;\n }\n if (clickNum >= 3) {\n _this.end();\n cb(null, {\n center: center,\n bearing: bearing,\n semiMajorAxis: semiMajorAxis,\n semiMinorAxis: semiMinorAxis\n });\n }\n // if (clickNum === 2) {\n // radius_points = cache_points.concat(cartesian)\n // endpoint = this.cartesian3Towgs84(cartesian, this.viewer)\n // radius = this.computeDistance([center, endpoint])\n // positions = this.createCircle(center, radius)\n // this.end()\n // cb(null, { center, radius: Number(radius) })\n // }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.end();\n cb(false);\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n cache_points[clickNum] = cartesian;\n cache_84_position[clickNum] = _this.cartesian3Towgs84(cartesian, _this.viewer);\n if (clickNum !== 0) {\n calculateElliptic();\n }\n });\n }\n var that = this;\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n var _this2 = this;\n this.remove_entity(this.elliptic_id);\n this.points_ids.forEach(function (id) {\n _this2.remove_entity(id);\n });\n YJ.Measure.SetMeasureStatus(false);\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.event2D && this.event2D.destroy();\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3RWxsaXB0aWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3RWxsaXB0aWMuanM/NmYwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRHJhdyBmcm9tICcuL2RyYXcnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3RWxsaXB0aWMgZXh0ZW5kcyBEcmF3IHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgc3RhcnQoY2IpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN1cGVyLnN0YXJ0KClcclxuICAgICAgbGV0IGludG9cclxuICAgICAgdGhpcy5lbnRpdHlfaWRzID0gW11cclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCflt6bplK7lvIDlp4vvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICBsZXQgY2xpY2tOdW0gPSAwXHJcbiAgICAgIHRoaXMuZWxsaXB0aWNfaWQgPSB0aGlzLnJhbmRvbVN0cmluZygpIC8v5ZyGaWRcclxuICAgICAgbGV0IHJhZGl1c19wb2ludHMgPSBbXVxyXG4gICAgICBsZXQgY2FjaGVfcG9pbnRzID0gW11cclxuICAgICAgbGV0IGNhY2hlXzg0X3Bvc2l0aW9uID0gW11cclxuICAgICAgbGV0IHJhZGl1cyA9IDEgLy/pu5jorqTljYrlvoRcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBjZW50ZXJcclxuICAgICAgbGV0IHNlbWlNaW5vckF4aXMgPSAwXHJcbiAgICAgIGxldCBzZW1pTWFqb3JBeGlzID0gMFxyXG4gICAgICBsZXQgZW5kcG9pbnQgPSBudWxsXHJcbiAgICAgIGxldCBkaXN0YW5jZUFCID0gMFxyXG4gICAgICBsZXQgZGlzdGFuY2VBQyA9IDBcclxuICAgICAgbGV0IGRpc3RhbmNlQkMgPSAwXHJcbiAgICAgIGxldCBiZWFyaW5nID0gMFxyXG5cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgdGhpcy50aXAuc2V0X3RleHQoJ+WGjeasoeW3pumUru+8jOWujOaIkOe7mOWItu+8m+WPs+mUruWPlua2iCcpXHJcbiAgICAgICAgY2xpY2tOdW0rK1xyXG4gICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgY2FjaGVfcG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgIGlmIChjbGlja051bSA9PT0gMSkge1xyXG4gICAgICAgICAgY2FjaGVfcG9pbnRzID0gW2NhcnRlc2lhbiwgY2FydGVzaWFuLCBjYXJ0ZXNpYW5dXHJcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBjZW50ZXIgPSBwb3M4NFxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24gPSBbcG9zODQsIHBvczg0LCBwb3M4NF1cclxuXHJcbiAgICAgICAgICBjYWxjdWxhdGVFbGxpcHRpYygpXHJcbiAgICAgICAgICBjcmVhdGVFbGxpcHRpY1BvbHlnb24oKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDIpIHtcclxuICAgICAgICAgIGNhY2hlX3BvaW50c1sxXSA9IGNhcnRlc2lhblxyXG4gICAgICAgICAgY2FjaGVfcG9pbnRzWzJdID0gY2FydGVzaWFuXHJcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvblsxXSA9IHBvczg0XHJcbiAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvblsyXSA9IHBvczg0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbGlja051bSA+PSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgY2IobnVsbCwgeyBjZW50ZXIsIGJlYXJpbmcsIHNlbWlNYWpvckF4aXMsIHNlbWlNaW5vckF4aXMgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKGNsaWNrTnVtID09PSAyKSB7XHJcbiAgICAgICAgLy8gICByYWRpdXNfcG9pbnRzID0gY2FjaGVfcG9pbnRzLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgLy8gICBlbmRwb2ludCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAvLyAgIHJhZGl1cyA9IHRoaXMuY29tcHV0ZURpc3RhbmNlKFtjZW50ZXIsIGVuZHBvaW50XSlcclxuICAgICAgICAvLyAgIHBvc2l0aW9ucyA9IHRoaXMuY3JlYXRlQ2lyY2xlKGNlbnRlciwgcmFkaXVzKVxyXG4gICAgICAgIC8vICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIC8vICAgY2IobnVsbCwgeyBjZW50ZXIsIHJhZGl1czogTnVtYmVyKHJhZGl1cykgfSlcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgICBjYWNoZV9wb2ludHNbY2xpY2tOdW1dID0gY2FydGVzaWFuXHJcbiAgICAgICAgY2FjaGVfODRfcG9zaXRpb25bY2xpY2tOdW1dID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgIGlmIChjbGlja051bSAhPT0gMCkge1xyXG4gICAgICAgICAgY2FsY3VsYXRlRWxsaXB0aWMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50MkQgPSBuZXcgTW91c2VFdmVudCh0aGlzLl9zZGsyRClcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludG8gPSAnMkQnXHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRfdGV4dCgn5YaN5qyh5bem6ZSu77yM5a6M5oiQ57uY5Yi277yb5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgIGNsaWNrTnVtKytcclxuICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgIGNhY2hlX3BvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgIGlmIChjbGlja051bSA9PT0gMSkge1xyXG4gICAgICAgICAgICBjYWNoZV9wb2ludHMgPSBbY2FydGVzaWFuLCBjYXJ0ZXNpYW4sIGNhcnRlc2lhbl1cclxuICAgICAgICAgICAgbGV0IHBvczg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICBjZW50ZXIgPSBwb3M4NFxyXG4gICAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbiA9IFtwb3M4NCwgcG9zODQsIHBvczg0XVxyXG4gIFxyXG4gICAgICAgICAgICBjYWxjdWxhdGVFbGxpcHRpYygpXHJcbiAgICAgICAgICAgIGNyZWF0ZUVsbGlwdGljUG9seWdvbih0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDIpIHtcclxuICAgICAgICAgICAgY2FjaGVfcG9pbnRzWzFdID0gY2FydGVzaWFuXHJcbiAgICAgICAgICAgIGNhY2hlX3BvaW50c1syXSA9IGNhcnRlc2lhblxyXG4gICAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIGNhY2hlXzg0X3Bvc2l0aW9uWzFdID0gcG9zODRcclxuICAgICAgICAgICAgY2FjaGVfODRfcG9zaXRpb25bMl0gPSBwb3M4NFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNsaWNrTnVtID49IDMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgY2IobnVsbCwgeyBjZW50ZXIsIGJlYXJpbmcsIHNlbWlNYWpvckF4aXMsIHNlbWlNaW5vckF4aXMgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGlmIChjbGlja051bSA9PT0gMikge1xyXG4gICAgICAgICAgLy8gICByYWRpdXNfcG9pbnRzID0gY2FjaGVfcG9pbnRzLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAvLyAgIGVuZHBvaW50ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgLy8gICByYWRpdXMgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZShbY2VudGVyLCBlbmRwb2ludF0pXHJcbiAgICAgICAgICAvLyAgIHBvc2l0aW9ucyA9IHRoaXMuY3JlYXRlQ2lyY2xlKGNlbnRlciwgcmFkaXVzKVxyXG4gICAgICAgICAgLy8gICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAvLyAgIGNiKG51bGwsIHsgY2VudGVyLCByYWRpdXM6IE51bWJlcihyYWRpdXMpIH0pXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY2FjaGVfcG9pbnRzW2NsaWNrTnVtXSA9IGNhcnRlc2lhblxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb25bY2xpY2tOdW1dID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgaWYgKGNsaWNrTnVtICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGN1bGF0ZUVsbGlwdGljKClcclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUVsbGlwdGljKCkge1xyXG4gICAgICAgIGxldCBwb2ludEEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjYWNoZV84NF9wb3NpdGlvblswXS5sbmcsIGNhY2hlXzg0X3Bvc2l0aW9uWzBdLmxhdCk7XHJcbiAgICAgICAgbGV0IHBvaW50QiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNhY2hlXzg0X3Bvc2l0aW9uWzFdLmxuZywgY2FjaGVfODRfcG9zaXRpb25bMV0ubGF0KTtcclxuICAgICAgICBsZXQgcG9pbnRDID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2FjaGVfODRfcG9zaXRpb25bMl0ubG5nLCBjYWNoZV84NF9wb3NpdGlvblsyXS5sYXQpO1xyXG4gICAgICAgIGlmIChjbGlja051bSA9PT0gMSkge1xyXG4gICAgICAgICAgZGlzdGFuY2VBQiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKTtcclxuICAgICAgICAgIHNlbWlNYWpvckF4aXMgPSBkaXN0YW5jZUFCXHJcbiAgICAgICAgICBzZW1pTWlub3JBeGlzID0gc2VtaU1ham9yQXhpcyAvIDI7XHJcblxyXG4gICAgICAgICAgbGV0IHN0YXJ0ID0geyB4OiBjZW50ZXIubG5nLCB5OiBjZW50ZXIubGF0IH1cclxuICAgICAgICAgIGxldCBlbmQgPSB7IHg6IGNhY2hlXzg0X3Bvc2l0aW9uWzFdLmxuZywgeTogY2FjaGVfODRfcG9zaXRpb25bMV0ubGF0IH1cclxuXHJcbiAgICAgICAgICBsZXQgcmFkID0gTWF0aC5QSSAvIDE4MCxcclxuICAgICAgICAgICAgbGF0MSA9IHN0YXJ0LnkgKiByYWQsXHJcbiAgICAgICAgICAgIGxhdDIgPSBlbmQueSAqIHJhZCxcclxuICAgICAgICAgICAgbG9uMSA9IHN0YXJ0LnggKiByYWQsXHJcbiAgICAgICAgICAgIGxvbjIgPSBlbmQueCAqIHJhZDtcclxuICAgICAgICAgIGNvbnN0IGEgPSBNYXRoLnNpbihsb24yIC0gbG9uMSkgKiBNYXRoLmNvcyhsYXQyKTtcclxuICAgICAgICAgIGNvbnN0IGIgPVxyXG4gICAgICAgICAgICBNYXRoLmNvcyhsYXQxKSAqIE1hdGguc2luKGxhdDIpIC1cclxuICAgICAgICAgICAgTWF0aC5zaW4obGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIE1hdGguY29zKGxvbjIgLSBsb24xKTtcclxuICAgICAgICAgIGNvbnN0IHJhZGlhbnMgPSBNYXRoLmF0YW4yKGEsIGIpXHJcbiAgICAgICAgICBjb25zdCBkZWdyZWVzID0gcmFkaWFucyAlICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgICBiZWFyaW5nID0gNDUwIC0gKChkZWdyZWVzICogMTgwKSAvIE1hdGguUEkgPCAwXHJcbiAgICAgICAgICAgID8gMzYwICsgKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSVxyXG4gICAgICAgICAgICA6IChkZWdyZWVzICogMTgwKSAvIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xpY2tOdW0gPT09IDIpIHtcclxuICAgICAgICAgIGRpc3RhbmNlQUMgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwb2ludEEsIHBvaW50Qyk7XHJcbiAgICAgICAgICBkaXN0YW5jZUJDID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9pbnRCLCBwb2ludEMpO1xyXG5cclxuICAgICAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFtjYWNoZV84NF9wb3NpdGlvblswXS5sbmcsIGNhY2hlXzg0X3Bvc2l0aW9uWzBdLmxhdF0pO1xyXG4gICAgICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoW2NhY2hlXzg0X3Bvc2l0aW9uWzFdLmxuZywgY2FjaGVfODRfcG9zaXRpb25bMV0ubGF0XSk7XHJcbiAgICAgICAgICBsZXQgcG9pbnQzID0gdHVyZi5wb2ludChbY2FjaGVfODRfcG9zaXRpb25bMl0ubG5nLCBjYWNoZV84NF9wb3NpdGlvblsyXS5sYXRdKTtcclxuICAgICAgICAgIGNvbnN0IGJlYXJpbmcxID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQxLCBwb2ludDIpO1xyXG4gICAgICAgICAgY29uc3QgYmVhcmluZzIgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludDIsIHBvaW50Myk7XHJcbiAgICAgICAgICBjb25zdCBhbmdsZURpZmYgPSBNYXRoLmFicyhiZWFyaW5nMSAtIGJlYXJpbmcyKTtcclxuICAgICAgICAgIGxldCBmaW5hbEFuZ2xlID0gYW5nbGVEaWZmID4gMTgwID8gMzYwIC0gYW5nbGVEaWZmIDogYW5nbGVEaWZmO1xyXG4gICAgICAgICAgZmluYWxBbmdsZSA9IDE4MCAtIGZpbmFsQW5nbGVcclxuXHJcbiAgICAgICAgICBzZW1pTWlub3JBeGlzID0gZGlzdGFuY2VCQyAqIE1hdGguc2luKENlc2l1bS5NYXRoLnRvUmFkaWFucyhmaW5hbEFuZ2xlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVFbGxpcHRpY1BvbHlnb24odmlld2VyID0gdGhhdC52aWV3ZXIpIHtcclxuICAgICAgICB2aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgICAgICBpZDogdGhhdC5lbGxpcHRpY19pZCxcclxuICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNlbnRlci5sbmcsIGNlbnRlci5sYXQpLFxyXG4gICAgICAgICAgICBlbGxpcHNlOiB7XHJcbiAgICAgICAgICAgICAgc2VtaU1pbm9yQXhpczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VtaU1pbm9yQXhpc1xyXG4gICAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgICBzZW1pTWFqb3JBeGlzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZW1pTWFqb3JBeGlzXHJcbiAgICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgIGdyYW51bGFyaXR5OiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4xKSxcclxuICAgICAgICAgICAgICByb3RhdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGJlYXJpbmcpXHJcbiAgICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuZCgpIHtcclxuICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLmVsbGlwdGljX2lkKVxyXG4gICAgdGhpcy5wb2ludHNfaWRzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlX2VudGl0eShpZClcclxuICAgIH0pXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQyRCAmJiB0aGlzLmV2ZW50MkQuZGVzdHJveSgpXHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUF4TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFvRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Draw/drawElliptic.js\n"); /***/ }), /***/ "./src/Draw/drawPincerArrow.js": /*!*************************************!*\ !*** ./src/Draw/drawPincerArrow.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DrawPincerArrow; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: drawPincerArrow\r\n * @author: Administrator\r\n * @date: 2022-06-15 17:12\r\n * @description:drawPincerArrow\r\n * @update: 2022-06-15 17:12\r\n */\n\n\n\nvar DrawPincerArrow = /*#__PURE__*/function (_Draw) {\n function DrawPincerArrow(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawPincerArrow);\n return _callSuper(this, DrawPincerArrow, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawPincerArrow, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawPincerArrow, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawPincerArrow, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键确定,右键取消;CTRL+右键撤销', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n if (!_this.entityHasCreated) {\n var polyline_id = DrawPincerArrow.create_arrow_polygon(_this);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n if (cache_positions.length === 5) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, cache_positions, c);\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.end();\n cb('取消绘制');\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '2D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb('取消绘制');\n } else {\n if (!_this.entityHasCreated) {\n var polyline_id = DrawPincerArrow.create_arrow_polygon(_this);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n if (cache_positions.length === 5) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, cache_positions, c);\n }\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n if (!_this.entityHasCreated) {\n var polyline_id = DrawPincerArrow.create_arrow_polygon(_this, _this._sdk2D.viewer);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n if (cache_positions.length === 5) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.event2D.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, cache_positions, c);\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.end();\n cb('取消绘制');\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n });\n this.event2D.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event2D.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '3D') {\n return;\n }\n if (_this.points_ids.length > 1) {\n _this.remove_entity(_this.points_ids.pop()); //移除point\n cache_positions.pop();\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb('取消绘制');\n } else {\n if (!_this.entityHasCreated) {\n var polyline_id = DrawPincerArrow.create_arrow_polygon(_this, _this._sdk2D.viewer);\n _this.points_ids.push(polyline_id);\n }\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n cache_positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.positions = cache_positions.concat(_this.cartesian3Towgs84(cartesian, _this.viewer));\n _this.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n if (cache_positions.length === 5) {\n var c = [];\n if (_this.points_ids.length > 2) {\n var positions = _this.event2D.viewer.entities.getById(_this.points_ids[0]).polygon.hierarchy.getValue().positions;\n positions.forEach(function (it) {\n c.push(_this.cartesian3Towgs84(it, _this.viewer));\n });\n }\n _this.end();\n cb(null, cache_positions, c);\n }\n }\n });\n });\n }\n }\n }\n }], [{\n key: \"create_arrow_polygon\",\n value: function create_arrow_polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n that.entityHasCreated = true;\n var id = that.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n var arr = that.computePincerArrow(that.positions);\n for (var i = 0; i < arr.length; i++) {\n if (isNaN(arr[i].x)) {\n arr = [];\n break;\n }\n }\n return new Cesium.PolygonHierarchy(arr);\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3UGluY2VyQXJyb3cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3UGluY2VyQXJyb3cuanM/ZjQ3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGRyYXdQaW5jZXJBcnJvd1xyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA2LTE1IDE3OjEyXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmRyYXdQaW5jZXJBcnJvd1xyXG4gKiBAdXBkYXRlOiAyMDIyLTA2LTE1IDE3OjEyXHJcbiAqL1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuL2RyYXcnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3UGluY2VyQXJyb3cgZXh0ZW5kcyBEcmF3IHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9hcnJvd19wb2x5Z29uKHRoYXQsIHZpZXdlciA9IHRoYXQudmlld2VyKSB7XHJcbiAgICB0aGF0LmVudGl0eUhhc0NyZWF0ZWQgPSB0cnVlXHJcbiAgICBsZXQgaWQgPSB0aGF0LnJhbmRvbVN0cmluZygpXHJcbiAgICB2aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5CT1RILFxyXG4gICAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IHRoYXQuY29tcHV0ZVBpbmNlckFycm93KHRoYXQucG9zaXRpb25zKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChpc05hTihhcnJbaV0ueCkpIHtcclxuICAgICAgICAgICAgICAgIGFyciA9IFtdXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGFycilcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIHN0YXJ0KGNiKSB7XHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIGxldCBpbnRvXHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu5a6a77yM5Y+z6ZSu5Y+W5raI77ybQ1RSTCvlj7PplK7mkqTplIAnLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9pbnRzX2lkcyA9IFtdIC8v5a2Y5pS+5bem6ZSu54K55Ye75pe25Li05pe25re75Yqg55qEcG9pbnTnmoRpZFxyXG4gICAgICBsZXQgY2FjaGVfcG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdQaW5jZXJBcnJvdy5jcmVhdGVfYXJyb3dfcG9seWdvbih0aGlzKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICBpZiAoY2FjaGVfcG9zaXRpb25zLmxlbmd0aCA9PT0gNSkge1xyXG4gICAgICAgICAgbGV0IGMgPSBbXVxyXG4gICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMucG9pbnRzX2lkc1swXSkucG9seWdvbi5oaWVyYXJjaHkuZ2V0VmFsdWUoKS5wb3NpdGlvbnNcclxuICAgICAgICAgICAgcG9zaXRpb25zLmZvckVhY2goaXQgPT4ge1xyXG4gICAgICAgICAgICAgIGMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0LCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYihudWxsLCBjYWNoZV9wb3NpdGlvbnMsIGMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICBjYign5Y+W5raI57uY5Yi2JylcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgIHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodF9rZXlib2FyZF9jdHJsKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnBvcCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0X2tleWJvYXJkX2N0cmwoKCkgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KFxyXG4gICAgICAgICAgICB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIGNiKCflj5bmtojnu5jliLYnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvbHlsaW5lX2lkID0gRHJhd1BpbmNlckFycm93LmNyZWF0ZV9hcnJvd19wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KFxyXG4gICAgICAgICAgICAgIHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYgKGNhY2hlX3Bvc2l0aW9ucy5sZW5ndGggPT09IDUpIHtcclxuICAgICAgICAgICAgICBsZXQgYyA9IFtdXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLnBvaW50c19pZHNbMF0pLnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaChpdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0LCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgY2IobnVsbCwgY2FjaGVfcG9zaXRpb25zLCBjKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICghdGhpcy5faXMyRCAmJiB0aGlzLl9zZGsyRCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQyRCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuX3NkazJEKVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50byA9ICcyRCdcclxuICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdQaW5jZXJBcnJvdy5jcmVhdGVfYXJyb3dfcG9seWdvbih0aGlzLCB0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpKVxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgIGlmIChjYWNoZV9wb3NpdGlvbnMubGVuZ3RoID09PSA1KSB7XHJcbiAgICAgICAgICAgIGxldCBjID0gW11cclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuZXZlbnQyRC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLnBvaW50c19pZHNbMF0pLnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zLmZvckVhY2goaXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoaXQsIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgY2IobnVsbCwgY2FjaGVfcG9zaXRpb25zLCBjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgY2IoJ+WPlua2iOe7mOWIticpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgICAgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0X2tleWJvYXJkX2N0cmwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoXHJcbiAgICAgICAgICAgICAgdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgIGNiKCflj5bmtojnu5jliLYnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9seWxpbmVfaWQgPSBEcmF3UGluY2VyQXJyb3cuY3JlYXRlX2Fycm93X3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAoKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMikgKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGlmIChjYWNoZV9wb3NpdGlvbnMubGVuZ3RoID09PSA1KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuZXZlbnQyRC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLnBvaW50c19pZHNbMF0pLnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5mb3JFYWNoKGl0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdCwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgY2FjaGVfcG9zaXRpb25zLCBjKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQS9QQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Draw/drawPincerArrow.js\n"); /***/ }), /***/ "./src/Draw/drawPoint.js": /*!*******************************!*\ !*** ./src/Draw/drawPoint.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\nvar DrawPoint = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @desc 获取坐标点\r\n * */\n function DrawPoint(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var is2D = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawPoint);\n return _callSuper(this, DrawPoint, [sdk, options, is2D]);\n }\n\n /**\r\n * @desc 开始动态获取坐标点\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPoint\r\n * @example draw.start((err,position)=>{\r\n *\r\n * })\r\n * */\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(DrawPoint, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawPoint, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var car = undefined;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('左键确定,右键结束;', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.sdk);\n this.event.mouse_left(function (movement, cartesian) {\n _this.end();\n var p = _this.cartesian3Towgs84(car || cartesian, _this.viewer);\n cb(null, p, Cesium);\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this.end();\n cb(false);\n });\n this.event.mouse_move(function (movement, cartesian) {\n car = cartesian;\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb(false);\n } else {\n _this.end();\n var p = _this.cartesian3Towgs84(car || cartesian, _this.viewer);\n cb(null, p);\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n _this.end();\n var p = _this.cartesian3Towgs84(car || cartesian, _this.viewer);\n cb(null, p, Cesium);\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n _this.end();\n cb(false);\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n car = cartesian;\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this.end();\n cb(false);\n } else {\n _this.end();\n var p = _this.cartesian3Towgs84(car || cartesian, _this.viewer);\n cb(null, p);\n }\n });\n });\n }\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.event2D && this.event2D.destroy();\n this.tip && this.tip.destroy();\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawPoint);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3UG9pbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3UG9pbnQuanM/ZmVmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vTW91c2VUaXAnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uL0V2ZW50J1xyXG5pbXBvcnQgRHJhdyBmcm9tIFwiLi9kcmF3XCI7XHJcblxyXG5cclxuY2xhc3MgRHJhd1BvaW50IGV4dGVuZHMgRHJhdyB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQGRlc2Mg6I635Y+W5Z2Q5qCH54K5XHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgaXMyRCA9IGZhbHNlKSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMsIGlzMkQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDlvIDlp4vliqjmgIHojrflj5blnZDmoIfngrlcclxuICAgKiBAbWV0aG9kIHN0YXJ0XHJcbiAgICogQHBhcmFtIGNiIHtmdW5jdGlvbn0g5Zue6LCD5Ye95pWwXHJcbiAgICogQG1lbWJlck9mIERyYXdQb2ludFxyXG4gICAqIEBleGFtcGxlIGRyYXcuc3RhcnQoKGVycixwb3NpdGlvbik9PntcclxuICAgKlxyXG4gICAqIH0pXHJcbiAgICogKi9cclxuXHJcbiAgc3RhcnQoY2IpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjYXIgPSB1bmRlZmluZWRcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCflt6bplK7noa7lrprvvIzlj7PplK7nu5PmnZ/vvJsnLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciB8fCBjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgIGNiKG51bGwsIHAsIENlc2l1bSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICBjYihmYWxzZSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgY2FyID0gY2FydGVzaWFuXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciB8fCBjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICBjYihudWxsLCBwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG5cclxuXHJcbiAgICAgIGlmICghdGhpcy5faXMyRCAmJiB0aGlzLl9zZGsyRCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQyRCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuX3NkazJEKVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FyIHx8IGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBjYihudWxsLCBwLCBDZXNpdW0pXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGNhciA9IGNhcnRlc2lhblxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgdGhpcy5ldmVudDJELmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciB8fCBjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICAgIGNiKG51bGwsIHApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKCkge1xyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudDJEICYmIHRoaXMuZXZlbnQyRC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRHJhd1BvaW50XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Draw/drawPoint.js\n"); /***/ }), /***/ "./src/Draw/drawPolygon.js": /*!*********************************!*\ !*** ./src/Draw/drawPolygon.js ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n/**\r\n * @extends Draw*/\nvar DrawPolygon = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param [options] {object} 面属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n * */\n function DrawPolygon(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, DrawPolygon);\n _this = _callSuper(this, DrawPolygon, [sdk, options]);\n _this.color = options.color || 'rgba(255,0,0,0.5)';\n _this.polygonHasCreated = false;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(DrawPolygon, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(DrawPolygon, [{\n key: \"start\",\n value:\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPolygon\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n function start(cb) {\n var _this2 = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n this.polygonHasCreated = false;\n _superPropGet(DrawPolygon, \"start\", this, 3)([]);\n YJ.Measure.SetMeasureStatus(true);\n var into;\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键确定,右键结束;CTRL+右键撤销', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var cache_84_position = [];\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawPolygon.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n // console.log(cache_positions)\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n // let positions = []\n // console.log(cache_positions)\n // cache_positions.forEach((item) => {\n // let p = this.cartesian3Towgs84(item)\n // console.log(item)\n // positions.push(p)\n // })\n cb(null, cache_84_position);\n _this2.end();\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n }\n });\n this.event.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb(null, cache_84_position);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawPolygon.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n // console.log(cache_positions)\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.position.x + _this2.viewer.canvas.width, movement.position.y);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawPolygon.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n // console.log(cache_positions)\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n // let positions = []\n // console.log(cache_positions)\n // cache_positions.forEach((item) => {\n // let p = this.cartesian3Towgs84(item)\n // console.log(item)\n // positions.push(p)\n // })\n cb(null, cache_84_position);\n _this2.end();\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n });\n this.event2D.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n }\n });\n this.event2D.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb(null, cache_84_position);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawPolygon.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n // console.log(cache_positions)\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n }\n }\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n that.polygonHasCreated = true;\n var id = that.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(that.positions);\n }),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function (e) {\n return that.positions.concat(that.positions[0]);\n }),\n width: 3,\n material: Cesium.Color.fromCssColorString(that.color).withAlpha(1),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawPolygon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3UG9seWdvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9EcmF3L2RyYXdQb2x5Z29uLmpzPzllZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi9FdmVudCdcclxuaW1wb3J0IERyYXcgZnJvbSAnLi9kcmF3J1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIERyYXcqL1xyXG5jbGFzcyBEcmF3UG9seWdvbiBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0g6Z2i5bGe5oCnXHJcbiAgICogQHBhcmFtIFtvcHRpb25zLmNvbG9yPXJnYmEoMTg1LDE0LDE0LDAuNTgpXSB7b2JqZWN0fSDnur/lsZ7mgKdcclxuXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlX3BvbHlnb24odGhhdCwgdmlld2VyID0gdGhhdC52aWV3ZXIpIHtcclxuICAgIHRoYXQucG9seWdvbkhhc0NyZWF0ZWQgPSB0cnVlXHJcbiAgICBsZXQgaWQgPSB0aGF0LnJhbmRvbVN0cmluZygpXHJcbiAgICB2aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5CT1RILFxyXG4gICAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0LnBvc2l0aW9ucylcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5jb2xvciksXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25zLmNvbmNhdCh0aGF0LnBvc2l0aW9uc1swXSlcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgd2lkdGg6IDMsXHJcbiAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0LmNvbG9yKS53aXRoQWxwaGEoMSksXHJcbiAgICAgICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIOW8gOWni+WKqOaAgee7mOWItumdolxyXG4gICAqIEBtZXRob2Qgc3RhcnRcclxuICAgKiBAcGFyYW0gY2Ige2Z1bmN0aW9ufSDlm57osIPlh73mlbBcclxuICAgKiBAbWVtYmVyT2YgRHJhd1BvbHlnb25cclxuICAgKiBAZXhhbXBsZSBkcmF3LnN0YXJ0KChlcnIscG9zaXRpb25zKT0+e1xyXG4gICAqXHJcbiAgICogfSlcclxuICAgKiAqL1xyXG4gIHN0YXJ0KGNiKSB7XHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvbHlnb25IYXNDcmVhdGVkID0gZmFsc2VcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgbGV0IGludG9cclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUruehruWumu+8jOWPs+mUrue7k+adn++8m0NUUkwr5Y+z6ZSu5pKk6ZSAJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLnBvaW50c19pZHMgPSBbXSAvL+WtmOaUvuW3pumUrueCueWHu+aXtuS4tOaXtua3u+WKoOeahHBvaW5055qEaWRcclxuICAgICAgbGV0IGNhY2hlX3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBjYWNoZV84NF9wb3NpdGlvbiA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnRvID0gJzNEJ1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdCh7IC4uLmNhcnRlc2lhbiB9KVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvbHlnb25IYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICBsZXQgcG9seWxpbmVfaWQgPSBEcmF3UG9seWdvbi5jcmVhdGVfcG9seWdvbih0aGlzKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGNhY2hlX3Bvc2l0aW9ucylcclxuICAgICAgICAvLyBjYWNoZV9wb3NpdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0ZW0pXHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhpdGVtKVxyXG4gICAgICAgIC8vICAgcG9zaXRpb25zLnB1c2gocClcclxuICAgICAgICAvLyB9KVxyXG4gICAgICAgIGNiKG51bGwsIGNhY2hlXzg0X3Bvc2l0aW9uKVxyXG4gICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdCh7IC4uLmNhcnRlc2lhbiB9KVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnRfa2V5Ym9hcmRfY3RybCgoKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMucG9pbnRzX2lkcy5wb3AoKSkgLy/np7vpmaRwb2ludFxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnBvcCgpXHJcbiAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbi5wb3AoKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIGNiKG51bGwsIGNhY2hlXzg0X3Bvc2l0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdQb2x5Z29uLmNyZWF0ZV9wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIGNhY2hlXzg0X3Bvc2l0aW9uLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50MkQgPSBuZXcgTW91c2VFdmVudCh0aGlzLl9zZGsyRClcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludG8gPSAnMkQnXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoeyAuLi5jYXJ0ZXNpYW4gfSlcclxuICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnggKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmICghdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICBsZXQgcG9seWxpbmVfaWQgPSBEcmF3UG9seWdvbi5jcmVhdGVfcG9seWdvbih0aGlzLCB0aGlzLl9zZGsyRC52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coY2FjaGVfcG9zaXRpb25zKVxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgICAvLyBjYWNoZV9wb3NpdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgLy8gICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoaXRlbSlcclxuICAgICAgICAgIC8vICAgY29uc29sZS5sb2coaXRlbSlcclxuICAgICAgICAgIC8vICAgcG9zaXRpb25zLnB1c2gocClcclxuICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICBjYihudWxsLCBjYWNoZV84NF9wb3NpdGlvbilcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KHsgLi4uY2FydGVzaWFuIH0pXHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54ICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbi5wb3AoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0X2tleWJvYXJkX2N0cmwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbi5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgICBjYihudWxsLCBjYWNoZV84NF9wb3NpdGlvbilcclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAoKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMikgKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvbHlsaW5lX2lkID0gRHJhd1BvbHlnb24uY3JlYXRlX3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMuX3NkazJELnZpZXdlcikpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3UG9seWdvblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE5UEE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBdU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Draw/drawPolygon.js\n"); /***/ }), /***/ "./src/Draw/drawPolyline.js": /*!**********************************!*\ !*** ./src/Draw/drawPolyline.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n/**\r\n * @extends Draw\r\n */\nvar DrawPolyline = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param [options] {object} 线属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n *\r\n * */\n function DrawPolyline(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawPolyline);\n _this = _callSuper(this, DrawPolyline, [sdk, options]);\n _this.options.curve = options.curve || false;\n var number = Number(options.number);\n if (!isNaN(number)) {\n if (number < 2) {\n _this.options.number = 2;\n } else {\n _this.options.number = number;\n }\n } else {\n _this.options.number = Infinity;\n }\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawPolyline, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawPolyline, [{\n key: \"smoothHandle\",\n value:\n // 平滑处理\n function smoothHandle(positions) {\n if (positions.length > 1) {\n var newPositions = [];\n var time = [];\n for (var i = 0; i < positions.length; i++) {\n time.push(i / (positions.length - 1));\n }\n var spline = new Cesium.CatmullRomSpline({\n times: time,\n points: positions\n });\n var length = positions.length * 20;\n for (var _i = 0; _i <= length; _i++) {\n var cartesian3 = spline.evaluate(_i / length);\n newPositions.push(cartesian3);\n }\n return newPositions;\n } else {\n return positions;\n }\n }\n\n /**\r\n * @desc 开始动态获绘制线\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPolyline\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n }, {\n key: \"start\",\n value: function start(cb) {\n var _this2 = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawPolyline, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('左键确定,右键结束;CTRL+右键撤销', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n\n var cache_positions = [];\n var car = undefined;\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n _this2.positions = cache_positions.concat(cartesian);\n _this2.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n if (!_this2.entityHasCreated) {\n var polyline_id = DrawPolyline.create_polyline(_this2, _this2.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n _this2.points_ids.push(_this2.create_point(cartesian, _this2.viewer));\n if (cache_positions.length >= _this2.options.number) {\n var positions = [];\n cache_positions.forEach(function (item) {\n positions.push(_this2.cartesian3Towgs84(item, _this2.viewer));\n });\n var smoothPos;\n if (_this2.options.curve) {\n var pos = _this2.smoothHandle(cache_positions);\n smoothPos = [];\n for (var i = 0; i < pos.length; i++) {\n smoothPos[i] = _this2.cartesian3Towgs84(pos[i], _this2.viewer);\n }\n }\n cb(null, positions, smoothPos);\n _this2.end();\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var positions = [];\n cache_positions.forEach(function (item) {\n positions.push(_this2.cartesian3Towgs84(item, _this2.viewer));\n });\n var smoothPos;\n if (_this2.options.curve) {\n var pos = _this2.smoothHandle(cache_positions);\n smoothPos = [];\n for (var i = 0; i < pos.length; i++) {\n smoothPos[i] = _this2.cartesian3Towgs84(pos[i], _this2.viewer);\n }\n }\n cb(null, positions, smoothPos);\n _this2.end();\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.positions = cache_positions.concat(cartesian);\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n var positions = [];\n cache_positions.forEach(function (item) {\n positions.push(_this2.cartesian3Towgs84(item, _this2.viewer));\n });\n var smoothPos;\n if (_this2.options.curve) {\n var pos = _this2.smoothHandle(cache_positions);\n smoothPos = [];\n for (var i = 0; i < pos.length; i++) {\n smoothPos[i] = _this2.cartesian3Towgs84(pos[i], _this2.viewer);\n }\n }\n cb(null, positions, smoothPos);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.entityHasCreated) {\n var polyline_id = DrawPolyline.create_polyline(_this2, _this2.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n _this2.points_ids.push(_this2.create_point(cartesian, _this2.viewer));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n _this2.positions = cache_positions.concat(cartesian);\n _this2.tip.setPosition(cartesian, movement.position.x + _this2.viewer.canvas.width, movement.position.y);\n if (!_this2.entityHasCreated) {\n var polyline_id = DrawPolyline.create_polyline(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var positions = [];\n cache_positions.forEach(function (item) {\n positions.push(_this2.cartesian3Towgs84(item, _this2.viewer));\n });\n var smoothPos;\n if (_this2.options.curve) {\n var pos = _this2.smoothHandle(cache_positions);\n smoothPos = [];\n for (var i = 0; i < pos.length; i++) {\n smoothPos[i] = _this2.cartesian3Towgs84(pos[i], _this2.viewer);\n }\n }\n cb(null, positions, smoothPos);\n _this2.end();\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.positions = cache_positions.concat(cartesian);\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n });\n this.event2D.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n }\n });\n this.event2D.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n var positions = [];\n cache_positions.forEach(function (item) {\n positions.push(_this2.cartesian3Towgs84(item, _this2.viewer));\n });\n var smoothPos;\n if (_this2.options.curve) {\n var pos = _this2.smoothHandle(cache_positions);\n smoothPos = [];\n for (var i = 0; i < pos.length; i++) {\n smoothPos[i] = _this2.cartesian3Towgs84(pos[i], _this2.viewer);\n }\n }\n cb(null, positions, smoothPos);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.entityHasCreated) {\n var polyline_id = DrawPolyline.create_polyline(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n }\n }\n }\n }], [{\n key: \"create_polyline\",\n value: function create_polyline(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n that.entityHasCreated = true;\n var id = that.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n if (that.options.curve) {\n var positions = that.smoothHandle(that.positions);\n return positions;\n } else {\n return that.positions;\n }\n }, false),\n width: 5,\n material: Cesium.Color.fromCssColorString(that.color),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawPolyline);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3UG9seWxpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRHJhdy9kcmF3UG9seWxpbmUuanM/MTAyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vTW91c2VUaXAnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uL0V2ZW50J1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuL2RyYXcnXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgRHJhd1xyXG4gKi9cclxuXHJcbmNsYXNzIERyYXdQb2x5bGluZSBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0g57q/5bGe5oCnXHJcbiAgICogQHBhcmFtIFtvcHRpb25zLmNvbG9yPXJnYmEoMTg1LDE0LDE0LDAuNTgpXSB7b2JqZWN0fSDnur/lsZ7mgKdcclxuICAgKlxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMub3B0aW9ucy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmUgfHwgZmFsc2VcclxuICAgIGxldCBudW1iZXIgPSBOdW1iZXIob3B0aW9ucy5udW1iZXIpXHJcbiAgICBpZiAoIWlzTmFOKG51bWJlcikpIHtcclxuICAgICAgaWYgKG51bWJlciA8IDIpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyID0gMlxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5udW1iZXIgPSBudW1iZXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5udW1iZXIgPSBJbmZpbml0eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2x5bGluZSh0aGF0LCB2aWV3ZXIgPSB0aGF0LnZpZXdlcikge1xyXG4gICAgdGhhdC5lbnRpdHlIYXNDcmVhdGVkID0gdHJ1ZVxyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhhdC5vcHRpb25zLmN1cnZlKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQuc21vb3RoSGFuZGxlKHRoYXQucG9zaXRpb25zKVxyXG4gICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgd2lkdGg6IDUsXHJcbiAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0LmNvbG9yKSxcclxuICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlkXHJcbiAgfVxyXG5cclxuICAvLyDlubPmu5HlpITnkIZcclxuICBzbW9vdGhIYW5kbGUocG9zaXRpb25zKSB7XHJcbiAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IG5ld1Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCB0aW1lID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aW1lLnB1c2goaSAvIChwb3NpdGlvbnMubGVuZ3RoIC0gMSkpXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNwbGluZSA9IG5ldyBDZXNpdW0uQ2F0bXVsbFJvbVNwbGluZSh7XHJcbiAgICAgICAgdGltZXM6IHRpbWUsXHJcbiAgICAgICAgcG9pbnRzOiBwb3NpdGlvbnNcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBsZW5ndGggPSBwb3NpdGlvbnMubGVuZ3RoICogMjBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2FydGVzaWFuMyA9IHNwbGluZS5ldmFsdWF0ZShpIC8gbGVuZ3RoKTtcclxuICAgICAgICBuZXdQb3NpdGlvbnMucHVzaChjYXJ0ZXNpYW4zKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3UG9zaXRpb25zXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHBvc2l0aW9uc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg5byA5aeL5Yqo5oCB6I6357uY5Yi257q/XHJcbiAgICogQG1ldGhvZCBzdGFydFxyXG4gICAqIEBwYXJhbSBjYiB7ZnVuY3Rpb259IOWbnuiwg+WHveaVsFxyXG4gICAqIEBtZW1iZXJPZiBEcmF3UG9seWxpbmVcclxuICAgKiBAZXhhbXBsZSBkcmF3LnN0YXJ0KChlcnIscG9zaXRpb25zKT0+e1xyXG4gICAqXHJcbiAgICogfSlcclxuICAgKiAqL1xyXG4gIHN0YXJ0KGNiKSB7XHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIGxldCBpbnRvXHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu5a6a77yM5Y+z6ZSu57uT5p2f77ybQ1RSTCvlj7PplK7mkqTplIAnLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9pbnRzX2lkcyA9IFtdIC8v5a2Y5pS+5bem6ZSu54K55Ye75pe25Li05pe25re75Yqg55qEcG9pbnTnmoRpZFxyXG5cclxuICAgICAgbGV0IGNhY2hlX3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBjYXIgPSB1bmRlZmluZWRcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICBsZXQgcG9seWxpbmVfaWQgPSBEcmF3UG9seWxpbmUuY3JlYXRlX3BvbHlsaW5lKHRoaXMsIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuXHJcbiAgICAgICAgaWYgKGNhY2hlX3Bvc2l0aW9ucy5sZW5ndGggPj0gdGhpcy5vcHRpb25zLm51bWJlcikge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0ZW0sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsZXQgc21vb3RoUG9zXHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1cnZlKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLnNtb290aEhhbmRsZShjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHNtb290aFBvcyA9IFtdXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgc21vb3RoUG9zW2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NbaV0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYihudWxsLCBwb3NpdGlvbnMsIHNtb290aFBvcylcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoaXRlbSwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IHNtb290aFBvc1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VydmUpIHtcclxuICAgICAgICAgIGxldCBwb3MgPSB0aGlzLnNtb290aEhhbmRsZShjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgICBzbW9vdGhQb3MgPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc21vb3RoUG9zW2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NbaV0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYihudWxsLCBwb3NpdGlvbnMsIHNtb290aFBvcylcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydF9rZXlib2FyZF9jdHJsKCgpID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0ZW0sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgbGV0IHNtb290aFBvc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1cnZlKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuc21vb3RoSGFuZGxlKGNhY2hlX3Bvc2l0aW9ucylcclxuICAgICAgICAgICAgICBzbW9vdGhQb3MgPSBbXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzbW9vdGhQb3NbaV0gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc1tpXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNiKG51bGwsIHBvc2l0aW9ucywgc21vb3RoUG9zKVxyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvbHlsaW5lX2lkID0gRHJhd1BvbHlsaW5lLmNyZWF0ZV9wb2x5bGluZSh0aGlzLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaChwb2x5bGluZV9pZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9pczJEICYmIHRoaXMuX3NkazJEKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudDJEID0gbmV3IE1vdXNlRXZlbnQodGhpcy5fc2RrMkQpXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRvID0gJzJEJ1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnggKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmICghdGhpcy5lbnRpdHlIYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdQb2x5bGluZS5jcmVhdGVfcG9seWxpbmUodGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaChwb2x5bGluZV9pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IHNtb290aFBvc1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXJ2ZSkge1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5zbW9vdGhIYW5kbGUoY2FjaGVfcG9zaXRpb25zKVxyXG4gICAgICAgICAgICBzbW9vdGhQb3MgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHNtb290aFBvc1tpXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zW2ldLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2IobnVsbCwgcG9zaXRpb25zLCBzbW9vdGhQb3MpXHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54ICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0X2tleWJvYXJkX2N0cmwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBsZXQgc21vb3RoUG9zXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXJ2ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuc21vb3RoSGFuZGxlKGNhY2hlX3Bvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgIHNtb290aFBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBzbW9vdGhQb3NbaV0gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc1tpXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNiKG51bGwsIHBvc2l0aW9ucywgc21vb3RoUG9zKVxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgICAgICgobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyKSArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmVudGl0eUhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdQb2x5bGluZS5jcmVhdGVfcG9seWxpbmUodGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMuX3NkazJELnZpZXdlcikpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3UG9seWxpbmVcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBeFRBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQW1TQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Draw/drawPolyline.js\n"); /***/ }), /***/ "./src/Draw/drawRect.js": /*!******************************!*\ !*** ./src/Draw/drawRect.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n/**\r\n * @extends Draw*/\nvar DrawRect = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param [options] {object} 面属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n * */\n function DrawRect(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawRect);\n _this = _callSuper(this, DrawRect, [sdk, options]);\n _this.rhumb = options.rhumb;\n _this.polygonHasCreated = false;\n _this.rect = [];\n _this.rectObj = [];\n _this.entity = null;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawRect, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawRect, [{\n key: \"start\",\n value:\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawRect\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n function start(cb) {\n var _this2 = this;\n var that = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawRect, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('左键确定,右键取消', that.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](that.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var cache_84_position = [];\n var cnt = 0;\n var firstPoint = null;\n var secondtPoint = null;\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n cnt++;\n var wgs84 = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n if (!_this2.polygonHasCreated) {\n _this2.polygonHasCreated = true;\n var polyline_id = DrawRect.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n firstPoint = wgs84;\n }\n if (cnt == 2) {\n secondtPoint = wgs84;\n _this2.end();\n cb(null, that.rectObj, [firstPoint, secondtPoint]);\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.end();\n cb('取消', '');\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (cnt == 1) {\n var wgs84 = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n _this2.calrect(firstPoint, wgs84);\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb('取消', '');\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n cnt++;\n var wgs84 = _this2.cartesian3Towgs84(cartesian);\n if (!_this2.polygonHasCreated) {\n _this2.polygonHasCreated = true;\n var polyline_id = DrawRect.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n firstPoint = wgs84;\n }\n if (cnt == 2) {\n _this2.calrect(firstPoint, wgs84);\n secondtPoint = wgs84;\n _this2.end();\n cb(null, that.rectObj, [firstPoint, secondtPoint]);\n }\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n cnt++;\n var wgs84 = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n if (!_this2.polygonHasCreated) {\n _this2.polygonHasCreated = true;\n var polyline_id = DrawRect.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n firstPoint = wgs84;\n }\n if (cnt == 2) {\n secondtPoint = wgs84;\n _this2.end();\n cb(null, that.rectObj, [firstPoint, secondtPoint]);\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.end();\n cb('取消', '');\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n if (cnt == 1) {\n var wgs84 = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n _this2.calrect(firstPoint, wgs84);\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb('取消', '');\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n cnt++;\n var wgs84 = _this2.cartesian3Towgs84(cartesian);\n if (!_this2.polygonHasCreated) {\n _this2.polygonHasCreated = true;\n var polyline_id = DrawRect.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n firstPoint = wgs84;\n }\n if (cnt == 2) {\n _this2.calrect(firstPoint, wgs84);\n secondtPoint = wgs84;\n _this2.end();\n cb(null, that.rectObj, [firstPoint, secondtPoint]);\n }\n }\n });\n });\n }\n }\n }\n }, {\n key: \"calrect\",\n value: function calrect(firstPoint, secondPoint) {\n var positions = [];\n var arr = [];\n var arr2 = [];\n positions.push([firstPoint.lng, firstPoint.lat, firstPoint.alt], [secondPoint.lng, secondPoint.lat, secondPoint.alt]);\n var bboxPolygon;\n if (positions.length === 2) {\n var line = turf.lineString(positions);\n var bbox = turf.bbox(line);\n bboxPolygon = turf.bboxPolygon(bbox);\n }\n if (bboxPolygon) {\n // console.log('bboxPolygon',bboxPolygon.geometry.coordinates[0])\n bboxPolygon.geometry.coordinates[0].forEach(function (item) {\n arr.push(item[0]);\n arr.push(item[1]);\n var obj = {\n lng: item[0],\n lat: item[1],\n alt: firstPoint.alt\n };\n arr2.push(obj);\n });\n this.rect = [].concat(arr);\n this.rectObj = [].concat(arr2);\n this.rectObj.pop();\n }\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n var id = that.randomString();\n viewer.entities.add(this.entity = new Cesium.Entity({\n id: id,\n polygon: {\n // classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(that.rect));\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n arcType: that.rhumb ? Cesium.ArcType.RHUMB : Cesium.ArcType.GEODESIC,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawRect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3UmVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9EcmF3L2RyYXdSZWN0LmpzPzYzYjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi9FdmVudCdcclxuaW1wb3J0IERyYXcgZnJvbSAnLi9kcmF3J1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIERyYXcqL1xyXG5jbGFzcyBEcmF3UmVjdCBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0g6Z2i5bGe5oCnXHJcbiAgICogQHBhcmFtIFtvcHRpb25zLmNvbG9yPXJnYmEoMTg1LDE0LDE0LDAuNTgpXSB7b2JqZWN0fSDnur/lsZ7mgKdcclxuXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5yaHVtYiA9IG9wdGlvbnMucmh1bWJcclxuICAgIHRoaXMucG9seWdvbkhhc0NyZWF0ZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5yZWN0ID0gW11cclxuICAgIHRoaXMucmVjdE9iaiA9IFtdXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVfcG9seWdvbih0aGF0LCB2aWV3ZXIgPSB0aGF0LnZpZXdlcikge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgKHRoaXMuZW50aXR5ID0gbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICAvLyBjbGFzc2lmaWNhdGlvblR5cGU6IENlc2l1bS5DbGFzc2lmaWNhdGlvblR5cGUuQk9USCxcclxuICAgICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFxyXG4gICAgICAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkodGhhdC5yZWN0KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgYXJjVHlwZTogdGhhdC5yaHVtYiA/IENlc2l1bS5BcmNUeXBlLlJIVU1CIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuICAgIClcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg5byA5aeL5Yqo5oCB57uY5Yi26Z2iXHJcbiAgICogQG1ldGhvZCBzdGFydFxyXG4gICAqIEBwYXJhbSBjYiB7ZnVuY3Rpb259IOWbnuiwg+WHveaVsFxyXG4gICAqIEBtZW1iZXJPZiBEcmF3UmVjdFxyXG4gICAqIEBleGFtcGxlIGRyYXcuc3RhcnQoKGVycixwb3NpdGlvbnMpPT57XHJcbiAgICpcclxuICAgKiB9KVxyXG4gICAqICovXHJcbiAgc3RhcnQoY2IpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICBsZXQgaW50b1xyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUruehruWumu+8jOWPs+mUruWPlua2iCcsIHRoYXQuc2RrKVxyXG4gICAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5wb2ludHNfaWRzID0gW10gLy/lrZjmlL7lt6bplK7ngrnlh7vml7bkuLTml7bmt7vliqDnmoRwb2ludOeahGlkXHJcbiAgICAgIGxldCBjYWNoZV9wb3NpdGlvbnMgPSBbXVxyXG4gICAgICBsZXQgY2FjaGVfODRfcG9zaXRpb24gPSBbXVxyXG4gICAgICBsZXQgY250ID0gMFxyXG4gICAgICBsZXQgZmlyc3RQb2ludCA9IG51bGxcclxuICAgICAgbGV0IHNlY29uZHRQb2ludCA9IG51bGxcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgY250KytcclxuICAgICAgICBsZXQgd2dzODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCA9IHRydWVcclxuICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdSZWN0LmNyZWF0ZV9wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaChwb2x5bGluZV9pZClcclxuICAgICAgICAgIGZpcnN0UG9pbnQgPSB3Z3M4NFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNudCA9PSAyKSB7XHJcbiAgICAgICAgICBzZWNvbmR0UG9pbnQgPSB3Z3M4NFxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgY2IobnVsbCwgdGhhdC5yZWN0T2JqLCBbZmlyc3RQb2ludCwgc2Vjb25kdFBvaW50XSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIGNiKCflj5bmtognLCAnJylcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGNudCA9PSAxKSB7XHJcbiAgICAgICAgICBsZXQgd2dzODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICB0aGlzLmNhbHJlY3QoZmlyc3RQb2ludCwgd2dzODQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICBjYign5Y+W5raIJywgJycpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgY250KytcclxuICAgICAgICAgICAgbGV0IHdnczg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pXHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9seWdvbkhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvbHlnb25IYXNDcmVhdGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdSZWN0LmNyZWF0ZV9wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgZmlyc3RQb2ludCA9IHdnczg0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjbnQgPT0gMikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FscmVjdChmaXJzdFBvaW50LCB3Z3M4NClcclxuICAgICAgICAgICAgICBzZWNvbmR0UG9pbnQgPSB3Z3M4NFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgICBjYihudWxsLCB0aGF0LnJlY3RPYmosIFtmaXJzdFBvaW50LCBzZWNvbmR0UG9pbnRdKVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50MkQgPSBuZXcgTW91c2VFdmVudCh0aGlzLl9zZGsyRClcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludG8gPSAnMkQnXHJcbiAgICAgICAgICBjbnQrK1xyXG4gICAgICAgICAgbGV0IHdnczg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gIFxyXG4gICAgICAgICAgaWYgKCF0aGlzLnBvbHlnb25IYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9seWdvbkhhc0NyZWF0ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdSZWN0LmNyZWF0ZV9wb2x5Z29uKHRoaXMsIHRoaXMuX3NkazJELnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgIGZpcnN0UG9pbnQgPSB3Z3M4NFxyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYgKGNudCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHNlY29uZHRQb2ludCA9IHdnczg0XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgY2IobnVsbCwgdGhhdC5yZWN0T2JqLCBbZmlyc3RQb2ludCwgc2Vjb25kdFBvaW50XSlcclxuICBcclxuICAgICAgICAgIH1cclxuICBcclxuICBcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIGNiKCflj5bmtognLCAnJylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKGNudCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGxldCB3Z3M4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5jYWxyZWN0KGZpcnN0UG9pbnQsIHdnczg0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICAgICAgdGhpcy5ldmVudDJELmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgdGhpcy5ldmVudDJELmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgIGNiKCflj5bmtognLCAnJylcclxuICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAoKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMikgKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGNudCsrXHJcbiAgICAgICAgICAgICAgbGV0IHdnczg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pXHJcbiAgXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnBvbHlnb25IYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvbHlnb25IYXNDcmVhdGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgbGV0IHBvbHlsaW5lX2lkID0gRHJhd1JlY3QuY3JlYXRlX3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgICBmaXJzdFBvaW50ID0gd2dzODRcclxuICAgICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgICAgaWYgKGNudCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbHJlY3QoZmlyc3RQb2ludCwgd2dzODQpXHJcbiAgICAgICAgICAgICAgICBzZWNvbmR0UG9pbnQgPSB3Z3M4NFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgdGhhdC5yZWN0T2JqLCBbZmlyc3RQb2ludCwgc2Vjb25kdFBvaW50XSlcclxuICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbHJlY3QoZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgbGV0IGFyciA9IFtdXHJcbiAgICBsZXQgYXJyMiA9IFtdXHJcbiAgICBwb3NpdGlvbnMucHVzaChcclxuICAgICAgW2ZpcnN0UG9pbnQubG5nLCBmaXJzdFBvaW50LmxhdCwgZmlyc3RQb2ludC5hbHRdLFxyXG4gICAgICBbc2Vjb25kUG9pbnQubG5nLCBzZWNvbmRQb2ludC5sYXQsIHNlY29uZFBvaW50LmFsdF1cclxuICAgIClcclxuICAgIGxldCBiYm94UG9seWdvblxyXG4gICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcocG9zaXRpb25zKVxyXG4gICAgICBsZXQgYmJveCA9IHR1cmYuYmJveChsaW5lKVxyXG4gICAgICBiYm94UG9seWdvbiA9IHR1cmYuYmJveFBvbHlnb24oYmJveClcclxuICAgIH1cclxuICAgIGlmIChiYm94UG9seWdvbikge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnYmJveFBvbHlnb24nLGJib3hQb2x5Z29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKVxyXG4gICAgICBiYm94UG9seWdvbi5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKGl0ZW1bMF0pXHJcbiAgICAgICAgYXJyLnB1c2goaXRlbVsxXSlcclxuICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgbG5nOiBpdGVtWzBdLFxyXG4gICAgICAgICAgbGF0OiBpdGVtWzFdLFxyXG4gICAgICAgICAgYWx0OiBmaXJzdFBvaW50LmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIyLnB1c2gob2JqKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnJlY3QgPSBbLi4uYXJyXVxyXG4gICAgICB0aGlzLnJlY3RPYmogPSBbLi4uYXJyMl1cclxuICAgICAgdGhpcy5yZWN0T2JqLnBvcCgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3UmVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE1UEE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBNE9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Draw/drawRect.js\n"); /***/ }), /***/ "./src/Draw/drawSector.js": /*!********************************!*\ !*** ./src/Draw/drawSector.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n/**\r\n * @extends Draw*/\nvar DrawSector = /*#__PURE__*/function (_Draw) {\n function DrawSector(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawSector);\n return _callSuper(this, DrawSector, [sdk, options]);\n }\n\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawRect\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawSector, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawSector, [{\n key: \"start\",\n value: function start(cb) {\n var _this = this;\n var that = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawSector, \"start\", this, 3)([]);\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('左键确认,右键取消', that.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](that.sdk);\n this._sector_id = null; //扇形\n this._positions = []; //活动点\n this.points_ids = []; //脏数据\n this._entities_sector = []; //脏数据\n this._radius = 0; //半径\n this._startAngle = 0; //起始角度\n this._endAngle = 0; //结束角度\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n // if(that._positions.length == 3) return\n\n if (_this._positions.length < 3) {\n _this.points_ids.push(_this.create_point(cartesian));\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n } else {\n _this.end();\n cb(null, {\n center: _this._positions[0],\n radius: _this._radius,\n startAngle: _this._startAngle,\n endAngle: _this._endAngle\n });\n }\n if (_this._positions.length === 2) {\n var pointA = Cesium.Cartesian3.fromDegrees(_this._positions[0].lng, _this._positions[0].lat, _this._positions[0].alt);\n var pointB = cartesian;\n _this._radius = Cesium.Cartesian3.distance(pointA, pointB);\n }\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (_this._positions.length < 2) return;\n if (_this._positions.length == 2) {\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n }\n if (_this._positions.length == 3) {\n _this._positions.pop();\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n if (!Cesium.defined(_this._sector_id)) {\n _this._sector_id = _this.createsector();\n _this.points_ids.push(_this._sector_id);\n }\n var options = that.calculateAangle(that._positions);\n that._startAngle = options.angle1;\n that._endAngle = options.angle2;\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this.end();\n cb(null);\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n // if(that._positions.length == 3) return\n\n if (_this._positions.length < 3) {\n _this.points_ids.push(_this.create_point(cartesian, _this._sdk2D.viewer));\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n } else {\n _this.end();\n cb(null, {\n center: _this._positions[0],\n radius: _this._radius,\n startAngle: _this._startAngle,\n endAngle: _this._endAngle\n });\n }\n if (_this._positions.length === 2) {\n var pointA = Cesium.Cartesian3.fromDegrees(_this._positions[0].lng, _this._positions[0].lat, _this._positions[0].alt);\n var pointB = cartesian;\n _this._radius = Cesium.Cartesian3.distance(pointA, pointB);\n }\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.tip.setPosition(cartesian, movement.endPosition.x + _this.viewer.canvas.width, movement.endPosition.y);\n if (_this._positions.length < 2) return;\n if (_this._positions.length == 2) {\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n }\n if (_this._positions.length == 3) {\n _this._positions.pop();\n _this._positions.push(_this.cartesian3Towgs84(cartesian, _this.viewer));\n if (!Cesium.defined(_this._sector_id)) {\n _this._sector_id = _this.createsector(_this._sdk2D.viewer);\n _this.points_ids.push(_this._sector_id);\n }\n var options = that.calculateAangle(that._positions);\n that._startAngle = options.angle1;\n that._endAngle = options.angle2;\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this.end();\n cb(null);\n });\n }\n }\n }\n\n //创建直线扇形\n }, {\n key: \"createsector\",\n value: function createsector() {\n var viewer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.viewer;\n // console.log(this._positions)\n var that = this;\n var angle;\n var hierarchy = new Cesium.CallbackProperty(function () {\n var pList = that.calSector(that._positions[0], that._radius, that._startAngle, that._endAngle);\n return new Cesium.PolygonHierarchy(pList);\n });\n // let text = new Cesium.CallbackProperty(\n // () => {\n // angle = that._endAngle - that._startAngle\n // if (angle < 0) {\n // angle = 360 + angle\n // }\n // return angle.toFixed(2) + '°';\n // })\n var id = that.randomString();\n var arrowEntity = viewer.entities.add({\n id: id,\n position: Cesium.Cartesian3.fromDegrees(that._positions[0].lng, that._positions[0].lat),\n // label: {\n // text,\n // font: \"24px Helvetica\",\n // fillColor: Cesium.Color.SKYBLUE,\n // outlineColor: Cesium.Color.BLACK,\n // outlineWidth: 2,\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // pixelOffset: new Cesium.Cartesian2(0, -12),\n // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY\n // },\n polygon: {\n hierarchy: hierarchy,\n show: true,\n fill: true,\n clampToGround: true,\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n }\n });\n that._entities_sector.push(arrowEntity);\n return id;\n }\n }, {\n key: \"cartesianToLatlng\",\n value: function cartesianToLatlng(cartesian) {\n var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian);\n var lat = Cesium.Math.toDegrees(latlng.latitude);\n var lng = Cesium.Math.toDegrees(latlng.longitude);\n return [lng, lat];\n }\n\n /**\r\n * 经纬度坐标转墨卡托坐标\r\n */\n // 墨卡托坐标系:展开地球,赤道作为x轴,向东为x轴正方,本初子午线作为y轴,向北为y轴正方向。\n // 数字20037508.34是地球赤道周长的一半:地球半径6378137米,赤道周长2*PI*r = 2 * 20037508.3427892,墨卡托坐标x轴区间[-20037508.3427892,20037508.3427892]\n }, {\n key: \"lonLatToMercator\",\n value: function lonLatToMercator(Latlng) {\n var E = Latlng[0];\n var N = Latlng[1];\n var x = E * 20037508.34 / 180;\n var y = Math.log(Math.tan((90 + N) * Math.PI / 360)) / (Math.PI / 180);\n y = y * 20037508.34 / 180;\n return [x, y];\n }\n }, {\n key: \"WebMercator2lonLat\",\n value: function WebMercator2lonLat(mercator) {\n var x = mercator[0] / 20037508.34 * 180;\n var ly = mercator[1] / 20037508.34 * 180;\n var y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2);\n return [x, y];\n }\n\n //计算角度\n }, {\n key: \"calculateAangle\",\n value: function calculateAangle(arr) {\n function getAangle(start, end) {\n var rad = Math.PI / 180,\n lat1 = start.y * rad,\n lat2 = end.y * rad,\n lon1 = start.x * rad,\n lon2 = end.x * rad;\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n var radians = Math.atan2(a, b);\n var degrees = radians % (2 * Math.PI);\n var bearing = 450 - (degrees * 180 / Math.PI < 0 ? 360 + degrees * 180 / Math.PI : degrees * 180 / Math.PI) - 90;\n return 360 - bearing % 360;\n }\n var center = arr[0];\n var pos84_1 = arr[1];\n var pos84_2 = arr[2];\n var start = {\n x: center.lng,\n y: center.lat\n };\n var end1 = {\n x: pos84_1.lng,\n y: pos84_1.lat\n };\n var end2 = {\n x: pos84_2.lng,\n y: pos84_2.lat\n };\n var angle1 = getAangle(start, end1);\n var angle2 = getAangle(start, end2);\n return {\n angle1: angle1,\n angle2: angle2\n };\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawSector);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3U2VjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0RyYXcvZHJhd1NlY3Rvci5qcz9jODRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQnXHJcbmltcG9ydCBEcmF3IGZyb20gJy4vZHJhdydcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBEcmF3Ki9cclxuY2xhc3MgRHJhd1NlY3RvciBleHRlbmRzIERyYXcge1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDlvIDlp4vliqjmgIHnu5jliLbpnaJcclxuICAgKiBAbWV0aG9kIHN0YXJ0XHJcbiAgICogQHBhcmFtIGNiIHtmdW5jdGlvbn0g5Zue6LCD5Ye95pWwXHJcbiAgICogQG1lbWJlck9mIERyYXdSZWN0XHJcbiAgICogQGV4YW1wbGUgZHJhdy5zdGFydCgoZXJyLHBvc2l0aW9ucyk9PntcclxuICAgKlxyXG4gICAqIH0pXHJcbiAgICogKi9cclxuICBzdGFydChjYikge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIGxldCBpbnRvXHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhpcy5fc2VjdG9yX2lkID0gbnVsbDsgLy/miYflvaJcclxuICAgICAgdGhpcy5fcG9zaXRpb25zID0gW107ICAvL+a0u+WKqOeCuVxyXG4gICAgICB0aGlzLnBvaW50c19pZHMgPSBbXTsgIC8v6ISP5pWw5o2uXHJcbiAgICAgIHRoaXMuX2VudGl0aWVzX3NlY3RvciA9IFtdOyAgLy/ohI/mlbDmja5cclxuICAgICAgdGhpcy5fcmFkaXVzID0gMDsgLy/ljYrlvoRcclxuICAgICAgdGhpcy5fc3RhcnRBbmdsZSA9IDA7IC8v6LW35aeL6KeS5bqmXHJcbiAgICAgIHRoaXMuX2VuZEFuZ2xlID0gMDsgLy/nu5PmnZ/op5LluqZcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludG8gPSAnM0QnXHJcbiAgICAgICAgLy8gaWYodGhhdC5fcG9zaXRpb25zLmxlbmd0aCA9PSAzKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKTtcclxuICAgICAgICAgIHRoaXMuX3Bvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIGNiKG51bGwsIHsgY2VudGVyOiB0aGlzLl9wb3NpdGlvbnNbMF0sIHJhZGl1czogdGhpcy5fcmFkaXVzLCBzdGFydEFuZ2xlOiB0aGlzLl9zdGFydEFuZ2xlLCBlbmRBbmdsZTogdGhpcy5fZW5kQW5nbGUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9ucy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIGxldCBwb2ludEEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLl9wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLl9wb3NpdGlvbnNbMF0ubGF0LCB0aGlzLl9wb3NpdGlvbnNbMF0uYWx0KTtcclxuICAgICAgICAgIGxldCBwb2ludEIgPSBjYXJ0ZXNpYW47XHJcbiAgICAgICAgICB0aGlzLl9yYWRpdXMgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwb2ludEEsIHBvaW50Qik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA8IDIpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLl9wb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9ucy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgdGhpcy5fcG9zaXRpb25zLnBvcCgpO1xyXG4gICAgICAgICAgdGhpcy5fcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSk7XHJcbiAgICAgICAgICBpZiAoIUNlc2l1bS5kZWZpbmVkKHRoaXMuX3NlY3Rvcl9pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VjdG9yX2lkID0gdGhpcy5jcmVhdGVzZWN0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5fc2VjdG9yX2lkKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgb3B0aW9ucyA9IHRoYXQuY2FsY3VsYXRlQWFuZ2xlKHRoYXQuX3Bvc2l0aW9ucylcclxuICAgICAgICAgIHRoYXQuX3N0YXJ0QW5nbGUgPSBvcHRpb25zLmFuZ2xlMTtcclxuICAgICAgICAgIHRoYXQuX2VuZEFuZ2xlID0gb3B0aW9ucy5hbmdsZTI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgY2IobnVsbClcclxuICAgICAgfSlcclxuICAgICAgaWYgKCF0aGlzLl9pczJEICYmIHRoaXMuX3NkazJEKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudDJEID0gbmV3IE1vdXNlRXZlbnQodGhpcy5fc2RrMkQpXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRvID0gJzJEJ1xyXG4gICAgICAgICAgLy8gaWYodGhhdC5fcG9zaXRpb25zLmxlbmd0aCA9PSAzKSByZXR1cm5cclxuICBcclxuICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbnMubGVuZ3RoIDwgMykge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHRoaXMuX3NkazJELnZpZXdlcikpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIGNiKG51bGwsIHsgY2VudGVyOiB0aGlzLl9wb3NpdGlvbnNbMF0sIHJhZGl1czogdGhpcy5fcmFkaXVzLCBzdGFydEFuZ2xlOiB0aGlzLl9zdGFydEFuZ2xlLCBlbmRBbmdsZTogdGhpcy5fZW5kQW5nbGUgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbnMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgIGxldCBwb2ludEEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLl9wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLl9wb3NpdGlvbnNbMF0ubGF0LCB0aGlzLl9wb3NpdGlvbnNbMF0uYWx0KTtcclxuICAgICAgICAgICAgbGV0IHBvaW50QiA9IGNhcnRlc2lhbjtcclxuICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9pbnRBLCBwb2ludEIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54ICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA8IDIpIHJldHVybjtcclxuICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbnMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA9PSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9ucy5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSk7XHJcbiAgICAgICAgICAgIGlmICghQ2VzaXVtLmRlZmluZWQodGhpcy5fc2VjdG9yX2lkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NlY3Rvcl9pZCA9IHRoaXMuY3JlYXRlc2VjdG9yKHRoaXMuX3NkazJELnZpZXdlcik7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5fc2VjdG9yX2lkKTtcclxuICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHRoYXQuY2FsY3VsYXRlQWFuZ2xlKHRoYXQuX3Bvc2l0aW9ucylcclxuICAgICAgICAgICAgdGhhdC5fc3RhcnRBbmdsZSA9IG9wdGlvbnMuYW5nbGUxO1xyXG4gICAgICAgICAgICB0aGF0Ll9lbmRBbmdsZSA9IG9wdGlvbnMuYW5nbGUyO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgY2IobnVsbClcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+WIm+W7uuebtOe6v+aJh+W9olxyXG4gIGNyZWF0ZXNlY3Rvcih2aWV3ZXIgPSB0aGlzLnZpZXdlcikge1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5fcG9zaXRpb25zKVxyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgbGV0IGFuZ2xlXHJcbiAgICBsZXQgaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHBMaXN0ID0gdGhhdC5jYWxTZWN0b3IodGhhdC5fcG9zaXRpb25zWzBdLCB0aGF0Ll9yYWRpdXMsIHRoYXQuX3N0YXJ0QW5nbGUsIHRoYXQuX2VuZEFuZ2xlKVxyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkocExpc3QpO1xyXG4gICAgICB9KVxyXG4gICAgLy8gbGV0IHRleHQgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoXHJcbiAgICAvLyAgICgpID0+IHtcclxuICAgIC8vICAgICBhbmdsZSA9IHRoYXQuX2VuZEFuZ2xlIC0gdGhhdC5fc3RhcnRBbmdsZVxyXG4gICAgLy8gICAgIGlmIChhbmdsZSA8IDApIHtcclxuICAgIC8vICAgICAgIGFuZ2xlID0gMzYwICsgYW5nbGVcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIGFuZ2xlLnRvRml4ZWQoMikgKyAnwrAnO1xyXG4gICAgLy8gICB9KVxyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgbGV0IGFycm93RW50aXR5ID0gdmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiBpZCxcclxuICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQuX3Bvc2l0aW9uc1swXS5sbmcsIHRoYXQuX3Bvc2l0aW9uc1swXS5sYXQpLFxyXG4gICAgICAvLyBsYWJlbDoge1xyXG4gICAgICAvLyAgIHRleHQsXHJcbiAgICAgIC8vICAgZm9udDogXCIyNHB4IEhlbHZldGljYVwiLFxyXG4gICAgICAvLyAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLlNLWUJMVUUsXHJcbiAgICAgIC8vICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgIC8vICAgb3V0bGluZVdpZHRoOiAyLFxyXG4gICAgICAvLyAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAvLyAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgLTEyKSxcclxuICAgICAgLy8gICBob3Jpem9udGFsT3JpZ2luOiBDZXNpdW0uSG9yaXpvbnRhbE9yaWdpbi5DRU5URVIsXHJcbiAgICAgIC8vICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgIC8vICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgLy8gfSxcclxuICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgIGhpZXJhcmNoeSxcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIGZpbGw6IHRydWUsXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0LmNvbG9yKSxcclxuICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIClcclxuICAgIHRoYXQuX2VudGl0aWVzX3NlY3Rvci5wdXNoKGFycm93RW50aXR5KTtcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgY2FydGVzaWFuVG9MYXRsbmcoY2FydGVzaWFuKSB7XHJcbiAgICBsZXQgbGF0bG5nID0gdGhpcy52aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhcnRlc2lhbik7XHJcbiAgICBsZXQgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGxhdGxuZy5sYXRpdHVkZSk7XHJcbiAgICBsZXQgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGxhdGxuZy5sb25naXR1ZGUpO1xyXG4gICAgcmV0dXJuIFtsbmcsIGxhdF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDnu4/nuqzluqblnZDmoIfovazloqjljaHmiZjlnZDmoIdcclxuICAgKi9cclxuICAvLyDloqjljaHmiZjlnZDmoIfns7vvvJrlsZXlvIDlnLDnkIPvvIzotaTpgZPkvZzkuLp46L2077yM5ZCR5Lic5Li6eOi9tOato+aWue+8jOacrOWIneWtkOWNiOe6v+S9nOS4unnovbTvvIzlkJHljJfkuLp56L205q2j5pa55ZCR44CCXHJcbiAgLy8g5pWw5a2XMjAwMzc1MDguMzTmmK/lnLDnkIPotaTpgZPlkajplb/nmoTkuIDljYrvvJrlnLDnkIPljYrlvoQ2Mzc4MTM357Gz77yM6LWk6YGT5ZGo6ZW/MipQSSpyID0gMiAqIDIwMDM3NTA4LjM0Mjc4OTLvvIzloqjljaHmiZjlnZDmoId46L205Yy66Ze0Wy0yMDAzNzUwOC4zNDI3ODkyLDIwMDM3NTA4LjM0Mjc4OTJdXHJcbiAgbG9uTGF0VG9NZXJjYXRvcihMYXRsbmcpIHtcclxuICAgIGxldCBFID0gTGF0bG5nWzBdO1xyXG4gICAgbGV0IE4gPSBMYXRsbmdbMV07XHJcbiAgICBsZXQgeCA9IEUgKiAyMDAzNzUwOC4zNCAvIDE4MDtcclxuICAgIGxldCB5ID0gTWF0aC5sb2coTWF0aC50YW4oKDkwICsgTikgKiBNYXRoLlBJIC8gMzYwKSkgLyAoTWF0aC5QSSAvIDE4MCk7XHJcbiAgICB5ID0geSAqIDIwMDM3NTA4LjM0IC8gMTgwO1xyXG4gICAgcmV0dXJuIFt4LCB5XVxyXG4gIH1cclxuXHJcbiAgV2ViTWVyY2F0b3IybG9uTGF0KG1lcmNhdG9yKSB7XHJcbiAgICBsZXQgeCA9IG1lcmNhdG9yWzBdIC8gMjAwMzc1MDguMzQgKiAxODA7XHJcbiAgICBsZXQgbHkgPSBtZXJjYXRvclsxXSAvIDIwMDM3NTA4LjM0ICogMTgwO1xyXG4gICAgbGV0IHkgPSAxODAgLyBNYXRoLlBJICogKDIgKiBNYXRoLmF0YW4oTWF0aC5leHAobHkgKiBNYXRoLlBJIC8gMTgwKSkgLSBNYXRoLlBJIC8gMilcclxuICAgIHJldHVybiBbeCwgeV07XHJcbiAgfVxyXG5cclxuICAvL+iuoeeul+inkuW6plxyXG4gIGNhbGN1bGF0ZUFhbmdsZShhcnIpIHtcclxuICAgIGZ1bmN0aW9uIGdldEFhbmdsZShzdGFydCwgZW5kKSB7XHJcbiAgICAgIGxldCByYWQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gICAgICAgIGxhdDEgPSBzdGFydC55ICogcmFkLFxyXG4gICAgICAgIGxhdDIgPSBlbmQueSAqIHJhZCxcclxuICAgICAgICBsb24xID0gc3RhcnQueCAqIHJhZCxcclxuICAgICAgICBsb24yID0gZW5kLnggKiByYWQ7XHJcbiAgICAgIGNvbnN0IGEgPSBNYXRoLnNpbihsb24yIC0gbG9uMSkgKiBNYXRoLmNvcyhsYXQyKTtcclxuICAgICAgY29uc3QgYiA9XHJcbiAgICAgICAgTWF0aC5jb3MobGF0MSkgKiBNYXRoLnNpbihsYXQyKSAtXHJcbiAgICAgICAgTWF0aC5zaW4obGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIE1hdGguY29zKGxvbjIgLSBsb24xKTtcclxuICAgICAgY29uc3QgcmFkaWFucyA9IE1hdGguYXRhbjIoYSwgYilcclxuICAgICAgY29uc3QgZGVncmVlcyA9IHJhZGlhbnMgJSAoMiAqIE1hdGguUEkpO1xyXG4gICAgICBsZXQgYmVhcmluZyA9IDQ1MCAtICgoZGVncmVlcyAqIDE4MCkgLyBNYXRoLlBJIDwgMFxyXG4gICAgICAgID8gMzYwICsgKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSVxyXG4gICAgICAgIDogKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSSkgLSA5MDtcclxuICAgICAgcmV0dXJuIDM2MCAtIChiZWFyaW5nICUgMzYwKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjZW50ZXIgPSBhcnJbMF1cclxuICAgIGxldCBwb3M4NF8xID0gYXJyWzFdXHJcbiAgICBsZXQgcG9zODRfMiA9IGFyclsyXVxyXG5cclxuICAgIGxldCBzdGFydCA9IHsgeDogY2VudGVyLmxuZywgeTogY2VudGVyLmxhdCB9XHJcbiAgICBsZXQgZW5kMSA9IHsgeDogcG9zODRfMS5sbmcsIHk6IHBvczg0XzEubGF0IH1cclxuICAgIGxldCBlbmQyID0geyB4OiBwb3M4NF8yLmxuZywgeTogcG9zODRfMi5sYXQgfVxyXG5cclxuICAgIGxldCBhbmdsZTEgPSBnZXRBYW5nbGUoc3RhcnQsIGVuZDEpXHJcbiAgICBsZXQgYW5nbGUyID0gZ2V0QWFuZ2xlKHN0YXJ0LCBlbmQyKVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFuZ2xlMSxcclxuICAgICAgYW5nbGUyXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3U2VjdG9yXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Draw/drawSector.js\n"); /***/ }), /***/ "./src/Draw/drawStraightArrow.js": /*!***************************************!*\ !*** ./src/Draw/drawStraightArrow.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\nvar transformCartesianToWGS84 = function transformCartesianToWGS84(cartesian) {\n var ellipsoid = Cesium.Ellipsoid.WGS84;\n var cartographic = ellipsoid.cartesianToCartographic(cartesian);\n var x = Cesium.Math.toDegrees(cartographic.longitude);\n var y = Cesium.Math.toDegrees(cartographic.latitude);\n var z = cartographic.height;\n return {\n x: x,\n y: y,\n z: z\n };\n};\n\n/**\r\n * @extends Draw*/\nvar DrawStraightArrow = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @param [options] {object} 面属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n * */\n function DrawStraightArrow(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawStraightArrow);\n _this = _callSuper(this, DrawStraightArrow, [sdk, options]);\n _this.points = null;\n _this.polygonHasCreated = false;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DrawStraightArrow, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawStraightArrow, [{\n key: \"start\",\n value:\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPolygon\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n function start(cb) {\n var _this2 = this;\n var that = this;\n // eslint-disable-next-line no-undef\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n _superPropGet(DrawStraightArrow, \"start\", this, 3)([]);\n // eslint-disable-next-line no-undef\n var into;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('左键确定,右键取消;', that.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](that.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var cache_84_position = [];\n this.anchorpoints = [];\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n if (!cartesian || _this2.anchorpoints[0] === cartesian) return;\n _this2.anchorpoints.push(cartesian);\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n p.lng = Number(p.lng.toFixed(8));\n p.lat = Number(p.lat.toFixed(8));\n if (cache_positions[0] && p.lng === cache_positions[0].lng && p.lat === cache_positions[0].lat) return;\n cache_positions.push(p);\n _this2.positions.push(p);\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n if (_this2.points_ids.length === 2) {\n var array = [cache_positions[0], cache_positions[1]];\n cb(null, array);\n _this2.end();\n }\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (!cartesian || _this2.points_ids.length === 0) {\n return;\n }\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n _this2.positions = [_this2.positions[0], p];\n if (_this2.points_ids.length === 1 && !Cesium.defined(_this2.arrowPolygon)) {\n _this2.arrowPolygon = DrawStraightArrow.polygon(_this2);\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n cb(null);\n _this2.end();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this2.end();\n cb(false);\n } else {\n if (_this2.anchorpoints.length === 2) {\n _this2.anchorpoints.push(cartesian);\n cb(null, _this2.positions);\n _this2.end();\n } else {\n if (!cartesian || Cesium.defined(_this2.arrowPolygon)) return;\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n _this2.anchorpoints.push(cartesian);\n _this2.arrowPolygon = DrawStraightArrow.polygon(_this2);\n cache_positions.push(_this2.cartesian3Towgs84(cartesian));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian));\n }\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n if (!cartesian || _this2.anchorpoints[0] === cartesian) return;\n _this2.anchorpoints.push(cartesian);\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n p.lng = Number(p.lng.toFixed(8));\n p.lat = Number(p.lat.toFixed(8));\n if (cache_positions[0] && p.lng === cache_positions[0].lng && p.lat === cache_positions[0].lat) return;\n cache_positions.push(p);\n _this2.positions.push(p);\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n if (_this2.points_ids.length === 2) {\n var array = [cache_positions[0], cache_positions[1]];\n cb(null, array);\n _this2.end();\n }\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n if (!cartesian || _this2.points_ids.length === 0) {\n return;\n }\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n _this2.positions = [_this2.positions[0], p];\n if (_this2.points_ids.length === 1 && !Cesium.defined(_this2.arrowPolygon)) {\n _this2.arrowPolygon = DrawStraightArrow.polygon(_this2, _this2._sdk2D.viewer);\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n cb(null);\n _this2.end();\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this2.end();\n cb(false);\n } else {\n if (_this2.anchorpoints.length === 2) {\n _this2.anchorpoints.push(cartesian);\n cb(null, _this2.positions);\n _this2.end();\n } else {\n if (!cartesian || Cesium.defined(_this2.arrowPolygon)) return;\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n _this2.anchorpoints.push(cartesian);\n _this2.arrowPolygon = DrawStraightArrow.polygon(_this2, _this2._sdk2D.viewer);\n cache_positions.push(_this2.cartesian3Towgs84(cartesian));\n // console.log(this.cartesian3Towgs84(cartesian))\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n }\n }\n });\n });\n }\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(DrawStraightArrow, \"end\", this, 3)([]);\n this.viewer.entities.remove(this.arrowPolygon);\n if (!this._is2D && this._sdk2D) {\n this._sdk2D.viewer.entities.remove(this.arrowPolygon);\n }\n }\n }], [{\n key: \"polygon\",\n value: function polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n var id = that.randomString();\n return viewer.entities.add(new Cesium.Entity({\n name: 'ArrowPolygon',\n id: id,\n polygon: {\n hierarchy: new Cesium.CallbackProperty(function (e) {\n var arr = that.computeStraightArrow(that.positions);\n for (var i = 0; i < arr.length; i++) {\n if (isNaN(arr[i].x)) {\n arr = [];\n break;\n }\n }\n return new Cesium.PolygonHierarchy(arr);\n }, false),\n material: Cesium.Color.fromCssColorString(that.color),\n outline: true,\n outlineColor: Cesium.Color.GREEN,\n zIndex: 99999999\n }\n }));\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawStraightArrow);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3U3RyYWlnaHRBcnJvdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9EcmF3L2RyYXdTdHJhaWdodEFycm93LmpzPzE3ZWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi9FdmVudCdcclxuaW1wb3J0IERyYXcgZnJvbSAnLi9kcmF3J1xyXG5cclxuY29uc3QgdHJhbnNmb3JtQ2FydGVzaWFuVG9XR1M4NCA9IGNhcnRlc2lhbiA9PiB7XHJcbiAgbGV0IGVsbGlwc29pZCA9IENlc2l1bS5FbGxpcHNvaWQuV0dTODRcclxuICBsZXQgY2FydG9ncmFwaGljID0gZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhcnRlc2lhbilcclxuICBjb25zdCB4ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpXHJcbiAgY29uc3QgeSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpXHJcbiAgY29uc3QgeiA9IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICByZXR1cm4geyB4LCB5LCB6IH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIERyYXcqL1xyXG5jbGFzcyBEcmF3U3RyYWlnaHRBcnJvdyBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IOmdouWxnuaAp1xyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5jb2xvcj1yZ2JhKDE4NSwxNCwxNCwwLjU4KV0ge29iamVjdH0g57q/5bGe5oCnXHJcblxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMucG9pbnRzID0gbnVsbFxyXG4gICAgdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcG9seWdvbih0aGF0LCB2aWV3ZXIgPSB0aGF0LnZpZXdlcikge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgcmV0dXJuIHZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICBuYW1lOiAnQXJyb3dQb2x5Z29uJyxcclxuICAgICAgICBpZCxcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShlID0+IHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IHRoYXQuY29tcHV0ZVN0cmFpZ2h0QXJyb3codGhhdC5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycltpXS54KSkge1xyXG4gICAgICAgICAgICAgICAgYXJyID0gW11cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoYXJyKVxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5jb2xvciksXHJcbiAgICAgICAgICBvdXRsaW5lOiB0cnVlLFxyXG4gICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuR1JFRU4sXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg5byA5aeL5Yqo5oCB57uY5Yi26Z2iXHJcbiAgICogQG1ldGhvZCBzdGFydFxyXG4gICAqIEBwYXJhbSBjYiB7ZnVuY3Rpb259IOWbnuiwg+WHveaVsFxyXG4gICAqIEBtZW1iZXJPZiBEcmF3UG9seWdvblxyXG4gICAqIEBleGFtcGxlIGRyYXcuc3RhcnQoKGVycixwb3NpdGlvbnMpPT57XHJcbiAgICpcclxuICAgKiB9KVxyXG4gICAqICovXHJcbiAgc3RhcnQoY2IpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICBsZXQgaW50b1xyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUruehruWumu+8jOWPs+mUruWPlua2iO+8mycsIHRoYXQuc2RrKVxyXG4gICAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5wb2ludHNfaWRzID0gW10gLy/lrZjmlL7lt6bplK7ngrnlh7vml7bkuLTml7bmt7vliqDnmoRwb2ludOeahGlkXHJcbiAgICAgIGxldCBjYWNoZV9wb3NpdGlvbnMgPSBbXVxyXG4gICAgICBsZXQgY2FjaGVfODRfcG9zaXRpb24gPSBbXVxyXG4gICAgICB0aGlzLmFuY2hvcnBvaW50cyA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnRvID0gJzNEJ1xyXG4gICAgICAgIGlmICghY2FydGVzaWFuIHx8IHRoaXMuYW5jaG9ycG9pbnRzWzBdPT09Y2FydGVzaWFuKSByZXR1cm5cclxuICAgICAgICB0aGlzLmFuY2hvcnBvaW50cy5wdXNoKGNhcnRlc2lhbilcclxuXHJcbiAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgcC5sbmcgPSBOdW1iZXIocC5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICBwLmxhdCA9IE51bWJlcihwLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgIGlmKGNhY2hlX3Bvc2l0aW9uc1swXSAmJiAocC5sbmcgPT09IGNhY2hlX3Bvc2l0aW9uc1swXS5sbmcgJiYgcC5sYXQgPT09IGNhY2hlX3Bvc2l0aW9uc1swXS5sYXQpKSByZXR1cm47XHJcbiAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2gocClcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKHApXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIGxldCBhcnJheSA9IFtjYWNoZV9wb3NpdGlvbnNbMF0sIGNhY2hlX3Bvc2l0aW9uc1sxXV1cclxuICAgICAgICAgIGNiKG51bGwsIGFycmF5KVxyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKCFjYXJ0ZXNpYW4gfHwgdGhpcy5wb2ludHNfaWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gW3RoaXMucG9zaXRpb25zWzBdLCBwXTtcclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA9PT0gMSAmJiAhQ2VzaXVtLmRlZmluZWQodGhpcy5hcnJvd1BvbHlnb24pKSB7XHJcbiAgICAgICAgICB0aGlzLmFycm93UG9seWdvbiA9IERyYXdTdHJhaWdodEFycm93LnBvbHlnb24odGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgY2IobnVsbClcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZihpbnRvID09PSAnMkQnKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgY2IoZmFsc2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5jaG9ycG9pbnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgIGNiKG51bGwsIHRoaXMucG9zaXRpb25zKVxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIWNhcnRlc2lhbiB8fCBDZXNpdW0uZGVmaW5lZCh0aGlzLmFycm93UG9seWdvbikpIHJldHVyblxyXG4gICAgICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgdGhpcy5hbmNob3Jwb2ludHMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgdGhpcy5hcnJvd1BvbHlnb24gPSBEcmF3U3RyYWlnaHRBcnJvdy5wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICghdGhpcy5faXMyRCAmJiB0aGlzLl9zZGsyRCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQyRCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuX3NkazJEKVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZihpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50byA9ICcyRCdcclxuICAgICAgICAgIGlmICghY2FydGVzaWFuIHx8IHRoaXMuYW5jaG9ycG9pbnRzWzBdPT09Y2FydGVzaWFuKSByZXR1cm5cclxuICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gIFxyXG4gICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBwLmxuZyA9IE51bWJlcihwLmxuZy50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgcC5sYXQgPSBOdW1iZXIocC5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGlmKGNhY2hlX3Bvc2l0aW9uc1swXSAmJiAocC5sbmcgPT09IGNhY2hlX3Bvc2l0aW9uc1swXS5sbmcgJiYgcC5sYXQgPT09IGNhY2hlX3Bvc2l0aW9uc1swXS5sYXQpKSByZXR1cm47XHJcbiAgICAgICAgICBjYWNoZV9wb3NpdGlvbnMucHVzaChwKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChwKVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpKVxyXG4gICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5ID0gW2NhY2hlX3Bvc2l0aW9uc1swXSwgY2FjaGVfcG9zaXRpb25zWzFdXVxyXG4gICAgICAgICAgICBjYihudWxsLCBhcnJheSlcclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54ICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAoIWNhcnRlc2lhbiB8fCB0aGlzLnBvaW50c19pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gW3RoaXMucG9zaXRpb25zWzBdLCBwXTtcclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID09PSAxICYmICFDZXNpdW0uZGVmaW5lZCh0aGlzLmFycm93UG9seWdvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJvd1BvbHlnb24gPSBEcmF3U3RyYWlnaHRBcnJvdy5wb2x5Z29uKHRoaXMsIHRoaXMuX3NkazJELnZpZXdlcilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNiKG51bGwpXHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICAgIGNiKGZhbHNlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFuY2hvcnBvaW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgdGhpcy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4gfHwgQ2VzaXVtLmRlZmluZWQodGhpcy5hcnJvd1BvbHlnb24pKSByZXR1cm5cclxuICAgICAgICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIgKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9ycG9pbnRzLnB1c2goY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcnJvd1BvbHlnb24gPSBEcmF3U3RyYWlnaHRBcnJvdy5wb2x5Z29uKHRoaXMsIHRoaXMuX3NkazJELnZpZXdlcilcclxuICAgICAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5hcnJvd1BvbHlnb24pXHJcbiAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgdGhpcy5fc2RrMkQudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmFycm93UG9seWdvbilcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERyYXdTdHJhaWdodEFycm93XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXJPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQWdOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Draw/drawStraightArrow.js\n"); /***/ }), /***/ "./src/Draw/drawThreeRect.js": /*!***********************************!*\ !*** ./src/Draw/drawThreeRect.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n/**\r\n * @extends Draw*/\nvar DrawThreeRect = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param [options] {object} 三点矩形属性\r\n * @param [options.color=rgba(185,14,14,0.58)] {object} 线属性\r\n * */\n function DrawThreeRect(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, DrawThreeRect);\n _this = _callSuper(this, DrawThreeRect, [sdk, options]);\n _this.polygonHasCreated = false;\n _this.rectObject = [];\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(DrawThreeRect, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(DrawThreeRect, [{\n key: \"computedLastPoint\",\n value: function computedLastPoint(arr) {\n var start = arr[0];\n var end = arr[1];\n // 计算点到线的距离\n var directionVector = Cesium.Cartesian3.subtract(end, start, new Cesium.Cartesian3());\n var pointToStart = Cesium.Cartesian3.subtract(arr[2], start, new Cesium.Cartesian3());\n var projectionLength = Cesium.Cartesian3.dot(pointToStart, directionVector) / Cesium.Cartesian3.magnitudeSquared(directionVector);\n var projectionVector = Cesium.Cartesian3.multiplyByScalar(directionVector, projectionLength, new Cesium.Cartesian3());\n var projectionPoint = Cesium.Cartesian3.add(start, projectionVector, new Cesium.Cartesian3());\n var distance = Cesium.Cartesian3.distance(arr[2], projectionPoint);\n var perp = Cesium.Cartesian3.subtract(arr[2], projectionPoint, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(perp, perp);\n // 生成偏移向量\n var offset = Cesium.Cartesian3.multiplyByScalar(perp, distance, new Cesium.Cartesian3());\n var threePoint = Cesium.Cartesian3.add(end, offset, new Cesium.Cartesian3());\n var lastPoint = Cesium.Cartesian3.add(start, offset, new Cesium.Cartesian3());\n return [_objectSpread({}, threePoint), _objectSpread({}, lastPoint)];\n }\n /**\r\n * @desc 开始动态绘制面\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPolygon\r\n * @example draw.start((err,positions)=>{\r\n *\r\n * })\r\n * */\n }, {\n key: \"start\",\n value: function start(cb) {\n var _this2 = this;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n this.polygonHasCreated = false;\n _superPropGet(DrawThreeRect, \"start\", this, 3)([]);\n YJ.Measure.SetMeasureStatus(true);\n var into;\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('左键确定,右键结束;CTRL+右键撤销', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n var cnt = 0;\n this.positions = [];\n this.positionsLine = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var cache_positions = [];\n var cache_84_position = [];\n this.event.mouse_left(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n into = '3D';\n cnt++;\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawThreeRect.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n _this2.points_ids.push(_this2.create_point(cartesian));\n if (cnt == 3) {\n _this2.end();\n cb(null, _this2.rectObject);\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n // let positions = []\n // console.log(cache_positions)\n // cache_positions.forEach((item) => {\n // let p = this.cartesian3Towgs84(item)\n // console.log(item)\n // positions.push(p)\n // })\n _this2.end();\n cb('取消', '');\n });\n this.event.mouse_move(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n\n // this.positions = cache_positions.concat({ ...cartesian })\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (cnt == 2) {\n var arr = JSON.parse(JSON.stringify(cache_positions));\n var arr1 = arr.concat(_objectSpread({}, cartesian));\n var pointArr = _this2.computedLastPoint(arr1);\n arr = arr.concat(pointArr);\n _this2.positions = arr;\n var arr_84 = arr.map(function (item) {\n return _this2.cartesian3Towgs84(item, _this2.viewer);\n });\n _this2.rectObject = arr_84;\n }\n });\n this.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n }\n });\n this.event.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '2D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n if (into === '2D') {\n return;\n }\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb(null, cache_84_position);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawThreeRect.create_polygon(_this2);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n _this2.points_ids.push(_this2.create_point(cartesian));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n if (!this._is2D && this._sdk2D) {\n this.event2D = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this._sdk2D);\n this.event2D.mouse_left(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n into = '2D';\n cnt++;\n _this2.positions = cache_positions.concat(_objectSpread({}, cartesian));\n _this2.tip.setPosition(cartesian, movement.position.x + _this2.viewer.canvas.width, movement.position.y);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawThreeRect.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n if (cnt == 3) {\n _this2.end();\n cb(null, _this2.rectObject);\n }\n });\n this.event2D.mouse_right(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n _this2.end();\n cb('取消', '');\n });\n this.event2D.mouse_move(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n // this.positions = cache_positions.concat({ ...cartesian })\n _this2.tip.setPosition(cartesian, movement.endPosition.x + _this2.viewer.canvas.width, movement.endPosition.y);\n if (cnt == 2) {\n var arr = JSON.parse(JSON.stringify(cache_positions));\n var arr1 = arr.concat(_objectSpread({}, cartesian));\n var pointArr = _this2.computedLastPoint(arr1);\n arr = arr.concat(pointArr);\n _this2.positions = arr;\n var arr_84 = arr.map(function (item) {\n return _this2.cartesian3Towgs84(item, _this2.viewer);\n });\n _this2.rectObject = arr_84;\n }\n });\n this.event2D.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n }\n });\n this.event2D.gesture_pinck_start_keyboard_ctrl(function () {\n if (into === '3D') {\n return;\n }\n if (_this2.points_ids.length > 1) {\n _this2.remove_entity(_this2.points_ids.pop()); //移除point\n cache_positions.pop();\n cache_84_position.pop();\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n this.event2D.gesture_pinck_start(function (movement, cartesian) {\n if (into === '3D') {\n return;\n }\n var startTime = new Date();\n _this2.event2D.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n cb(null, cache_84_position);\n _this2.end();\n } else {\n _this2.tip.setPosition(cartesian, (movement.position1.x + movement.position2.x) / 2 + _this2.viewer.canvas.width, (movement.position1.y + movement.position2.y) / 2);\n if (!_this2.polygonHasCreated) {\n var polyline_id = DrawThreeRect.create_polygon(_this2, _this2._sdk2D.viewer);\n _this2.points_ids.push(polyline_id);\n }\n cache_positions.push(cartesian);\n cache_84_position.push(_this2.cartesian3Towgs84(cartesian, _this2.viewer));\n _this2.points_ids.push(_this2.create_point(cartesian, _this2._sdk2D.viewer));\n _this2.positions = cache_positions.concat(cartesian);\n }\n });\n });\n }\n }\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var viewer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : that.viewer;\n that.polygonHasCreated = true;\n var id = that.randomString();\n viewer.entities.add(new Cesium.Entity({\n id: id,\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(that.positions);\n }),\n material: Cesium.Color.fromCssColorString(that.color),\n zIndex: 99999999\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function (e) {\n return that.positions.concat(that.positions[0]);\n }),\n width: 2,\n material: Cesium.Color.fromCssColorString('#c1c505').withAlpha(0.5),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_draw__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawThreeRect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRHJhdy9kcmF3VGhyZWVSZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0RyYXcvZHJhd1RocmVlUmVjdC5qcz8yODRlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQnXHJcbmltcG9ydCBEcmF3IGZyb20gJy4vZHJhdydcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBEcmF3Ki9cclxuY2xhc3MgRHJhd1RocmVlUmVjdCBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0g5LiJ54K555+p5b2i5bGe5oCnXHJcbiAgICogQHBhcmFtIFtvcHRpb25zLmNvbG9yPXJnYmEoMTg1LDE0LDE0LDAuNTgpXSB7b2JqZWN0fSDnur/lsZ7mgKdcclxuXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5wb2x5Z29uSGFzQ3JlYXRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLnJlY3RPYmplY3QgPSBbXVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2x5Z29uKHRoYXQsIHZpZXdlciA9IHRoYXQudmlld2VyKSB7XHJcbiAgICB0aGF0LnBvbHlnb25IYXNDcmVhdGVkID0gdHJ1ZVxyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvblR5cGU6IENlc2l1bS5DbGFzc2lmaWNhdGlvblR5cGUuQk9USCxcclxuICAgICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnMpXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQuY29sb3IpLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGF0LnBvc2l0aW9ucy5jb25jYXQodGhhdC5wb3NpdGlvbnNbMF0pXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNjMWM1MDUnKS53aXRoQWxwaGEoMC41KSxcclxuICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuICBjb21wdXRlZExhc3RQb2ludChhcnIpIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gYXJyWzBdO1xyXG4gICAgY29uc3QgZW5kID0gYXJyWzFdO1xyXG4gICAgLy8g6K6h566X54K55Yiw57q/55qE6Led56a7XHJcbiAgICBjb25zdCBkaXJlY3Rpb25WZWN0b3IgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChlbmQsIHN0YXJ0LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBwb2ludFRvU3RhcnQgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChhcnJbMl0sIHN0YXJ0LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uTGVuZ3RoID0gQ2VzaXVtLkNhcnRlc2lhbjMuZG90KHBvaW50VG9TdGFydCwgZGlyZWN0aW9uVmVjdG9yKSAvIENlc2l1bS5DYXJ0ZXNpYW4zLm1hZ25pdHVkZVNxdWFyZWQoZGlyZWN0aW9uVmVjdG9yKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb25WZWN0b3IgPSBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKGRpcmVjdGlvblZlY3RvciwgcHJvamVjdGlvbkxlbmd0aCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgY29uc3QgcHJvamVjdGlvblBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuYWRkKHN0YXJ0LCBwcm9qZWN0aW9uVmVjdG9yLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKGFyclsyXSwgcHJvamVjdGlvblBvaW50KVxyXG5cclxuICAgIGNvbnN0IHBlcnAgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChhcnJbMl0sIHByb2plY3Rpb25Qb2ludCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKHBlcnAsIHBlcnApO1xyXG4gICAgLy8g55Sf5oiQ5YGP56e75ZCR6YePXHJcbiAgICBjb25zdCBvZmZzZXQgPSBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKHBlcnAsIGRpc3RhbmNlLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBsZXQgdGhyZWVQb2ludCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmFkZChlbmQsIG9mZnNldCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpXHJcbiAgICBsZXQgbGFzdFBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuYWRkKHN0YXJ0LCBvZmZzZXQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKVxyXG4gICAgcmV0dXJuIFt7IC4uLnRocmVlUG9pbnQgfSwgeyAuLi5sYXN0UG9pbnQgfV1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg5byA5aeL5Yqo5oCB57uY5Yi26Z2iXHJcbiAgICogQG1ldGhvZCBzdGFydFxyXG4gICAqIEBwYXJhbSBjYiB7ZnVuY3Rpb259IOWbnuiwg+WHveaVsFxyXG4gICAqIEBtZW1iZXJPZiBEcmF3UG9seWdvblxyXG4gICAqIEBleGFtcGxlIGRyYXcuc3RhcnQoKGVycixwb3NpdGlvbnMpPT57XHJcbiAgICpcclxuICAgKiB9KVxyXG4gICAqICovXHJcbiAgc3RhcnQoY2IpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucG9seWdvbkhhc0NyZWF0ZWQgPSBmYWxzZVxyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICBsZXQgaW50b1xyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu5a6a77yM5Y+z6ZSu57uT5p2f77ybQ1RSTCvlj7PplK7mkqTplIAnLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICBsZXQgY250ID0gMFxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9zaXRpb25zTGluZSA9IFtdXHJcbiAgICAgIHRoaXMucG9pbnRzX2lkcyA9IFtdIC8v5a2Y5pS+5bem6ZSu54K55Ye75pe25Li05pe25re75Yqg55qEcG9pbnTnmoRpZFxyXG4gICAgICBsZXQgY2FjaGVfcG9zaXRpb25zID0gW11cclxuICAgICAgbGV0IGNhY2hlXzg0X3Bvc2l0aW9uID0gW11cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnRvID0gJzNEJ1xyXG4gICAgICAgIGNudCsrXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYWNoZV9wb3NpdGlvbnMuY29uY2F0KHsgLi4uY2FydGVzaWFuIH0pXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoIXRoaXMucG9seWdvbkhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdUaHJlZVJlY3QuY3JlYXRlX3BvbHlnb24odGhpcylcclxuICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZV9wb3NpdGlvbnMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbikpXHJcbiAgICAgICAgaWYgKGNudCA9PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYihudWxsLCB0aGlzLnJlY3RPYmplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhjYWNoZV9wb3NpdGlvbnMpXHJcbiAgICAgICAgLy8gY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtKVxyXG4gICAgICAgIC8vICAgY29uc29sZS5sb2coaXRlbSlcclxuICAgICAgICAvLyAgIHBvc2l0aW9ucy5wdXNoKHApXHJcbiAgICAgICAgLy8gfSlcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgY2IoJ+WPlua2iCcsICcnKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoaW50byA9PT0gJzJEJykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoeyAuLi5jYXJ0ZXNpYW4gfSlcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoY250ID09IDIpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhY2hlX3Bvc2l0aW9ucykpXHJcbiAgICAgICAgICBsZXQgYXJyMSA9IGFyci5jb25jYXQoeyAuLi5jYXJ0ZXNpYW4gfSlcclxuICAgICAgICAgIGxldCBwb2ludEFyciA9IHRoaXMuY29tcHV0ZWRMYXN0UG9pbnQoYXJyMSlcclxuICAgICAgICAgIGFyciA9IGFyci5jb25jYXQocG9pbnRBcnIpXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGFyclxyXG4gICAgICAgICAgbGV0IGFycl84NCA9IGFyci5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0ZW0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMucmVjdE9iamVjdCA9IGFycl84NFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodF9rZXlib2FyZF9jdHJsKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnRfa2V5Ym9hcmRfY3RybCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb2ludHNfaWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucG9wKClcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGludG8gPT09ICcyRCcpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgY2IobnVsbCwgY2FjaGVfODRfcG9zaXRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnBvbHlnb25IYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvbHlsaW5lX2lkID0gRHJhd1RocmVlUmVjdC5jcmVhdGVfcG9seWdvbih0aGlzKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHBvbHlsaW5lX2lkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgY2FjaGVfODRfcG9zaXRpb24ucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpKVxyXG4gICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4pKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2lzMkQgJiYgdGhpcy5fc2RrMkQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50MkQgPSBuZXcgTW91c2VFdmVudCh0aGlzLl9zZGsyRClcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRvID0gJzJEJ1xyXG4gICAgICAgICAgY250KytcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdCh7IC4uLmNhcnRlc2lhbiB9KVxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueCArIHRoaXMudmlld2VyLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLnBvbHlnb25IYXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdUaHJlZVJlY3QuY3JlYXRlX3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICB0aGlzLnBvaW50c19pZHMucHVzaChwb2x5bGluZV9pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgIGNhY2hlXzg0X3Bvc2l0aW9uLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKSlcclxuICAgICAgICAgIHRoaXMucG9pbnRzX2lkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwgdGhpcy5fc2RrMkQudmlld2VyKSlcclxuICAgICAgICAgIGlmIChjbnQgPT0gMykge1xyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIGNiKG51bGwsIHRoaXMucmVjdE9iamVjdClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICBjYign5Y+W5raIJywgJycpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50MkQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGludG8gPT09ICczRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoeyAuLi5jYXJ0ZXNpYW4gfSlcclxuICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnggKyB0aGlzLnZpZXdlci5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAoY250ID09IDIpIHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FjaGVfcG9zaXRpb25zKSlcclxuICAgICAgICAgICAgbGV0IGFycjEgPSBhcnIuY29uY2F0KHsgLi4uY2FydGVzaWFuIH0pXHJcbiAgICAgICAgICAgIGxldCBwb2ludEFyciA9IHRoaXMuY29tcHV0ZWRMYXN0UG9pbnQoYXJyMSlcclxuICAgICAgICAgICAgYXJyID0gYXJyLmNvbmNhdChwb2ludEFycilcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBhcnJcclxuICAgICAgICAgICAgbGV0IGFycl84NCA9IGFyci5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoaXRlbSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMucmVjdE9iamVjdCA9IGFycl84NFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudDJELm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmIChpbnRvID09PSAnM0QnKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucG9pbnRzX2lkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLnBvaW50c19pZHMucG9wKCkpIC8v56e76ZmkcG9pbnRcclxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnBvcCgpXHJcbiAgICAgICAgICAgIGNhY2hlXzg0X3Bvc2l0aW9uLnBvcCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudDJELmdlc3R1cmVfcGluY2tfc3RhcnRfa2V5Ym9hcmRfY3RybCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnBvaW50c19pZHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5wb2ludHNfaWRzLnBvcCgpKSAvL+enu+mZpHBvaW50XHJcbiAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbi5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQyRC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50byA9PT0gJzNEJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50MkQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgY2IobnVsbCwgY2FjaGVfODRfcG9zaXRpb24pXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgICAgKChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIpICsgdGhpcy52aWV3ZXIuY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMucG9seWdvbkhhc0NyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2x5bGluZV9pZCA9IERyYXdUaHJlZVJlY3QuY3JlYXRlX3BvbHlnb24odGhpcywgdGhpcy5fc2RrMkQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2gocG9seWxpbmVfaWQpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNhY2hlX3Bvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICBjYWNoZV84NF9wb3NpdGlvbi5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb2ludHNfaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB0aGlzLl9zZGsyRC52aWV3ZXIpKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FjaGVfcG9zaXRpb25zLmNvbmNhdChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRHJhd1RocmVlUmVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF0U0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBK1FBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Draw/drawThreeRect.js\n"); /***/ }), /***/ "./src/Event/index.js": /*!****************************!*\ !*** ./src/Event/index.js ***! \****************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return MouseEvent; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-06-14 14:44\r\n * @description:index\r\n * @update: 2022-06-14 14:44\r\n */\nvar MouseEvent = /*#__PURE__*/function () {\n function MouseEvent(sdk) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MouseEvent);\n this.sdk = sdk;\n this.viewer = sdk.viewer;\n this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.canvas);\n }\n\n /*事件*/\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MouseEvent, [{\n key: \"mouse_left\",\n value: function mouse_left(cb) {\n var _this = this;\n // //左键点击事件\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this.getcartesian(movement);\n // cartesian = this.earth.czm.viewer.scene.pickPosition(movement.position)\n // if (!cartesian) {\n // cartesian = this.viewer.scene.camera.pickEllipsoid(\n // movement.position,\n // this.viewer.scene.globe.ellipsoid\n // )\n // }\n // if (cartesian) {\n // cb(movement, cartesian)\n // }\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n }, {\n key: \"mouse_left_down\",\n value: function mouse_left_down(cb) {\n var _this2 = this;\n // //左键按下事件\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this2.getcartesian(movement);\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n }\n }, {\n key: \"mouse_left_up\",\n value: function mouse_left_up(cb) {\n var _this3 = this;\n // //左键抬起事件\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this3.getcartesian(movement);\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.LEFT_UP);\n }\n }, {\n key: \"mouse_move\",\n value: function mouse_move(cb) {\n var _this4 = this;\n var allowNull = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this4.getcartesian(movement);\n if (cartesian || allowNull) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n }\n }, {\n key: \"mouse_right\",\n value: function mouse_right(cb) {\n var _this5 = this;\n var allowNull = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this5.getcartesian(movement);\n if (cartesian || allowNull) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n }\n }, {\n key: \"mouse_right_down\",\n value: function mouse_right_down(cb) {\n var _this6 = this;\n var allowNull = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this6.getcartesian(movement);\n if (cartesian || allowNull) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_DOWN);\n }\n }, {\n key: \"mouse_right_up\",\n value: function mouse_right_up(cb) {\n var _this7 = this;\n var allowNull = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this7.getcartesian(movement);\n if (cartesian || allowNull) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_UP);\n }\n }, {\n key: \"mouse_wheel\",\n value: function mouse_wheel(cb) {\n this.handler && this.handler.setInputAction(function () {\n cb();\n }, Cesium.ScreenSpaceEventType.WHEEL);\n }\n }, {\n key: \"getcartesian\",\n value: function getcartesian(movement) {\n // if (movement.endPosition) {\n // movement.endPosition.y -= 2\n // }\n var position = movement.position || movement.endPosition;\n if (movement.position1 && movement.position2) {\n position = {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n };\n }\n var cartesian = this.viewer.scene.pickPosition(position);\n if (!cartesian) {\n var ray = this.viewer.camera.getPickRay(position); //相交的射线\n var pickedObjects = this.viewer.scene.drillPickFromRay(ray, 10);\n var result = {};\n for (var i = 0; i < pickedObjects.length; i++) {\n if (pickedObjects[i].position) {\n result = pickedObjects[i];\n break;\n }\n }\n cartesian = result.position;\n if (!cartesian) {\n cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene);\n }\n }\n return cartesian;\n // return this.earth.czm.viewer.scene.pickPosition(position)\n }\n\n //鼠标右键+键盘ctrl\n }, {\n key: \"mouse_right_keyboard_ctrl\",\n value: function mouse_right_keyboard_ctrl(cb) {\n var _this8 = this;\n // //左键点击事件\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this8.getcartesian(movement);\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK, Cesium.KeyboardEventModifier.CTRL);\n }\n\n // 手势-双指触摸开始\n }, {\n key: \"gesture_pinck_start\",\n value: function gesture_pinck_start(cb) {\n var _this9 = this;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this9.getcartesian(movement);\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.PINCH_START);\n }\n\n //手势-双指触摸开始+键盘ctrl\n }, {\n key: \"gesture_pinck_start_keyboard_ctrl\",\n value: function gesture_pinck_start_keyboard_ctrl(cb) {\n var _this10 = this;\n this.handler && this.handler.setInputAction(function (movement) {\n var cartesian = _this10.getcartesian(movement);\n if (cartesian) {\n cb(movement, cartesian);\n }\n }, Cesium.ScreenSpaceEventType.PINCH_START, Cesium.KeyboardEventModifier.CTRL);\n }\n\n // 手势-双指触摸结束\n }, {\n key: \"gesture_pinck_end\",\n value: function gesture_pinck_end(cb) {\n this.handler && this.handler.setInputAction(function (movement) {\n cb();\n }, Cesium.ScreenSpaceEventType.PINCH_END);\n }\n\n // 手势-双指触摸修改\n }, {\n key: \"gesture_pinck_move\",\n value: function gesture_pinck_move(cb) {\n this.handler && this.handler.setInputAction(function (movement) {\n // let cartesian = this.getcartesian(movement)\n // if (cartesian) {\n // cb(movement, cartesian)\n // }\n }, Cesium.ScreenSpaceEventType.PINCH_MOVE);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this.handler) this.handler.destroy(); //关闭事件句柄\n this.handler = null;\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvRXZlbnQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRXZlbnQvaW5kZXguanM/MzM1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDYtMTQgMTQ6NDRcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMi0wNi0xNCAxNDo0NFxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vdXNlRXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKHNkaykge1xyXG4gICAgdGhpcy5zZGsgPSBzZGtcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlclxyXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihcclxuICAgICAgdGhpcy52aWV3ZXIuY2FudmFzXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKuS6i+S7tiovXHJcbiAgbW91c2VfbGVmdChjYikge1xyXG4gICAgLy8gLy/lt6bplK7ngrnlh7vkuovku7ZcclxuICAgIHRoaXMuaGFuZGxlciAmJiB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLmdldGNhcnRlc2lhbihtb3ZlbWVudClcclxuICAgICAgLy8gY2FydGVzaWFuID0gdGhpcy5lYXJ0aC5jem0udmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgLy8gaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgLy8gICBjYXJ0ZXNpYW4gPSB0aGlzLnZpZXdlci5zY2VuZS5jYW1lcmEucGlja0VsbGlwc29pZChcclxuICAgICAgLy8gICAgIG1vdmVtZW50LnBvc2l0aW9uLFxyXG4gICAgICAvLyAgICAgdGhpcy52aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmIChjYXJ0ZXNpYW4pIHtcclxuICAgICAgLy8gICBjYihtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGlmIChjYXJ0ZXNpYW4pIHtcclxuICAgICAgICBjYihtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuICB9XHJcblxyXG4gIG1vdXNlX2xlZnRfZG93bihjYikge1xyXG4gICAgLy8gLy/lt6bplK7mjInkuIvkuovku7ZcclxuICAgIHRoaXMuaGFuZGxlciAmJiB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLmdldGNhcnRlc2lhbihtb3ZlbWVudClcclxuICAgICAgaWYgKGNhcnRlc2lhbikge1xyXG4gICAgICAgIGNiKG1vdmVtZW50LCBjYXJ0ZXNpYW4pXHJcbiAgICAgIH1cclxuICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0RPV04pXHJcbiAgfVxyXG4gIG1vdXNlX2xlZnRfdXAoY2IpIHtcclxuICAgIC8vIC8v5bem6ZSu5oqs6LW35LqL5Lu2XHJcbiAgICB0aGlzLmhhbmRsZXIgJiYgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgY2FydGVzaWFuID0gdGhpcy5nZXRjYXJ0ZXNpYW4obW92ZW1lbnQpXHJcbiAgICAgIGlmIChjYXJ0ZXNpYW4pIHtcclxuICAgICAgICBjYihtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9VUClcclxuICB9XHJcblxyXG4gIG1vdXNlX21vdmUoY2IsIGFsbG93TnVsbCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmhhbmRsZXIgJiYgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgY2FydGVzaWFuID0gdGhpcy5nZXRjYXJ0ZXNpYW4obW92ZW1lbnQpXHJcblxyXG4gICAgICBpZiAoY2FydGVzaWFuIHx8IGFsbG93TnVsbCkge1xyXG4gICAgICAgIGNiKG1vdmVtZW50LCBjYXJ0ZXNpYW4pXHJcbiAgICAgIH1cclxuICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5NT1VTRV9NT1ZFKVxyXG4gIH1cclxuXHJcbiAgbW91c2VfcmlnaHQoY2IsIGFsbG93TnVsbCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmhhbmRsZXIgJiYgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgY2FydGVzaWFuID0gdGhpcy5nZXRjYXJ0ZXNpYW4obW92ZW1lbnQpXHJcbiAgICAgIGlmIChjYXJ0ZXNpYW4gfHwgYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgY2IobW92ZW1lbnQsIGNhcnRlc2lhbilcclxuICAgICAgfVxyXG4gICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG4gIH1cclxuXHJcbiAgbW91c2VfcmlnaHRfZG93bihjYiwgYWxsb3dOdWxsID0gZmFsc2UpIHtcclxuICAgIHRoaXMuaGFuZGxlciAmJiB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLmdldGNhcnRlc2lhbihtb3ZlbWVudClcclxuICAgICAgaWYgKGNhcnRlc2lhbiB8fCBhbGxvd051bGwpIHtcclxuICAgICAgICBjYihtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuUklHSFRfRE9XTilcclxuICB9XHJcblxyXG4gIG1vdXNlX3JpZ2h0X3VwKGNiLCBhbGxvd051bGwgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5oYW5kbGVyICYmIHRoaXMuaGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgICAgbGV0IGNhcnRlc2lhbiA9IHRoaXMuZ2V0Y2FydGVzaWFuKG1vdmVtZW50KVxyXG4gICAgICBpZiAoY2FydGVzaWFuIHx8IGFsbG93TnVsbCkge1xyXG4gICAgICAgIGNiKG1vdmVtZW50LCBjYXJ0ZXNpYW4pXHJcbiAgICAgIH1cclxuICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5SSUdIVF9VUClcclxuICB9XHJcblxyXG4gIG1vdXNlX3doZWVsKGNiKSB7XHJcbiAgICB0aGlzLmhhbmRsZXIgJiYgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKCgpID0+IHtcclxuICAgICAgY2IoKVxyXG4gICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLldIRUVMKVxyXG4gIH1cclxuXHJcbiAgZ2V0Y2FydGVzaWFuKG1vdmVtZW50KSB7XHJcbiAgICAvLyBpZiAobW92ZW1lbnQuZW5kUG9zaXRpb24pIHtcclxuICAgIC8vICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSAtPSAyXHJcbiAgICAvLyB9XHJcbiAgICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvbiB8fCBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gICAgaWYobW92ZW1lbnQucG9zaXRpb24xICYmIG1vdmVtZW50LnBvc2l0aW9uMikge1xyXG4gICAgICBwb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDIsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLnZpZXdlci5zY2VuZS5waWNrUG9zaXRpb24ocG9zaXRpb24pXHJcbiAgICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgICBjb25zdCByYXkgPSB0aGlzLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICAgIGxldCBwaWNrZWRPYmplY3RzID0gdGhpcy52aWV3ZXIuc2NlbmUuZHJpbGxQaWNrRnJvbVJheShyYXksIDEwKTtcclxuICAgICAgbGV0IHJlc3VsdCA9IHt9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGlja2VkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSBwaWNrZWRPYmplY3RzW2ldXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXJ0ZXNpYW4gPSByZXN1bHQucG9zaXRpb25cclxuICAgICAgaWYoIWNhcnRlc2lhbikge1xyXG4gICAgICAgIGNhcnRlc2lhbiA9IHRoaXMudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB0aGlzLnZpZXdlci5zY2VuZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYXJ0ZXNpYW5cclxuICAgIC8vIHJldHVybiB0aGlzLmVhcnRoLmN6bS52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKHBvc2l0aW9uKVxyXG4gIH1cclxuXHJcbiAgLy/pvKDmoIflj7PplK4r6ZSu55uYY3RybFxyXG4gIG1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoY2IpIHtcclxuICAgIC8vIC8v5bem6ZSu54K55Ye75LqL5Lu2XHJcbiAgICB0aGlzLmhhbmRsZXIgJiYgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKFxyXG4gICAgICAobW92ZW1lbnQpID0+IHtcclxuICAgICAgICBsZXQgY2FydGVzaWFuID0gdGhpcy5nZXRjYXJ0ZXNpYW4obW92ZW1lbnQpXHJcbiAgICAgICAgaWYgKGNhcnRlc2lhbikge1xyXG4gICAgICAgICAgY2IobW92ZW1lbnQsIGNhcnRlc2lhbilcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5SSUdIVF9DTElDSyxcclxuICAgICAgQ2VzaXVtLktleWJvYXJkRXZlbnRNb2RpZmllci5DVFJMXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvLyDmiYvlir8t5Y+M5oyH6Kem5pG45byA5aeLXHJcbiAgZ2VzdHVyZV9waW5ja19zdGFydChjYikge1xyXG4gICAgdGhpcy5oYW5kbGVyICYmIHRoaXMuaGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgICAgbGV0IGNhcnRlc2lhbiA9IHRoaXMuZ2V0Y2FydGVzaWFuKG1vdmVtZW50KVxyXG4gICAgICBpZiAoY2FydGVzaWFuKSB7XHJcbiAgICAgICAgY2IobW92ZW1lbnQsIGNhcnRlc2lhbilcclxuICAgICAgfVxyXG4gICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlBJTkNIX1NUQVJUKVxyXG4gIH1cclxuXHJcbiAgLy/miYvlir8t5Y+M5oyH6Kem5pG45byA5aeLK+mUruebmGN0cmxcclxuICBnZXN0dXJlX3BpbmNrX3N0YXJ0X2tleWJvYXJkX2N0cmwoY2IpIHtcclxuICAgIHRoaXMuaGFuZGxlciAmJiB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oXHJcbiAgICAgIChtb3ZlbWVudCkgPT4ge1xyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLmdldGNhcnRlc2lhbihtb3ZlbWVudClcclxuICAgICAgICBpZiAoY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICBjYihtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlBJTkNIX1NUQVJULFxyXG4gICAgICBDZXNpdW0uS2V5Ym9hcmRFdmVudE1vZGlmaWVyLkNUUkxcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8vIOaJi+WKvy3lj4zmjIfop6bmkbjnu5PmnZ9cclxuICBnZXN0dXJlX3BpbmNrX2VuZChjYikge1xyXG4gICAgdGhpcy5oYW5kbGVyICYmIHRoaXMuaGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgICAgY2IoKVxyXG4gICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlBJTkNIX0VORClcclxuICB9XHJcblxyXG4gIC8vIOaJi+WKvy3lj4zmjIfop6bmkbjkv67mlLlcclxuICBnZXN0dXJlX3BpbmNrX21vdmUoY2IpIHtcclxuICAgIHRoaXMuaGFuZGxlciAmJiB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIC8vIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLmdldGNhcnRlc2lhbihtb3ZlbWVudClcclxuICAgICAgLy8gaWYgKGNhcnRlc2lhbikge1xyXG4gICAgICAvLyAgIGNiKG1vdmVtZW50LCBjYXJ0ZXNpYW4pXHJcbiAgICAgIC8vIH1cclxuICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5QSU5DSF9NT1ZFKVxyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmhhbmRsZXIpXHJcbiAgICAgIHRoaXMuaGFuZGxlci5kZXN0cm95KCkgLy/lhbPpl63kuovku7blj6Xmn4RcclxuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Event/index.js\n"); /***/ }), /***/ "./src/Global/ClickCallback/index.js": /*!*******************************************!*\ !*** ./src/Global/ClickCallback/index.js ***! \*******************************************/ /*! exports provided: openLeftClick, closeLeftClick, regLeftClickCallback, unRegLeftClickCallback, openRightClick, closeRightClick, regRightClickCallback, unRegRightClickCallback, openMove, closeMove, regMoveCallback, unregMoveCallback, getLeftClickState, getRightClickState, getMoveState */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openLeftClick\", function() { return openLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeLeftClick\", function() { return closeLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regLeftClickCallback\", function() { return regLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegLeftClickCallback\", function() { return unRegLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openRightClick\", function() { return openRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeRightClick\", function() { return closeRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regRightClickCallback\", function() { return regRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegRightClickCallback\", function() { return unRegRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openMove\", function() { return openMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeMove\", function() { return closeMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regMoveCallback\", function() { return regMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unregMoveCallback\", function() { return unregMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLeftClickState\", function() { return getLeftClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRightClickState\", function() { return getRightClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMoveState\", function() { return getMoveState; });\n/**\r\n * @name: click\r\n * @author: Administrator\r\n * @date: 2023-05-28 11:05\r\n * @description:click\r\n * @update: 2023-05-28 11:05\r\n */\nvar leftClickHandler = null;\nvar rightClickHandler = null;\nvar MoveHandler = null;\nvar leftClickCallbackMap = new Map();\nvar rightClickCallbackMap = new Map();\nvar MoveCallbackMap = new Map();\nvar selectedFeature;\nfunction cartesian3Towgs84(cartesian, viewer) {\n var ellipsoid = viewer.scene.globe.ellipsoid;\n var cartesian3 = new Cesium.Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n var cartographic = ellipsoid.cartesianToCartographic(cartesian3);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n var alt = cartographic.height < 0 ? 0 : cartographic.height;\n return {\n lng: lng,\n lat: lat,\n alt: alt\n };\n}\nfunction getcartesian(sdk, movement) {\n if (movement.endPosition) {\n movement.endPosition.y -= 2;\n }\n var position = movement.position || movement.endPosition;\n // 获取世界坐标系地表坐标,考虑地形,不包括模型,倾斜摄影模型表面;\n var cartesian = sdk.viewer.scene.pickPosition(position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n return cartesian;\n}\nfunction openLeftClick(sdk, cb) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n var click = true;\n leftClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n leftClickHandler.setInputAction(function (movement) {\n var cartesian = sdk.viewer.scene.pickPosition(movement.position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(movement.position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n if (!cartesian) {\n return;\n }\n var pos84 = cartesian3Towgs84(cartesian, sdk.viewer);\n cb && cb(pos84);\n if (click) {\n click = false;\n setTimeout(function () {\n click = true;\n }, 600);\n if (!YJ.Measure.GetMeasureStatus() && cartesian) {\n var flag = false;\n for (var i = leftClickCallbackMap.size - 1; i >= 0; i--) {\n var key = Array.from(leftClickCallbackMap.keys())[i];\n var obj = leftClickCallbackMap.get(key);\n if (obj) {\n if (obj.that) {\n // 是否为多边形\n if (obj.that.type === 'PolygonObject') {\n // 是否可点击y\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var pt = turf.point([pos84.lng, pos84.lat]);\n var polyPos = [];\n for (var _i = 0; _i < obj.that.options.positions.length; _i++) {\n polyPos.push([obj.that.options.positions[_i].lng, obj.that.options.positions[_i].lat]);\n }\n polyPos.push([obj.that.options.positions[0].lng, obj.that.options.positions[0].lat]);\n var poly = turf.polygon([polyPos]);\n var contain = turf.booleanPointInPolygon(pt, poly);\n if (contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 聚集地\n else if (obj.that.type === 'AssembleObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var positions = obj.that.computeAssemble(obj.that.options.positions, true);\n var _pt = turf.point([pos84.lng, pos84.lat]);\n var _polyPos = [];\n for (var _i2 = 0; _i2 < positions.length; _i2 += 2) {\n _polyPos.push([positions[_i2], positions[_i2 + 1]]);\n }\n var _poly = turf.polygon([_polyPos]);\n var _contain = turf.booleanPointInPolygon(_pt, _poly);\n if (_contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 单箭头\n else if (obj.that.type === 'AttackArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var _pt2 = turf.point([pos84.lng, pos84.lat]);\n var _positions = obj.that.computeAttackArrow(obj.that.options.positions);\n var _polyPos2 = [];\n for (var m = 0; m < _positions.length; m++) {\n var _pos = cartesian3Towgs84(_positions[m], sdk.viewer);\n _polyPos2.push([_pos.lng, _pos.lat]);\n }\n var _poly2 = turf.polygon([_polyPos2]);\n var _contain2 = turf.booleanPointInPolygon(_pt2, _poly2);\n if (_contain2) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 双箭头\n else if (obj.that.type === 'PincerArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 5) {\n var _pt3 = turf.point([pos84.lng, pos84.lat]);\n var _positions2 = obj.that.computePincerArrow(obj.that.options.positions);\n var _polyPos3 = [];\n for (var _m = 0; _m < _positions2.length; _m++) {\n var _pos2 = cartesian3Towgs84(_positions2[_m], sdk.viewer);\n _polyPos3.push([_pos2.lng, _pos2.lat]);\n }\n var pos84_0 = cartesian3Towgs84(_positions2[0], sdk.viewer);\n _polyPos3.push([pos84_0.lng, pos84_0.lat]);\n var _poly3 = turf.polygon([_polyPos3]);\n var _contain3 = turf.booleanPointInPolygon(_pt3, _poly3);\n if (_contain3) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 圆\n else if (obj.that.type === 'CircleObject') {\n if (obj.that.picking) {\n var _pt4 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius) {\n var center = [obj.that.options.center.lng, obj.that.options.center.lat];\n var radius = obj.that.options.radius / 1000;\n var options = {\n steps: 360,\n units: 'kilometers'\n };\n var circle = turf.circle(center, radius, options);\n var _contain4 = turf.booleanPointInPolygon(_pt4, circle);\n if (_contain4) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 扇形\n else if (obj.that.type === 'SectorObject') {\n if (obj.that.picking) {\n var _pt5 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) {\n var _positions3 = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true);\n var _polyPos4 = [];\n for (var _m2 = 0; _m2 < _positions3.length; _m2++) {\n _polyPos4.push([_positions3[_m2].lng, _positions3[_m2].lat]);\n }\n var _poly4 = turf.polygon([_polyPos4]);\n var _contain5 = turf.booleanPointInPolygon(_pt5, _poly4);\n if (_contain5) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n }\n }\n }\n if (!flag) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick) {\n if (pick.id) {\n var entityId;\n // 矢量\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var _obj = leftClickCallbackMap.get(pick.id.parentId);\n if (_obj.that.picking && _obj.that.geojson) {\n for (var _i3 = 0; _i3 < _obj.that.geojson.features.length; _i3++) {\n if (_obj.that.geojson.features[_i3].id === pick.id._id) {\n _obj.callback(movement, _obj.that.geojson.features[_i3].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj.that);\n }\n }\n }\n } else if (typeof pick.id.id == 'string') {\n var array = pick.id.id.split('-');\n array.splice(array.length - 1, 1);\n entityId = array.join('-');\n }\n if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) {\n var _obj2 = leftClickCallbackMap.get(pick.id.properties.id._value);\n if (_obj2.that.picking) {\n _obj2.callback(movement, pick.id.properties.id._value, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj2.that);\n }\n } else if (leftClickCallbackMap.has(pick.id.id)) {\n var _obj3 = leftClickCallbackMap.get(pick.id.id);\n if (_obj3.that.picking) {\n _obj3.callback(movement, pick.id.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj3.that);\n }\n } else if (entityId && leftClickCallbackMap.has(entityId)) {\n var _obj4 = leftClickCallbackMap.get(entityId);\n if (_obj4.that.picking) {\n _obj4.callback(movement, entityId, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj4.that);\n }\n } else if (pick.primitive) {\n if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) {\n var _obj5 = leftClickCallbackMap.get(pick.id);\n _obj5.callback(movement, pick.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj5.that);\n }\n }\n } else {\n if (pick.primitive && pick.primitive.id) {\n if (leftClickCallbackMap.has(pick.primitive.id)) {\n var _obj6 = leftClickCallbackMap.get(pick.primitive.id);\n if (_obj6.that.picking) {\n if (_obj6.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj6.callback(movement, pick.primitive, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n } else {\n _obj6.callback(movement, pick.primitive.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n }\n }\n }\n }\n if (pick.content && (!pick.primitive || !pick.primitive.id)) {\n if (leftClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj7 = leftClickCallbackMap.get(pick.content.tileset.id);\n if (_obj7.that.picking) {\n if (_obj7.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj7.callback(movement, pick.content.tileset, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n } else {\n _obj7.callback(movement, pick.content.tileset.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // if (click) {\n // click = false\n // setTimeout(() => {\n // click = true\n // }, 300);\n // if (!YJ.Measure.GetMeasureStatus()) {\n\n // }\n // }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n\n // leftClickHandler.setInputAction(function (movement) {\n // const feature = sdk.viewer.scene.pick(movement.endPosition);\n // // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // selectedFeature.color = Cesium.Color.WHITE;\n // }\n // selectedFeature = feature\n // if (feature) {\n // feature.color = Cesium.Color.YELLOW;\n // }\n // }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n // }\n}\nfunction closeLeftClick(sdk) {\n leftClickHandler.destroy(); //关闭事件句柄\n leftClickHandler = null;\n // }\n}\nfunction openRightClick(sdk) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n rightClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n rightClickHandler.setInputAction(function (movement) {\n if (!YJ.Measure.GetMeasureStatus()) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id) {\n var id;\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var obj = rightClickCallbackMap.get(pick.id.parentId);\n if (obj.that.picking && obj.that.geojson) {\n for (var i = 0; i < obj.that.geojson.features.length; i++) {\n if (obj.that.geojson.features[i].id === pick.id._id) {\n obj.callback(movement, obj.that.geojson.features[i].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n }\n }\n }\n } else {\n if (typeof pick.id === 'string') {\n id = pick.id;\n } else {\n id = pick.id.id;\n }\n if (rightClickCallbackMap.has(id)) {\n var _obj8 = rightClickCallbackMap.get(id);\n if (_obj8.that.picking) {\n var cartesian = getcartesian(sdk, movement);\n if (!cartesian) {\n return;\n }\n _obj8.callback(movement, id, cartesian3Towgs84(cartesian, sdk.viewer), _obj8.that);\n }\n }\n }\n }\n if (pick && pick.content) {\n if (rightClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj9 = rightClickCallbackMap.get(pick.content.tileset.id);\n if (_obj9.that.picking) {\n if (_obj9.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n var _cartesian = getcartesian(sdk, movement);\n if (!_cartesian) {\n return;\n }\n _obj9.callback(movement, pick.getProperty('id'), cartesian3Towgs84(_cartesian, sdk.viewer), _obj9.that);\n }\n } else {\n var _cartesian2 = getcartesian(sdk, movement);\n if (!_cartesian2) {\n return;\n }\n _obj9.callback(movement, pick.content.tileset.id, cartesian3Towgs84(_cartesian2, sdk.viewer), _obj9.that);\n }\n }\n }\n }\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n}\nfunction closeRightClick() {\n if (rightClickHandler) {\n rightClickHandler.destroy(); //关闭事件句柄\n rightClickHandler = null;\n }\n}\nfunction openMove(sdk) {\n MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n MoveHandler.setInputAction(function (movement) {\n var pick = sdk.viewer.scene.pick(movement.endPosition);\n // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // let color = '#fff'\n // let state = selectedFeature.getProperty('state')\n // switch (state) {\n // case '0':\n // color = '#fff'\n // break;\n // case '1':\n // color = '#f00'\n // break;\n // case '2':\n // color = '#0f0'\n // break;\n // case '3':\n // color = '#00f'\n // break;\n // default:\n // }\n // selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency)\n // }\n // if (pick && pick.id) { }\n // if (pick && pick.content) {\n // if (MoveCallbackMap.has(pick.content.tileset.id)) {\n // let obj = MoveCallbackMap.get(pick.content.tileset.id)\n // if (obj.that.picking) {\n // if (obj.that.type === 'bim') {\n // if (YJ.Global.getBimPickStatus(sdk)) {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // else {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n}\nfunction closeMove() {\n if (MoveHandler) {\n MoveHandler.destroy(); //关闭事件句柄\n MoveHandler = null;\n }\n}\n\n/*注册左键回调*/\nfunction regLeftClickCallback(id, callback, that) {\n leftClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unRegLeftClickCallback(id) {\n leftClickCallbackMap.delete(id);\n}\n\n/*注册右键回调*/\nfunction regRightClickCallback(id, callback, that) {\n rightClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消右键回调*/\nfunction unRegRightClickCallback(id) {\n rightClickCallbackMap.delete(id);\n}\n\n/*注册左键回调*/\nfunction regMoveCallback(id, callback, that) {\n MoveCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unregMoveCallback(id) {\n MoveCallbackMap.delete(id);\n}\nfunction getLeftClickState() {\n if (leftClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getRightClickState() {\n if (rightClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getMoveState() {\n if (MoveHandler) {\n return true;\n } else {\n false;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0NsaWNrQ2FsbGJhY2svaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL0NsaWNrQ2FsbGJhY2svaW5kZXguanM/Mzc4MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGNsaWNrXHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMDUtMjggMTE6MDVcclxuICogQGRlc2NyaXB0aW9u77yaY2xpY2tcclxuICogQHVwZGF0ZTogMjAyMy0wNS0yOCAxMTowNVxyXG4gKi9cclxubGV0IGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbmxldCByaWdodENsaWNrSGFuZGxlciA9IG51bGxcclxubGV0IE1vdmVIYW5kbGVyID0gbnVsbFxyXG5sZXQgbGVmdENsaWNrQ2FsbGJhY2tNYXAgPSBuZXcgTWFwKClcclxubGV0IHJpZ2h0Q2xpY2tDYWxsYmFja01hcCA9IG5ldyBNYXAoKVxyXG5sZXQgTW92ZUNhbGxiYWNrTWFwID0gbmV3IE1hcCgpXHJcbmxldCBzZWxlY3RlZEZlYXR1cmU7XHJcblxyXG5cclxuZnVuY3Rpb24gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB2aWV3ZXIpIHtcclxuICB2YXIgZWxsaXBzb2lkID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZFxyXG4gIHZhciBjYXJ0ZXNpYW4zID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgY2FydGVzaWFuLngsXHJcbiAgICBjYXJ0ZXNpYW4ueSxcclxuICAgIGNhcnRlc2lhbi56XHJcbiAgKVxyXG4gIHZhciBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoY2FydGVzaWFuMylcclxuICB2YXIgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSlcclxuICB2YXIgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpXHJcbiAgdmFyIGFsdCA9IGNhcnRvZ3JhcGhpYy5oZWlnaHQgPCAwID8gMCA6IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICByZXR1cm4ge1xyXG4gICAgbG5nOiBsbmcsXHJcbiAgICBsYXQ6IGxhdCxcclxuICAgIGFsdDogYWx0LFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpIHtcclxuICBpZiAobW92ZW1lbnQuZW5kUG9zaXRpb24pIHtcclxuICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLT0gMlxyXG4gIH1cclxuICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvbiB8fCBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gIC8vIOiOt+WPluS4lueVjOWdkOagh+ezu+WcsOihqOWdkOagh++8jOiAg+iZkeWcsOW9ou+8jOS4jeWMheaLrOaooeWei++8jOWAvuaWnOaRhOW9seaooeWei+ihqOmdou+8m1xyXG4gIGxldCBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihwb3NpdGlvbilcclxuICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCBzZGsudmlld2VyLnNjZW5lKTtcclxuICB9XHJcbiAgcmV0dXJuIGNhcnRlc2lhblxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuTGVmdENsaWNrKHNkaywgY2IpIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCBjbGljayA9IHRydWVcclxuICBsZWZ0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShtb3ZlbWVudC5wb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICAgIGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXksIHNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvczg0ID0gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCBzZGsudmlld2VyKVxyXG5cclxuICAgIGNiICYmIGNiKHBvczg0KVxyXG5cclxuICAgIGlmIChjbGljaykge1xyXG4gICAgICBjbGljayA9IGZhbHNlXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNsaWNrID0gdHJ1ZVxyXG4gICAgICB9LCA2MDApO1xyXG4gICAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpICYmIGNhcnRlc2lhbikge1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICBmb3IgKGxldCBpID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBsZXQga2V5ID0gQXJyYXkuZnJvbShsZWZ0Q2xpY2tDYWxsYmFja01hcC5rZXlzKCkpW2ldXHJcbiAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KGtleSlcclxuICAgICAgICAgIGlmIChvYmopIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdCkge1xyXG4gICAgICAgICAgICAgIC8vIOaYr+WQpuS4uuWkmui+ueW9olxyXG4gICAgICAgICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnUG9seWdvbk9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIOaYr+WQpuWPr+eCueWHu3lcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDogZrpm4blnLBcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnQXNzZW1ibGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gb2JqLnRoYXQuY29tcHV0ZUFzc2VtYmxlKG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV1cclxuICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWNleeureWktFxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdBdHRhY2tBcnJvd09iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IG9iai50aGF0LmNvbXB1dGVBdHRhY2tBcnJvdyhvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3M4NCA9IGNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1ttXSwgc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zODQubG5nLCBwb3M4NC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDlj4znrq3lpLRcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnUGluY2VyQXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jb21wdXRlUGluY2VyQXJyb3cob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgcG9zaXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zODQgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbbV0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW3Bvczg0LmxuZywgcG9zODQubGF0XSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvczg0XzAgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgcG9seVBvcy5wdXNoKFtwb3M4NF8wLmxuZywgcG9zODRfMC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWchlxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdDaXJjbGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIgJiYgb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2VudGVyID0gW29iai50aGF0Lm9wdGlvbnMuY2VudGVyLmxuZywgb2JqLnRoYXQub3B0aW9ucy5jZW50ZXIubGF0XTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaXVzID0gb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0geyBzdGVwczogMzYwLCB1bml0czogJ2tpbG9tZXRlcnMnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmNsZSA9IHR1cmYuY2lyY2xlKGNlbnRlciwgcmFkaXVzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGFpbiA9IHR1cmYuYm9vbGVhblBvaW50SW5Qb2x5Z29uKHB0LCBjaXJjbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8g5omH5b2iXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ1NlY3Rvck9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLmNlbnRlciAmJiBvYmoudGhhdC5vcHRpb25zLnJhZGl1cyAmJiBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUgJiYgb2JqLnRoYXQub3B0aW9ucy5lbmRBbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jYWxTZWN0b3Iob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIsIG9iai50aGF0Lm9wdGlvbnMucmFkaXVzLCBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUsIG9iai50aGF0Lm9wdGlvbnMuZW5kQW5nbGUsIHVuZGVmaW5lZCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICAgIGNvbnN0IHBpY2sgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pXHJcbiAgICAgICAgICBpZiAocGljaykge1xyXG4gICAgICAgICAgICBpZiAocGljay5pZCkge1xyXG4gICAgICAgICAgICAgIGxldCBlbnRpdHlJZFxyXG4gICAgICAgICAgICAgIC8vIOefoumHj1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KHBpY2suaWQucGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZyAmJiBvYmoudGhhdC5nZW9qc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmlkID09PSBwaWNrLmlkLl9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwaWNrLmlkLmlkID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBwaWNrLmlkLmlkLnNwbGl0KCctJylcclxuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShhcnJheS5sZW5ndGggLSAxLCAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5SWQgPSBhcnJheS5qb2luKCctJylcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnByb3BlcnRpZXMgJiYgcGljay5pZC5wcm9wZXJ0aWVzLmlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQucHJvcGVydGllcy5pZC5fdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLmlkKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0eUlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhlbnRpdHlJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQoZW50aXR5SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHBpY2sucHJpbWl0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBpY2suaWQgPT0gJ3N0cmluZycgJiYgbGVmdENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5pZClcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLnByaW1pdGl2ZSAmJiBwaWNrLnByaW1pdGl2ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLnByaW1pdGl2ZS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLnByaW1pdGl2ZS5pZClcclxuICAgICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChZSi5HbG9iYWwuZ2V0QmltUGlja1N0YXR1cyhzZGspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwaWNrLmNvbnRlbnQgJiYgKCFwaWNrLnByaW1pdGl2ZSB8fCAhcGljay5wcmltaXRpdmUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmNvbnRlbnQudGlsZXNldC5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGljay5jb250ZW50LnRpbGVzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgIHBpY2suY29udGVudC50aWxlc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gaWYgKGNsaWNrKSB7XHJcbiAgICAvLyAgIGNsaWNrID0gZmFsc2VcclxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgY2xpY2sgPSB0cnVlXHJcbiAgICAvLyAgIH0sIDMwMCk7XHJcbiAgICAvLyAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuXHJcbiAgLy8gbGVmdENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbihmdW5jdGlvbiAobW92ZW1lbnQpIHtcclxuICAvLyAgIGNvbnN0IGZlYXR1cmUgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQuZW5kUG9zaXRpb24pO1xyXG4gIC8vICAgLy8gdW5zZWxlY3RGZWF0dXJlKHNlbGVjdGVkRmVhdHVyZSk7XHJcbiAgLy8gICBpZiAoc2VsZWN0ZWRGZWF0dXJlKSB7XHJcbiAgLy8gICAgIHNlbGVjdGVkRmVhdHVyZS5jb2xvciA9IENlc2l1bS5Db2xvci5XSElURTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmVcclxuICAvLyAgIGlmIChmZWF0dXJlKSB7XHJcbiAgLy8gICAgIGZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gIC8vICAgfVxyXG4gIC8vIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5NT1VTRV9NT1ZFKTtcclxuICAvLyB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZUxlZnRDbGljayhzZGspIHtcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gIGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbiAgLy8gfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuUmlnaHRDbGljayhzZGspIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICByaWdodENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgaWYgKHBpY2sgJiYgcGljay5pZCkge1xyXG4gICAgICAgIGxldCBpZFxyXG4gICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmlnaHRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnBhcmVudElkKVxyXG4gICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcgJiYgb2JqLnRoYXQuZ2VvanNvbikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAob2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9PT0gcGljay5pZC5faWQpIHtcclxuICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgIG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXNbaV0uaWQsXHJcbiAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgcGljay5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmlnaHRDbGlja0NhbGxiYWNrTWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQoaWQpXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwaWNrICYmIHBpY2suY29udGVudCkge1xyXG4gICAgICAgIGlmIChyaWdodENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suY29udGVudC50aWxlc2V0LmlkKSkge1xyXG4gICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICBwaWNrLmdldFByb3BlcnR5KCdpZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBwaWNrLmNvbnRlbnQudGlsZXNldC5pZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZVJpZ2h0Q2xpY2soKSB7XHJcbiAgaWYgKHJpZ2h0Q2xpY2tIYW5kbGVyKSB7XHJcbiAgICByaWdodENsaWNrSGFuZGxlci5kZXN0cm95KCkgLy/lhbPpl63kuovku7blj6Xmn4RcclxuICAgIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbnVsbFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gb3Blbk1vdmUoc2RrKSB7XHJcbiAgTW92ZUhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHNkay52aWV3ZXIuY2FudmFzKVxyXG4gIE1vdmVIYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uIChtb3ZlbWVudCkge1xyXG4gICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5lbmRQb3NpdGlvbik7XHJcbiAgICAvLyB1bnNlbGVjdEZlYXR1cmUoc2VsZWN0ZWRGZWF0dXJlKTtcclxuICAgIC8vIGlmIChzZWxlY3RlZEZlYXR1cmUpIHtcclxuICAgIC8vICAgbGV0IGNvbG9yID0gJyNmZmYnXHJcbiAgICAvLyAgIGxldCBzdGF0ZSA9IHNlbGVjdGVkRmVhdHVyZS5nZXRQcm9wZXJ0eSgnc3RhdGUnKVxyXG4gICAgLy8gICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAvLyAgICAgY2FzZSAnMCc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZmZmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMSc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZjAwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMic6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMGYwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMyc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMDBmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZWxlY3RlZEZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKS53aXRoQWxwaGEoc2VsZWN0ZWRGZWF0dXJlLnRpbGVzZXQudHJhbnNwYXJlbmN5KVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHBpY2sgJiYgcGljay5pZCkgeyB9XHJcbiAgICAvLyBpZiAocGljayAmJiBwaWNrLmNvbnRlbnQpIHtcclxuICAgIC8vICAgaWYgKE1vdmVDYWxsYmFja01hcC5oYXMocGljay5jb250ZW50LnRpbGVzZXQuaWQpKSB7XHJcbiAgICAvLyAgICAgbGV0IG9iaiA9IE1vdmVDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAvLyAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgIC8vICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnYmltJykge1xyXG4gICAgLy8gICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgLy8gICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IHBpY2tcclxuICAgIC8vICAgICAgICAgICBwaWNrLmNvbG9yID0gQ2VzaXVtLkNvbG9yLllFTExPVztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBudWxsXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBwaWNrXHJcbiAgICAvLyAgICAgICAgIHBpY2suY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IG51bGxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb3NlTW92ZSgpIHtcclxuICBpZiAoTW92ZUhhbmRsZXIpIHtcclxuICAgIE1vdmVIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gICAgTW92ZUhhbmRsZXIgPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ0xlZnRDbGlja0NhbGxiYWNrKGlkLCBjYWxsYmFjaywgdGhhdCkge1xyXG5cclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5zZXQoaWQsIHsgY2FsbGJhY2ssIHRoYXQgfSlcclxufS8q5Y+W5raI5bem6ZSu5Zue6LCDKi9cclxuZnVuY3Rpb24gdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjayhpZCwpIHtcclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ1JpZ2h0Q2xpY2tDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICByaWdodENsaWNrQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVuUmVnUmlnaHRDbGlja0NhbGxiYWNrKGlkLCkge1xyXG4gIHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ01vdmVDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICBNb3ZlQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVucmVnTW92ZUNhbGxiYWNrKGlkLCkge1xyXG4gIE1vdmVDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMZWZ0Q2xpY2tTdGF0ZSgpIHtcclxuICBpZiAobGVmdENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmlnaHRDbGlja1N0YXRlKCkge1xyXG4gIGlmIChyaWdodENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TW92ZVN0YXRlKCkge1xyXG4gIGlmIChNb3ZlSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCB7IG9wZW5MZWZ0Q2xpY2ssIGNsb3NlTGVmdENsaWNrLCByZWdMZWZ0Q2xpY2tDYWxsYmFjaywgdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjaywgb3BlblJpZ2h0Q2xpY2ssIGNsb3NlUmlnaHRDbGljaywgcmVnUmlnaHRDbGlja0NhbGxiYWNrLCB1blJlZ1JpZ2h0Q2xpY2tDYWxsYmFjaywgb3Blbk1vdmUsIGNsb3NlTW92ZSwgcmVnTW92ZUNhbGxiYWNrLCB1bnJlZ01vdmVDYWxsYmFjaywgZ2V0TGVmdENsaWNrU3RhdGUsIGdldFJpZ2h0Q2xpY2tTdGF0ZSwgZ2V0TW92ZVN0YXRlIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/ClickCallback/index.js\n"); /***/ }), /***/ "./src/Global/Contour/_element.js": /*!****************************************!*\ !*** ./src/Global/Contour/_element.js ***! \****************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u7B49\\u9AD8\\u7EBF\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7B49\\u9AD8\\u8DDD\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u9009\\u4E2D\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u8BA1\\u66F2\\u7EBF\\n \\n
\\n
\\n \\u8BA1\\u66F2\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8BA1\\u66F2\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n
\\n \\u9996\\u66F2\\u7EBF\\n \\n
\\n
\\n \\u9996\\u66F2\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u9996\\u66F2\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n
\\n \\u95F4\\u66F2\\u7EBF\\n \\n
\\n
\\n \\u95F4\\u66F2\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u95F4\\u66F2\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n
\\n \\u52A9\\u66F2\\u7EBF\\n \\n
\\n
\\n \\u52A9\\u66F2\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u52A9\\u66F2\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0NvbnRvdXIvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL0NvbnRvdXIvX2VsZW1lbnQuanM/ZGJmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuetiemrmOe6vzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2ggc2hvd1wiIHR5cGU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nrYnpq5jot508L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBlcXVhbC1oZWlnaHQtZGlzdGFuY2VcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiMTAwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIiAgc3R5bGU9XCJmbGV4OiAwIDAgNjBweDtcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCIgc3R5bGU9XCJmbGV4OiAwIDAgMTU3cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6YCJ5Lit57q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2ZS1jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTIwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6K6h5puy57q/PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaCBpbmRleC1jb250b3VyLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIiBzdHlsZT1cImZsZXg6IDAgMCAxMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7orqHmm7Lnur/popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kZXgtY29udG91ci1jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7orqHmm7Lnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbmRleC1jb250b3VyLXdpZHRoXCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgc3RlcD1cIjAuMVwiIG1pbj1cIjFcIiBtYXg9XCIxMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAxMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pppbmm7Lnur88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoIGludGVybWVkaWF0ZS1jb250b3VyLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIiBzdHlsZT1cImZsZXg6IDAgMCAxMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pppbmm7Lnur/popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJtZWRpYXRlLWNvbnRvdXItY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6aaW5puy57q/5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaW50ZXJtZWRpYXRlLWNvbnRvdXItd2lkdGhcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMVwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumXtOabsue6vzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2ggaGFsZkludGVydmFsLWNvbnRvdXItc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGlucHV0LXNlbGVjdC11bml0LWJveFwiIHN0eWxlPVwiZmxleDogMCAwIDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumXtOabsue6v+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYWxmSW50ZXJ2YWwtY29udG91ci1jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pl7Tmm7Lnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBoYWxmSW50ZXJ2YWwtY29udG91ci13aWR0aFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCIxMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAxMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqnmm7Lnur88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoIHN1cHBsZW1lbnRhcnktY29udG91ci1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCIgc3R5bGU9XCJmbGV4OiAwIDAgMTIwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Yqp5puy57q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cHBsZW1lbnRhcnktY29udG91ci1jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqnmm7Lnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzdXBwbGVtZW50YXJ5LWNvbnRvdXItd2lkdGhcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUF5R0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/Contour/_element.js\n"); /***/ }), /***/ "./src/Global/Contour/index.js": /*!*************************************!*\ !*** ./src/Global/Contour/index.js ***! \*************************************/ /*! exports provided: dialog */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dialog\", function() { return dialog; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Obj/Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../global */ \"./src/Global/global.js\");\n/* harmony import */ var _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Obj/Element/yj-color-picker */ \"./src/Obj/Element/yj-color-picker.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_element */ \"./src/Global/Contour/_element.js\");\n\n\n/**\r\n * 等高线\r\n */\n\n\n\n\n\nvar _DialogObject = null;\nvar material = null;\nvar handler = null;\nvar activeHeightElm = null;\nvar tools;\nvar _sdk;\nvar secondaryLinesCount = 19;\nvar show = false;\nvar equalHeightDistance = 10;\nvar activeColor = '#ffd000';\nvar indexContourShow = true;\nvar indexContourWidth = 2.5;\nvar indexContourColor = '#43cf7c';\nvar intermediateContourShow = true;\nvar intermediateContourWidth = 1.8;\nvar intermediateContourColor = '#ff0000';\nvar halfIntervalContourShow = false;\nvar halfIntervalContourWidth = 1.0;\nvar halfIntervalContourColor = '#64b6d9';\nvar supplementaryContourShow = false;\nvar supplementaryContourWidth = 1.0;\nvar supplementaryContourColor = '#d084d1';\nactiveHeightElm = document.createElement('div');\nactiveHeightElm.className = 'YJ-customize-active-height-elm';\nactiveHeightElm.style.position = 'absolute';\nactiveHeightElm.style.left = '10px';\nactiveHeightElm.style.top = '10px';\nactiveHeightElm.style.width = '100px';\n// activeHeightElm.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'\nactiveHeightElm.style.textAlign = 'center';\nactiveHeightElm.style.pointerEvents = 'none';\nactiveHeightElm.style.color = '#ff0000';\nactiveHeightElm.style.display = 'none';\nfunction accordingToCameraHeight() {\n if (_sdk) {\n var camera = _sdk.viewer.camera;\n var position = camera.positionCartographic;\n\n // 计算相机高度(相对于椭球面)\n var cameraHeight = Cesium.Math.toDegrees(position.height);\n if (cameraHeight < 1000000) {\n if (!_sdk.viewer.scene.globe.material && show === true) {\n showContour(_sdk);\n }\n // if (material) {\n // if (cameraHeight > 450000) {\n // material.uniforms.supplementaryContourShow = false\n // }\n // else if (supplementaryContourShow) {\n // material.uniforms.supplementaryContourShow = true\n // }\n // }\n } else {\n hideContour(_sdk);\n }\n // console.log(cameraHeight)\n }\n}\nfunction dialog(_x) {\n return _dialog.apply(this, arguments);\n}\nfunction _dialog() {\n _dialog = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(sdk) {\n var contentElm, showBtn, equalHeightDistanceInput, activeColorPicker, indexContourSwitch, indexContourColorPicker, indexContourWidthInput, intermediateContourSwitch, intermediateContourColorPicker, intermediateContourWidthInput, halfIntervalContourSwitch, halfIntervalContourColorPicker, halfIntervalContourWidthInput, supplementaryContourSwitch, supplementaryContourColorPicker, supplementaryContourWidthInput, initInputValue;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n initInputValue = function _initInputValue(e) {\n var value = e.target.value;\n if (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n return value;\n };\n _sdk = sdk;\n if (!(!sdk || _DialogObject)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n if (!material) {\n createMaterial();\n }\n if (!tools) {\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdk);\n }\n _context.next = 8;\n return new _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_2__[\"default\"](sdk, {}, {\n title: \"全局等高线\",\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n _DialogObject = null;\n }\n });\n case 8:\n _DialogObject = _context.sent;\n _DialogObject._element.body.className = _DialogObject._element.body.className + ' contour';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_6__[\"html\"])(this);\n _DialogObject.contentAppChild(contentElm);\n sdk.viewer.scene.postRender.removeEventListener(accordingToCameraHeight);\n sdk.viewer.scene.postRender.addEventListener(accordingToCameraHeight);\n\n // 显示\n showBtn = contentElm.getElementsByClassName('show')[0];\n showBtn.checked = show;\n showBtn.addEventListener('change', function (e) {\n if (e.target.checked) {\n show = true;\n var height = sdk.viewer.camera.positionCartographic.height;\n if (height > 16360) {\n var cartographic = sdk.viewer.camera.positionCartographic;\n var options = {\n position: {\n lng: Cesium.Math.toDegrees(cartographic.longitude),\n lat: Cesium.Math.toDegrees(cartographic.latitude),\n alt: 16360\n }\n };\n Object(_global__WEBPACK_IMPORTED_MODULE_4__[\"flyTo\"])(sdk, options, 0.5);\n }\n showContour(sdk);\n } else {\n show = false;\n hideContour(sdk);\n }\n });\n // 等高距\n equalHeightDistanceInput = contentElm.getElementsByClassName('equal-height-distance')[0];\n equalHeightDistanceInput.value = equalHeightDistance;\n equalHeightDistanceInput.addEventListener('blur', function (e) {\n var value = initInputValue(e);\n equalHeightDistance = value;\n equalHeightDistanceInput.value = value;\n if (material) {\n material.uniforms.spacing = equalHeightDistance * 5;\n }\n });\n\n // 选中颜色\n // let activeColorPicker = new YJColorPicker({\n // el: contentElm.getElementsByClassName('active-color')[0],\n // size: \"mini\",\n // isLog: false,\n // alpha: true, //是否开启透明度\n // disabled: false, //是否禁止打开颜色选择器\n // predefineColor: true, // 预定义颜色\n // defaultColor: '#ffffff',\n // sure: color => {\n // activeColor = color\n // if (material) {\n // material.uniforms.activeColor = Cesium.Color.fromCssColorString(activeColor)\n // }\n // },\n // clear: () => {\n // activeColor = 'rgba(255,255,255,1)'\n // if (material) {\n // material.uniforms.activeColor = Cesium.Color.fromCssColorString(activeColor)\n // }\n // }\n // })\n activeColorPicker = new _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n el: contentElm.getElementsByClassName('active-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: activeColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n activeColor = color;\n if (material) {\n material.uniforms.activeColor = Cesium.Color.fromCssColorString(activeColor);\n }\n },\n clear: function clear() {\n activeColor = 'rgba(255,255,255,1)';\n if (material) {\n material.uniforms.activeColor = Cesium.Color.fromCssColorString(activeColor);\n }\n }\n }); // 计曲线开关\n indexContourSwitch = contentElm.getElementsByClassName('index-contour-switch')[0];\n indexContourSwitch.checked = indexContourShow;\n indexContourSwitch.addEventListener('change', function (e) {\n indexContourShow = e.target.checked;\n if (material) {\n material.uniforms.indexContourShow = indexContourShow;\n }\n });\n // 计曲线颜色\n indexContourColorPicker = new _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n el: contentElm.getElementsByClassName('index-contour-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: indexContourColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n indexContourColor = color;\n if (material) {\n material.uniforms.indexContourColor = Cesium.Color.fromCssColorString(indexContourColor);\n }\n },\n clear: function clear() {\n indexContourColor = 'rgba(255,255,255,1)';\n if (material) {\n material.uniforms.indexContourColor = Cesium.Color.fromCssColorString(indexContourColor);\n }\n }\n }); // 计曲线宽度\n indexContourWidthInput = contentElm.getElementsByClassName('index-contour-width')[0];\n indexContourWidthInput.value = indexContourWidth;\n indexContourWidthInput.addEventListener('blur', function (e) {\n var value = initInputValue(e);\n indexContourWidth = value;\n indexContourWidthInput.value = value;\n if (material) {\n material.uniforms.indexContourWidth = indexContourWidth;\n }\n });\n\n // 首曲线开关\n intermediateContourSwitch = contentElm.getElementsByClassName('intermediate-contour-switch')[0];\n intermediateContourSwitch.checked = intermediateContourShow;\n intermediateContourSwitch.addEventListener('change', function (e) {\n intermediateContourShow = e.target.checked;\n if (material) {\n material.uniforms.intermediateContourShow = intermediateContourShow;\n }\n });\n // 首曲线颜色\n intermediateContourColorPicker = new _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n el: contentElm.getElementsByClassName('intermediate-contour-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: intermediateContourColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n intermediateContourColor = color;\n if (material) {\n material.uniforms.intermediateContourColor = Cesium.Color.fromCssColorString(intermediateContourColor);\n }\n },\n clear: function clear() {\n intermediateContourColor = 'rgba(255,255,255,1)';\n if (material) {\n material.uniforms.intermediateContourColor = Cesium.Color.fromCssColorString(intermediateContourColor);\n }\n }\n }); // 首曲线宽度\n intermediateContourWidthInput = contentElm.getElementsByClassName('intermediate-contour-width')[0];\n intermediateContourWidthInput.value = intermediateContourWidth;\n intermediateContourWidthInput.addEventListener('blur', function (e) {\n var value = initInputValue(e);\n intermediateContourWidth = value;\n intermediateContourWidthInput.value = value;\n if (material) {\n material.uniforms.intermediateContourWidth = intermediateContourWidth;\n }\n });\n\n // 间曲线开关\n halfIntervalContourSwitch = contentElm.getElementsByClassName('halfInterval-contour-switch')[0];\n halfIntervalContourSwitch.checked = halfIntervalContourShow;\n halfIntervalContourSwitch.addEventListener('change', function (e) {\n halfIntervalContourShow = e.target.checked;\n if (material) {\n material.uniforms.halfIntervalContourShow = halfIntervalContourShow;\n }\n });\n // 间曲线颜色\n halfIntervalContourColorPicker = new _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n el: contentElm.getElementsByClassName('halfInterval-contour-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: halfIntervalContourColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n halfIntervalContourColor = color;\n if (material) {\n material.uniforms.halfIntervalContourColor = Cesium.Color.fromCssColorString(halfIntervalContourColor);\n }\n },\n clear: function clear() {\n halfIntervalContourColor = 'rgba(255,255,255,1)';\n if (material) {\n material.uniforms.halfIntervalContourColor = Cesium.Color.fromCssColorString(halfIntervalContourColor);\n }\n }\n }); // 间曲线宽度\n halfIntervalContourWidthInput = contentElm.getElementsByClassName('halfInterval-contour-width')[0];\n halfIntervalContourWidthInput.value = halfIntervalContourWidth;\n halfIntervalContourWidthInput.addEventListener('blur', function (e) {\n var value = initInputValue(e);\n halfIntervalContourWidth = value;\n halfIntervalContourWidthInput.value = value;\n if (material) {\n material.uniforms.halfIntervalContourWidth = halfIntervalContourWidth;\n }\n });\n\n // 助曲线开关\n supplementaryContourSwitch = contentElm.getElementsByClassName('supplementary-contour-switch')[0];\n supplementaryContourSwitch.checked = supplementaryContourShow;\n supplementaryContourSwitch.addEventListener('change', function (e) {\n supplementaryContourShow = e.target.checked;\n if (material) {\n material.uniforms.supplementaryContourShow = supplementaryContourShow;\n }\n });\n // 助曲线颜色\n supplementaryContourColorPicker = new _Obj_Element_yj_color_picker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n el: contentElm.getElementsByClassName('supplementary-contour-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: supplementaryContourColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n supplementaryContourColor = color;\n if (material) {\n material.uniforms.supplementaryContourColor = Cesium.Color.fromCssColorString(supplementaryContourColor);\n }\n },\n clear: function clear() {\n supplementaryContourColor = 'rgba(255,255,255,1)';\n if (material) {\n material.uniforms.supplementaryContourColor = Cesium.Color.fromCssColorString(supplementaryContourColor);\n }\n }\n }); // 助曲线宽度\n supplementaryContourWidthInput = contentElm.getElementsByClassName('supplementary-contour-width')[0];\n supplementaryContourWidthInput.value = supplementaryContourWidth;\n supplementaryContourWidthInput.addEventListener('blur', function (e) {\n var value = initInputValue(e);\n supplementaryContourWidth = value;\n supplementaryContourWidthInput.value = value;\n if (material) {\n material.uniforms.supplementaryContourWidth = supplementaryContourWidth;\n }\n });\n case 50:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n return _dialog.apply(this, arguments);\n}\nfunction showContour(sdk) {\n var camera = sdk.viewer.camera;\n var position = camera.positionCartographic;\n // 计算相机高度(相对于椭球面)\n var cameraHeight = Cesium.Math.toDegrees(position.height);\n if (cameraHeight > 1000000) {\n return;\n }\n if (handler) {\n handler.destroy();\n }\n if (!sdk.viewer.container.getElementsByClassName('YJ-customize-active-height-elm')[0]) {\n sdk.viewer.container.appendChild(activeHeightElm);\n }\n handler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n handler.setInputAction(function (movement) {\n var cartesian = sdk.viewer.scene.pickPosition(movement.endPosition);\n if (cartesian) {\n var top = 0;\n var left = 0;\n if (sdk.viewer && sdk.viewer._element) {\n var element = sdk.viewer._element.getElementsByClassName('cesium-widget')[0].getElementsByTagName('canvas')[0];\n top = element.getBoundingClientRect().top + window.scrollY;\n left = element.getBoundingClientRect().left + window.scrollX;\n }\n activeHeightElm.style.left = movement.endPosition.x - 50 + left + 'px';\n activeHeightElm.style.top = movement.endPosition.y - 40 + top + 'px';\n activeHeightElm.style.display = 'block';\n // let pos = sdk.viewer.scene.clampToHeight(cartesian)\n var pos84 = tools.cartesian3Towgs84(cartesian, sdk.viewer);\n // pos84.alt = height\n var mainContourHeight = Math.floor(pos84.alt / material.uniforms.spacing) * material.uniforms.spacing;\n var gap = pos84.alt - mainContourHeight;\n var gap2 = material.uniforms.spacing / (material.uniforms.secondaryLinesCount + 1);\n var activeHeight = Math.floor(gap / gap2) * gap2 + mainContourHeight;\n if (pos84.alt < 0) {\n pos84.alt = 0;\n }\n if (pos84.alt - activeHeight > gap2 / 2) {\n activeHeight = activeHeight + gap2;\n }\n material.uniforms.mouseHeight = pos84.alt;\n material.uniforms.mousePosition = cartesian;\n activeHeightElm.innerHTML = \"\".concat(activeHeight.toFixed(0));\n } else {\n activeHeightElm.style.display = 'none';\n }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n sdk.viewer.scene.globe.material = material;\n}\nfunction hideContour(sdk) {\n if (handler) {\n handler.destroy();\n handler = null;\n }\n if (sdk.viewer.container.getElementsByClassName('YJ-customize-active-height-elm')[0]) {\n activeHeightElm.style.display = 'none';\n sdk.viewer.container.removeChild(activeHeightElm);\n }\n sdk.viewer.scene.globe.material = null;\n}\nfunction createMaterial() {\n Cesium.Material._materialCache._materials.ElevationContour.fabric.source = \"\\nuniform vec4 activeColor; // \\u9009\\u4E2D\\u989C\\u8272\\nuniform float spacing; // \\u7B49\\u9AD8\\u8DDD\\n\\n// \\u8BA1\\u66F2\\u7EBF\\nuniform bool indexContourShow;\\nuniform float indexContourWidth;\\nuniform vec4 indexContourColor;\\n// \\u9996\\u66F2\\u7EBF\\nuniform bool intermediateContourShow;\\nuniform float intermediateContourWidth;\\nuniform vec4 intermediateContourColor;\\n// \\u95F4\\u66F2\\u7EBF\\nuniform bool halfIntervalContourShow;\\nuniform float halfIntervalContourWidth;\\nuniform vec4 halfIntervalContourColor;\\n// \\u52A9\\u66F2\\u7EBF\\nuniform bool supplementaryContourShow;\\nuniform float supplementaryContourWidth;\\nuniform vec4 supplementaryContourColor;\\n\\nuniform float mouseHeight;\\n\\nuniform float secondaryLinesCount; // 0=\\u65E0\\u6B21\\u7EBF, 1=1\\u6761\\u6B21\\u7EBF, 2=2\\u6761\\u6B21\\u7EBF...\\n\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n{\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\n // \\u4E3B\\u7B49\\u9AD8\\u7EBF\\u8BA1\\u7B97\\n float distanceToMainContour = mod(materialInput.height, spacing);\\n \\n // \\u6297\\u952F\\u9F7F\\u8BA1\\u7B97\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n float dxc = abs(dFdx(materialInput.height));\\n float dyc = abs(dFdy(materialInput.height));\\n float dFMain = max(dxc, dyc) * czm_pixelRatio * indexContourWidth;\\n#else\\n float dFMain = czm_pixelRatio * indexContourWidth;\\n#endif\\n\\n bool isMainContour = distanceToMainContour < dFMain;\\n bool isSecondaryContour = false;\\n float dFSecondary = 0.0;\\n float secondarySpacing = 0.0;\\n bool isHalfInterval = false;\\n bool isIntermediate= false;\\n\\n // \\u8BA1\\u7B97\\u5F53\\u524D\\u9AD8\\u5EA6\\u6240\\u5C5E\\u7684\\u7B49\\u9AD8\\u7EBF\\u9AD8\\u5EA6\\n float mainContourHeight = floor(materialInput.height / spacing) * spacing;\\n float secondaryContourHeight = floor(materialInput.height / spacing * (secondaryLinesCount + 1.0)) * spacing / (secondaryLinesCount + 1.0);\\n \\n // \\u8BA1\\u7B97\\u6B21\\u7EBF\\u5728\\u4E24\\u6761\\u4E3B\\u7B49\\u9AD8\\u7EBF\\u4E4B\\u95F4\\u7684\\u76F8\\u5BF9\\u4F4D\\u7F6E\\n float relativeHeight = materialInput.height - mainContourHeight;\\n float normalizedPosition = relativeHeight / spacing;\\n \\n // \\u8BA1\\u7B97\\u6B21\\u7EBF\\u7D22\\u5F15\\uFF08\\u4ECE\\u4E3B\\u7B49\\u9AD8\\u7EBF\\u5F00\\u59CB\\u8BA1\\u6570\\uFF09\\n float lineIndex = floor(normalizedPosition * (secondaryLinesCount + 1.0));\\n\\n // \\u53EA\\u6709\\u5F53\\u5B58\\u5728\\u6B21\\u7EBF\\u65F6\\u624D\\u8BA1\\u7B97\\u6B21\\u7EBF\\n if(secondaryLinesCount > 0.0) {\\n float secondaryLinesWidth = supplementaryContourWidth;\\n secondarySpacing = spacing / (secondaryLinesCount + 1.0);\\n float distanceToSecondaryContour = mod(materialInput.height, secondarySpacing);\\n \\n // \\u786E\\u4FDD\\u6B21\\u7EBF\\u4E0D\\u4F1A\\u4E0E\\u4E3B\\u7EBF\\u91CD\\u53E0\\n float minDistanceToMain = min(distanceToMainContour, spacing - distanceToMainContour);\\n bool notCloseToMain = minDistanceToMain > dFMain * 2.0; // 2\\u500D\\u7EBF\\u5BBD\\u7F13\\u51B2\\n\\n\\n if (lineIndex > 0.0 && lineIndex < secondaryLinesCount) {\\n // \\u4F7F\\u7528mod\\u51FD\\u6570\\u68C0\\u67E5\\u4F59\\u6570\\u662F\\u5426\\u63A5\\u8FD10\\uFF08\\u8003\\u8651\\u6D6E\\u70B9\\u6570\\u7CBE\\u5EA6\\u95EE\\u9898\\uFF09\\n isHalfInterval = abs(mod(lineIndex, 2.0)) < 0.01;\\n if(isHalfInterval) {\\n secondaryLinesWidth = halfIntervalContourWidth;\\n }\\n // \\u4F7F\\u7528mod\\u51FD\\u6570\\u68C0\\u67E5\\u4F59\\u6570\\u662F\\u5426\\u63A5\\u8FD10\\uFF08\\u8003\\u8651\\u6D6E\\u70B9\\u6570\\u7CBE\\u5EA6\\u95EE\\u9898\\uFF09\\n isIntermediate = abs(mod(lineIndex, 4.0)) < 0.01;\\n if(isIntermediate) {\\n secondaryLinesWidth = intermediateContourWidth;\\n }\\n }\\n\\n\\n\\n\\n\\n\\n\\n\\n \\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n dFSecondary = max(dxc, dyc) * czm_pixelRatio * secondaryLinesWidth;\\n#else\\n dFSecondary = czm_pixelRatio * secondaryLinesWidth;\\n#endif\\n\\n isSecondaryContour = (distanceToSecondaryContour < dFSecondary) && notCloseToMain;\\n }\\n\\n // \\u9AD8\\u4EAE\\u5224\\u65AD\\n bool shouldHighlight = false;\\n if(isMainContour && abs(mainContourHeight - mouseHeight) < 0.5 * (spacing/(secondaryLinesCount+1.0))) {\\n shouldHighlight = true;\\n } else if(isSecondaryContour && abs(secondaryContourHeight - mouseHeight) < 0.5 * (spacing/(secondaryLinesCount+1.0))) {\\n shouldHighlight = true;\\n }\\n\\n // \\u989C\\u8272\\u8F93\\u51FA\\n vec4 outColor;\\n if(shouldHighlight) {\\n outColor = czm_gammaCorrect(vec4(activeColor.rgb, activeColor.a));\\n } else if(isMainContour) {\\n float a = indexContourColor.a;\\n if(!indexContourShow) {\\n a = 0.0;\\n }\\n outColor = czm_gammaCorrect(vec4(indexContourColor.rgb, a));\\n } else if(isSecondaryContour) {\\n float a = supplementaryContourColor.a;\\n if(!supplementaryContourShow) {\\n a = 0.0;\\n }\\n outColor = czm_gammaCorrect(vec4(supplementaryContourColor.rgb, a));\\n if(isHalfInterval) {\\n float a = halfIntervalContourColor.a;\\n if(!halfIntervalContourShow) {\\n a = 0.0;\\n }\\n outColor = czm_gammaCorrect(vec4(halfIntervalContourColor.rgb, a));\\n }\\n if(isIntermediate) {\\n float a = intermediateContourColor.a;\\n if(!intermediateContourShow) {\\n a = 0.0;\\n }\\n outColor = czm_gammaCorrect(vec4(intermediateContourColor.rgb, a));\\n }\\n } else {\\n outColor = vec4(0.0);\\n }\\n\\n if(materialInput.height<0.0) {\\n outColor = vec4(0.0);\\n }\\n\\n material.diffuse = outColor.rgb;\\n material.alpha = outColor.a;\\n return material;\\n}\\n\";\n material = new Cesium.Material({\n fabric: {\n type: \"ElevationContour\",\n uniforms: {\n spacing: 10 * 5,\n activeColor: Cesium.Color.fromCssColorString(activeColor),\n mouseHeight: -100000,\n mousePosition: new Cesium.Cartesian3(0, 0, 0),\n secondaryLinesCount: secondaryLinesCount,\n cameraHeight: 0,\n indexContourShow: indexContourShow,\n indexContourWidth: indexContourWidth,\n indexContourColor: Cesium.Color.fromCssColorString(indexContourColor),\n intermediateContourShow: intermediateContourShow,\n intermediateContourWidth: intermediateContourWidth,\n intermediateContourColor: Cesium.Color.fromCssColorString(intermediateContourColor),\n halfIntervalContourShow: halfIntervalContourShow,\n halfIntervalContourWidth: halfIntervalContourWidth,\n halfIntervalContourColor: Cesium.Color.fromCssColorString(halfIntervalContourColor),\n supplementaryContourShow: supplementaryContourShow,\n supplementaryContourWidth: supplementaryContourWidth,\n supplementaryContourColor: Cesium.Color.fromCssColorString(supplementaryContourColor)\n }\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0NvbnRvdXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL0NvbnRvdXIvaW5kZXguanM/MDkxMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog562J6auY57q/XHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gXCIuLi8uLi9PYmovRWxlbWVudC9EaWFsb2dcIjtcclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi8uLi9Ub29sc1wiO1xyXG5pbXBvcnQgeyBmbHlUbyB9IGZyb20gJy4uL2dsb2JhbCdcclxuaW1wb3J0IFlKQ29sb3JQaWNrZXIgZnJvbSBcIi4uLy4uL09iai9FbGVtZW50L3lqLWNvbG9yLXBpY2tlclwiO1xyXG5cclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcblxyXG5sZXQgX0RpYWxvZ09iamVjdCA9IG51bGw7XHJcbmxldCBtYXRlcmlhbCA9IG51bGw7XHJcbmxldCBoYW5kbGVyID0gbnVsbDtcclxubGV0IGFjdGl2ZUhlaWdodEVsbSA9IG51bGw7XHJcbmxldCB0b29sc1xyXG5sZXQgX3Nka1xyXG5sZXQgc2Vjb25kYXJ5TGluZXNDb3VudCA9IDE5XHJcbmxldCBzaG93ID0gZmFsc2VcclxubGV0IGVxdWFsSGVpZ2h0RGlzdGFuY2UgPSAxMFxyXG5sZXQgYWN0aXZlQ29sb3IgPSAnI2ZmZDAwMCdcclxubGV0IGluZGV4Q29udG91clNob3cgPSB0cnVlXHJcbmxldCBpbmRleENvbnRvdXJXaWR0aCA9IDIuNVxyXG5sZXQgaW5kZXhDb250b3VyQ29sb3IgPSAnIzQzY2Y3YydcclxubGV0IGludGVybWVkaWF0ZUNvbnRvdXJTaG93ID0gdHJ1ZVxyXG5sZXQgaW50ZXJtZWRpYXRlQ29udG91cldpZHRoID0gMS44XHJcbmxldCBpbnRlcm1lZGlhdGVDb250b3VyQ29sb3IgPSAnI2ZmMDAwMCdcclxubGV0IGhhbGZJbnRlcnZhbENvbnRvdXJTaG93ID0gZmFsc2VcclxubGV0IGhhbGZJbnRlcnZhbENvbnRvdXJXaWR0aCA9IDEuMFxyXG5sZXQgaGFsZkludGVydmFsQ29udG91ckNvbG9yID0gJyM2NGI2ZDknXHJcbmxldCBzdXBwbGVtZW50YXJ5Q29udG91clNob3cgPSBmYWxzZVxyXG5sZXQgc3VwcGxlbWVudGFyeUNvbnRvdXJXaWR0aCA9IDEuMFxyXG5sZXQgc3VwcGxlbWVudGFyeUNvbnRvdXJDb2xvciA9ICcjZDA4NGQxJ1xyXG5cclxuXHJcbmFjdGl2ZUhlaWdodEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbmFjdGl2ZUhlaWdodEVsbS5jbGFzc05hbWUgPSAnWUotY3VzdG9taXplLWFjdGl2ZS1oZWlnaHQtZWxtJ1xyXG5hY3RpdmVIZWlnaHRFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbmFjdGl2ZUhlaWdodEVsbS5zdHlsZS5sZWZ0ID0gJzEwcHgnXHJcbmFjdGl2ZUhlaWdodEVsbS5zdHlsZS50b3AgPSAnMTBweCdcclxuYWN0aXZlSGVpZ2h0RWxtLnN0eWxlLndpZHRoID0gJzEwMHB4J1xyXG4vLyBhY3RpdmVIZWlnaHRFbG0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMCwgMCwgMCwgMC41KSdcclxuYWN0aXZlSGVpZ2h0RWxtLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbmFjdGl2ZUhlaWdodEVsbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnXHJcbmFjdGl2ZUhlaWdodEVsbS5zdHlsZS5jb2xvciA9ICcjZmYwMDAwJ1xyXG5hY3RpdmVIZWlnaHRFbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBhY2NvcmRpbmdUb0NhbWVyYUhlaWdodCgpIHtcclxuICBpZiAoX3Nkaykge1xyXG4gICAgY29uc3QgY2FtZXJhID0gX3Nkay52aWV3ZXIuY2FtZXJhO1xyXG4gICAgY29uc3QgcG9zaXRpb24gPSBjYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWM7XHJcblxyXG4gICAgLy8g6K6h566X55u45py66auY5bqm77yI55u45a+55LqO5qSt55CD6Z2i77yJXHJcbiAgICBsZXQgY2FtZXJhSGVpZ2h0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHBvc2l0aW9uLmhlaWdodCk7XHJcbiAgICBpZiAoY2FtZXJhSGVpZ2h0IDwgMTAwMDAwMCkge1xyXG4gICAgICBpZiAoIV9zZGsudmlld2VyLnNjZW5lLmdsb2JlLm1hdGVyaWFsICYmIHNob3cgPT09IHRydWUpIHtcclxuICAgICAgICBzaG93Q29udG91cihfc2RrKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAvLyAgIGlmIChjYW1lcmFIZWlnaHQgPiA0NTAwMDApIHtcclxuICAgICAgLy8gICAgIG1hdGVyaWFsLnVuaWZvcm1zLnN1cHBsZW1lbnRhcnlDb250b3VyU2hvdyA9IGZhbHNlXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGVsc2UgaWYgKHN1cHBsZW1lbnRhcnlDb250b3VyU2hvdykge1xyXG4gICAgICAvLyAgICAgbWF0ZXJpYWwudW5pZm9ybXMuc3VwcGxlbWVudGFyeUNvbnRvdXJTaG93ID0gdHJ1ZVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGhpZGVDb250b3VyKF9zZGspXHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjYW1lcmFIZWlnaHQpXHJcbiAgfVxyXG5cclxufVxyXG5hc3luYyBmdW5jdGlvbiBkaWFsb2coc2RrKSB7XHJcbiAgX3NkayA9IHNka1xyXG5cclxuICBpZiAoIXNkayB8fCBfRGlhbG9nT2JqZWN0KSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgY3JlYXRlTWF0ZXJpYWwoKVxyXG4gIH1cclxuICBpZiAoIXRvb2xzKSB7XHJcbiAgICB0b29scyA9IG5ldyBUb29scyhzZGspXHJcbiAgfVxyXG5cclxuICBfRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyhzZGssIHt9LCB7XHJcbiAgICB0aXRsZTogXCLlhajlsYDnrYnpq5jnur9cIiwgbGVmdDogJzE4MHB4JyxcclxuICAgIHRvcDogJzEwMHB4JyxcclxuICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9XHJcbiAgICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBjb250b3VyJ1xyXG4gIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuXHJcbiAgX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuXHJcbiAgc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYWNjb3JkaW5nVG9DYW1lcmFIZWlnaHQpXHJcbiAgc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoYWNjb3JkaW5nVG9DYW1lcmFIZWlnaHQpXHJcblxyXG4gIC8vIOaYvuekulxyXG4gIGxldCBzaG93QnRuID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzaG93JylbMF1cclxuICBzaG93QnRuLmNoZWNrZWQgPSBzaG93XHJcbiAgc2hvd0J0bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgc2hvdyA9IHRydWVcclxuICAgICAgbGV0IGhlaWdodCA9IHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgICBpZiAoaGVpZ2h0ID4gMTYzNjApIHtcclxuICAgICAgICBsZXQgY2FydG9ncmFwaGljID0gc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWNcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIGxuZzogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpLFxyXG4gICAgICAgICAgICBsYXQ6IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpLFxyXG4gICAgICAgICAgICBhbHQ6IDE2MzYwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICAgZmx5VG8oc2RrLCBvcHRpb25zLCAwLjUpXHJcbiAgICAgIH1cclxuICAgICAgc2hvd0NvbnRvdXIoc2RrKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2hvdyA9IGZhbHNlXHJcbiAgICAgIGhpZGVDb250b3VyKHNkaylcclxuICAgIH1cclxuICB9KVxyXG4gIC8vIOetiemrmOi3nVxyXG4gIGxldCBlcXVhbEhlaWdodERpc3RhbmNlSW5wdXQgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2VxdWFsLWhlaWdodC1kaXN0YW5jZScpWzBdXHJcbiAgZXF1YWxIZWlnaHREaXN0YW5jZUlucHV0LnZhbHVlID0gZXF1YWxIZWlnaHREaXN0YW5jZVxyXG4gIGVxdWFsSGVpZ2h0RGlzdGFuY2VJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgIGxldCB2YWx1ZSA9IGluaXRJbnB1dFZhbHVlKGUpXHJcbiAgICBlcXVhbEhlaWdodERpc3RhbmNlID0gdmFsdWVcclxuICAgIGVxdWFsSGVpZ2h0RGlzdGFuY2VJbnB1dC52YWx1ZSA9IHZhbHVlXHJcbiAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuc3BhY2luZyA9IGVxdWFsSGVpZ2h0RGlzdGFuY2UgKiA1XHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgLy8g6YCJ5Lit6aKc6ImyXHJcbiAgLy8gbGV0IGFjdGl2ZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gIC8vICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWN0aXZlLWNvbG9yJylbMF0sXHJcbiAgLy8gICBzaXplOiBcIm1pbmlcIixcclxuICAvLyAgIGlzTG9nOiBmYWxzZSxcclxuICAvLyAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gIC8vICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gIC8vICAgcHJlZGVmaW5lQ29sb3I6IHRydWUsIC8vIOmihOWumuS5ieminOiJslxyXG4gIC8vICAgZGVmYXVsdENvbG9yOiAnI2ZmZmZmZicsXHJcbiAgLy8gICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgLy8gICAgIGFjdGl2ZUNvbG9yID0gY29sb3JcclxuICAvLyAgICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgLy8gICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuYWN0aXZlQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGFjdGl2ZUNvbG9yKVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9LFxyXG4gIC8vICAgY2xlYXI6ICgpID0+IHtcclxuICAvLyAgICAgYWN0aXZlQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAvLyAgICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgLy8gICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuYWN0aXZlQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGFjdGl2ZUNvbG9yKVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfSlcclxuICBsZXQgYWN0aXZlQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhY3RpdmUtY29sb3InKVswXSxcclxuICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgIGRlZmF1bHRDb2xvcjogYWN0aXZlQ29sb3IsXHJcbiAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICBhY3RpdmVDb2xvciA9IGNvbG9yXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmFjdGl2ZUNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhhY3RpdmVDb2xvcilcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgIGFjdGl2ZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmFjdGl2ZUNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhhY3RpdmVDb2xvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIC8vIOiuoeabsue6v+W8gOWFs1xyXG4gIGxldCBpbmRleENvbnRvdXJTd2l0Y2ggPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luZGV4LWNvbnRvdXItc3dpdGNoJylbMF1cclxuICBpbmRleENvbnRvdXJTd2l0Y2guY2hlY2tlZCA9IGluZGV4Q29udG91clNob3dcclxuICBpbmRleENvbnRvdXJTd2l0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcclxuICAgIGluZGV4Q29udG91clNob3cgPSBlLnRhcmdldC5jaGVja2VkXHJcbiAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaW5kZXhDb250b3VyU2hvdyA9IGluZGV4Q29udG91clNob3dcclxuICAgIH1cclxuICB9KVxyXG4gIC8vIOiuoeabsue6v+minOiJslxyXG4gIGxldCBpbmRleENvbnRvdXJDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luZGV4LWNvbnRvdXItY29sb3InKVswXSxcclxuICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgIGRlZmF1bHRDb2xvcjogaW5kZXhDb250b3VyQ29sb3IsXHJcbiAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICBpbmRleENvbnRvdXJDb2xvciA9IGNvbG9yXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmluZGV4Q29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhpbmRleENvbnRvdXJDb2xvcilcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgIGluZGV4Q29udG91ckNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmluZGV4Q29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhpbmRleENvbnRvdXJDb2xvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgLy8g6K6h5puy57q/5a695bqmXHJcbiAgbGV0IGluZGV4Q29udG91cldpZHRoSW5wdXQgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luZGV4LWNvbnRvdXItd2lkdGgnKVswXVxyXG4gIGluZGV4Q29udG91cldpZHRoSW5wdXQudmFsdWUgPSBpbmRleENvbnRvdXJXaWR0aFxyXG4gIGluZGV4Q29udG91cldpZHRoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICBsZXQgdmFsdWUgPSBpbml0SW5wdXRWYWx1ZShlKVxyXG4gICAgaW5kZXhDb250b3VyV2lkdGggPSB2YWx1ZVxyXG4gICAgaW5kZXhDb250b3VyV2lkdGhJbnB1dC52YWx1ZSA9IHZhbHVlXHJcbiAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaW5kZXhDb250b3VyV2lkdGggPSBpbmRleENvbnRvdXJXaWR0aFxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIC8vIOmmluabsue6v+W8gOWFs1xyXG4gIGxldCBpbnRlcm1lZGlhdGVDb250b3VyU3dpdGNoID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnRlcm1lZGlhdGUtY29udG91ci1zd2l0Y2gnKVswXVxyXG4gIGludGVybWVkaWF0ZUNvbnRvdXJTd2l0Y2guY2hlY2tlZCA9IGludGVybWVkaWF0ZUNvbnRvdXJTaG93XHJcbiAgaW50ZXJtZWRpYXRlQ29udG91clN3aXRjaC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgaW50ZXJtZWRpYXRlQ29udG91clNob3cgPSBlLnRhcmdldC5jaGVja2VkXHJcbiAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaW50ZXJtZWRpYXRlQ29udG91clNob3cgPSBpbnRlcm1lZGlhdGVDb250b3VyU2hvd1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgLy8g6aaW5puy57q/6aKc6ImyXHJcbiAgbGV0IGludGVybWVkaWF0ZUNvbnRvdXJDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ludGVybWVkaWF0ZS1jb250b3VyLWNvbG9yJylbMF0sXHJcbiAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICBkZWZhdWx0Q29sb3I6IGludGVybWVkaWF0ZUNvbnRvdXJDb2xvcixcclxuICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgIGludGVybWVkaWF0ZUNvbnRvdXJDb2xvciA9IGNvbG9yXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmludGVybWVkaWF0ZUNvbnRvdXJDb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoaW50ZXJtZWRpYXRlQ29udG91ckNvbG9yKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgaW50ZXJtZWRpYXRlQ29udG91ckNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmludGVybWVkaWF0ZUNvbnRvdXJDb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoaW50ZXJtZWRpYXRlQ29udG91ckNvbG9yKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSlcclxuICAvLyDpppbmm7Lnur/lrr3luqZcclxuICBsZXQgaW50ZXJtZWRpYXRlQ29udG91cldpZHRoSW5wdXQgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ludGVybWVkaWF0ZS1jb250b3VyLXdpZHRoJylbMF1cclxuICBpbnRlcm1lZGlhdGVDb250b3VyV2lkdGhJbnB1dC52YWx1ZSA9IGludGVybWVkaWF0ZUNvbnRvdXJXaWR0aFxyXG4gIGludGVybWVkaWF0ZUNvbnRvdXJXaWR0aElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgbGV0IHZhbHVlID0gaW5pdElucHV0VmFsdWUoZSlcclxuICAgIGludGVybWVkaWF0ZUNvbnRvdXJXaWR0aCA9IHZhbHVlXHJcbiAgICBpbnRlcm1lZGlhdGVDb250b3VyV2lkdGhJbnB1dC52YWx1ZSA9IHZhbHVlXHJcbiAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaW50ZXJtZWRpYXRlQ29udG91cldpZHRoID0gaW50ZXJtZWRpYXRlQ29udG91cldpZHRoXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgLy8g6Ze05puy57q/5byA5YWzXHJcbiAgbGV0IGhhbGZJbnRlcnZhbENvbnRvdXJTd2l0Y2ggPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hhbGZJbnRlcnZhbC1jb250b3VyLXN3aXRjaCcpWzBdXHJcbiAgaGFsZkludGVydmFsQ29udG91clN3aXRjaC5jaGVja2VkID0gaGFsZkludGVydmFsQ29udG91clNob3dcclxuICBoYWxmSW50ZXJ2YWxDb250b3VyU3dpdGNoLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICBoYWxmSW50ZXJ2YWxDb250b3VyU2hvdyA9IGUudGFyZ2V0LmNoZWNrZWRcclxuICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5oYWxmSW50ZXJ2YWxDb250b3VyU2hvdyA9IGhhbGZJbnRlcnZhbENvbnRvdXJTaG93XHJcbiAgICB9XHJcbiAgfSlcclxuICAvLyDpl7Tmm7Lnur/popzoibJcclxuICBsZXQgaGFsZkludGVydmFsQ29udG91ckNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGFsZkludGVydmFsLWNvbnRvdXItY29sb3InKVswXSxcclxuICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgIGRlZmF1bHRDb2xvcjogaGFsZkludGVydmFsQ29udG91ckNvbG9yLFxyXG4gICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgaGFsZkludGVydmFsQ29udG91ckNvbG9yID0gY29sb3JcclxuICAgICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaGFsZkludGVydmFsQ29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhoYWxmSW50ZXJ2YWxDb250b3VyQ29sb3IpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICBoYWxmSW50ZXJ2YWxDb250b3VyQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuaGFsZkludGVydmFsQ29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhoYWxmSW50ZXJ2YWxDb250b3VyQ29sb3IpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG4gIC8vIOmXtOabsue6v+WuveW6plxyXG4gIGxldCBoYWxmSW50ZXJ2YWxDb250b3VyV2lkdGhJbnB1dCA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGFsZkludGVydmFsLWNvbnRvdXItd2lkdGgnKVswXVxyXG4gIGhhbGZJbnRlcnZhbENvbnRvdXJXaWR0aElucHV0LnZhbHVlID0gaGFsZkludGVydmFsQ29udG91cldpZHRoXHJcbiAgaGFsZkludGVydmFsQ29udG91cldpZHRoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICBsZXQgdmFsdWUgPSBpbml0SW5wdXRWYWx1ZShlKVxyXG4gICAgaGFsZkludGVydmFsQ29udG91cldpZHRoID0gdmFsdWVcclxuICAgIGhhbGZJbnRlcnZhbENvbnRvdXJXaWR0aElucHV0LnZhbHVlID0gdmFsdWVcclxuICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5oYWxmSW50ZXJ2YWxDb250b3VyV2lkdGggPSBoYWxmSW50ZXJ2YWxDb250b3VyV2lkdGhcclxuICAgIH1cclxuICB9KVxyXG5cclxuICAvLyDliqnmm7Lnur/lvIDlhbNcclxuICBsZXQgc3VwcGxlbWVudGFyeUNvbnRvdXJTd2l0Y2ggPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N1cHBsZW1lbnRhcnktY29udG91ci1zd2l0Y2gnKVswXVxyXG4gIHN1cHBsZW1lbnRhcnlDb250b3VyU3dpdGNoLmNoZWNrZWQgPSBzdXBwbGVtZW50YXJ5Q29udG91clNob3dcclxuICBzdXBwbGVtZW50YXJ5Q29udG91clN3aXRjaC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgc3VwcGxlbWVudGFyeUNvbnRvdXJTaG93ID0gZS50YXJnZXQuY2hlY2tlZFxyXG4gICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLnN1cHBsZW1lbnRhcnlDb250b3VyU2hvdyA9IHN1cHBsZW1lbnRhcnlDb250b3VyU2hvd1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgLy8g5Yqp5puy57q/6aKc6ImyXHJcbiAgbGV0IHN1cHBsZW1lbnRhcnlDb250b3VyQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdXBwbGVtZW50YXJ5LWNvbnRvdXItY29sb3InKVswXSxcclxuICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgIGRlZmF1bHRDb2xvcjogc3VwcGxlbWVudGFyeUNvbnRvdXJDb2xvcixcclxuICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgIHN1cHBsZW1lbnRhcnlDb250b3VyQ29sb3IgPSBjb2xvclxyXG4gICAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgICBtYXRlcmlhbC51bmlmb3Jtcy5zdXBwbGVtZW50YXJ5Q29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhzdXBwbGVtZW50YXJ5Q29udG91ckNvbG9yKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgc3VwcGxlbWVudGFyeUNvbnRvdXJDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICBpZiAobWF0ZXJpYWwpIHtcclxuICAgICAgICBtYXRlcmlhbC51bmlmb3Jtcy5zdXBwbGVtZW50YXJ5Q29udG91ckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhzdXBwbGVtZW50YXJ5Q29udG91ckNvbG9yKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSlcclxuICAvLyDliqnmm7Lnur/lrr3luqZcclxuICBsZXQgc3VwcGxlbWVudGFyeUNvbnRvdXJXaWR0aElucHV0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdXBwbGVtZW50YXJ5LWNvbnRvdXItd2lkdGgnKVswXVxyXG4gIHN1cHBsZW1lbnRhcnlDb250b3VyV2lkdGhJbnB1dC52YWx1ZSA9IHN1cHBsZW1lbnRhcnlDb250b3VyV2lkdGhcclxuICBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICBsZXQgdmFsdWUgPSBpbml0SW5wdXRWYWx1ZShlKVxyXG4gICAgc3VwcGxlbWVudGFyeUNvbnRvdXJXaWR0aCA9IHZhbHVlXHJcbiAgICBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoSW5wdXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLnN1cHBsZW1lbnRhcnlDb250b3VyV2lkdGggPSBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBmdW5jdGlvbiBpbml0SW5wdXRWYWx1ZShlKSB7XHJcbiAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgaWYgKGUudGFyZ2V0LnZhbHVlIHx8IChlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICd1bmRlZmluZWQnICYmIGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJycgJiYgIUJvb2xlYW4oZS50YXJnZXQuZGF0YXNldC5udWxsKSkpIHtcclxuICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICB9XHJcbiAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93Q29udG91cihzZGspIHtcclxuICBjb25zdCBjYW1lcmEgPSBzZGsudmlld2VyLmNhbWVyYTtcclxuICBjb25zdCBwb3NpdGlvbiA9IGNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYztcclxuICAvLyDorqHnrpfnm7jmnLrpq5jluqbvvIjnm7jlr7nkuo7mpK3nkIPpnaLvvIlcclxuICBsZXQgY2FtZXJhSGVpZ2h0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHBvc2l0aW9uLmhlaWdodCk7XHJcbiAgaWYgKGNhbWVyYUhlaWdodCA+IDEwMDAwMDApIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBpZiAoaGFuZGxlcikge1xyXG4gICAgaGFuZGxlci5kZXN0cm95KClcclxuICB9XHJcbiAgaWYgKCFzZGsudmlld2VyLmNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b21pemUtYWN0aXZlLWhlaWdodC1lbG0nKVswXSkge1xyXG4gICAgc2RrLnZpZXdlci5jb250YWluZXIuYXBwZW5kQ2hpbGQoYWN0aXZlSGVpZ2h0RWxtKVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlciA9IG5ldyBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIoXHJcbiAgICBzZGsudmlld2VyLmNhbnZhc1xyXG4gIClcclxuICBoYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG1vdmVtZW50LmVuZFBvc2l0aW9uKVxyXG4gICAgaWYgKGNhcnRlc2lhbikge1xyXG4gICAgICBsZXQgdG9wID0gMFxyXG4gICAgICBsZXQgbGVmdCA9IDBcclxuICAgICAgaWYgKHNkay52aWV3ZXIgJiYgc2RrLnZpZXdlci5fZWxlbWVudCkge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0td2lkZ2V0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdXHJcbiAgICAgICAgdG9wID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWVxyXG4gICAgICAgIGxlZnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxyXG4gICAgICB9XHJcbiAgICAgIGFjdGl2ZUhlaWdodEVsbS5zdHlsZS5sZWZ0ID0gbW92ZW1lbnQuZW5kUG9zaXRpb24ueCAtIDUwICsgbGVmdCArICdweCdcclxuICAgICAgYWN0aXZlSGVpZ2h0RWxtLnN0eWxlLnRvcCA9IG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLSA0MCArIHRvcCArICdweCdcclxuICAgICAgYWN0aXZlSGVpZ2h0RWxtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgIC8vIGxldCBwb3MgPSBzZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoY2FydGVzaWFuKVxyXG4gICAgICBsZXQgcG9zODQgPSB0b29scy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHNkay52aWV3ZXIpXHJcbiAgICAgIC8vIHBvczg0LmFsdCA9IGhlaWdodFxyXG4gICAgICBsZXQgbWFpbkNvbnRvdXJIZWlnaHQgPSBNYXRoLmZsb29yKHBvczg0LmFsdCAvIG1hdGVyaWFsLnVuaWZvcm1zLnNwYWNpbmcpICogbWF0ZXJpYWwudW5pZm9ybXMuc3BhY2luZ1xyXG4gICAgICBsZXQgZ2FwID0gcG9zODQuYWx0IC0gbWFpbkNvbnRvdXJIZWlnaHRcclxuICAgICAgbGV0IGdhcDIgPSBtYXRlcmlhbC51bmlmb3Jtcy5zcGFjaW5nIC8gKG1hdGVyaWFsLnVuaWZvcm1zLnNlY29uZGFyeUxpbmVzQ291bnQgKyAxKVxyXG4gICAgICBsZXQgYWN0aXZlSGVpZ2h0ID0gTWF0aC5mbG9vcihnYXAgLyBnYXAyKSAqIGdhcDIgKyBtYWluQ29udG91ckhlaWdodFxyXG4gICAgICBpZiAocG9zODQuYWx0IDwgMCkge1xyXG4gICAgICAgIHBvczg0LmFsdCA9IDBcclxuICAgICAgfVxyXG4gICAgICBpZiAoKHBvczg0LmFsdCAtIGFjdGl2ZUhlaWdodCkgPiBnYXAyIC8gMikge1xyXG4gICAgICAgIGFjdGl2ZUhlaWdodCA9IGFjdGl2ZUhlaWdodCArIGdhcDJcclxuICAgICAgfVxyXG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5tb3VzZUhlaWdodCA9IHBvczg0LmFsdFxyXG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5tb3VzZVBvc2l0aW9uID0gY2FydGVzaWFuXHJcbiAgICAgIGFjdGl2ZUhlaWdodEVsbS5pbm5lckhUTUwgPSBgJHthY3RpdmVIZWlnaHQudG9GaXhlZCgwKX1gXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWN0aXZlSGVpZ2h0RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSlcclxuICBzZGsudmlld2VyLnNjZW5lLmdsb2JlLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gaGlkZUNvbnRvdXIoc2RrKSB7XHJcbiAgaWYgKGhhbmRsZXIpIHtcclxuICAgIGhhbmRsZXIuZGVzdHJveSgpXHJcbiAgICBoYW5kbGVyID0gbnVsbFxyXG4gIH1cclxuICBpZiAoc2RrLnZpZXdlci5jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9taXplLWFjdGl2ZS1oZWlnaHQtZWxtJylbMF0pIHtcclxuICAgIGFjdGl2ZUhlaWdodEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICBzZGsudmlld2VyLmNvbnRhaW5lci5yZW1vdmVDaGlsZChhY3RpdmVIZWlnaHRFbG0pXHJcbiAgfVxyXG4gIHNkay52aWV3ZXIuc2NlbmUuZ2xvYmUubWF0ZXJpYWwgPSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVNYXRlcmlhbCgpIHtcclxuICBDZXNpdW0uTWF0ZXJpYWwuX21hdGVyaWFsQ2FjaGUuX21hdGVyaWFscy5FbGV2YXRpb25Db250b3VyLmZhYnJpYy5zb3VyY2UgPSBgXHJcbnVuaWZvcm0gdmVjNCBhY3RpdmVDb2xvcjsgLy8g6YCJ5Lit6aKc6ImyXHJcbnVuaWZvcm0gZmxvYXQgc3BhY2luZzsgLy8g562J6auY6LedXHJcblxyXG4vLyDorqHmm7Lnur9cclxudW5pZm9ybSBib29sIGluZGV4Q29udG91clNob3c7XHJcbnVuaWZvcm0gZmxvYXQgaW5kZXhDb250b3VyV2lkdGg7XHJcbnVuaWZvcm0gdmVjNCBpbmRleENvbnRvdXJDb2xvcjtcclxuLy8g6aaW5puy57q/XHJcbnVuaWZvcm0gYm9vbCBpbnRlcm1lZGlhdGVDb250b3VyU2hvdztcclxudW5pZm9ybSBmbG9hdCBpbnRlcm1lZGlhdGVDb250b3VyV2lkdGg7XHJcbnVuaWZvcm0gdmVjNCBpbnRlcm1lZGlhdGVDb250b3VyQ29sb3I7XHJcbi8vIOmXtOabsue6v1xyXG51bmlmb3JtIGJvb2wgaGFsZkludGVydmFsQ29udG91clNob3c7XHJcbnVuaWZvcm0gZmxvYXQgaGFsZkludGVydmFsQ29udG91cldpZHRoO1xyXG51bmlmb3JtIHZlYzQgaGFsZkludGVydmFsQ29udG91ckNvbG9yO1xyXG4vLyDliqnmm7Lnur9cclxudW5pZm9ybSBib29sIHN1cHBsZW1lbnRhcnlDb250b3VyU2hvdztcclxudW5pZm9ybSBmbG9hdCBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoO1xyXG51bmlmb3JtIHZlYzQgc3VwcGxlbWVudGFyeUNvbnRvdXJDb2xvcjtcclxuXHJcbnVuaWZvcm0gZmxvYXQgbW91c2VIZWlnaHQ7XHJcblxyXG51bmlmb3JtIGZsb2F0IHNlY29uZGFyeUxpbmVzQ291bnQ7IC8vIDA95peg5qyh57q/LCAxPTHmnaHmrKHnur8sIDI9Muadoeasoee6vy4uLlxyXG5cclxuY3ptX21hdGVyaWFsIGN6bV9nZXRNYXRlcmlhbChjem1fbWF0ZXJpYWxJbnB1dCBtYXRlcmlhbElucHV0KVxyXG57XHJcbiAgICBjem1fbWF0ZXJpYWwgbWF0ZXJpYWwgPSBjem1fZ2V0RGVmYXVsdE1hdGVyaWFsKG1hdGVyaWFsSW5wdXQpO1xyXG5cclxuICAgIC8vIOS4u+etiemrmOe6v+iuoeeul1xyXG4gICAgZmxvYXQgZGlzdGFuY2VUb01haW5Db250b3VyID0gbW9kKG1hdGVyaWFsSW5wdXQuaGVpZ2h0LCBzcGFjaW5nKTtcclxuICAgIFxyXG4gICAgLy8g5oqX6ZSv6b2/6K6h566XXHJcbiNpZiAoX19WRVJTSU9OX18gPT0gMzAwIHx8IGRlZmluZWQoR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSlcclxuICAgIGZsb2F0IGR4YyA9IGFicyhkRmR4KG1hdGVyaWFsSW5wdXQuaGVpZ2h0KSk7XHJcbiAgICBmbG9hdCBkeWMgPSBhYnMoZEZkeShtYXRlcmlhbElucHV0LmhlaWdodCkpO1xyXG4gICAgZmxvYXQgZEZNYWluID0gbWF4KGR4YywgZHljKSAqIGN6bV9waXhlbFJhdGlvICogaW5kZXhDb250b3VyV2lkdGg7XHJcbiNlbHNlXHJcbiAgICBmbG9hdCBkRk1haW4gPSBjem1fcGl4ZWxSYXRpbyAqIGluZGV4Q29udG91cldpZHRoO1xyXG4jZW5kaWZcclxuXHJcbiAgICBib29sIGlzTWFpbkNvbnRvdXIgPSBkaXN0YW5jZVRvTWFpbkNvbnRvdXIgPCBkRk1haW47XHJcbiAgICBib29sIGlzU2Vjb25kYXJ5Q29udG91ciA9IGZhbHNlO1xyXG4gICAgZmxvYXQgZEZTZWNvbmRhcnkgPSAwLjA7XHJcbiAgICBmbG9hdCBzZWNvbmRhcnlTcGFjaW5nID0gMC4wO1xyXG4gICAgYm9vbCBpc0hhbGZJbnRlcnZhbCA9IGZhbHNlO1xyXG4gICAgYm9vbCBpc0ludGVybWVkaWF0ZT0gZmFsc2U7XHJcblxyXG4gICAgLy8g6K6h566X5b2T5YmN6auY5bqm5omA5bGe55qE562J6auY57q/6auY5bqmXHJcbiAgICBmbG9hdCBtYWluQ29udG91ckhlaWdodCA9IGZsb29yKG1hdGVyaWFsSW5wdXQuaGVpZ2h0IC8gc3BhY2luZykgKiBzcGFjaW5nO1xyXG4gICAgZmxvYXQgc2Vjb25kYXJ5Q29udG91ckhlaWdodCA9IGZsb29yKG1hdGVyaWFsSW5wdXQuaGVpZ2h0IC8gc3BhY2luZyAqIChzZWNvbmRhcnlMaW5lc0NvdW50ICsgMS4wKSkgKiBzcGFjaW5nIC8gKHNlY29uZGFyeUxpbmVzQ291bnQgKyAxLjApO1xyXG4gICAgXHJcbiAgICAvLyDorqHnrpfmrKHnur/lnKjkuKTmnaHkuLvnrYnpq5jnur/kuYvpl7TnmoTnm7jlr7nkvY3nva5cclxuICAgIGZsb2F0IHJlbGF0aXZlSGVpZ2h0ID0gbWF0ZXJpYWxJbnB1dC5oZWlnaHQgLSBtYWluQ29udG91ckhlaWdodDtcclxuICAgIGZsb2F0IG5vcm1hbGl6ZWRQb3NpdGlvbiA9IHJlbGF0aXZlSGVpZ2h0IC8gc3BhY2luZztcclxuICAgIFxyXG4gICAgLy8g6K6h566X5qyh57q/57Si5byV77yI5LuO5Li7562J6auY57q/5byA5aeL6K6h5pWw77yJXHJcbiAgICBmbG9hdCBsaW5lSW5kZXggPSBmbG9vcihub3JtYWxpemVkUG9zaXRpb24gKiAoc2Vjb25kYXJ5TGluZXNDb3VudCArIDEuMCkpO1xyXG5cclxuICAgIC8vIOWPquacieW9k+WtmOWcqOasoee6v+aXtuaJjeiuoeeul+asoee6v1xyXG4gICAgaWYoc2Vjb25kYXJ5TGluZXNDb3VudCA+IDAuMCkge1xyXG4gICAgICBmbG9hdCBzZWNvbmRhcnlMaW5lc1dpZHRoID0gc3VwcGxlbWVudGFyeUNvbnRvdXJXaWR0aDtcclxuICAgICAgICBzZWNvbmRhcnlTcGFjaW5nID0gc3BhY2luZyAvIChzZWNvbmRhcnlMaW5lc0NvdW50ICsgMS4wKTtcclxuICAgICAgICBmbG9hdCBkaXN0YW5jZVRvU2Vjb25kYXJ5Q29udG91ciA9IG1vZChtYXRlcmlhbElucHV0LmhlaWdodCwgc2Vjb25kYXJ5U3BhY2luZyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g56Gu5L+d5qyh57q/5LiN5Lya5LiO5Li757q/6YeN5Y+gXHJcbiAgICAgICAgZmxvYXQgbWluRGlzdGFuY2VUb01haW4gPSBtaW4oZGlzdGFuY2VUb01haW5Db250b3VyLCBzcGFjaW5nIC0gZGlzdGFuY2VUb01haW5Db250b3VyKTtcclxuICAgICAgICBib29sIG5vdENsb3NlVG9NYWluID0gbWluRGlzdGFuY2VUb01haW4gPiBkRk1haW4gKiAyLjA7IC8vIDLlgI3nur/lrr3nvJPlhrJcclxuXHJcblxyXG4gICAgICAgIGlmIChsaW5lSW5kZXggPiAwLjAgJiYgbGluZUluZGV4IDwgc2Vjb25kYXJ5TGluZXNDb3VudCkge1xyXG4gICAgICAgICAgLy8g5L2/55SobW9k5Ye95pWw5qOA5p+l5L2Z5pWw5piv5ZCm5o6l6L+RMO+8iOiAg+iZkea1rueCueaVsOeyvuW6pumXrumimO+8iVxyXG4gICAgICAgICAgaXNIYWxmSW50ZXJ2YWwgPSBhYnMobW9kKGxpbmVJbmRleCwgMi4wKSkgPCAwLjAxO1xyXG4gICAgICAgICAgaWYoaXNIYWxmSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgc2Vjb25kYXJ5TGluZXNXaWR0aCA9IGhhbGZJbnRlcnZhbENvbnRvdXJXaWR0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIOS9v+eUqG1vZOWHveaVsOajgOafpeS9meaVsOaYr+WQpuaOpei/kTDvvIjogIPomZHmta7ngrnmlbDnsr7luqbpl67popjvvIlcclxuICAgICAgICAgIGlzSW50ZXJtZWRpYXRlID0gYWJzKG1vZChsaW5lSW5kZXgsIDQuMCkpIDwgMC4wMTtcclxuICAgICAgICAgIGlmKGlzSW50ZXJtZWRpYXRlKSB7XHJcbiAgICAgICAgICAgIHNlY29uZGFyeUxpbmVzV2lkdGggPSBpbnRlcm1lZGlhdGVDb250b3VyV2lkdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgXHJcbiNpZiAoX19WRVJTSU9OX18gPT0gMzAwIHx8IGRlZmluZWQoR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSlcclxuICAgICAgICBkRlNlY29uZGFyeSA9IG1heChkeGMsIGR5YykgKiBjem1fcGl4ZWxSYXRpbyAqIHNlY29uZGFyeUxpbmVzV2lkdGg7XHJcbiNlbHNlXHJcbiAgICAgICAgZEZTZWNvbmRhcnkgPSBjem1fcGl4ZWxSYXRpbyAqIHNlY29uZGFyeUxpbmVzV2lkdGg7XHJcbiNlbmRpZlxyXG5cclxuICAgICAgICBpc1NlY29uZGFyeUNvbnRvdXIgPSAoZGlzdGFuY2VUb1NlY29uZGFyeUNvbnRvdXIgPCBkRlNlY29uZGFyeSkgJiYgbm90Q2xvc2VUb01haW47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6auY5Lqu5Yik5patXHJcbiAgICBib29sIHNob3VsZEhpZ2hsaWdodCA9IGZhbHNlO1xyXG4gICAgaWYoaXNNYWluQ29udG91ciAmJiBhYnMobWFpbkNvbnRvdXJIZWlnaHQgLSBtb3VzZUhlaWdodCkgPCAwLjUgKiAoc3BhY2luZy8oc2Vjb25kYXJ5TGluZXNDb3VudCsxLjApKSkge1xyXG4gICAgICAgIHNob3VsZEhpZ2hsaWdodCA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYoaXNTZWNvbmRhcnlDb250b3VyICYmIGFicyhzZWNvbmRhcnlDb250b3VySGVpZ2h0IC0gbW91c2VIZWlnaHQpIDwgMC41ICogKHNwYWNpbmcvKHNlY29uZGFyeUxpbmVzQ291bnQrMS4wKSkpIHtcclxuICAgICAgICBzaG91bGRIaWdobGlnaHQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOminOiJsui+k+WHulxyXG4gICAgdmVjNCBvdXRDb2xvcjtcclxuICAgIGlmKHNob3VsZEhpZ2hsaWdodCkge1xyXG4gICAgICAgIG91dENvbG9yID0gY3ptX2dhbW1hQ29ycmVjdCh2ZWM0KGFjdGl2ZUNvbG9yLnJnYiwgYWN0aXZlQ29sb3IuYSkpO1xyXG4gICAgfSBlbHNlIGlmKGlzTWFpbkNvbnRvdXIpIHtcclxuICAgICAgICBmbG9hdCBhID0gaW5kZXhDb250b3VyQ29sb3IuYTtcclxuICAgICAgICBpZighaW5kZXhDb250b3VyU2hvdykge1xyXG4gICAgICAgICAgYSA9IDAuMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0Q29sb3IgPSBjem1fZ2FtbWFDb3JyZWN0KHZlYzQoaW5kZXhDb250b3VyQ29sb3IucmdiLCBhKSk7XHJcbiAgICB9IGVsc2UgaWYoaXNTZWNvbmRhcnlDb250b3VyKSB7XHJcbiAgICAgICAgZmxvYXQgYSA9IHN1cHBsZW1lbnRhcnlDb250b3VyQ29sb3IuYTtcclxuICAgICAgICBpZighc3VwcGxlbWVudGFyeUNvbnRvdXJTaG93KSB7XHJcbiAgICAgICAgICBhID0gMC4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRDb2xvciA9IGN6bV9nYW1tYUNvcnJlY3QodmVjNChzdXBwbGVtZW50YXJ5Q29udG91ckNvbG9yLnJnYiwgYSkpO1xyXG4gICAgICAgIGlmKGlzSGFsZkludGVydmFsKSB7XHJcbiAgICAgICAgICBmbG9hdCBhID0gaGFsZkludGVydmFsQ29udG91ckNvbG9yLmE7XHJcbiAgICAgICAgICBpZighaGFsZkludGVydmFsQ29udG91clNob3cpIHtcclxuICAgICAgICAgICAgYSA9IDAuMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG91dENvbG9yID0gY3ptX2dhbW1hQ29ycmVjdCh2ZWM0KGhhbGZJbnRlcnZhbENvbnRvdXJDb2xvci5yZ2IsIGEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXNJbnRlcm1lZGlhdGUpIHtcclxuICAgICAgICAgIGZsb2F0IGEgPSBpbnRlcm1lZGlhdGVDb250b3VyQ29sb3IuYTtcclxuICAgICAgICAgIGlmKCFpbnRlcm1lZGlhdGVDb250b3VyU2hvdykge1xyXG4gICAgICAgICAgICBhID0gMC4wO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb3V0Q29sb3IgPSBjem1fZ2FtbWFDb3JyZWN0KHZlYzQoaW50ZXJtZWRpYXRlQ29udG91ckNvbG9yLnJnYiwgYSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3V0Q29sb3IgPSB2ZWM0KDAuMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYobWF0ZXJpYWxJbnB1dC5oZWlnaHQ8MC4wKSB7XHJcbiAgICAgIG91dENvbG9yID0gdmVjNCgwLjApO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGVyaWFsLmRpZmZ1c2UgPSBvdXRDb2xvci5yZ2I7XHJcbiAgICBtYXRlcmlhbC5hbHBoYSA9IG91dENvbG9yLmE7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbn1cclxuYFxyXG5cclxuICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uTWF0ZXJpYWwoe1xyXG4gICAgZmFicmljOiB7XHJcbiAgICAgIHR5cGU6IFwiRWxldmF0aW9uQ29udG91clwiLFxyXG4gICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgIHNwYWNpbmc6IDEwICogNSxcclxuICAgICAgICBhY3RpdmVDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhhY3RpdmVDb2xvciksXHJcbiAgICAgICAgbW91c2VIZWlnaHQ6IC0xMDAwMDAsXHJcbiAgICAgICAgbW91c2VQb3NpdGlvbjogbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKDAsIDAsIDApLFxyXG4gICAgICAgIHNlY29uZGFyeUxpbmVzQ291bnQ6IHNlY29uZGFyeUxpbmVzQ291bnQsXHJcbiAgICAgICAgY2FtZXJhSGVpZ2h0OiAwLFxyXG5cclxuICAgICAgICBpbmRleENvbnRvdXJTaG93OiBpbmRleENvbnRvdXJTaG93LFxyXG4gICAgICAgIGluZGV4Q29udG91cldpZHRoOiBpbmRleENvbnRvdXJXaWR0aCxcclxuICAgICAgICBpbmRleENvbnRvdXJDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhpbmRleENvbnRvdXJDb2xvciksXHJcbiAgICAgICAgaW50ZXJtZWRpYXRlQ29udG91clNob3c6IGludGVybWVkaWF0ZUNvbnRvdXJTaG93LFxyXG4gICAgICAgIGludGVybWVkaWF0ZUNvbnRvdXJXaWR0aDogaW50ZXJtZWRpYXRlQ29udG91cldpZHRoLFxyXG4gICAgICAgIGludGVybWVkaWF0ZUNvbnRvdXJDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhpbnRlcm1lZGlhdGVDb250b3VyQ29sb3IpLFxyXG4gICAgICAgIGhhbGZJbnRlcnZhbENvbnRvdXJTaG93OiBoYWxmSW50ZXJ2YWxDb250b3VyU2hvdyxcclxuICAgICAgICBoYWxmSW50ZXJ2YWxDb250b3VyV2lkdGg6IGhhbGZJbnRlcnZhbENvbnRvdXJXaWR0aCxcclxuICAgICAgICBoYWxmSW50ZXJ2YWxDb250b3VyQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoaGFsZkludGVydmFsQ29udG91ckNvbG9yKSxcclxuICAgICAgICBzdXBwbGVtZW50YXJ5Q29udG91clNob3c6IHN1cHBsZW1lbnRhcnlDb250b3VyU2hvdyxcclxuICAgICAgICBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoOiBzdXBwbGVtZW50YXJ5Q29udG91cldpZHRoLFxyXG4gICAgICAgIHN1cHBsZW1lbnRhcnlDb250b3VyQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoc3VwcGxlbWVudGFyeUNvbnRvdXJDb2xvciksXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGRpYWxvZyB9XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJSQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpTQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFRQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQXdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/Contour/index.js\n"); /***/ }), /***/ "./src/Global/DTH/index.js": /*!*********************************!*\ !*** ./src/Global/DTH/index.js ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../on */ \"./src/on/index.js\");\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nvar DTH = /*#__PURE__*/function () {\n function DTH(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, DTH);\n this.sdk = sdk;\n this.primitives = {\n building: [],\n unit: [],\n dth: []\n };\n this.options = _objectSpread({}, options);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getHost\"])();\n this.temporaryDth = [];\n this.dth = {};\n this.PickBuildingEvent = new Cesium.Event();\n this.initEvents();\n this.activeBuilding;\n }\n\n /**\r\n * @description 注册点击的事件回调\r\n * @memberOf DTH\r\n * */\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(DTH, [{\n key: \"PickCallback\",\n value: function PickCallback(that, cb) {\n this.PickBuildingEvent.addEventListener(cb, that);\n }\n\n //场景事件\n }, {\n key: \"initEvents\",\n value: function initEvents() {\n var _this2 = this;\n new Cesium.ScreenSpaceEventHandler(this.sdk.viewer.scene.canvas).setInputAction(function (e) {\n if (YJ.Measure.GetMeasureStatus()) {\n return;\n }\n if (!_this2.isActivate) return;\n var pickFeature = _this2.sdk.viewer.scene.pick(e.position);\n if (pickFeature) {\n //点击了已有的分户单体化\n if (pickFeature.primitive && pickFeature.primitive instanceof Cesium.ClassificationPrimitive && pickFeature.id && (pickFeature.id.type == \"yj-dth-dth\" || pickFeature.id.type == \"yj-dth-highlight\")) {\n _this2.getIDBypickFeature(pickFeature); //处理点击到的楼层\n return;\n }\n if (pickFeature.primitive && pickFeature.primitive instanceof Cesium.ClassificationPrimitive && pickFeature.id && pickFeature.id.type == \"yj-dth-unit\") {\n _this2.highlightPrimitive && _this2.sdk.viewer.scene.primitives.remove(_this2.highlightPrimitive);\n _this2.handlePickEvent(pickFeature.id);\n return;\n }\n\n // if (pickFeature.id && pickFeature.id.type === 'yj-dth-highlight') {\n // return;\n // }\n }\n _this2.highlightPrimitive && _this2.sdk.viewer.scene.primitives.remove(_this2.highlightPrimitive);\n var position = _this2.sdk.viewer.scene.pickPosition(e.position); //屏幕坐标转为笛卡尔空间坐标\n if (!position) return;\n var c = Cesium.Cartographic.fromCartesian(position); //笛卡尔坐标转为经纬度(弧度)\n var point = [Cesium.Math.toDegrees(c.longitude), Cesium.Math.toDegrees(c.latitude)]; //转为经纬度点\n _this2.queryByPoint(point, c.height);\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n var coverLabelEntity = this.sdk.viewer.entities.getOrCreateEntity('yj-dth-cover-label');\n coverLabelEntity.show = false;\n // this.sdk.viewer.entities.add({\n // position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),\n // label: {\n // text: \"Philadelphia\",\n // font: \"24px Helvetica\",\n // fillColor: Cesium.Color.SKYBLUE,\n // outlineColor: Cesium.Color.BLACK,\n // outlineWidth: 2,\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // },\n // });\n var lastPickTime = 0;\n var _this = this;\n var timeoutEvent;\n new Cesium.ScreenSpaceEventHandler(this.sdk.viewer.scene.canvas).setInputAction(function (movement) {\n if (YJ.Measure.GetMeasureStatus()) {\n return;\n }\n try {\n var now = Date.now();\n if (now - lastPickTime < 100) {\n clearTimeout(timeoutEvent);\n timeoutEvent = setTimeout(function () {\n pick(movement);\n }, 100);\n return;\n }\n clearTimeout(timeoutEvent);\n lastPickTime = now;\n pick(movement);\n } catch (error) {}\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n function pick(e) {\n var pickFeature = _this.sdk.viewer.scene.pick(e.endPosition);\n if (pickFeature) {\n var labelText = '';\n if (pickFeature.primitive && pickFeature.primitive instanceof Cesium.ClassificationPrimitive && pickFeature.id && (pickFeature.id.type === \"yj-dth-dth\" || pickFeature.id.type === \"yj-dth-highlight\")) {\n labelText = pickFeature.id.build_info.name + ' - ' + pickFeature.id.unit_info.name + ' - ' + pickFeature.id.room_num;\n } else if (pickFeature.primitive && pickFeature.primitive instanceof Cesium.ClassificationPrimitive && pickFeature.id && pickFeature.id.type === \"yj-dth-unit\") {\n if (pickFeature.id.build_info.name) {\n labelText = pickFeature.id.build_info.name + ' - ' + pickFeature.id.name;\n }\n } else if (pickFeature.primitive && pickFeature.primitive instanceof Cesium.ClassificationPrimitive && pickFeature.id && pickFeature.id.type === \"yj-dth-build\") {\n if (pickFeature.id.name) {\n labelText = pickFeature.id.name;\n }\n } else if (pickFeature.primitive && pickFeature.primitive.id && pickFeature.primitive.id.id && pickFeature.primitive.id.id === 'yj-dth-cover-label') {\n coverLabelEntity.position = _this.sdk.viewer.scene.pickPosition(e.endPosition);\n return;\n } else {\n coverLabelEntity.show = false;\n return;\n }\n if (labelText) {\n coverLabelEntity.position = _this.sdk.viewer.scene.pickPosition(e.endPosition);\n coverLabelEntity.label = new Cesium.LabelGraphics({\n text: labelText,\n font: \"20px Helvetica\",\n pixelOffset: {\n x: 0,\n y: -30\n },\n fillColor: Cesium.Color.fromCssColorString('#ffffff'),\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 1,\n showBackground: true,\n backgroundColor: Cesium.Color.fromCssColorString('#000000').withAlpha(0.8),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n });\n coverLabelEntity.show = true;\n }\n }\n }\n }\n\n /*根据用户信息查询单体化*/\n }, {\n key: \"queryByUserInfo\",\n value: function queryByUserInfo(data) {\n this.queryByPoint([data.position.lng, data.position.lat], data.position.alt, data.id);\n }\n\n //点查询 点击查询是查询分层的数据\n }, {\n key: \"queryByPoint\",\n value: function () {\n var _queryByPoint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee(point) {\n var url, response, data;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n url = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) {\n url = this.options.host + '/api/v1/dth/build/query_by_point';\n } else {\n url = this.options.host + '/yjearth4.0/api/v1/dth/build/query_by_point';\n }\n url += '?point=' + JSON.stringify({\n 'lng': point[0],\n 'lat': point[1]\n });\n _context.next = 5;\n return fetch(url, {\n method: 'get',\n // body: JSON.stringify({point: {'lng': point[0],'lat': point[1]}}),\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_5__[\"getToken\"])()\n }\n });\n case 5:\n response = _context.sent;\n if (!(response.status === 200)) {\n _context.next = 11;\n break;\n }\n _context.next = 9;\n return response.json();\n case 9:\n data = _context.sent;\n if (data.code === 200 || data.code === 0) {\n this.processQueryByPointResults(data.data);\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: data.msg || data.message,\n type: 'warning',\n duration: 1500\n });\n }\n case 11:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function queryByPoint(_x) {\n return _queryByPoint.apply(this, arguments);\n }\n return queryByPoint;\n }() // 处理查询结果\n }, {\n key: \"processQueryByPointResults\",\n value: function () {\n var _processQueryByPointResults = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2(data, isflyto) {\n var offset,\n range,\n i,\n _i,\n _i2,\n primitivesData,\n pickFeature,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n offset = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {\n heading: 0.0,\n pitch: -90.0,\n roll: 0.0\n };\n data.build_info && this.handlePickEvent(data);\n this.clearAllDthPrimitive();\n this.clearAllUnitPrimitive();\n if (this.activeBuilding) {\n this.clearBuildingPrimitive(this.activeBuilding);\n this.activeBuilding = null;\n }\n if (!data.build_info) {\n _context2.next = 26;\n break;\n }\n range = JSON.parse(data.build_info.range);\n if (data.dan_yuan.length > 0) {\n for (i = 0; i < data.dan_yuan.length; i++) {\n if (data.dan_yuan[i].children.length > 0) {\n this.addDthPrimitive(data.dan_yuan[i].children, data.build_info, data.dan_yuan[i]);\n } else {\n this.addUnitPrimitive([data.dan_yuan[i]], data.build_info, data.dan_yuan[i]);\n }\n }\n } else {\n this.activeBuilding = data.build_info.ID || data.build_info.id;\n this.addBuildingPrimitive([data.build_info]);\n }\n if (!isflyto) {\n _context2.next = 26;\n break;\n }\n if (data.info && data.info.dan_yuan) {\n range = JSON.parse(data.info.dan_yuan.range);\n }\n if (!(data.info && data.info.hu)) {\n _context2.next = 25;\n break;\n }\n range = JSON.parse(data.info.hu.range);\n for (_i = 0; _i < range.length; _i++) {\n range[_i].alt = data.info.hu.bottom;\n }\n _i2 = 0;\n case 14:\n if (!(_i2 < this.primitives.dth.length)) {\n _context2.next = 25;\n break;\n }\n _context2.next = 17;\n return this.primitives.dth[_i2].readyPromise;\n case 17:\n primitivesData = this.primitives.dth[_i2]._primitiveOptions.geometryInstances[0].id;\n if (!(primitivesData.ID === data.info.hu.ID && primitivesData.room_num === data.info.hu.room_num)) {\n _context2.next = 22;\n break;\n }\n pickFeature = {\n id: _objectSpread(_objectSpread({}, data.info.hu), {}, {\n build_info: _objectSpread({}, data.build_info),\n unit_info: data.info.dan_yuan\n }),\n primitive: this.primitives.dth[_i2]\n };\n this.getIDBypickFeature(pickFeature);\n return _context2.abrupt(\"break\", 25);\n case 22:\n _i2++;\n _context2.next = 14;\n break;\n case 25:\n this.flyTo(range, offset);\n case 26:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function processQueryByPointResults(_x2, _x3) {\n return _processQueryByPointResults.apply(this, arguments);\n }\n return processQueryByPointResults;\n }() // 添加房屋Primitive\n }, {\n key: \"addBuildingPrimitive\",\n value: function () {\n var _addBuildingPrimitive = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee3(array) {\n var i, fromDegreesArray, extrudedHeight, positions, m, polygonGeometry;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n for (i = 0; i < array.length; i++) {\n fromDegreesArray = [];\n extrudedHeight = 0;\n positions = JSON.parse(array[i].range);\n for (m = 0; m < positions.length; m++) {\n if (extrudedHeight < positions[m].alt) {\n extrudedHeight = positions[m].alt;\n }\n fromDegreesArray.push(positions[m].lng, positions[m].lat, 0);\n }\n polygonGeometry = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)),\n // perPositionHeight: true, //使用z坐标 否则高度从0开始\n extrudedHeight: 100000000 //拉伸高度\n });\n this.primitives.building.push(this.sdk.viewer.scene.primitives.add(new Cesium.ClassificationPrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: _objectSpread({\n type: 'yj-dth-build'\n }, array[i]),\n geometry: Cesium.PolygonGeometry.createGeometry(polygonGeometry),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('rgb(255, 235, 59, 0.4)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n }),\n classificationType: Cesium.ClassificationType.CESIUM_3D_TILE\n })));\n }\n case 1:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function addBuildingPrimitive(_x4) {\n return _addBuildingPrimitive.apply(this, arguments);\n }\n return addBuildingPrimitive;\n }() // 根据id删除房屋Primitive\n }, {\n key: \"clearBuildingPrimitive\",\n value: function clearBuildingPrimitive(id) {\n for (var i = this.primitives.building.length - 1; i >= 0; i--) {\n if (id === this.primitives.building[i]._primitiveOptions.geometryInstances[0].id.ID || id === this.primitives.building[i]._primitiveOptions.geometryInstances[0].id.id) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.building[i]);\n this.primitives.building.splice(i, 1);\n break;\n }\n }\n }\n // 删除全部房屋Primitive\n }, {\n key: \"clearAllBuildingPrimitive\",\n value: function clearAllBuildingPrimitive() {\n for (var i = this.primitives.building.length - 1; i >= 0; i--) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.building[i]);\n }\n this.primitives.building = [];\n }\n\n // 添加单元Primitive\n }, {\n key: \"addUnitPrimitive\",\n value: function () {\n var _addUnitPrimitive = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee4(array, build_info, unit_info) {\n var i, fromDegreesArray, extrudedHeight, positions, m, polygonGeometry;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n for (i = 0; i < array.length; i++) {\n fromDegreesArray = [];\n extrudedHeight = 0;\n positions = JSON.parse(array[i].range);\n for (m = 0; m < positions.length; m++) {\n if (extrudedHeight < positions[m].alt) {\n extrudedHeight = positions[m].alt;\n }\n fromDegreesArray.push(positions[m].lng, positions[m].lat, 0);\n }\n polygonGeometry = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)),\n // perPositionHeight: true, //使用z坐标 否则高度从0开始\n extrudedHeight: 100000000 //拉伸高度\n });\n this.primitives.unit.push(this.sdk.viewer.scene.primitives.add(new Cesium.ClassificationPrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: _objectSpread(_objectSpread({\n type: 'yj-dth-unit'\n }, array[i]), {}, {\n build_info: _objectSpread({}, build_info),\n unit_info: _objectSpread({}, unit_info)\n }),\n geometry: Cesium.PolygonGeometry.createGeometry(polygonGeometry),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('rgb(255, 235, 59, 0.4)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n }),\n classificationType: Cesium.ClassificationType.CESIUM_3D_TILE\n })));\n this.primitives.unit.push(this.sdk.viewer.scene.primitives.add(new Cesium.GroundPolylinePrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: new Cesium.GroundPolylineGeometry({\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n width: 2.0\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('#00ff0a').withAlpha(0.8))\n }\n }),\n appearance: new Cesium.PolylineColorAppearance()\n })));\n }\n case 1:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function addUnitPrimitive(_x5, _x6, _x7) {\n return _addUnitPrimitive.apply(this, arguments);\n }\n return addUnitPrimitive;\n }() // 根据id删除单元Primitive\n }, {\n key: \"clearUnitPrimitive\",\n value: function clearUnitPrimitive(id) {\n for (var i = this.primitives.building.length - 1; i >= 0; i--) {\n if (id === this.primitives.building[i]._primitiveOptions.geometryInstances[0].id.ID || id === this.primitives.building[i]._primitiveOptions.geometryInstances[0].id.id) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.unit[i]);\n this.primitives.unit.splice(i, 1);\n break;\n }\n }\n }\n\n // 删除全部单元Primitive\n }, {\n key: \"clearAllUnitPrimitive\",\n value: function clearAllUnitPrimitive() {\n for (var i = this.primitives.unit.length - 1; i >= 0; i--) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.unit[i]);\n }\n this.primitives.unit = [];\n }\n\n // 添加单体化Primitive\n }, {\n key: \"addDthPrimitive\",\n value: function addDthPrimitive(array, build_info, unit_info) {\n for (var i = 0; i < array.length; i++) {\n var positions = JSON.parse(array[i].range);\n var fromDegreesArray = [];\n for (var m = 0; m < positions.length; m++) {\n fromDegreesArray.push(positions[m].lng, positions[m].lat, array[i].bottom + 0.3);\n }\n var polygonGeometry = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)),\n perPositionHeight: true,\n //使用z坐标 否则高度从0开始\n extrudedHeight: array[i].height + array[i].bottom //拉伸高度\n });\n var polygonGeometryBorder = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)),\n perPositionHeight: true,\n //使用z坐标 否则高度从0开始\n extrudedHeight: array[i].bottom //拉伸高度\n });\n this.primitives.dth.push(this.sdk.viewer.scene.primitives.add(new Cesium.ClassificationPrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: _objectSpread(_objectSpread({\n type: 'yj-dth-dth'\n }, array[i]), {}, {\n build_info: _objectSpread({}, build_info),\n unit_info: _objectSpread({}, unit_info)\n }),\n geometry: Cesium.PolygonGeometry.createGeometry(polygonGeometry),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('rgb(0, 64, 255, 0.4)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n }),\n classificationType: Cesium.ClassificationType.CESIUM_3D_TILE\n })));\n this.primitives.dth.push(this.sdk.viewer.scene.primitives.add(new Cesium.ClassificationPrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: _objectSpread({\n type: 'yj-dth-dth-border'\n }, array[i]),\n geometry: Cesium.PolygonGeometry.createGeometry(polygonGeometryBorder),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('rgb(0, 0, 0, 1)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n }),\n classificationType: Cesium.ClassificationType.CESIUM_3D_TILE\n })));\n }\n }\n // 根据id删除单体化Primitive\n }, {\n key: \"clearDthPrimitive\",\n value: function clearDthPrimitive(id) {\n for (var i = this.primitives.dth.length - 1; i >= 0; i--) {\n if (id === this.primitives.dth[i]._primitiveOptions.geometryInstances[0].id.ID || id === this.primitives.dth[i]._primitiveOptions.geometryInstances[0].id.id) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.dth[i]);\n this.primitives.dth.splice(i, 1);\n }\n }\n }\n\n // 删除全部单体化Primitive\n }, {\n key: \"clearAllDthPrimitive\",\n value: function clearAllDthPrimitive() {\n this.highlightPrimitive && this.sdk.viewer.scene.primitives.remove(this.highlightPrimitive);\n for (var i = this.primitives.dth.length - 1; i >= 0; i--) {\n this.sdk.viewer.scene.primitives.remove(this.primitives.dth[i]);\n }\n this.primitives.dth = [];\n }\n }, {\n key: \"getIDBypickFeature\",\n value: function getIDBypickFeature(pickFeature) {\n //恢复上一个贴对象面显示\n if (this.clickHighlightPrimitive) {\n this.clickHighlightPrimitive.show = true;\n }\n this.highlightPrimitive && this.sdk.viewer.scene.primitives.remove(this.highlightPrimitive);\n this.highlightPrimitive = this.sdk.viewer.scene.primitives.add(new Cesium.ClassificationPrimitive({\n geometryInstances: new Cesium.GeometryInstance({\n id: _objectSpread(_objectSpread({}, pickFeature.id), {}, {\n type: 'yj-dth-highlight'\n }),\n geometry: pickFeature.primitive._primitiveOptions.geometryInstances[0].geometry,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('#ff9800').withAlpha(0.8)),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n }),\n classificationType: Cesium.ClassificationType.CESIUM_3D_TILE\n }));\n this.highlightPrimitive.readyPromise.then(function () {\n //设置当前点击的贴对象面不显示\n pickFeature.primitive.show = false;\n });\n this.clickHighlightPrimitive = pickFeature.primitive;\n var range = pickFeature.id.range;\n if (typeof pickFeature.id.range === 'string') {\n range = JSON.parse(pickFeature.id.range);\n }\n this.getHilightArea(range);\n this.handlePickEvent(pickFeature.id);\n }\n\n //处理点击事件\n }, {\n key: \"handlePickEvent\",\n value: function handlePickEvent(id) {\n this.PickBuildingEvent.raiseEvent(id); //触发选中事件 通知界面更新\n }\n }, {\n key: \"getHilightArea\",\n value: function getHilightArea(points) {\n var radius = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var arr = [];\n points.forEach(function (point) {\n arr.push([point.lng, point.lat]);\n });\n arr.push(arr[0]);\n var poly = turf.polygon([arr]);\n var buffered = turf.buffer(poly, Number(radius) / 1000);\n return buffered.geometry.coordinates;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee5(positions) {\n var offset,\n tools,\n height,\n positionArray,\n i,\n a,\n BoundingSphere,\n _args5 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n offset = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {\n heading: 0.0,\n pitch: -90.0,\n roll: 0.0\n };\n tools = new YJ.Tools(this.sdk);\n height = 0;\n positionArray = [];\n i = 0;\n case 5:\n if (!(i < positions.length)) {\n _context5.next = 18;\n break;\n }\n if (!positions[i].alt) {\n _context5.next = 10;\n break;\n }\n height = positions[i].alt;\n _context5.next = 13;\n break;\n case 10:\n _context5.next = 12;\n return tools.getClampToHeight(positions[i]);\n case 12:\n height = _context5.sent;\n case 13:\n a = Cesium.Cartesian3.fromDegrees(positions[i].lng, positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 15:\n i++;\n _context5.next = 5;\n break;\n case 18:\n _context5.next = 20;\n return Cesium.BoundingSphere.fromVertices(positionArray);\n case 20:\n BoundingSphere = _context5.sent;\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(offset.heading || 0),\n pitch: Cesium.Math.toRadians(offset.pitch || offset.pitch === 0 ? offset.pitch : -90),\n roll: Cesium.Math.toRadians(offset.roll || 0)\n }\n });\n case 22:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function flyTo(_x8) {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"activate\",\n value: function activate() {\n this.isActivate = true;\n }\n }, {\n key: \"deactivate\",\n value: function deactivate() {\n this.isActivate = false;\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (DTH);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0RUSC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvRFRIL2luZGV4LmpzPzUzZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SG9zdCwgZ2V0VG9rZW4gfSBmcm9tIFwiLi4vLi4vb25cIjtcclxuY2xhc3MgRFRIIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5zZGsgPSBzZGtcclxuICAgIHRoaXMucHJpbWl0aXZlcyA9IHtcclxuICAgICAgYnVpbGRpbmc6IFtdLFxyXG4gICAgICB1bml0OiBbXSxcclxuICAgICAgZHRoOiBbXVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0geyAuLi5vcHRpb25zIH1cclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICB0aGlzLnRlbXBvcmFyeUR0aCA9IFtdXHJcbiAgICB0aGlzLmR0aCA9IHt9XHJcbiAgICB0aGlzLlBpY2tCdWlsZGluZ0V2ZW50ID0gbmV3IENlc2l1bS5FdmVudCgpO1xyXG4gICAgdGhpcy5pbml0RXZlbnRzKClcclxuICAgIHRoaXMuYWN0aXZlQnVpbGRpbmdcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDms6jlhozngrnlh7vnmoTkuovku7blm57osINcclxuICAgKiBAbWVtYmVyT2YgRFRIXHJcbiAgICogKi9cclxuICBQaWNrQ2FsbGJhY2sodGhhdCwgY2IpIHtcclxuICAgIHRoaXMuUGlja0J1aWxkaW5nRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgY2IsXHJcbiAgICAgIHRoYXRcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8v5Zy65pmv5LqL5Lu2XHJcbiAgaW5pdEV2ZW50cygpIHtcclxuICAgIG5ldyBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIodGhpcy5zZGsudmlld2VyLnNjZW5lLmNhbnZhcykuc2V0SW5wdXRBY3Rpb24oKChlKSA9PiB7XHJcbiAgICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5pc0FjdGl2YXRlKSByZXR1cm47XHJcbiAgICAgIGxldCBwaWNrRmVhdHVyZSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrKGUucG9zaXRpb24pO1xyXG4gICAgICBpZiAocGlja0ZlYXR1cmUpIHtcclxuICAgICAgICAvL+eCueWHu+S6huW3suacieeahOWIhuaIt+WNleS9k+WMllxyXG4gICAgICAgIGlmIChwaWNrRmVhdHVyZS5wcmltaXRpdmUgJiYgcGlja0ZlYXR1cmUucHJpbWl0aXZlIGluc3RhbmNlb2YgQ2VzaXVtLkNsYXNzaWZpY2F0aW9uUHJpbWl0aXZlICYmIHBpY2tGZWF0dXJlLmlkICYmIChwaWNrRmVhdHVyZS5pZC50eXBlID09IFwieWotZHRoLWR0aFwiIHx8IHBpY2tGZWF0dXJlLmlkLnR5cGUgPT0gXCJ5ai1kdGgtaGlnaGxpZ2h0XCIpKSB7XHJcbiAgICAgICAgICB0aGlzLmdldElEQnlwaWNrRmVhdHVyZShwaWNrRmVhdHVyZSk7IC8v5aSE55CG54K55Ye75Yiw55qE5qW85bGCXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwaWNrRmVhdHVyZS5wcmltaXRpdmUgJiYgcGlja0ZlYXR1cmUucHJpbWl0aXZlIGluc3RhbmNlb2YgQ2VzaXVtLkNsYXNzaWZpY2F0aW9uUHJpbWl0aXZlICYmIHBpY2tGZWF0dXJlLmlkICYmIHBpY2tGZWF0dXJlLmlkLnR5cGUgPT0gXCJ5ai1kdGgtdW5pdFwiKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodFByaW1pdGl2ZSAmJiB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5oaWdobGlnaHRQcmltaXRpdmUpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVBpY2tFdmVudChwaWNrRmVhdHVyZS5pZClcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChwaWNrRmVhdHVyZS5pZCAmJiBwaWNrRmVhdHVyZS5pZC50eXBlID09PSAneWotZHRoLWhpZ2hsaWdodCcpIHtcclxuICAgICAgICAvLyAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0UHJpbWl0aXZlICYmIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmhpZ2hsaWdodFByaW1pdGl2ZSlcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihlLnBvc2l0aW9uKTsgLy/lsY/luZXlnZDmoIfovazkuLrnrJvljaHlsJTnqbrpl7TlnZDmoIdcclxuICAgICAgaWYgKCFwb3NpdGlvbikgcmV0dXJuO1xyXG5cclxuICAgICAgbGV0IGMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4ocG9zaXRpb24pOyAvL+esm+WNoeWwlOWdkOagh+i9rOS4uue7j+e6rOW6pu+8iOW8p+W6pu+8iVxyXG4gICAgICBsZXQgcG9pbnQgPSBbQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGMubG9uZ2l0dWRlKSwgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGMubGF0aXR1ZGUpXTsgLy/ovazkuLrnu4/nuqzluqbngrlcclxuICAgICAgdGhpcy5xdWVyeUJ5UG9pbnQocG9pbnQsIGMuaGVpZ2h0KTtcclxuICAgIH0pLCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSyk7XHJcblxyXG4gICAgbGV0IGNvdmVyTGFiZWxFbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuZ2V0T3JDcmVhdGVFbnRpdHkoJ3lqLWR0aC1jb3Zlci1sYWJlbCcpXHJcbiAgICBjb3ZlckxhYmVsRW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAvLyAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygtNzUuMTY0MTY2NywgMzkuOTUyMjIyMiksXHJcbiAgICAvLyAgIGxhYmVsOiB7XHJcbiAgICAvLyAgICAgdGV4dDogXCJQaGlsYWRlbHBoaWFcIixcclxuICAgIC8vICAgICBmb250OiBcIjI0cHggSGVsdmV0aWNhXCIsXHJcbiAgICAvLyAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuU0tZQkxVRSxcclxuICAgIC8vICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5CTEFDSyxcclxuICAgIC8vICAgICBvdXRsaW5lV2lkdGg6IDIsXHJcbiAgICAvLyAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkUsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyB9KTtcclxuICAgIGxldCBsYXN0UGlja1RpbWUgPSAwO1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgbGV0IHRpbWVvdXRFdmVudFxyXG4gICAgbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcih0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FudmFzKS5zZXRJbnB1dEFjdGlvbigoKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobm93IC0gbGFzdFBpY2tUaW1lIDwgMTAwKSB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEV2ZW50KVxyXG4gICAgICAgICAgdGltZW91dEV2ZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHBpY2sobW92ZW1lbnQpXHJcbiAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0RXZlbnQpXHJcbiAgICAgICAgbGFzdFBpY2tUaW1lID0gbm93O1xyXG4gICAgICAgIHBpY2sobW92ZW1lbnQpXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH0pLCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSk7XHJcbiAgICBmdW5jdGlvbiBwaWNrKGUpIHtcclxuICAgICAgbGV0IHBpY2tGZWF0dXJlID0gX3RoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrKGUuZW5kUG9zaXRpb24pO1xyXG4gICAgICBpZiAocGlja0ZlYXR1cmUpIHtcclxuICAgICAgICBsZXQgbGFiZWxUZXh0ID0gJydcclxuICAgICAgICBpZiAocGlja0ZlYXR1cmUucHJpbWl0aXZlICYmIHBpY2tGZWF0dXJlLnByaW1pdGl2ZSBpbnN0YW5jZW9mIENlc2l1bS5DbGFzc2lmaWNhdGlvblByaW1pdGl2ZSAmJiBwaWNrRmVhdHVyZS5pZCAmJiAocGlja0ZlYXR1cmUuaWQudHlwZSA9PT0gXCJ5ai1kdGgtZHRoXCIgfHwgcGlja0ZlYXR1cmUuaWQudHlwZSA9PT0gXCJ5ai1kdGgtaGlnaGxpZ2h0XCIpKSB7XHJcbiAgICAgICAgICBsYWJlbFRleHQgPSBwaWNrRmVhdHVyZS5pZC5idWlsZF9pbmZvLm5hbWUgKyAnIC0gJyArIHBpY2tGZWF0dXJlLmlkLnVuaXRfaW5mby5uYW1lICsgJyAtICcgKyBwaWNrRmVhdHVyZS5pZC5yb29tX251bVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwaWNrRmVhdHVyZS5wcmltaXRpdmUgJiYgcGlja0ZlYXR1cmUucHJpbWl0aXZlIGluc3RhbmNlb2YgQ2VzaXVtLkNsYXNzaWZpY2F0aW9uUHJpbWl0aXZlICYmIHBpY2tGZWF0dXJlLmlkICYmIHBpY2tGZWF0dXJlLmlkLnR5cGUgPT09IFwieWotZHRoLXVuaXRcIikge1xyXG4gICAgICAgICAgaWYgKHBpY2tGZWF0dXJlLmlkLmJ1aWxkX2luZm8ubmFtZSkge1xyXG4gICAgICAgICAgICBsYWJlbFRleHQgPSBwaWNrRmVhdHVyZS5pZC5idWlsZF9pbmZvLm5hbWUgKyAnIC0gJyArIHBpY2tGZWF0dXJlLmlkLm5hbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGlja0ZlYXR1cmUucHJpbWl0aXZlICYmIHBpY2tGZWF0dXJlLnByaW1pdGl2ZSBpbnN0YW5jZW9mIENlc2l1bS5DbGFzc2lmaWNhdGlvblByaW1pdGl2ZSAmJiBwaWNrRmVhdHVyZS5pZCAmJiBwaWNrRmVhdHVyZS5pZC50eXBlID09PSBcInlqLWR0aC1idWlsZFwiKSB7XHJcbiAgICAgICAgICBpZiAocGlja0ZlYXR1cmUuaWQubmFtZSkge1xyXG4gICAgICAgICAgICBsYWJlbFRleHQgPSBwaWNrRmVhdHVyZS5pZC5uYW1lXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBpY2tGZWF0dXJlLnByaW1pdGl2ZSAmJiBwaWNrRmVhdHVyZS5wcmltaXRpdmUuaWQgJiYgcGlja0ZlYXR1cmUucHJpbWl0aXZlLmlkLmlkICYmIHBpY2tGZWF0dXJlLnByaW1pdGl2ZS5pZC5pZCA9PT0gJ3lqLWR0aC1jb3Zlci1sYWJlbCcpIHtcclxuICAgICAgICAgIGNvdmVyTGFiZWxFbnRpdHkucG9zaXRpb24gPSBfdGhpcy5zZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihlLmVuZFBvc2l0aW9uKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY292ZXJMYWJlbEVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxhYmVsVGV4dCkge1xyXG4gICAgICAgICAgY292ZXJMYWJlbEVudGl0eS5wb3NpdGlvbiA9IF90aGlzLnNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKGUuZW5kUG9zaXRpb24pXHJcbiAgICAgICAgICBjb3ZlckxhYmVsRW50aXR5LmxhYmVsID0gbmV3IENlc2l1bS5MYWJlbEdyYXBoaWNzKHtcclxuICAgICAgICAgICAgdGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICBmb250OiBcIjIwcHggSGVsdmV0aWNhXCIsXHJcbiAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiB7IHg6IDAsIHk6IC0zMCB9LFxyXG4gICAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmZmZmYnKSxcclxuICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgICAgICAgIG91dGxpbmVXaWR0aDogMSxcclxuICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwMDAwMCcpLndpdGhBbHBoYSgwLjgpLFxyXG4gICAgICAgICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY292ZXJMYWJlbEVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyrmoLnmja7nlKjmiLfkv6Hmga/mn6Xor6LljZXkvZPljJYqL1xyXG4gIHF1ZXJ5QnlVc2VySW5mbyhkYXRhKSB7XHJcbiAgICB0aGlzLnF1ZXJ5QnlQb2ludChbZGF0YS5wb3NpdGlvbi5sbmcsIGRhdGEucG9zaXRpb24ubGF0XSwgZGF0YS5wb3NpdGlvbi5hbHQsIGRhdGEuaWQpXHJcbiAgfVxyXG5cclxuICAvL+eCueafpeivoiAg54K55Ye75p+l6K+i5piv5p+l6K+i5YiG5bGC55qE5pWw5o2uXHJcbiAgYXN5bmMgcXVlcnlCeVBvaW50KHBvaW50KSB7XHJcbiAgICBsZXQgdXJsID0gXCJcIlxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ob3N0LmVuZHNXaXRoKFwieWplYXJ0aDQuMFwiKSkge1xyXG4gICAgICB1cmwgPSB0aGlzLm9wdGlvbnMuaG9zdCArICcvYXBpL3YxL2R0aC9idWlsZC9xdWVyeV9ieV9wb2ludCdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB1cmwgPSB0aGlzLm9wdGlvbnMuaG9zdCArICcveWplYXJ0aDQuMC9hcGkvdjEvZHRoL2J1aWxkL3F1ZXJ5X2J5X3BvaW50J1xyXG4gICAgfVxyXG4gICAgdXJsICs9ICc/cG9pbnQ9JyArIEpTT04uc3RyaW5naWZ5KHsgJ2xuZyc6IHBvaW50WzBdLCAnbGF0JzogcG9pbnRbMV0gfSlcclxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAvLyBib2R5OiBKU09OLnN0cmluZ2lmeSh7cG9pbnQ6IHsnbG5nJzogcG9pbnRbMF0sJ2xhdCc6IHBvaW50WzFdfX0pLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBcInRva2VuXCI6IGdldFRva2VuKCksXHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgZ2V0VG9rZW4oKSxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxyXG4gICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDAgfHwgZGF0YS5jb2RlID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlcnlCeVBvaW50UmVzdWx0cyhkYXRhLmRhdGEpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1zZyB8fCBkYXRhLm1lc3NhZ2UsXHJcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIbmn6Xor6Lnu5PmnpxcclxuICBhc3luYyBwcm9jZXNzUXVlcnlCeVBvaW50UmVzdWx0cyhkYXRhLCBpc2ZseXRvLCBvZmZzZXQgPSB7IGhlYWRpbmc6IDAuMCwgcGl0Y2g6IC05MC4wLCByb2xsOiAwLjAgfSkge1xyXG4gICAgZGF0YS5idWlsZF9pbmZvICYmIHRoaXMuaGFuZGxlUGlja0V2ZW50KGRhdGEpXHJcbiAgICBsZXQgcmFuZ2VcclxuICAgIHRoaXMuY2xlYXJBbGxEdGhQcmltaXRpdmUoKVxyXG4gICAgdGhpcy5jbGVhckFsbFVuaXRQcmltaXRpdmUoKVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlQnVpbGRpbmcpIHtcclxuICAgICAgdGhpcy5jbGVhckJ1aWxkaW5nUHJpbWl0aXZlKHRoaXMuYWN0aXZlQnVpbGRpbmcpXHJcbiAgICAgIHRoaXMuYWN0aXZlQnVpbGRpbmcgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEuYnVpbGRfaW5mbykge1xyXG4gICAgICByYW5nZSA9IEpTT04ucGFyc2UoZGF0YS5idWlsZF9pbmZvLnJhbmdlKVxyXG4gICAgICBpZiAoZGF0YS5kYW5feXVhbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRhbl95dWFuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5kYW5feXVhbltpXS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRHRoUHJpbWl0aXZlKGRhdGEuZGFuX3l1YW5baV0uY2hpbGRyZW4sIGRhdGEuYnVpbGRfaW5mbywgZGF0YS5kYW5feXVhbltpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFVuaXRQcmltaXRpdmUoW2RhdGEuZGFuX3l1YW5baV1dLCBkYXRhLmJ1aWxkX2luZm8sIGRhdGEuZGFuX3l1YW5baV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQnVpbGRpbmcgPSBkYXRhLmJ1aWxkX2luZm8uSUQgfHwgZGF0YS5idWlsZF9pbmZvLmlkXHJcbiAgICAgICAgdGhpcy5hZGRCdWlsZGluZ1ByaW1pdGl2ZShbZGF0YS5idWlsZF9pbmZvXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNmbHl0bykge1xyXG4gICAgICAgIGlmIChkYXRhLmluZm8gJiYgZGF0YS5pbmZvLmRhbl95dWFuKSB7XHJcbiAgICAgICAgICByYW5nZSA9IEpTT04ucGFyc2UoZGF0YS5pbmZvLmRhbl95dWFuLnJhbmdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5pbmZvICYmIGRhdGEuaW5mby5odSkge1xyXG4gICAgICAgICAgcmFuZ2UgPSBKU09OLnBhcnNlKGRhdGEuaW5mby5odS5yYW5nZSlcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmFuZ2VbaV0uYWx0ID0gZGF0YS5pbmZvLmh1LmJvdHRvbVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByaW1pdGl2ZXMuZHRoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJpbWl0aXZlcy5kdGhbaV0ucmVhZHlQcm9taXNlXHJcbiAgICAgICAgICAgIGxldCBwcmltaXRpdmVzRGF0YSA9IHRoaXMucHJpbWl0aXZlcy5kdGhbaV0uX3ByaW1pdGl2ZU9wdGlvbnMuZ2VvbWV0cnlJbnN0YW5jZXNbMF0uaWRcclxuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZXNEYXRhLklEID09PSBkYXRhLmluZm8uaHUuSUQgJiYgcHJpbWl0aXZlc0RhdGEucm9vbV9udW0gPT09IGRhdGEuaW5mby5odS5yb29tX251bSkge1xyXG4gICAgICAgICAgICAgIGxldCBwaWNrRmVhdHVyZSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB7IC4uLmRhdGEuaW5mby5odSwgYnVpbGRfaW5mbzogeyAuLi5kYXRhLmJ1aWxkX2luZm8gfSwgdW5pdF9pbmZvOiBkYXRhLmluZm8uZGFuX3l1YW4gfSxcclxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogdGhpcy5wcmltaXRpdmVzLmR0aFtpXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmdldElEQnlwaWNrRmVhdHVyZShwaWNrRmVhdHVyZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmx5VG8ocmFuZ2UsIG9mZnNldClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5re75Yqg5oi/5bGLUHJpbWl0aXZlXHJcbiAgYXN5bmMgYWRkQnVpbGRpbmdQcmltaXRpdmUoYXJyYXkpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgZXh0cnVkZWRIZWlnaHQgPSAwXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBKU09OLnBhcnNlKGFycmF5W2ldLnJhbmdlKVxyXG4gICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHBvc2l0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgIGlmIChleHRydWRlZEhlaWdodCA8IHBvc2l0aW9uc1ttXS5hbHQpIHtcclxuICAgICAgICAgIGV4dHJ1ZGVkSGVpZ2h0ID0gcG9zaXRpb25zW21dLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdCwgMClcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9seWdvbkdlb21ldHJ5ID0gbmV3IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICAvLyBwZXJQb3NpdGlvbkhlaWdodDogdHJ1ZSwgLy/kvb/nlKh65Z2Q5qCHIOWQpuWImemrmOW6puS7jjDlvIDlp4tcclxuICAgICAgICBleHRydWRlZEhlaWdodDogMTAwMDAwMDAwLCAvL+aLieS8uOmrmOW6plxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcmltaXRpdmVzLmJ1aWxkaW5nLnB1c2godGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2xhc3NpZmljYXRpb25QcmltaXRpdmUoe1xyXG4gICAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICAgIGlkOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ3lqLWR0aC1idWlsZCcsXHJcbiAgICAgICAgICAgICAgLi4uYXJyYXlbaV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBDZXNpdW0uUG9seWdvbkdlb21ldHJ5LmNyZWF0ZUdlb21ldHJ5KHBvbHlnb25HZW9tZXRyeSksXHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoXHJcbiAgICAgICAgICAgICAgICBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCdyZ2IoMjU1LCAyMzUsIDU5LCAwLjQpJylcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHNob3c6IG5ldyBDZXNpdW0uU2hvd0dlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUodHJ1ZSksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2xhc3NpZmljYXRpb25UeXBlOiBDZXNpdW0uQ2xhc3NpZmljYXRpb25UeXBlLkNFU0lVTV8zRF9USUxFLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja5pZOWIoOmZpOaIv+Wxi1ByaW1pdGl2ZVxyXG4gIGNsZWFyQnVpbGRpbmdQcmltaXRpdmUoaWQpIHtcclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGlkID09PSB0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmdbaV0uX3ByaW1pdGl2ZU9wdGlvbnMuZ2VvbWV0cnlJbnN0YW5jZXNbMF0uaWQuSUQgfHwgaWQgPT09IHRoaXMucHJpbWl0aXZlcy5idWlsZGluZ1tpXS5fcHJpbWl0aXZlT3B0aW9ucy5nZW9tZXRyeUluc3RhbmNlc1swXS5pZC5pZCkge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmdbaV0pXHJcbiAgICAgICAgdGhpcy5wcmltaXRpdmVzLmJ1aWxkaW5nLnNwbGljZShpLCAxKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8g5Yig6Zmk5YWo6YOo5oi/5bGLUHJpbWl0aXZlXHJcbiAgY2xlYXJBbGxCdWlsZGluZ1ByaW1pdGl2ZSgpIHtcclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMucHJpbWl0aXZlcy5idWlsZGluZ1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWl0aXZlcy5idWlsZGluZyA9IFtdXHJcbiAgfVxyXG5cclxuICAvLyDmt7vliqDljZXlhYNQcmltaXRpdmVcclxuICBhc3luYyBhZGRVbml0UHJpbWl0aXZlKGFycmF5LCBidWlsZF9pbmZvLCB1bml0X2luZm8pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgZXh0cnVkZWRIZWlnaHQgPSAwXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBKU09OLnBhcnNlKGFycmF5W2ldLnJhbmdlKVxyXG4gICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHBvc2l0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgIGlmIChleHRydWRlZEhlaWdodCA8IHBvc2l0aW9uc1ttXS5hbHQpIHtcclxuICAgICAgICAgIGV4dHJ1ZGVkSGVpZ2h0ID0gcG9zaXRpb25zW21dLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdCwgMClcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9seWdvbkdlb21ldHJ5ID0gbmV3IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICAvLyBwZXJQb3NpdGlvbkhlaWdodDogdHJ1ZSwgLy/kvb/nlKh65Z2Q5qCHIOWQpuWImemrmOW6puS7jjDlvIDlp4tcclxuICAgICAgICBleHRydWRlZEhlaWdodDogMTAwMDAwMDAwLCAvL+aLieS8uOmrmOW6plxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcmltaXRpdmVzLnVuaXQucHVzaCh0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoXHJcbiAgICAgICAgbmV3IENlc2l1bS5DbGFzc2lmaWNhdGlvblByaW1pdGl2ZSh7XHJcbiAgICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICAgICAgaWQ6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAneWotZHRoLXVuaXQnLFxyXG4gICAgICAgICAgICAgIC4uLmFycmF5W2ldLFxyXG4gICAgICAgICAgICAgIGJ1aWxkX2luZm86IHsgLi4uYnVpbGRfaW5mbyB9LFxyXG4gICAgICAgICAgICAgIHVuaXRfaW5mbzogeyAuLi51bml0X2luZm8gfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZW9tZXRyeTogQ2VzaXVtLlBvbHlnb25HZW9tZXRyeS5jcmVhdGVHZW9tZXRyeShwb2x5Z29uR2VvbWV0cnkpLFxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKFxyXG4gICAgICAgICAgICAgICAgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygncmdiKDI1NSwgMjM1LCA1OSwgMC40KScpXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5DRVNJVU1fM0RfVElMRSxcclxuICAgICAgICB9KVxyXG4gICAgICApKVxyXG4gICAgICB0aGlzLnByaW1pdGl2ZXMudW5pdC5wdXNoKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChcclxuICAgICAgICBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lUHJpbWl0aXZlKHtcclxuICAgICAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3IENlc2l1bS5Hcm91bmRQb2x5bGluZUdlb21ldHJ5KHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAyLjBcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpLndpdGhBbHBoYSgwLjgpKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBhcHBlYXJhbmNlOiBuZXcgQ2VzaXVtLlBvbHlsaW5lQ29sb3JBcHBlYXJhbmNlKClcclxuICAgICAgICB9KVxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2uaWTliKDpmaTljZXlhYNQcmltaXRpdmVcclxuICBjbGVhclVuaXRQcmltaXRpdmUoaWQpIHtcclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGlkID09PSB0aGlzLnByaW1pdGl2ZXMuYnVpbGRpbmdbaV0uX3ByaW1pdGl2ZU9wdGlvbnMuZ2VvbWV0cnlJbnN0YW5jZXNbMF0uaWQuSUQgfHwgaWQgPT09IHRoaXMucHJpbWl0aXZlcy5idWlsZGluZ1tpXS5fcHJpbWl0aXZlT3B0aW9ucy5nZW9tZXRyeUluc3RhbmNlc1swXS5pZC5pZCkge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLnByaW1pdGl2ZXMudW5pdFtpXSlcclxuICAgICAgICB0aGlzLnByaW1pdGl2ZXMudW5pdC5zcGxpY2UoaSwgMSlcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTlhajpg6jljZXlhYNQcmltaXRpdmVcclxuICBjbGVhckFsbFVuaXRQcmltaXRpdmUoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gdGhpcy5wcmltaXRpdmVzLnVuaXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMucHJpbWl0aXZlcy51bml0W2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcmltaXRpdmVzLnVuaXQgPSBbXVxyXG4gIH1cclxuXHJcbiAgLy8g5re75Yqg5Y2V5L2T5YyWUHJpbWl0aXZlXHJcbiAgYWRkRHRoUHJpbWl0aXZlKGFycmF5LCBidWlsZF9pbmZvLCB1bml0X2luZm8pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IEpTT04ucGFyc2UoYXJyYXlbaV0ucmFuZ2UpXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdCwgYXJyYXlbaV0uYm90dG9tICsgMC4zKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb2x5Z29uR2VvbWV0cnkgPSBuZXcgQ2VzaXVtLlBvbHlnb25HZW9tZXRyeSh7XHJcbiAgICAgICAgcG9seWdvbkhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFxyXG4gICAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICApLFxyXG4gICAgICAgIHBlclBvc2l0aW9uSGVpZ2h0OiB0cnVlLCAvL+S9v+eUqHrlnZDmoIcg5ZCm5YiZ6auY5bqm5LuOMOW8gOWni1xyXG4gICAgICAgIGV4dHJ1ZGVkSGVpZ2h0OiBhcnJheVtpXS5oZWlnaHQgKyBhcnJheVtpXS5ib3R0b20sIC8v5ouJ5Ly46auY5bqmXHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgcG9seWdvbkdlb21ldHJ5Qm9yZGVyID0gbmV3IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogdHJ1ZSwgLy/kvb/nlKh65Z2Q5qCHIOWQpuWImemrmOW6puS7jjDlvIDlp4tcclxuICAgICAgICBleHRydWRlZEhlaWdodDogYXJyYXlbaV0uYm90dG9tLCAvL+aLieS8uOmrmOW6plxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcmltaXRpdmVzLmR0aC5wdXNoKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChcclxuICAgICAgICBuZXcgQ2VzaXVtLkNsYXNzaWZpY2F0aW9uUHJpbWl0aXZlKHtcclxuICAgICAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgICAgICBpZDoge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICd5ai1kdGgtZHRoJyxcclxuICAgICAgICAgICAgICAuLi5hcnJheVtpXSxcclxuICAgICAgICAgICAgICBidWlsZF9pbmZvOiB7IC4uLmJ1aWxkX2luZm8gfSxcclxuICAgICAgICAgICAgICB1bml0X2luZm86IHsgLi4udW5pdF9pbmZvIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkuY3JlYXRlR2VvbWV0cnkocG9seWdvbkdlb21ldHJ5KSxcclxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJ3JnYigwLCA2NCwgMjU1LCAwLjQpJylcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHNob3c6IG5ldyBDZXNpdW0uU2hvd0dlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUodHJ1ZSksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2xhc3NpZmljYXRpb25UeXBlOiBDZXNpdW0uQ2xhc3NpZmljYXRpb25UeXBlLkNFU0lVTV8zRF9USUxFLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICkpO1xyXG4gICAgICB0aGlzLnByaW1pdGl2ZXMuZHRoLnB1c2godGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2xhc3NpZmljYXRpb25QcmltaXRpdmUoe1xyXG4gICAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICAgIGlkOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ3lqLWR0aC1kdGgtYm9yZGVyJyxcclxuICAgICAgICAgICAgICAuLi5hcnJheVtpXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkuY3JlYXRlR2VvbWV0cnkocG9seWdvbkdlb21ldHJ5Qm9yZGVyKSxcclxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJ3JnYigwLCAwLCAwLCAxKScpXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5DRVNJVU1fM0RfVElMRSxcclxuICAgICAgICB9KVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8g5qC55o2uaWTliKDpmaTljZXkvZPljJZQcmltaXRpdmVcclxuICBjbGVhckR0aFByaW1pdGl2ZShpZCkge1xyXG4gICAgZm9yIChsZXQgaSA9IHRoaXMucHJpbWl0aXZlcy5kdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGlkID09PSB0aGlzLnByaW1pdGl2ZXMuZHRoW2ldLl9wcmltaXRpdmVPcHRpb25zLmdlb21ldHJ5SW5zdGFuY2VzWzBdLmlkLklEIHx8IGlkID09PSB0aGlzLnByaW1pdGl2ZXMuZHRoW2ldLl9wcmltaXRpdmVPcHRpb25zLmdlb21ldHJ5SW5zdGFuY2VzWzBdLmlkLmlkKSB7XHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMucHJpbWl0aXZlcy5kdGhbaV0pXHJcbiAgICAgICAgdGhpcy5wcmltaXRpdmVzLmR0aC5zcGxpY2UoaSwgMSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5Yig6Zmk5YWo6YOo5Y2V5L2T5YyWUHJpbWl0aXZlXHJcbiAgY2xlYXJBbGxEdGhQcmltaXRpdmUoKSB7XHJcbiAgICB0aGlzLmhpZ2hsaWdodFByaW1pdGl2ZSAmJiB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5oaWdobGlnaHRQcmltaXRpdmUpXHJcbiAgICBmb3IgKGxldCBpID0gdGhpcy5wcmltaXRpdmVzLmR0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5wcmltaXRpdmVzLmR0aFtpXSlcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWl0aXZlcy5kdGggPSBbXVxyXG4gIH1cclxuXHJcbiAgZ2V0SURCeXBpY2tGZWF0dXJlKHBpY2tGZWF0dXJlKSB7XHJcbiAgICAvL+aBouWkjeS4iuS4gOS4qui0tOWvueixoemdouaYvuekulxyXG4gICAgaWYgKHRoaXMuY2xpY2tIaWdobGlnaHRQcmltaXRpdmUpIHtcclxuICAgICAgdGhpcy5jbGlja0hpZ2hsaWdodFByaW1pdGl2ZS5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaGlnaGxpZ2h0UHJpbWl0aXZlICYmIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmhpZ2hsaWdodFByaW1pdGl2ZSlcclxuICAgIHRoaXMuaGlnaGxpZ2h0UHJpbWl0aXZlID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkNsYXNzaWZpY2F0aW9uUHJpbWl0aXZlKHtcclxuICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICAgIGlkOiB7XHJcbiAgICAgICAgICAgIC4uLnBpY2tGZWF0dXJlLmlkLFxyXG4gICAgICAgICAgICB0eXBlOiAneWotZHRoLWhpZ2hsaWdodCcsXHJcblxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGdlb21ldHJ5OiBwaWNrRmVhdHVyZS5wcmltaXRpdmUuX3ByaW1pdGl2ZU9wdGlvbnMuZ2VvbWV0cnlJbnN0YW5jZXNbMF0uZ2VvbWV0cnksXHJcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmY5ODAwJykud2l0aEFscGhhKDAuOCkpLFxyXG4gICAgICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5DRVNJVU1fM0RfVElMRSxcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuaGlnaGxpZ2h0UHJpbWl0aXZlLnJlYWR5UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgLy/orr7nva7lvZPliY3ngrnlh7vnmoTotLTlr7nosaHpnaLkuI3mmL7npLpcclxuICAgICAgcGlja0ZlYXR1cmUucHJpbWl0aXZlLnNob3cgPSBmYWxzZTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmNsaWNrSGlnaGxpZ2h0UHJpbWl0aXZlID0gcGlja0ZlYXR1cmUucHJpbWl0aXZlO1xyXG5cclxuICAgIGxldCByYW5nZSA9IHBpY2tGZWF0dXJlLmlkLnJhbmdlXHJcbiAgICBpZiAodHlwZW9mIHBpY2tGZWF0dXJlLmlkLnJhbmdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByYW5nZSA9IEpTT04ucGFyc2UocGlja0ZlYXR1cmUuaWQucmFuZ2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEhpbGlnaHRBcmVhKHJhbmdlKVxyXG4gICAgdGhpcy5oYW5kbGVQaWNrRXZlbnQocGlja0ZlYXR1cmUuaWQpXHJcbiAgfVxyXG5cclxuICAvL+WkhOeQhueCueWHu+S6i+S7tlxyXG4gIGhhbmRsZVBpY2tFdmVudChpZCkge1xyXG4gICAgdGhpcy5QaWNrQnVpbGRpbmdFdmVudC5yYWlzZUV2ZW50KGlkKTsgLy/op6blj5HpgInkuK3kuovku7Yg6YCa55+l55WM6Z2i5pu05pawXHJcbiAgfVxyXG5cclxuICBnZXRIaWxpZ2h0QXJlYShwb2ludHMsIHJhZGl1cyA9IDEpIHtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgcG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiB7XHJcbiAgICAgIGFyci5wdXNoKFsocG9pbnQubG5nKSwgKHBvaW50LmxhdCldKVxyXG4gICAgfSlcclxuICAgIGFyci5wdXNoKGFyclswXSlcclxuICAgIHZhciBwb2x5ID0gdHVyZi5wb2x5Z29uKFthcnJdKVxyXG4gICAgdmFyIGJ1ZmZlcmVkID0gdHVyZi5idWZmZXIocG9seSwgTnVtYmVyKHJhZGl1cykgLyAxMDAwKVxyXG4gICAgcmV0dXJuIGJ1ZmZlcmVkLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhwb3NpdGlvbnMsIG9mZnNldCA9IHsgaGVhZGluZzogMC4wLCBwaXRjaDogLTkwLjAsIHJvbGw6IDAuMCB9KSB7XHJcbiAgICBsZXQgdG9vbHMgPSBuZXcgWUouVG9vbHModGhpcy5zZGspXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHBvc2l0aW9uc1tpXS5hbHQpIHtcclxuICAgICAgICBoZWlnaHQgPSBwb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdG9vbHMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbnNbaV0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBoZWlnaHQpXHJcbiAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgfVxyXG4gICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gYXdhaXQgQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKEJvdW5kaW5nU3BoZXJlLCB7XHJcbiAgICAgIG9mZnNldDoge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyhvZmZzZXQuaGVhZGluZyB8fCAwKSxcclxuICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKChvZmZzZXQucGl0Y2ggfHwgb2Zmc2V0LnBpdGNoID09PSAwKSA/IG9mZnNldC5waXRjaCA6IC05MCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKG9mZnNldC5yb2xsIHx8IDApXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMuaXNBY3RpdmF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5pc0FjdGl2YXRlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEVEgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFLQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFBQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUEvQkE7QUFBQTtBQUFBO0FBQUE7QUFpQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQW5EQTtBQUFBO0FBQUE7QUFBQTtBQXFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBckNBO0FBQUE7QUFBQTtBQUFBO0FBdUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXJEQTtBQUFBO0FBQUE7QUFBQTtBQXVEQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFSQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXRCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/DTH/index.js\n"); /***/ }), /***/ "./src/Global/ExportKml/index.js": /*!***************************************!*\ !*** ./src/Global/ExportKml/index.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Obj_Base_BillboardObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Obj/Base/BillboardObject */ \"./src/Obj/Base/BillboardObject/index.js\");\n/* harmony import */ var _Obj_Base_PolygonObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Obj/Base/PolygonObject */ \"./src/Obj/Base/PolygonObject/index.js\");\n/* harmony import */ var _Obj_Base_PolylineObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Obj/Base/PolylineObject */ \"./src/Obj/Base/PolylineObject/index.js\");\n/* harmony import */ var _Obj_Base_CircleDiffuse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Obj/Base/CircleDiffuse */ \"./src/Obj/Base/CircleDiffuse/index.js\");\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-09-11 16:41\r\n * @description:index\r\n * @update: 2023-09-11 16:41\r\n */\n\n\n\n\nfunction exportKml() {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var entities = new Cesium.EntityCollection();\n list.forEach(function (entity) {\n if (entity instanceof _Obj_Base_BillboardObject__WEBPACK_IMPORTED_MODULE_0__[\"default\"] || entity instanceof _Obj_Base_PolygonObject__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || entity instanceof _Obj_Base_CircleDiffuse__WEBPACK_IMPORTED_MODULE_3__[\"default\"] || entity instanceof _Obj_Base_PolylineObject__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) {\n entities.add(entity.entity);\n }\n });\n if (entities.values.length) {\n var promise = Cesium.exportKml({\n entities: entities\n });\n promise.then(function (e) {\n // Cesium.exportKml(e.kml,)\n funDownload(e.kml, new Date().getTime() + \".kml\");\n });\n } else {\n console.error(\"允许导出为kml的对象为空\");\n }\n}\nfunction funDownload(content, filename) {\n var eleLink = document.createElement(\"a\");\n eleLink.download = filename;\n eleLink.style.display = \"none\";\n // 字符内容转变成blob地址\n var blob = new Blob([content]);\n eleLink.href = URL.createObjectURL(blob);\n // 触发点击\n document.body.appendChild(eleLink);\n eleLink.click();\n // 然后移除\n document.body.removeChild(eleLink);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (exportKml);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0V4cG9ydEttbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvRXhwb3J0S21sL2luZGV4LmpzPzU3ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTA5LTExIDE2OjQxXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMDktMTEgMTY6NDFcclxuICovXHJcbmltcG9ydCBCaWxsYm9hcmRPYmplY3QgZnJvbSBcIi4uLy4uL09iai9CYXNlL0JpbGxib2FyZE9iamVjdFwiO1xyXG5pbXBvcnQgUG9seWdvbk9iamVjdCBmcm9tIFwiLi4vLi4vT2JqL0Jhc2UvUG9seWdvbk9iamVjdFwiO1xyXG5pbXBvcnQgUG9seWxpbmVPYmplY3QgZnJvbSBcIi4uLy4uL09iai9CYXNlL1BvbHlsaW5lT2JqZWN0XCI7XHJcbmltcG9ydCBDaXJjbGUgZnJvbSBcIi4uLy4uL09iai9CYXNlL0NpcmNsZURpZmZ1c2VcIjtcclxuXHJcbmZ1bmN0aW9uIGV4cG9ydEttbChsaXN0ID0gW10pIHtcclxuXHJcbiAgbGV0IGVudGl0aWVzID0gbmV3IENlc2l1bS5FbnRpdHlDb2xsZWN0aW9uKCk7XHJcbiAgbGlzdC5mb3JFYWNoKGVudGl0eSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGVudGl0eSBpbnN0YW5jZW9mIEJpbGxib2FyZE9iamVjdCB8fFxyXG4gICAgICBlbnRpdHkgaW5zdGFuY2VvZiBQb2x5Z29uT2JqZWN0IHx8XHJcbiAgICAgIGVudGl0eSBpbnN0YW5jZW9mIENpcmNsZSB8fFxyXG4gICAgICBlbnRpdHkgaW5zdGFuY2VvZiBQb2x5bGluZU9iamVjdFxyXG4gICAgKSB7XHJcbiAgICAgIGVudGl0aWVzLmFkZChlbnRpdHkuZW50aXR5KVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgaWYgKGVudGl0aWVzLnZhbHVlcy5sZW5ndGgpIHtcclxuICAgIGxldCBwcm9taXNlID0gQ2VzaXVtLmV4cG9ydEttbCh7ZW50aXRpZXN9KVxyXG4gICAgcHJvbWlzZS50aGVuKGUgPT4ge1xyXG4gICAgICAvLyBDZXNpdW0uZXhwb3J0S21sKGUua21sLClcclxuICAgICAgZnVuRG93bmxvYWQoZS5rbWwsIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgXCIua21sXCIpXHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwi5YWB6K645a+85Ye65Li6a21s55qE5a+56LGh5Li656m6XCIpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmdW5Eb3dubG9hZChjb250ZW50LCBmaWxlbmFtZSkge1xyXG4gIGxldCBlbGVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgZWxlTGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xyXG4gIGVsZUxpbmsuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gIC8vIOWtl+espuWGheWuuei9rOWPmOaIkGJsb2LlnLDlnYBcclxuICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtjb250ZW50XSk7XHJcbiAgZWxlTGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAvLyDop6blj5Hngrnlh7tcclxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZUxpbmspO1xyXG4gIGVsZUxpbmsuY2xpY2soKTtcclxuICAvLyDnhLblkI7np7vpmaRcclxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZUxpbmspO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0S21sXHJcblxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/ExportKml/index.js\n"); /***/ }), /***/ "./src/Global/FlyRoam/_element.js": /*!****************************************!*\ !*** ./src/Global/FlyRoam/_element.js ***! \****************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\u8BBE\\u7F6E\\u603B\\u65F6\\u957F\\n
\\n \\n \\u79D2(s)\\n \\n
\\n
\\n
\\n \\n \\u662F\\u5426\\u5FAA\\u73AF\\u64AD\\u653E\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\u5E8F\\u53F7
\\n
\\u65F6\\u957F(s)
\\n
\\u64CD\\u4F5C
\\n
\\n
\\n
\\n
\\n
\\n

\\u6682\\u65E0\\u6570\\u636E

\\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0ZseVJvYW0vX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL0ZseVJvYW0vX2VsZW1lbnQuanM/OGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJpc1RvdGFsVGltZVwiIHN0eWxlPVwid2lkdGg6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxNXB4OyBoZWlnaHQ6IDE1cHg7IGN1cnNvcjogcG9pbnRlcjsgd2lkdGg6IGF1dG87IG1hcmdpbi1yaWdodDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuiuvue9ruaAu+aXtumVvzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHRvdGFsLXRpbWVcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5OTk5Ljk5XCIgc3RlcD1cIjAuMDFcIiBuYW1lPVwidG90YWxUaW1lXCIgdmFsdWU9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCIgc3R5bGU9XCJ0b3A6IDZweDtcIj7np5Iocyk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJyZXBlYXRcIiBzdHlsZT1cIndpZHRoOiAxNnB4OyBsaW5lLWhlaWdodDogMTVweDsgaGVpZ2h0OiAxNXB4OyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiBhdXRvOyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mmK/lkKblvqrnjq/mkq3mlL48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLXBvaW50XCI+PHN2ZyBjbGFzcz1cImljb24tYWRkXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tYWRkXCI+PC91c2U+PC9zdmc+5aKe5Yqg6KeG54K5PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibW9kaWZ5LXBvaW50XCI+PHN2ZyBjbGFzcz1cImljb24tZWRpdFwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWVkaXRcIj48L3VzZT48L3N2Zz7osIPmlbTop4bngrk8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZnJlc2hQbGF5XCI+PHN2ZyBjbGFzcz1cImljb24tcGxheVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXBsYXlcIj48L3VzZT48L3N2Zz7mkq3mlL48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjZWFzZVwiPjxzdmcgY2xhc3M9XCJpY29uLXBhdXNlXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tcGF1c2VcIj48L3VzZT48L3N2Zz7nu5PmnZ88L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7luo/lj7c8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7ml7bplb8ocyk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7mk43kvZw8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaW1nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cD7mmoLml6DmlbDmja48L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQStEQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/FlyRoam/_element.js\n"); /***/ }), /***/ "./src/Global/FlyRoam/index.js": /*!*************************************!*\ !*** ./src/Global/FlyRoam/index.js ***! \*************************************/ /*! exports provided: open, close, flyTo, setRepeat, cease */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"open\", function() { return open; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"close\", function() { return close; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flyTo\", function() { return flyTo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setRepeat\", function() { return setRepeat; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cease\", function() { return cease; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_element */ \"./src/Global/FlyRoam/_element.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n\n\n/**\r\n * @description 飞行漫游\r\n */\n\n\n\n\nvar _DialogObject = null;\nvar clickHandler;\nvar repeat = 0;\nvar currentRepeat = 0;\nvar open = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(sdk) {\n var options,\n _Dialog,\n name,\n viewer,\n tools,\n active,\n contentElm,\n all_elm,\n tableBody,\n tableEmpty,\n handler,\n i,\n points,\n nameElm,\n addListBtn,\n endBtn,\n flyBtn,\n addBtn,\n modifyBtn,\n totalTimeElm,\n isTotalTimeElm,\n repeatElm,\n addTrElm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n addTrElm = function _addTrElm(data) {\n var trList = tableBody.getElementsByClassName('tr');\n if (trList.length > 0) {\n trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = undefined;\n }\n var tr_active = tableBody.getElementsByClassName('tr active')[0];\n tr_active && (tr_active.className = 'tr');\n var tr = document.createElement('div');\n tr.className = 'tr active';\n tr.innerHTML = \"\\n
\\u89C6\\u70B9\".concat(i + 1, \"
\\n
\\n \\n
\\n
\\n
\\n \");\n tr.addEventListener('click', function (v) {\n if (v.target.parentNode === tr) {\n var _tr_active = tableBody.getElementsByClassName('tr active')[0];\n _tr_active && (_tr_active.className = 'tr');\n tr.className = 'tr active';\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === tr) {\n active = m + 1;\n break;\n }\n }\n }\n });\n tr.addEventListener('dblclick', function (v) {\n if (v.target.parentNode === tr) {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === tr) {\n viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(points[m].position.lng, points[m].position.lat, points[m].position.alt),\n orientation: points[m].orientation,\n duration: 1\n });\n break;\n }\n }\n }\n });\n var e_play = tr.getElementsByClassName('play')[0];\n var e_delete = tr.getElementsByClassName('delete')[0];\n var e_time = tr.querySelector(\"input[name='time']\");\n e_play.addEventListener('click', function () {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === e_delete.parentNode.parentNode) {\n flyTo(sdk, points, m);\n }\n }\n });\n e_delete.addEventListener(\"click\", function (v) {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === e_delete.parentNode.parentNode) {\n points.splice(m, 1);\n points[points.length - 1] && (points[points.length - 1].duration = 0);\n tableBody.removeChild(tr);\n if (active > m + 1) {\n active--;\n trList[active - 1].className = 'tr active';\n } else if (active == m + 1) {\n if (trList.length == m) {\n active -= 1;\n }\n if (trList.length != 0) {\n trList[active - 1].className = 'tr active';\n }\n }\n // else if(active == m) {\n // console.log(trList.length-1, active)\n // if (trList.length == active-1) {\n // trList[active-2].className = 'tr active'\n // }\n // else {\n // trList[active-1].className = 'tr active'\n // }\n // }\n if (trList.length > 0) {\n var lastElm = trList[trList.length - 1].querySelector(\"input[name='time']\");\n lastElm.disabled = 'disabled';\n lastElm.value = 0;\n }\n break;\n }\n }\n // points.splice(i, 1)\n // tableBody.removeChild(tr)\n // if (trList.length > 0) {\n // trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = 'disabled'\n // }\n });\n e_time.addEventListener('input', function (v) {\n isTotalTimeElm.checked = false;\n data.duration = Number(e_time.value);\n if (data.duration < 0) {\n data.duration = 0;\n }\n });\n e_time.addEventListener('blur', function () {\n e_time.value = Number(Number(e_time.value).toFixed(2));\n if (e_time.value < 0) {\n e_time.value = 0;\n }\n });\n tableBody.insertBefore(tr, trList[active]);\n active++;\n trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = 'disabled';\n };\n options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\n _Dialog = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};\n name = options.name || '漫游路径';\n options.points || (options.points = []);\n if (options.repeat) {\n repeat = Number(options.repeat);\n }\n viewer = sdk.viewer;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"](sdk);\n active = 0;\n if (_DialogObject && _DialogObject.close) {\n _DialogObject.close();\n _DialogObject = null;\n }\n _context.next = 12;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_2__[\"default\"](viewer._container, {\n title: '飞行漫游',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n cease({\n viewer: viewer\n });\n }\n });\n case 12:\n _DialogObject = _context.sent;\n _context.next = 15;\n return _DialogObject.init();\n case 15:\n contentElm = document.createElement('div');\n contentElm.className = 'fly-roam';\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_3__[\"html\"])();\n _DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\"); // EventBinding(all_elm)\n tableBody = contentElm.getElementsByClassName('table-body')[0];\n tableEmpty = contentElm.getElementsByClassName('table-empty')[0];\n handler = {\n set: function set(target, prop, value) {\n target[prop] = value;\n if (target.length > 0) {\n tableEmpty.style.display = 'none';\n } else {\n tableEmpty.style.display = 'flex';\n }\n return true;\n }\n };\n i = 0;\n points = new Proxy([], handler);\n for (i = 0; i < options.points.length; i++) {\n points.push(options.points[i]);\n addTrElm(options.points[i]);\n }\n\n // let nameImputBoxElm = contentElm.getElementsByClassName('input-box')[0]\n // check(nameImputBoxElm, { validator: 'notEmpty', message: '名称不能为空!', trigger: 'input' })\n nameElm = contentElm.querySelector(\"input[name='name']\");\n nameElm.value = name;\n nameElm.addEventListener('input', function () {\n name = nameElm.value;\n });\n addListBtn = document.createElement('button');\n addListBtn.innerHTML = '保存';\n addListBtn.addEventListener('click', function () {\n if (!name) {\n name = '漫游路径';\n nameElm.value = name;\n }\n var newPoints = [];\n points.map(function (item) {\n newPoints.push(item);\n });\n _Dialog.clickSavePath && _Dialog.clickSavePath({\n name: name,\n points: newPoints,\n repeat: repeat + ''\n });\n });\n _DialogObject.footAppChild(addListBtn);\n endBtn = contentElm.getElementsByClassName('cease')[0];\n endBtn.addEventListener('click', function () {\n viewer.camera.cancelFlight();\n });\n flyBtn = contentElm.getElementsByClassName('afreshPlay')[0];\n flyBtn.addEventListener('click', function () {\n if (points.length > 0) {\n flyTo(sdk, points, 0);\n }\n });\n addBtn = contentElm.getElementsByClassName('add-point')[0];\n addBtn.addEventListener('click', function () {\n var position = tools.cartesian3Towgs84(viewer.camera.position, viewer);\n var time = 0;\n var data = {\n duration: time,\n position: position,\n orientation: {\n heading: viewer.camera.heading,\n pitch: viewer.camera.pitch,\n roll: viewer.camera.roll\n }\n };\n points.splice(active, 0, data);\n addTrElm(data);\n i++;\n });\n modifyBtn = contentElm.getElementsByClassName('modify-point')[0];\n modifyBtn.addEventListener('click', function () {\n if (!active) {\n return;\n }\n var position = tools.cartesian3Towgs84(viewer.camera.position, viewer);\n points[active - 1].position = position;\n points[active - 1].orientation = {\n heading: viewer.camera.heading,\n pitch: viewer.camera.pitch,\n roll: viewer.camera.roll\n };\n tools.message({\n text: '操作成功'\n });\n });\n totalTimeElm = contentElm.querySelector(\"input[name='totalTime']\");\n isTotalTimeElm = contentElm.querySelector(\"input[name='isTotalTime']\");\n repeatElm = contentElm.querySelector(\"input[name='repeat']\");\n isTotalTimeElm.addEventListener('change', function () {\n var trList = tableBody.getElementsByClassName('tr');\n if (isTotalTimeElm.checked && trList.length > 0) {\n var time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2));\n for (var _i = 0; _i < trList.length - 1; _i++) {\n points[_i].duration = time;\n trList[_i].querySelector(\"input[name='time']\").value = time;\n }\n trList[trList.length - 1].querySelector(\"input[name='time']\").value = 0;\n }\n });\n totalTimeElm.addEventListener('blur', function () {\n var trList = tableBody.getElementsByClassName('tr');\n totalTimeElm.value = Number(totalTimeElm.value);\n if (totalTimeElm.value < 0) {\n totalTimeElm.value = 0;\n }\n if (isTotalTimeElm.checked && trList.length > 0) {\n var time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2));\n for (var _i2 = 0; _i2 < trList.length - 1; _i2++) {\n points[_i2].duration = time;\n trList[_i2].querySelector(\"input[name='time']\").value = time;\n }\n trList[trList.length - 1].querySelector(\"input[name='time']\").value = 0;\n }\n });\n repeatElm.checked = repeat === Infinity ? true : false;\n repeatElm.addEventListener('change', function () {\n if (repeatElm.checked) {\n repeat = Infinity;\n } else {\n repeat = 0;\n }\n currentRepeat = repeat;\n _Dialog.changeRepeatStateCallBack && _Dialog.changeRepeatStateCallBack(repeatElm.checked);\n });\n\n // Object.defineProperty(options, 'points', {\n // get() {\n // return e_allArea.value\n // },\n // set(value) {\n // e_allArea.value = value\n // }\n // })\n case 48:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function open(_x) {\n return _ref.apply(this, arguments);\n };\n}();\nvar close = function close() {\n if (_DialogObject && _DialogObject.close) {\n _DialogObject.close();\n _DialogObject = null;\n }\n};\nvar _executeFlyTo = function executeFlyTo(sdk) {\n var points = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var noStart = arguments.length > 3 ? arguments[3] : undefined;\n if (clickHandler) {\n clickHandler.destroy();\n }\n clickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n clickHandler.setInputAction(function (movement) {\n cease(sdk);\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n var viewer = sdk.viewer;\n viewer.camera.cancelFlight();\n // function pauseExecution(seconds) {\n // return new Promise(resolve => setTimeout(resolve, seconds * 1000));\n // }\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_5__[\"closeRotateAround\"])(sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_5__[\"closeViewFollow\"])(sdk);\n viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(points[index].position.lng, points[index].position.lat, points[index].position.alt),\n orientation: points[index].orientation,\n duration: noStart ? points[index - 1].duration : 0.5,\n maximumHeight: points[index].position.alt,\n complete: function () {\n var _complete = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee2() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!noStart) {\n // await pauseExecution(2)\n }\n index++;\n if (index <= points.length - 1) {\n _executeFlyTo(sdk, points, index, true);\n } else if (currentRepeat && points.length > 1) {\n currentRepeat--;\n _executeFlyTo(sdk, points, 0);\n } else {\n if (clickHandler) {\n clickHandler.destroy();\n }\n }\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function complete() {\n return _complete.apply(this, arguments);\n }\n return complete;\n }(),\n easingFunction: noStart ? Cesium.EasingFunction.LINEAR_NONE : Cesium.EasingFunction.EXPONENTIAL_OUT\n });\n};\nvar flyTo = function flyTo(sdk) {\n var points = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var noStart = arguments.length > 3 ? arguments[3] : undefined;\n currentRepeat = repeat;\n _executeFlyTo(sdk, points, index, noStart);\n};\n\n/**设置循环次数 (Infinity: 无限循环)*/\nvar setRepeat = function setRepeat(v) {\n if (repeat != Number(v)) {\n repeat = Number(v);\n currentRepeat = repeat;\n if (_DialogObject && _DialogObject._element && _DialogObject._element.content) {\n var repeatElm = _DialogObject._element.content.querySelector(\"input[name='repeat']\");\n if (v === Infinity) {\n repeatElm.checked = true;\n } else {\n repeatElm.checked = false;\n }\n }\n }\n};\n\n/** 停止 */\nvar cease = function cease(sdk) {\n sdk && sdk.viewer && sdk.viewer.camera.cancelFlight();\n if (clickHandler) {\n clickHandler.destroy();\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0ZseVJvYW0vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL0ZseVJvYW0vaW5kZXguanM/NzA4NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiDpo57ooYzmvKvmuLhcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vQmFzZURpYWxvZyc7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uL1Rvb2xzXCI7XHJcbmltcG9ydCB7IGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3d9IGZyb20gJy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbmxldCBfRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG5sZXQgY2xpY2tIYW5kbGVyXHJcbmxldCByZXBlYXQgPSAwXHJcbmxldCBjdXJyZW50UmVwZWF0ID0gMFxyXG5cclxuXHJcbmNvbnN0IG9wZW4gPSBhc3luYyAoc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkgPT4ge1xyXG4gIGxldCBuYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmvKvmuLjot6/lvoQnXHJcbiAgb3B0aW9ucy5wb2ludHMgfHwgKG9wdGlvbnMucG9pbnRzID0gW10pXHJcbiAgaWYob3B0aW9ucy5yZXBlYXQpIHtcclxuICAgIHJlcGVhdCA9IE51bWJlcihvcHRpb25zLnJlcGVhdClcclxuICB9XHJcbiAgbGV0IHZpZXdlciA9IHNkay52aWV3ZXJcclxuICBsZXQgdG9vbHMgPSBuZXcgVG9vbHMoc2RrKVxyXG4gIGxldCBhY3RpdmUgPSAwXHJcblxyXG4gIGlmIChfRGlhbG9nT2JqZWN0ICYmIF9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcblxyXG4gIF9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHZpZXdlci5fY29udGFpbmVyLCB7XHJcbiAgICB0aXRsZTogJ+mjnuihjOa8q+a4uCcsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgY2Vhc2UoeyB2aWV3ZXIgfSlcclxuICAgIH0sXHJcbiAgfSlcclxuICBhd2FpdCBfRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgY29udGVudEVsbS5jbGFzc05hbWUgPSAnZmx5LXJvYW0nXHJcbiAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICBfRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgLy8gRXZlbnRCaW5kaW5nKGFsbF9lbG0pXHJcblxyXG4gIGxldCB0YWJsZUJvZHkgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXTtcclxuICBsZXQgdGFibGVFbXB0eSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXVxyXG5cclxuICBsZXQgaGFuZGxlciA9IHtcclxuICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcclxuICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XHJcbiAgICAgIGlmICh0YXJnZXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRhYmxlRW1wdHkuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRhYmxlRW1wdHkuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICB9O1xyXG4gIGxldCBpID0gMFxyXG4gIGxldCBwb2ludHMgPSBuZXcgUHJveHkoW10sIGhhbmRsZXIpO1xyXG4gIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgcG9pbnRzLnB1c2gob3B0aW9ucy5wb2ludHNbaV0pXHJcbiAgICBhZGRUckVsbShvcHRpb25zLnBvaW50c1tpXSlcclxuICB9XHJcblxyXG5cclxuICAvLyBsZXQgbmFtZUltcHV0Qm94RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1ib3gnKVswXVxyXG4gIC8vIGNoZWNrKG5hbWVJbXB1dEJveEVsbSwgeyB2YWxpZGF0b3I6ICdub3RFbXB0eScsIG1lc3NhZ2U6ICflkI3np7DkuI3og73kuLrnqbrvvIEnLCB0cmlnZ2VyOiAnaW5wdXQnIH0pXHJcbiAgbGV0IG5hbWVFbG0gPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSduYW1lJ11cIilcclxuICBuYW1lRWxtLnZhbHVlID0gbmFtZVxyXG4gIG5hbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICBuYW1lID0gbmFtZUVsbS52YWx1ZVxyXG4gIH0pXHJcblxyXG4gIGxldCBhZGRMaXN0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgYWRkTGlzdEJ0bi5pbm5lckhUTUwgPSAn5L+d5a2YJ1xyXG4gIGFkZExpc3RCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgbmFtZSA9ICfmvKvmuLjot6/lvoQnXHJcbiAgICAgIG5hbWVFbG0udmFsdWUgPSBuYW1lXHJcbiAgICB9XHJcbiAgICBsZXQgbmV3UG9pbnRzID0gW11cclxuICAgIHBvaW50cy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbmV3UG9pbnRzLnB1c2goaXRlbSlcclxuICAgIH0pXHJcbiAgICBfRGlhbG9nLmNsaWNrU2F2ZVBhdGggJiYgX0RpYWxvZy5jbGlja1NhdmVQYXRoKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICBwb2ludHM6IG5ld1BvaW50cyxcclxuICAgICAgICByZXBlYXQ6IHJlcGVhdCsnJ1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfSlcclxuICBfRGlhbG9nT2JqZWN0LmZvb3RBcHBDaGlsZChhZGRMaXN0QnRuKVxyXG5cclxuICBsZXQgZW5kQnRuID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZWFzZScpWzBdXHJcbiAgZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgdmlld2VyLmNhbWVyYS5jYW5jZWxGbGlnaHQoKVxyXG4gIH0pXHJcblxyXG4gIGxldCBmbHlCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FmcmVzaFBsYXknKVswXVxyXG4gIGZseUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgIGlmIChwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmbHlUbyhzZGssIHBvaW50cywgMClcclxuICAgIH1cclxuICB9KVxyXG5cclxuICBsZXQgYWRkQnRuID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhZGQtcG9pbnQnKVswXVxyXG4gIGFkZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KHZpZXdlci5jYW1lcmEucG9zaXRpb24sIHZpZXdlcilcclxuICAgIGxldCB0aW1lID0gMFxyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGR1cmF0aW9uOiB0aW1lLFxyXG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgICAgaGVhZGluZzogdmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICAgIHBpdGNoOiB2aWV3ZXIuY2FtZXJhLnBpdGNoLFxyXG4gICAgICAgIHJvbGw6IHZpZXdlci5jYW1lcmEucm9sbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwb2ludHMuc3BsaWNlKGFjdGl2ZSwgMCwgZGF0YSlcclxuICAgIGFkZFRyRWxtKGRhdGEpXHJcbiAgICBpKytcclxuICB9KVxyXG4gIGxldCBtb2RpZnlCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGlmeS1wb2ludCcpWzBdXHJcbiAgbW9kaWZ5QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgaWYgKCFhY3RpdmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb24gPSB0b29scy5jYXJ0ZXNpYW4zVG93Z3M4NCh2aWV3ZXIuY2FtZXJhLnBvc2l0aW9uLCB2aWV3ZXIpXHJcbiAgICBwb2ludHNbYWN0aXZlIC0gMV0ucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgcG9pbnRzW2FjdGl2ZSAtIDFdLm9yaWVudGF0aW9uID0ge1xyXG4gICAgICBoZWFkaW5nOiB2aWV3ZXIuY2FtZXJhLmhlYWRpbmcsXHJcbiAgICAgIHBpdGNoOiB2aWV3ZXIuY2FtZXJhLnBpdGNoLFxyXG4gICAgICByb2xsOiB2aWV3ZXIuY2FtZXJhLnJvbGxcclxuICAgIH1cclxuICAgIHRvb2xzLm1lc3NhZ2Uoe3RleHQ6ICfmk43kvZzmiJDlip8nfSlcclxuICB9KVxyXG5cclxuICBsZXQgdG90YWxUaW1lRWxtID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndG90YWxUaW1lJ11cIilcclxuICBsZXQgaXNUb3RhbFRpbWVFbG0gPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdpc1RvdGFsVGltZSddXCIpXHJcbiAgbGV0IHJlcGVhdEVsbSA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3JlcGVhdCddXCIpXHJcbiAgaXNUb3RhbFRpbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgbGV0IHRyTGlzdCA9IHRhYmxlQm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBpZiAoaXNUb3RhbFRpbWVFbG0uY2hlY2tlZCAmJiB0ckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgdGltZSA9IE51bWJlcigoTnVtYmVyKHRvdGFsVGltZUVsbS52YWx1ZSkgLyAodHJMaXN0Lmxlbmd0aCAtIDEpKS50b0ZpeGVkKDIpKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyTGlzdC5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICBwb2ludHNbaV0uZHVyYXRpb24gPSB0aW1lXHJcbiAgICAgICAgdHJMaXN0W2ldLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSd0aW1lJ11cIikudmFsdWUgPSB0aW1lXHJcbiAgICAgIH1cclxuICAgICAgdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpLnZhbHVlID0gMFxyXG4gICAgfVxyXG4gIH0pXHJcbiAgdG90YWxUaW1lRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICBsZXQgdHJMaXN0ID0gdGFibGVCb2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIHRvdGFsVGltZUVsbS52YWx1ZSA9IE51bWJlcih0b3RhbFRpbWVFbG0udmFsdWUpXHJcbiAgICBpZiAodG90YWxUaW1lRWxtLnZhbHVlIDwgMCkge1xyXG4gICAgICB0b3RhbFRpbWVFbG0udmFsdWUgPSAwXHJcbiAgICB9XHJcbiAgICBpZiAoaXNUb3RhbFRpbWVFbG0uY2hlY2tlZCAmJiB0ckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgdGltZSA9IE51bWJlcigoTnVtYmVyKHRvdGFsVGltZUVsbS52YWx1ZSkgLyAodHJMaXN0Lmxlbmd0aCAtIDEpKS50b0ZpeGVkKDIpKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyTGlzdC5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICBwb2ludHNbaV0uZHVyYXRpb24gPSB0aW1lXHJcbiAgICAgICAgdHJMaXN0W2ldLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSd0aW1lJ11cIikudmFsdWUgPSB0aW1lXHJcbiAgICAgIH1cclxuICAgICAgdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpLnZhbHVlID0gMFxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmVwZWF0RWxtLmNoZWNrZWQgPSAocmVwZWF0ID09PSBJbmZpbml0eSA/IHRydWUgOiBmYWxzZSlcclxuICByZXBlYXRFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgaWYgKHJlcGVhdEVsbS5jaGVja2VkKSB7XHJcbiAgICAgIHJlcGVhdCA9IEluZmluaXR5XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVwZWF0ID0gMFxyXG4gICAgfVxyXG4gICAgY3VycmVudFJlcGVhdCA9IHJlcGVhdFxyXG4gICAgX0RpYWxvZy5jaGFuZ2VSZXBlYXRTdGF0ZUNhbGxCYWNrICYmIF9EaWFsb2cuY2hhbmdlUmVwZWF0U3RhdGVDYWxsQmFjayhyZXBlYXRFbG0uY2hlY2tlZClcclxuICB9KVxyXG5cclxuICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3BvaW50cycsIHtcclxuICAvLyAgIGdldCgpIHtcclxuICAvLyAgICAgcmV0dXJuIGVfYWxsQXJlYS52YWx1ZVxyXG4gIC8vICAgfSxcclxuICAvLyAgIHNldCh2YWx1ZSkge1xyXG4gIC8vICAgICBlX2FsbEFyZWEudmFsdWUgPSB2YWx1ZVxyXG4gIC8vICAgfVxyXG4gIC8vIH0pXHJcblxyXG4gIGZ1bmN0aW9uIGFkZFRyRWxtKGRhdGEpIHtcclxuICAgIGxldCB0ckxpc3QgPSB0YWJsZUJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgaWYgKHRyTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS5kaXNhYmxlZCA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgbGV0IHRyX2FjdGl2ZSA9IHRhYmxlQm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ciBhY3RpdmUnKVswXVxyXG4gICAgdHJfYWN0aXZlICYmICh0cl9hY3RpdmUuY2xhc3NOYW1lID0gJ3RyJylcclxuICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdHIuY2xhc3NOYW1lID0gJ3RyIGFjdGl2ZSdcclxuICAgIHRyLmlubmVySFRNTCA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRkXCIgc3R5bGU9XCJqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIj7op4bngrkke2kgKyAxfTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCB0aW1lXCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OS45OVwiIHN0ZXA9XCIwLjAxXCIgbmFtZT1cInRpbWVcIiB2YWx1ZT1cIiR7ZGF0YS5kdXJhdGlvbn1cIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhY3Rpb25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGxheVwiPuaSreaUvjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGVsZXRlXCI+5Yig6ZmkPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gICAgdHIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAodikgPT4ge1xyXG4gICAgICBpZiAodi50YXJnZXQucGFyZW50Tm9kZSA9PT0gdHIpIHtcclxuICAgICAgICBsZXQgdHJfYWN0aXZlID0gdGFibGVCb2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyIGFjdGl2ZScpWzBdXHJcbiAgICAgICAgdHJfYWN0aXZlICYmICh0cl9hY3RpdmUuY2xhc3NOYW1lID0gJ3RyJylcclxuICAgICAgICB0ci5jbGFzc05hbWUgPSAndHIgYWN0aXZlJ1xyXG4gICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdHJMaXN0Lmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICBpZiAodHJMaXN0W21dID09PSB0cikge1xyXG4gICAgICAgICAgICBhY3RpdmUgPSBtICsgMVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRyLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKHYpID0+IHtcclxuICAgICAgaWYgKHYudGFyZ2V0LnBhcmVudE5vZGUgPT09IHRyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0ckxpc3QubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgIGlmICh0ckxpc3RbbV0gPT09IHRyKSB7XHJcbiAgICAgICAgICAgIHZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludHNbbV0ucG9zaXRpb24ubG5nLCBwb2ludHNbbV0ucG9zaXRpb24ubGF0LCBwb2ludHNbbV0ucG9zaXRpb24uYWx0KSxcclxuICAgICAgICAgICAgICBvcmllbnRhdGlvbjogcG9pbnRzW21dLm9yaWVudGF0aW9uLFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgbGV0IGVfcGxheSA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BsYXknKVswXVxyXG4gICAgbGV0IGVfZGVsZXRlID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZGVsZXRlJylbMF1cclxuICAgIGxldCBlX3RpbWUgPSB0ci5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpXHJcbiAgICBlX3BsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdHJMaXN0Lmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgaWYgKHRyTGlzdFttXSA9PT0gZV9kZWxldGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICBmbHlUbyhzZGssIHBvaW50cywgbSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBlX2RlbGV0ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKHYpID0+IHtcclxuICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0ckxpc3QubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICBpZiAodHJMaXN0W21dID09PSBlX2RlbGV0ZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgIHBvaW50cy5zcGxpY2UobSwgMSlcclxuICAgICAgICAgIHBvaW50c1twb2ludHMubGVuZ3RoLTFdICYmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0xXS5kdXJhdGlvbiA9IDApXHJcbiAgICAgICAgICB0YWJsZUJvZHkucmVtb3ZlQ2hpbGQodHIpXHJcbiAgICAgICAgICBpZiAoYWN0aXZlID4gbSArIDEpIHtcclxuICAgICAgICAgICAgYWN0aXZlLS1cclxuICAgICAgICAgICAgdHJMaXN0W2FjdGl2ZSAtIDFdLmNsYXNzTmFtZSA9ICd0ciBhY3RpdmUnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChhY3RpdmUgPT0gbSArIDEpIHtcclxuICAgICAgICAgICAgaWYgKHRyTGlzdC5sZW5ndGggPT0gbSkge1xyXG4gICAgICAgICAgICAgIGFjdGl2ZSAtPSAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIHRyTGlzdFthY3RpdmUgLSAxXS5jbGFzc05hbWUgPSAndHIgYWN0aXZlJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBlbHNlIGlmKGFjdGl2ZSA9PSBtKSB7XHJcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRyTGlzdC5sZW5ndGgtMSwgYWN0aXZlKVxyXG4gICAgICAgICAgLy8gICBpZiAodHJMaXN0Lmxlbmd0aCA9PSBhY3RpdmUtMSkge1xyXG4gICAgICAgICAgLy8gICAgIHRyTGlzdFthY3RpdmUtMl0uY2xhc3NOYW1lID0gJ3RyIGFjdGl2ZSdcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICB0ckxpc3RbYWN0aXZlLTFdLmNsYXNzTmFtZSA9ICd0ciBhY3RpdmUnXHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIGlmICh0ckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbGFzdEVsbSA9IHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKVxyXG4gICAgICAgICAgICBsYXN0RWxtLmRpc2FibGVkID0gJ2Rpc2FibGVkJ1xyXG4gICAgICAgICAgICBsYXN0RWxtLnZhbHVlID0gMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gcG9pbnRzLnNwbGljZShpLCAxKVxyXG4gICAgICAvLyB0YWJsZUJvZHkucmVtb3ZlQ2hpbGQodHIpXHJcbiAgICAgIC8vIGlmICh0ckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgIHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS5kaXNhYmxlZCA9ICdkaXNhYmxlZCdcclxuICAgICAgLy8gfVxyXG4gICAgfSlcclxuICAgIGVfdGltZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICh2KSA9PiB7XHJcbiAgICAgIGlzVG90YWxUaW1lRWxtLmNoZWNrZWQgPSBmYWxzZVxyXG4gICAgICBkYXRhLmR1cmF0aW9uID0gTnVtYmVyKGVfdGltZS52YWx1ZSlcclxuICAgICAgaWYgKGRhdGEuZHVyYXRpb24gPCAwKSB7XHJcbiAgICAgICAgZGF0YS5kdXJhdGlvbiA9IDBcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGVfdGltZS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICBlX3RpbWUudmFsdWUgPSBOdW1iZXIoTnVtYmVyKGVfdGltZS52YWx1ZSkudG9GaXhlZCgyKSlcclxuICAgICAgaWYgKGVfdGltZS52YWx1ZSA8IDApIHtcclxuICAgICAgICBlX3RpbWUudmFsdWUgPSAwXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGFibGVCb2R5Lmluc2VydEJlZm9yZSh0ciwgdHJMaXN0W2FjdGl2ZV0pXHJcbiAgICBhY3RpdmUrK1xyXG4gICAgdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpLmRpc2FibGVkID0gJ2Rpc2FibGVkJ1xyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5jb25zdCBjbG9zZSA9ICgpID0+IHtcclxuICBpZiAoX0RpYWxvZ09iamVjdCAmJiBfRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICBfRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgIF9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBleGVjdXRlRmx5VG8gPSAoc2RrLCBwb2ludHMgPSBbXSwgaW5kZXggPSAwLCBub1N0YXJ0KSA9PiB7XHJcbiAgaWYgKGNsaWNrSGFuZGxlcikge1xyXG4gICAgY2xpY2tIYW5kbGVyLmRlc3Ryb3koKVxyXG4gIH1cclxuICBjbGlja0hhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHNkay52aWV3ZXIuY2FudmFzKVxyXG4gIGNsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgIGNlYXNlKHNkaylcclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuUklHSFRfQ0xJQ0spXHJcbiAgbGV0IHZpZXdlciA9IHNkay52aWV3ZXJcclxuICB2aWV3ZXIuY2FtZXJhLmNhbmNlbEZsaWdodCgpXHJcbiAgLy8gZnVuY3Rpb24gcGF1c2VFeGVjdXRpb24oc2Vjb25kcykge1xyXG4gIC8vICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBzZWNvbmRzICogMTAwMCkpO1xyXG4gIC8vIH1cclxuICBjbG9zZVJvdGF0ZUFyb3VuZChzZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHNkaylcclxuICB2aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludHNbaW5kZXhdLnBvc2l0aW9uLmxuZywgcG9pbnRzW2luZGV4XS5wb3NpdGlvbi5sYXQsIHBvaW50c1tpbmRleF0ucG9zaXRpb24uYWx0KSxcclxuICAgIG9yaWVudGF0aW9uOiBwb2ludHNbaW5kZXhdLm9yaWVudGF0aW9uLFxyXG4gICAgZHVyYXRpb246IG5vU3RhcnQgPyBwb2ludHNbaW5kZXggLSAxXS5kdXJhdGlvbiA6IDAuNSxcclxuICAgIG1heGltdW1IZWlnaHQ6IHBvaW50c1tpbmRleF0ucG9zaXRpb24uYWx0LFxyXG4gICAgY29tcGxldGU6IGFzeW5jICgpID0+IHtcclxuICAgICAgaWYgKCFub1N0YXJ0KSB7XHJcbiAgICAgICAgLy8gYXdhaXQgcGF1c2VFeGVjdXRpb24oMilcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrXHJcbiAgICAgIGlmIChpbmRleCA8PSBwb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGV4ZWN1dGVGbHlUbyhzZGssIHBvaW50cywgaW5kZXgsIHRydWUpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY3VycmVudFJlcGVhdCAmJiBwb2ludHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGN1cnJlbnRSZXBlYXQtLVxyXG4gICAgICAgIGV4ZWN1dGVGbHlUbyhzZGssIHBvaW50cywgMClcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoY2xpY2tIYW5kbGVyKSB7XHJcbiAgICAgICAgICBjbGlja0hhbmRsZXIuZGVzdHJveSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIGVhc2luZ0Z1bmN0aW9uOiBub1N0YXJ0ID8gQ2VzaXVtLkVhc2luZ0Z1bmN0aW9uLkxJTkVBUl9OT05FIDogQ2VzaXVtLkVhc2luZ0Z1bmN0aW9uLkVYUE9ORU5USUFMX09VVFxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGZseVRvID0gKHNkaywgcG9pbnRzID0gW10sIGluZGV4ID0gMCwgbm9TdGFydCkgPT4ge1xyXG4gIGN1cnJlbnRSZXBlYXQgPSByZXBlYXRcclxuICBleGVjdXRlRmx5VG8oc2RrLCBwb2ludHMsIGluZGV4LCBub1N0YXJ0KVxyXG59XHJcblxyXG4vKirorr7nva7lvqrnjq/mrKHmlbAgKEluZmluaXR5OiDml6DpmZDlvqrnjq8pKi9cclxuY29uc3Qgc2V0UmVwZWF0ID0gKHYpID0+IHtcclxuICBpZiAocmVwZWF0ICE9IE51bWJlcih2KSkge1xyXG4gICAgcmVwZWF0ID0gTnVtYmVyKHYpXHJcbiAgICBjdXJyZW50UmVwZWF0ID0gcmVwZWF0XHJcbiAgICBpZiAoX0RpYWxvZ09iamVjdCAmJiBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICBsZXQgcmVwZWF0RWxtID0gX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdyZXBlYXQnXVwiKVxyXG4gICAgICBpZiAodiA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICByZXBlYXRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXBlYXRFbG0uY2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vKiog5YGc5q2iICovXHJcbmNvbnN0IGNlYXNlID0gKHNkaykgPT4ge1xyXG4gIHNkayAmJiBzZGsudmlld2VyICYmIHNkay52aWV3ZXIuY2FtZXJhLmNhbmNlbEZsaWdodCgpXHJcbiAgaWYgKGNsaWNrSGFuZGxlcikge1xyXG4gICAgY2xpY2tIYW5kbGVyLmRlc3Ryb3koKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgb3BlbiwgY2xvc2UsIGZseVRvLCBzZXRSZXBlYXQsIGNlYXNlIH0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0xBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBalNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNIQTtBQXBTQTtBQUFBO0FBQUE7QUFzU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFsQkE7QUFBQTtBQUFBO0FBQUE7QUFtQkE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/FlyRoam/index.js\n"); /***/ }), /***/ "./src/Global/KeyBoard/index.js": /*!**************************************!*\ !*** ./src/Global/KeyBoard/index.js ***! \**************************************/ /*! exports provided: keyboardMapRoamingInit */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keyboardMapRoamingInit\", function() { return keyboardMapRoamingInit; });\n/*\r\n * @Description: 使用键盘控制地图漫游\r\n * @Version: 1.0\r\n * @Author: Julian\r\n * @Date: 2022-04-07 16:04:07\r\n * @LastEditors: Julian\r\n * @LastEditTime: 2022-04-07 18:40:40\r\n */\n\n/**\r\n * @description: 使用键盘控制地图漫游初始化\r\n * @param {*} _viewer\r\n * @return {*}\r\n */\nfunction keyboardMapRoamingInit(_viewer) {\n // 添加键盘监听事件\n document.addEventListener('keydown', keyDown.bind(_viewer), false);\n document.addEventListener('keyup', keyUp.bind(_viewer), false);\n\n // 为每一帧添加监听事件\n _viewer && _viewer.clock.onTick.addEventListener(function () {\n keyboardMapRoamingRender(_viewer);\n });\n}\n\n// 定义事件组\nvar flags = {\n // 相机位置\n moveForward: false,\n moveBackward: false,\n moveLeft: false,\n moveRight: false,\n moveUp: false,\n moveDown: false,\n // 相机姿态\n lookUp: false,\n lookDown: false,\n lookLeft: false,\n lookRight: false,\n twistLeft: false,\n twistRight: false,\n // 缩放\n zoomIn: false,\n zoomOut: false\n};\n\n// 相机位置:W:向前;S:向后;D:向右;A:向左;Q:升高;E:降低;\n// 相机姿态:↑:抬头;↓:低头;←:左转;→:右转;0:顺时针;.:逆时针\n// 缩放:+:放大,-:缩小;\n\n/**\r\n * @description: 根据键盘输入字符返回事件信息\r\n * @param {*} key\r\n * @return {*}\r\n */\nfunction getFlagFromKeyboard(key) {\n switch (key) {\n // 按字符的Unicode编码\n // 相机位置\n case 87:\n return 'moveForward';\n case 83:\n return 'moveBackward';\n case 68:\n return 'moveRight';\n case 65:\n return 'moveLeft';\n case 81:\n return 'moveUp';\n case 69:\n return 'moveDown';\n // 相机姿态\n case 38:\n return 'lookUp';\n case 40:\n return 'lookDown';\n case 37:\n return 'lookLeft';\n case 39:\n return 'lookRight';\n case 96:\n return 'twistLeft';\n case 110:\n return 'twistRight';\n // 缩放\n case 107:\n return 'zoomIn';\n case 109:\n return 'zoomOut';\n default:\n return undefined;\n }\n}\n\n/**\r\n * @description: 键盘按下\r\n * @param {*} event\r\n * @return {*}\r\n */\nfunction keyDown(event) {\n var _viewer = this;\n\n // 判断是否有输入框聚焦\n function isInputFocused() {\n var activeElement = document.activeElement;\n return activeElement.tagName.toLowerCase() === 'input' && activeElement.type !== 'checkbox' || activeElement.tagName.toLowerCase() === 'textarea' || activeElement.getAttribute('role') === 'textarea';\n }\n if (isInputFocused()) {\n // console.log('页面上有输入框已经获取焦点');\n } else if (_viewer.trackedEntity) {\n // console.log('视角跟随中');\n } else if (_viewer._firstPersonView) {\n // console.log('第一人称视角中');\n } else if (_viewer._disableKeyboardEvent) {\n // console.log('禁用键盘事件');\n } else if (event.ctrlKey && event.altKey) {\n if (event.key === 'v' || event.key === 'V') {\n var camera = _viewer.camera;\n _viewer._CAMERA_SHORTCUT_VIEW = {\n orientation: {\n heading: camera.heading,\n pitch: camera.pitch,\n roll: camera.roll\n },\n position: {\n x: camera.position.x,\n y: camera.position.y,\n z: camera.position.z\n }\n };\n localStorage.setItem('CAMERA_SHORTCUT_VIEW', JSON.stringify(_viewer._CAMERA_SHORTCUT_VIEW));\n }\n if (event.key === 'f' || event.key === 'F') {\n var CAMERA_SHORTCUT_VIEW = localStorage.getItem('CAMERA_SHORTCUT_VIEW');\n _viewer._CAMERA_SHORTCUT_VIEW = JSON.parse(CAMERA_SHORTCUT_VIEW);\n if (_viewer._CAMERA_SHORTCUT_VIEW && _viewer._CAMERA_SHORTCUT_VIEW.position && _viewer._CAMERA_SHORTCUT_VIEW.orientation) {\n _viewer.camera.flyTo({\n destination: _viewer._CAMERA_SHORTCUT_VIEW.position,\n orientation: _viewer._CAMERA_SHORTCUT_VIEW.orientation\n });\n }\n }\n } else {\n // console.log('页面上没有输入框获取焦点');\n var flagName = getFlagFromKeyboard(event.keyCode);\n if (typeof flagName !== 'undefined') {\n flags[flagName] = true;\n }\n }\n}\n\n/**\r\n * @description: 键盘弹起\r\n * @param {*} event\r\n * @return {*}\r\n */\nfunction keyUp(event) {\n var flagName = getFlagFromKeyboard(event.keyCode);\n if (typeof flagName !== 'undefined') {\n flags[flagName] = false;\n }\n}\n\n/**\r\n * @description: 根据事件调整相机\r\n * @param {*} _viewer\r\n * @return {*}\r\n */\nfunction keyboardMapRoamingRender(_viewer) {\n if (!_viewer || !_viewer.scene || !_viewer.scene.screenSpaceCameraController.enableTilt) {\n return;\n }\n var camera = _viewer.camera;\n var ellipsoid = _viewer.scene.globe.ellipsoid;\n var cameraHeight = ellipsoid.cartesianToCartographic(camera.position).height;\n var cameraHeight2 = camera.positionCartographic.height;\n\n // 根据相机高度设置移动距离,比默认距离移动效果更好\n var moveRate = cameraHeight / 20.0;\n var rotationRate = moveRate / 500000 / Cesium.Math.toDegrees(camera.pitch);\n var moveRate2 = cameraHeight2 / 100.0;\n if (flags.moveForward) {\n if (_viewer.scene.mode == 2) {\n camera.moveUp(moveRate2);\n } else {\n camera.rotate(camera.right, -rotationRate);\n }\n }\n if (flags.moveBackward) {\n if (_viewer.scene.mode == 2) {\n camera.moveDown(moveRate2);\n } else {\n camera.rotate(camera.right, rotationRate);\n }\n }\n if (flags.moveLeft) {\n if (_viewer.scene.mode == 2) {\n camera.moveLeft(moveRate2);\n } else {\n camera.rotate(camera.up, -rotationRate);\n }\n }\n if (flags.moveRight) {\n if (_viewer.scene.mode == 2) {\n camera.moveRight(moveRate2);\n } else {\n camera.rotate(camera.up, rotationRate);\n }\n }\n if (flags.moveUp) {\n camera.moveUp(moveRate);\n }\n if (flags.moveDown) {\n camera.moveDown(moveRate);\n }\n if (flags.lookUp) {\n camera.lookUp();\n }\n if (flags.lookDown) {\n camera.lookDown();\n }\n if (flags.lookLeft) {\n camera.lookLeft();\n }\n if (flags.lookRight) {\n camera.lookRight();\n }\n if (flags.twistLeft) {\n camera.twistLeft();\n }\n if (flags.twistRight) {\n camera.twistRight();\n }\n // 根据相机高度设置缩放参数\n if (flags.zoomIn) {\n var height = cameraHeight / 2;\n if (height < 1) {\n height = 0;\n }\n camera.zoomIn(height);\n }\n if (flags.zoomOut) {\n var _height = cameraHeight / 2;\n if (cameraHeight + cameraHeight >= 50000000) {\n _height = 50000000 - cameraHeight;\n }\n camera.zoomOut(_height);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL0tleUJvYXJkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9LZXlCb2FyZC9pbmRleC5qcz82MGQwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBEZXNjcmlwdGlvbjog5L2/55So6ZSu55uY5o6n5Yi25Zyw5Zu+5ryr5ri4XHJcbiAqIEBWZXJzaW9uOiAxLjBcclxuICogQEF1dGhvcjogSnVsaWFuXHJcbiAqIEBEYXRlOiAyMDIyLTA0LTA3IDE2OjA0OjA3XHJcbiAqIEBMYXN0RWRpdG9yczogSnVsaWFuXHJcbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMDQtMDcgMTg6NDA6NDBcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbjog5L2/55So6ZSu55uY5o6n5Yi25Zyw5Zu+5ryr5ri45Yid5aeL5YyWXHJcbiAqIEBwYXJhbSB7Kn0gX3ZpZXdlclxyXG4gKiBAcmV0dXJuIHsqfVxyXG4gKi9cclxuZnVuY3Rpb24ga2V5Ym9hcmRNYXBSb2FtaW5nSW5pdChfdmlld2VyKSB7XHJcbiAgLy8g5re75Yqg6ZSu55uY55uR5ZCs5LqL5Lu2XHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleURvd24uYmluZChfdmlld2VyKSwgZmFsc2UpO1xyXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5VXAuYmluZChfdmlld2VyKSwgZmFsc2UpO1xyXG5cclxuICAvLyDkuLrmr4/kuIDluKfmt7vliqDnm5HlkKzkuovku7ZcclxuICBfdmlld2VyICYmIF92aWV3ZXIuY2xvY2sub25UaWNrLmFkZEV2ZW50TGlzdGVuZXIoZnVuY3Rpb24gKCkge1xyXG4gICAga2V5Ym9hcmRNYXBSb2FtaW5nUmVuZGVyKF92aWV3ZXIpO1xyXG4gIH0pO1xyXG59XHJcblxyXG4vLyDlrprkuYnkuovku7bnu4RcclxubGV0IGZsYWdzID0ge1xyXG4gIC8vIOebuOacuuS9jee9rlxyXG4gIG1vdmVGb3J3YXJkOiBmYWxzZSxcclxuICBtb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gIG1vdmVMZWZ0OiBmYWxzZSxcclxuICBtb3ZlUmlnaHQ6IGZhbHNlLFxyXG4gIG1vdmVVcDogZmFsc2UsXHJcbiAgbW92ZURvd246IGZhbHNlLFxyXG4gIC8vIOebuOacuuWnv+aAgVxyXG4gIGxvb2tVcDogZmFsc2UsXHJcbiAgbG9va0Rvd246IGZhbHNlLFxyXG4gIGxvb2tMZWZ0OiBmYWxzZSxcclxuICBsb29rUmlnaHQ6IGZhbHNlLFxyXG4gIHR3aXN0TGVmdDogZmFsc2UsXHJcbiAgdHdpc3RSaWdodDogZmFsc2UsXHJcbiAgLy8g57yp5pS+XHJcbiAgem9vbUluOiBmYWxzZSxcclxuICB6b29tT3V0OiBmYWxzZVxyXG59XHJcblxyXG5cclxuLy8g55u45py65L2N572u77yaV++8muWQkeWJje+8m1PvvJrlkJHlkI7vvJtE77ya5ZCR5Y+z77ybQe+8muWQkeW3pu+8m1HvvJrljYfpq5jvvJtF77ya6ZmN5L2O77ybXHJcbi8vIOebuOacuuWnv+aAge+8muKGke+8muaKrOWktO+8m+KGk++8muS9juWktO+8m+KGkO+8muW3pui9rO+8m+KGku+8muWPs+i9rO+8mzDvvJrpobrml7bpkojvvJsu77ya6YCG5pe26ZKIXHJcbi8vIOe8qeaUvu+8mivvvJrmlL7lpKfvvIwt77ya57yp5bCP77ybXHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uOiDmoLnmja7plK7nm5jovpPlhaXlrZfnrKbov5Tlm57kuovku7bkv6Hmga9cclxuICogQHBhcmFtIHsqfSBrZXlcclxuICogQHJldHVybiB7Kn1cclxuICovXHJcbmZ1bmN0aW9uIGdldEZsYWdGcm9tS2V5Ym9hcmQoa2V5KSB7XHJcbiAgc3dpdGNoIChrZXkpIHtcclxuICAgIC8vIOaMieWtl+espueahFVuaWNvZGXnvJbnoIFcclxuICAgIC8vIOebuOacuuS9jee9rlxyXG4gICAgY2FzZSA4NzpcclxuICAgICAgcmV0dXJuICdtb3ZlRm9yd2FyZCc7XHJcbiAgICBjYXNlIDgzOlxyXG4gICAgICByZXR1cm4gJ21vdmVCYWNrd2FyZCc7XHJcbiAgICBjYXNlIDY4OlxyXG4gICAgICByZXR1cm4gJ21vdmVSaWdodCc7XHJcbiAgICBjYXNlIDY1OlxyXG4gICAgICByZXR1cm4gJ21vdmVMZWZ0JztcclxuICAgIGNhc2UgODE6XHJcbiAgICAgIHJldHVybiAnbW92ZVVwJztcclxuICAgIGNhc2UgNjk6XHJcbiAgICAgIHJldHVybiAnbW92ZURvd24nO1xyXG4gICAgLy8g55u45py65ae/5oCBXHJcbiAgICBjYXNlIDM4OlxyXG4gICAgICByZXR1cm4gJ2xvb2tVcCc7XHJcbiAgICBjYXNlIDQwOlxyXG4gICAgICByZXR1cm4gJ2xvb2tEb3duJztcclxuICAgIGNhc2UgMzc6XHJcbiAgICAgIHJldHVybiAnbG9va0xlZnQnO1xyXG4gICAgY2FzZSAzOTpcclxuICAgICAgcmV0dXJuICdsb29rUmlnaHQnO1xyXG4gICAgY2FzZSA5NjpcclxuICAgICAgcmV0dXJuICd0d2lzdExlZnQnO1xyXG4gICAgY2FzZSAxMTA6XHJcbiAgICAgIHJldHVybiAndHdpc3RSaWdodCc7XHJcbiAgICAvLyDnvKnmlL5cclxuICAgIGNhc2UgMTA3OlxyXG4gICAgICByZXR1cm4gJ3pvb21Jbic7XHJcbiAgICBjYXNlIDEwOTpcclxuICAgICAgcmV0dXJuICd6b29tT3V0JztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uOiDplK7nm5jmjInkuItcclxuICogQHBhcmFtIHsqfSBldmVudFxyXG4gKiBAcmV0dXJuIHsqfVxyXG4gKi9cclxuZnVuY3Rpb24ga2V5RG93bihldmVudCkge1xyXG4gIGxldCBfdmlld2VyID0gdGhpc1xyXG5cclxuICAvLyDliKTmlq3mmK/lkKbmnInovpPlhaXmoYbogZrnhKZcclxuICBmdW5jdGlvbiBpc0lucHV0Rm9jdXNlZCgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xyXG4gICAgcmV0dXJuIChhY3RpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiBhY3RpdmVFbGVtZW50LnR5cGUgIT09ICdjaGVja2JveCcpIHx8XHJcbiAgICAgIGFjdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnIHx8XHJcbiAgICAgIGFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0ZXh0YXJlYSc7XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbnB1dEZvY3VzZWQoKSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ+mhtemdouS4iuaciei+k+WFpeahhuW3sue7j+iOt+WPlueEpueCuScpO1xyXG4gIH0gZWxzZSBpZiAoX3ZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygn6KeG6KeS6Lef6ZqP5LitJyk7XHJcbiAgfSBlbHNlIGlmIChfdmlld2VyLl9maXJzdFBlcnNvblZpZXcpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCfnrKzkuIDkurrnp7Dop4bop5LkuK0nKTtcclxuICB9IGVsc2UgaWYgKF92aWV3ZXIuX2Rpc2FibGVLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygn56aB55So6ZSu55uY5LqL5Lu2Jyk7XHJcbiAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3YnIHx8IGV2ZW50LmtleSA9PT0gJ1YnKSB7XHJcbiAgICAgIGxldCBjYW1lcmEgPSBfdmlld2VyLmNhbWVyYVxyXG4gICAgICBfdmlld2VyLl9DQU1FUkFfU0hPUlRDVVRfVklFVyA9IHtcclxuICAgICAgICBvcmllbnRhdGlvbjogeyBoZWFkaW5nOiBjYW1lcmEuaGVhZGluZywgcGl0Y2g6IGNhbWVyYS5waXRjaCwgcm9sbDogY2FtZXJhLnJvbGwgfSxcclxuICAgICAgICBwb3NpdGlvbjogeyB4OiBjYW1lcmEucG9zaXRpb24ueCwgeTogY2FtZXJhLnBvc2l0aW9uLnksIHo6IGNhbWVyYS5wb3NpdGlvbi56IH1cclxuICAgICAgfVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcnLCBKU09OLnN0cmluZ2lmeShfdmlld2VyLl9DQU1FUkFfU0hPUlRDVVRfVklFVykpXHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZicgfHwgZXZlbnQua2V5ID09PSAnRicpIHtcclxuICAgICAgbGV0IENBTUVSQV9TSE9SVENVVF9WSUVXID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0NBTUVSQV9TSE9SVENVVF9WSUVXJylcclxuICAgICAgX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcgPSBKU09OLnBhcnNlKENBTUVSQV9TSE9SVENVVF9WSUVXKVxyXG4gICAgICBpZiAoX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcgJiYgX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcucG9zaXRpb24gJiYgX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcub3JpZW50YXRpb24pIHtcclxuICAgICAgICBfdmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcucG9zaXRpb24sXHJcbiAgICAgICAgICBvcmllbnRhdGlvbjogX3ZpZXdlci5fQ0FNRVJBX1NIT1JUQ1VUX1ZJRVcub3JpZW50YXRpb25cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCfpobXpnaLkuIrmsqHmnInovpPlhaXmoYbojrflj5bnhKbngrknKTtcclxuICAgIGxldCBmbGFnTmFtZSA9IGdldEZsYWdGcm9tS2V5Ym9hcmQoZXZlbnQua2V5Q29kZSk7XHJcbiAgICBpZiAodHlwZW9mIGZsYWdOYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBmbGFnc1tmbGFnTmFtZV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbjog6ZSu55uY5by56LW3XHJcbiAqIEBwYXJhbSB7Kn0gZXZlbnRcclxuICogQHJldHVybiB7Kn1cclxuICovXHJcbmZ1bmN0aW9uIGtleVVwKGV2ZW50KSB7XHJcbiAgbGV0IGZsYWdOYW1lID0gZ2V0RmxhZ0Zyb21LZXlib2FyZChldmVudC5rZXlDb2RlKTtcclxuICBpZiAodHlwZW9mIGZsYWdOYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZmxhZ3NbZmxhZ05hbWVdID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbjog5qC55o2u5LqL5Lu26LCD5pW055u45py6XHJcbiAqIEBwYXJhbSB7Kn0gX3ZpZXdlclxyXG4gKiBAcmV0dXJuIHsqfVxyXG4gKi9cclxuZnVuY3Rpb24ga2V5Ym9hcmRNYXBSb2FtaW5nUmVuZGVyKF92aWV3ZXIpIHtcclxuICBpZighX3ZpZXdlciB8fCAhX3ZpZXdlci5zY2VuZSB8fCAhX3ZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlVGlsdCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCBjYW1lcmEgPSBfdmlld2VyLmNhbWVyYTtcclxuICBsZXQgZWxsaXBzb2lkID0gX3ZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQ7XHJcbiAgbGV0IGNhbWVyYUhlaWdodCA9IGVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjYW1lcmEucG9zaXRpb24pLmhlaWdodDtcclxuICBsZXQgY2FtZXJhSGVpZ2h0MiA9IGNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYy5oZWlnaHQ7XHJcblxyXG5cclxuICAvLyDmoLnmja7nm7jmnLrpq5jluqborr7nva7np7vliqjot53nprvvvIzmr5Tpu5jorqTot53nprvnp7vliqjmlYjmnpzmm7Tlpb1cclxuICBsZXQgbW92ZVJhdGUgPSBjYW1lcmFIZWlnaHQgLyAyMC4wO1xyXG4gIGxldCByb3RhdGlvblJhdGUgPSBtb3ZlUmF0ZSAvIDUwMDAwMCAvIENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYW1lcmEucGl0Y2gpO1xyXG4gIGxldCBtb3ZlUmF0ZTIgPSBjYW1lcmFIZWlnaHQyIC8gMTAwLjA7XHJcblxyXG4gIGlmIChmbGFncy5tb3ZlRm9yd2FyZCkge1xyXG4gICAgaWYoX3ZpZXdlci5zY2VuZS5tb2RlID09IDIpIHtcclxuICAgICAgY2FtZXJhLm1vdmVVcChtb3ZlUmF0ZTIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNhbWVyYS5yb3RhdGUoY2FtZXJhLnJpZ2h0LCAtcm90YXRpb25SYXRlKTtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKGZsYWdzLm1vdmVCYWNrd2FyZCkge1xyXG4gICAgaWYoX3ZpZXdlci5zY2VuZS5tb2RlID09IDIpIHtcclxuICAgICAgY2FtZXJhLm1vdmVEb3duKG1vdmVSYXRlMik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2FtZXJhLnJvdGF0ZShjYW1lcmEucmlnaHQsIHJvdGF0aW9uUmF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChmbGFncy5tb3ZlTGVmdCkge1xyXG4gICAgaWYoX3ZpZXdlci5zY2VuZS5tb2RlID09IDIpIHtcclxuICAgICAgY2FtZXJhLm1vdmVMZWZ0KG1vdmVSYXRlMik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2FtZXJhLnJvdGF0ZShjYW1lcmEudXAsIC1yb3RhdGlvblJhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoZmxhZ3MubW92ZVJpZ2h0KSB7XHJcbiAgICBpZihfdmlld2VyLnNjZW5lLm1vZGUgPT0gMikge1xyXG4gICAgICBjYW1lcmEubW92ZVJpZ2h0KG1vdmVSYXRlMik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2FtZXJhLnJvdGF0ZShjYW1lcmEudXAsIHJvdGF0aW9uUmF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChmbGFncy5tb3ZlVXApIHtcclxuICAgIGNhbWVyYS5tb3ZlVXAobW92ZVJhdGUpO1xyXG4gIH1cclxuICBpZiAoZmxhZ3MubW92ZURvd24pIHtcclxuICAgIGNhbWVyYS5tb3ZlRG93bihtb3ZlUmF0ZSk7XHJcbiAgfVxyXG4gIGlmIChmbGFncy5sb29rVXApIHtcclxuICAgIGNhbWVyYS5sb29rVXAoKTtcclxuICB9XHJcbiAgaWYgKGZsYWdzLmxvb2tEb3duKSB7XHJcbiAgICBjYW1lcmEubG9va0Rvd24oKTtcclxuICB9XHJcbiAgaWYgKGZsYWdzLmxvb2tMZWZ0KSB7XHJcbiAgICBjYW1lcmEubG9va0xlZnQoKTtcclxuICB9XHJcbiAgaWYgKGZsYWdzLmxvb2tSaWdodCkge1xyXG4gICAgY2FtZXJhLmxvb2tSaWdodCgpO1xyXG4gIH1cclxuICBpZiAoZmxhZ3MudHdpc3RMZWZ0KSB7XHJcbiAgICBjYW1lcmEudHdpc3RMZWZ0KCk7XHJcbiAgfVxyXG4gIGlmIChmbGFncy50d2lzdFJpZ2h0KSB7XHJcbiAgICBjYW1lcmEudHdpc3RSaWdodCgpO1xyXG4gIH1cclxuICAvLyDmoLnmja7nm7jmnLrpq5jluqborr7nva7nvKnmlL7lj4LmlbBcclxuICBpZiAoZmxhZ3Muem9vbUluKSB7XHJcbiAgICBsZXQgaGVpZ2h0ID0gY2FtZXJhSGVpZ2h0IC8gMlxyXG4gICAgaWYgKGhlaWdodCA8IDEpIHtcclxuICAgICAgaGVpZ2h0ID0gMFxyXG4gICAgfVxyXG4gICAgY2FtZXJhLnpvb21JbihoZWlnaHQpO1xyXG4gIH1cclxuICBpZiAoZmxhZ3Muem9vbU91dCkge1xyXG4gICAgbGV0IGhlaWdodCA9IGNhbWVyYUhlaWdodCAvIDJcclxuICAgIGlmICgoY2FtZXJhSGVpZ2h0ICsgY2FtZXJhSGVpZ2h0KSA+PSA1MDAwMDAwMCkge1xyXG4gICAgICBoZWlnaHQgPSA1MDAwMDAwMCAtIGNhbWVyYUhlaWdodFxyXG4gICAgfVxyXG4gICAgY2FtZXJhLnpvb21PdXQoaGVpZ2h0KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IGtleWJvYXJkTWFwUm9hbWluZ0luaXQgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/KeyBoard/index.js\n"); /***/ }), /***/ "./src/Global/MapPrint/dataSource.js": /*!*******************************************!*\ !*** ./src/Global/MapPrint/dataSource.js ***! \*******************************************/ /*! exports provided: getTemplateData */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTemplateData\", function() { return getTemplateData; });\nfunction getTemplateData(tools) {\n return [{\n \"name\": \"模板一\",\n \"value\": \"模板一\",\n \"id\": \"1\",\n margin: 0.03,\n title: {\n text: '标题一',\n height: 0.05,\n bgColor: '#5d5d5d',\n color: '#ffffff',\n show: true\n },\n border: {\n show: false,\n url: '/custom/img/map-border1.svg',\n width: 0.01,\n color: ''\n },\n plottingScale: {\n cell: 2,\n color: '#ffffff',\n show: true,\n isSelected: false,\n x: 0.87,\n y: 0.97\n },\n data: [{\n text: '',\n x: 0.02,\n y: 0.93,\n isSelected: false,\n show: true,\n color: '#ffffff',\n height: 0.03\n }, {\n text: '',\n x: 0.02,\n y: 0.97,\n isSelected: false,\n show: true,\n color: '#ffffff',\n height: 0.03\n }, {\n x: 0.02,\n y: 0.1,\n show: false,\n isSelected: false,\n url: '/custom/img/icon-compass1.svg',\n width: 0.1,\n height: 0.1\n }]\n }, {\n \"name\": \"模板二\",\n \"value\": \"模板二\",\n \"id\": \"2\",\n margin: 0.03,\n border: {\n show: true,\n url: '/custom/img/map-border2.svg',\n width: 0.01\n },\n title: {\n text: '标题二',\n height: 0.05,\n bgColor: '#5d5d5d',\n color: '#ffffff',\n show: true\n },\n plottingScale: {\n cell: 2,\n color: '#ffffff',\n show: true,\n isSelected: false,\n x: 0.02,\n y: 0.97\n },\n data: [{\n text: '',\n x: 0.88,\n y: 0.93,\n isSelected: false,\n show: true,\n color: '#ffffff',\n height: 0.03\n }, {\n text: '',\n x: 0.87,\n y: 0.97,\n isSelected: false,\n show: true,\n color: '#ffffff',\n height: 0.03\n }, {\n x: 0.91,\n y: 0.1,\n show: true,\n isSelected: false,\n url: '/custom/img/icon-compass4.svg',\n width: 0.1,\n height: 0.1\n }]\n }];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL01hcFByaW50L2RhdGFTb3VyY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL01hcFByaW50L2RhdGFTb3VyY2UuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBnZXRUZW1wbGF0ZURhdGEodG9vbHMpIHtcclxuICByZXR1cm4gW1xyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCLmqKHmnb/kuIBcIixcclxuICAgICAgXCJ2YWx1ZVwiOiBcIuaooeadv+S4gFwiLFxyXG4gICAgICBcImlkXCI6IFwiMVwiLFxyXG4gICAgICBtYXJnaW46IDAuMDMsXHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdGV4dDogJ+agh+mimOS4gCcsXHJcbiAgICAgICAgaGVpZ2h0OiAwLjA1LFxyXG4gICAgICAgIGJnQ29sb3I6ICcjNWQ1ZDVkJyxcclxuICAgICAgICBjb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvcmRlcjoge1xyXG4gICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgIHVybDogJy9jdXN0b20vaW1nL21hcC1ib3JkZXIxLnN2ZycsXHJcbiAgICAgICAgd2lkdGg6IDAuMDEsXHJcbiAgICAgICAgY29sb3I6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHBsb3R0aW5nU2NhbGU6IHtcclxuICAgICAgICBjZWxsOiAyLFxyXG4gICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICB4OiAwLjg3LFxyXG4gICAgICAgIHk6IDAuOTcsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGE6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZXh0OiAnJyxcclxuICAgICAgICAgIHg6IDAuMDIsXHJcbiAgICAgICAgICB5OiAwLjkzLFxyXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGhlaWdodDogMC4wM1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogJycsXHJcbiAgICAgICAgICB4OiAwLjAyLFxyXG4gICAgICAgICAgeTogMC45NyxcclxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICBoZWlnaHQ6IDAuMDNcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHg6IDAuMDIsXHJcbiAgICAgICAgICB5OiAwLjEsXHJcbiAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdXJsOiAnL2N1c3RvbS9pbWcvaWNvbi1jb21wYXNzMS5zdmcnLFxyXG4gICAgICAgICAgd2lkdGg6IDAuMSxcclxuICAgICAgICAgIGhlaWdodDogMC4xXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCLmqKHmnb/kuoxcIixcclxuICAgICAgXCJ2YWx1ZVwiOiBcIuaooeadv+S6jFwiLFxyXG4gICAgICBcImlkXCI6IFwiMlwiLFxyXG4gICAgICBtYXJnaW46IDAuMDMsXHJcbiAgICAgIGJvcmRlcjoge1xyXG4gICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgdXJsOiAnL2N1c3RvbS9pbWcvbWFwLWJvcmRlcjIuc3ZnJyxcclxuICAgICAgICB3aWR0aDogMC4wMSxcclxuICAgICAgfSxcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiAn5qCH6aKY5LqMJyxcclxuICAgICAgICBoZWlnaHQ6IDAuMDUsXHJcbiAgICAgICAgYmdDb2xvcjogJyM1ZDVkNWQnLFxyXG4gICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgcGxvdHRpbmdTY2FsZToge1xyXG4gICAgICAgIGNlbGw6IDIsXHJcbiAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHg6IDAuMDIsXHJcbiAgICAgICAgeTogMC45NyxcclxuICAgICAgfSxcclxuICAgICAgZGF0YTogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRleHQ6ICcnLFxyXG4gICAgICAgICAgeDogMC44OCxcclxuICAgICAgICAgIHk6IDAuOTMsXHJcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICBjb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAwLjAzXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZXh0OiAnJyxcclxuICAgICAgICAgIHg6IDAuODcsXHJcbiAgICAgICAgICB5OiAwLjk3LFxyXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGhlaWdodDogMC4wM1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDogMC45MSxcclxuICAgICAgICAgIHk6IDAuMSxcclxuICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHVybDogJy9jdXN0b20vaW1nL2ljb24tY29tcGFzczQuc3ZnJyxcclxuICAgICAgICAgIHdpZHRoOiAwLjEsXHJcbiAgICAgICAgICBoZWlnaHQ6IDAuMVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIF1cclxufVxyXG5cclxuZXhwb3J0IHsgZ2V0VGVtcGxhdGVEYXRhIH07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/MapPrint/dataSource.js\n"); /***/ }), /***/ "./src/Global/MapPrint/index.js": /*!**************************************!*\ !*** ./src/Global/MapPrint/index.js ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Obj/Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Obj/Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _dataSource_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dataSource.js */ \"./src/Global/MapPrint/dataSource.js\");\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\n\n\nvar tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\nfunction MapPrint(_x, _x2, _x3, _x4) {\n return _MapPrint.apply(this, arguments);\n}\nfunction _MapPrint() {\n _MapPrint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee2(sdk, thumbnailImg, rectangle, originalImg) {\n var exporting, templateData, _DialogObject, template, unitDistance, isLoad, borderImage, margin, svgText, title, border, data, plottingScale, compassList, contentElm, leftElm, rightElm, titleInputElm, titleCheckboxElm, unitInputElm, unitCheckboxElm, compassCheckboxElm, compassRadiosElm, plottingScaleCheckboxElm, mapBorderCheckboxElm, canvas, ctx, imgElm, _loop, i, borderColorPicker, jeDateObject, printDateCheckboxElm, mapBorderDataLegpElm, mapBorderObject, iActiveElm, closeBtn, exportBtn, initData, changeTemplate, changeMapBorder, changeMapBorderColor, isDragging, triggerRange, selectedElement, isDraggingElement, isResizingElement, resizeCorner, startX, startY, startY2, startX2, elementOffsetX, elementOffsetY, elementWidth, elementHeight, currentFontSize, getCanvasMouseY, getCanvasMouseX, getCorners, updateCanvas, drawBorder, drawSelectionBorder, getPlottingScale, getDateTimeString, exportMap;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _callee2$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n exportMap = function _exportMap() {\n var unitDistance2;\n var canvas2 = document.createElement('canvas');\n var ctx2 = canvas2.getContext('2d');\n var imgElm2 = new Image();\n imgElm2.src = originalImg;\n imgElm2.onload = function () {\n if (isLoad) {\n return;\n }\n var title2 = _objectSpread({}, title);\n var data2 = JSON.parse(JSON.stringify(data));\n var plottingScale2 = _objectSpread({}, plottingScale);\n var border2 = _objectSpread({}, border);\n border2.width = border.width / imgElm.width * imgElm2.width;\n var margin2 = margin / imgElm.width * imgElm2.width;\n var allmargin = margin2;\n if (border2.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border2.width;\n }\n canvas2.width = imgElm2.width + allmargin * 2;\n canvas2.height = imgElm2.height + allmargin * 2;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n ctx2.rect(0, 0, canvas2.width, canvas2.height);\n ctx2.fillStyle = \"#ffffff\";\n ctx2.fill();\n ctx2.drawImage(imgElm2, allmargin, allmargin, imgElm2.width, imgElm2.height);\n // 标题内容\n if (title2.show) {\n var text = title2.text;\n var fontSize = Math.max(5, title2.height * imgElm2.height * 0.5);\n ctx2.font = \"\".concat(fontSize, \"px serif\");\n ctx2.fillStyle = title2.bgColor || '#5d5d5d';\n ctx2.fillRect(allmargin, allmargin, canvas2.width - allmargin * 2, title2.height * imgElm2.height);\n ctx2.fillStyle = title2.color || 'white';\n ctx2.textAlign = 'center';\n ctx2.textBaseline = 'middle';\n ctx2.fillText(text, canvas2.width / 2, title2.height * imgElm2.height / 2 + allmargin);\n }\n\n // 其他内容\n var _loop3 = function _loop3(_i15) {\n if (data2[_i15].show) {\n if ('text' in data2[_i15]) {\n ctx2.font = \"\".concat(imgElm2.height * data2[_i15].height, \"px serif\");\n ctx2.fillStyle = data2[_i15].color || 'white';\n ctx2.textAlign = 'left';\n ctx2.textBaseline = 'bottom';\n data2[_i15].width = ctx2.measureText(data2[_i15].text).width / imgElm2.height;\n ctx2.fillText(data2[_i15].text, imgElm2.width * data2[_i15].x + allmargin, imgElm2.height * data2[_i15].y + allmargin);\n } else if ('url' in data2[_i15]) {\n if (data[_i15].svg && data[_i15].svg.complete) {\n ctx2.drawImage(data[_i15].svg, imgElm2.width * data2[_i15].x + allmargin, imgElm2.height * data2[_i15].y + allmargin, imgElm2.height * data2[_i15].width, imgElm2.height * data2[_i15].height);\n } else {\n var svg = new Image();\n svg.src = tools.getSourceRootPath() + data2[_i15].url;\n svg.onload = function () {\n data2[_i15].svg = svg;\n ctx2.drawImage(svg, imgElm2.width * data2[_i15].x + allmargin, imgElm2.height * data2[_i15].y + allmargin, imgElm2.height * data2[_i15].width, imgElm2.height * data2[_i15].height);\n };\n }\n }\n }\n };\n for (var _i15 = 0; _i15 < data2.length; _i15++) {\n _loop3(_i15);\n }\n\n // 比例尺\n if (plottingScale2.show) {\n getPlottingScale();\n var plottingScale2X = imgElm2.width * plottingScale2.x + allmargin;\n var plottingScale2Y = imgElm2.height * plottingScale2.y + allmargin;\n var unit = 'm';\n // const fontSize = plottingScale2.width * 0.12;\n var _fontSize2 = imgElm2.width * 0.08 * 0.12;\n var spacing = imgElm2.width * 0.08 / plottingScale2.cell;\n var spacingDistance = Math.round(unitDistance2 * spacing);\n var spacingDistanceString = spacingDistance + '';\n if (spacingDistance < 10) {} else {\n spacingDistance = Number(spacingDistanceString[0]);\n for (var _i16 = 0; _i16 < spacingDistanceString.length - 1; _i16++) {\n spacingDistance = spacingDistance * 10;\n }\n spacing = spacingDistance / unitDistance2;\n }\n plottingScale2.width = spacing * plottingScale2.cell;\n plottingScale2.height = plottingScale2.width * 0.2;\n if (spacingDistance >= 1000) {\n unit = '㎞';\n spacingDistance = Math.round(spacingDistance / 1000);\n }\n var scaleY = plottingScale2Y;\n ctx2.beginPath();\n ctx2.moveTo(plottingScale2X, scaleY);\n ctx2.lineTo(plottingScale2X + plottingScale2.width, scaleY);\n ctx2.strokeStyle = plottingScale2.color;\n ctx2.lineWidth = plottingScale2.width * 0.01;\n ctx2.stroke();\n var tickX = 0;\n for (var _i17 = 0; _i17 <= plottingScale2.cell; _i17++) {\n tickX = plottingScale2X + _i17 * spacing;\n ctx2.beginPath();\n ctx2.moveTo(tickX, scaleY - plottingScale2.width * 0.1);\n ctx2.lineTo(tickX, scaleY);\n ctx2.strokeStyle = plottingScale2.color;\n ctx2.lineWidth = plottingScale2.width * 0.01;\n ctx2.stroke();\n ctx2.font = \"\".concat(_fontSize2, \"px Arial\");\n ctx2.fillStyle = plottingScale2.color;\n ctx2.textAlign = 'center';\n ctx2.textBaseline = 'bottom';\n ctx2.fillText(_i17 * spacingDistance, tickX, scaleY - plottingScale2.width * 0.1);\n }\n ctx2.font = \"\".concat(_fontSize2, \"px Arial\");\n ctx2.fillStyle = plottingScale2.color;\n ctx2.textAlign = 'left';\n ctx2.textBaseline = 'bottom';\n ctx2.fillText(unit, tickX + _fontSize2 * 1.2, scaleY - plottingScale2.width * 0.1);\n }\n\n // 边框\n if (border2.show && borderImage && borderImage.complete) {\n // 绘制四个角(裁剪成45度角)\n drawBorder2(ctx2, borderImage, margin2, margin2, border2.width, 'top', 1);\n drawBorder2(ctx2, borderImage, canvas2.width - border2.width - margin2, margin2, border2.width, 'right', 1);\n drawBorder2(ctx2, borderImage, canvas2.width - border2.width - margin2, canvas2.height - border2.width - margin2, border2.width, 'bottom', 1);\n drawBorder2(ctx2, borderImage, margin2, canvas2.height - border2.width - margin2, border2.width, 'left', 1);\n }\n function getPlottingScale() {\n if (!rectangle) {\n return;\n }\n var westLng = Cesium.Math.toDegrees(rectangle.west);\n var eastLng = Cesium.Math.toDegrees(rectangle.east);\n var northLat = Cesium.Math.toDegrees(rectangle.north);\n var southLat = Cesium.Math.toDegrees(rectangle.south);\n var from = turf.point([westLng, northLat]);\n var to = turf.point([eastLng, northLat]);\n var distance = turf.distance(from, to, {\n units: 'kilometers'\n });\n unitDistance2 = distance * 1000 / imgElm2.width;\n }\n\n // 绘制边框\n function drawBorder2(ctx2, img, x, y, size, position) {\n var isStart = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n ctx2.save();\n ctx2.translate(x + size / 2, y + size / 2);\n\n // 根据位置设置旋转角度\n switch (position) {\n case 'right':\n ctx2.rotate(Math.PI / 2);\n break;\n case 'bottom':\n ctx2.rotate(Math.PI);\n break;\n case 'left':\n ctx2.rotate(3 * Math.PI / 2);\n break;\n }\n // 创建45度角的裁剪路径\n ctx2.beginPath();\n ctx2.moveTo(-size * isStart / 2, -size / 2);\n if (position === 'top' || position === 'bottom') {\n ctx2.lineTo(canvas2.width - margin2 * 2 - size / 2, -size / 2);\n ctx2.lineTo(canvas2.width - (margin2 + size) * 2 + size / 2, size / 2);\n } else {\n ctx2.lineTo(canvas2.height - margin2 * 2 - size / 2, -size / 2);\n ctx2.lineTo(canvas2.height - (margin2 + size) * 2 + size / 2, size / 2);\n }\n ctx2.lineTo(size * isStart / 2, size / 2);\n ctx2.closePath();\n ctx2.clip();\n var imgWidth = img.width / img.height * size;\n\n // 绘制图片\n ctx2.drawImage(img, -size / 2, -size / 2, imgWidth, size);\n var count;\n if (position === 'top' || position === 'bottom') {\n count = Math.ceil((canvas2.width - margin2 * 2 - border2.width * 2) / border2.width);\n } else {\n count = Math.ceil((canvas2.height - margin2 * 2 - border2.width * 2) / border2.width);\n }\n count++;\n for (var _i18 = 1; _i18 <= count; _i18++) {\n ctx2.drawImage(img, -size / 2 + imgWidth * _i18, -size / 2, imgWidth, size);\n }\n ctx2.restore();\n }\n\n // let dataURL = canvas2.toDataURL('image/jpeg', 0.95)\n // let downloadElement = document.createElement('a');\n // downloadElement.href = dataURL;\n // downloadElement.download = `高清出图-${getDateTimeString()}.jpg`;\n // document.body.appendChild(downloadElement);\n // downloadElement.click();\n // document.body.removeChild(downloadElement);\n // console.log('dataURL', dataURL)\n // URL.revokeObjectURL(dataURL);\n\n // 在释放资源后执行回调\n\n canvas2.toBlob(function (blob) {\n var url = URL.createObjectURL(blob);\n var downloadElement = document.createElement('a');\n downloadElement.href = url;\n downloadElement.download = \"\\u9AD8\\u6E05\\u51FA\\u56FE-\".concat(getDateTimeString(), \".png\");\n document.body.appendChild(downloadElement);\n downloadElement.click();\n document.body.removeChild(downloadElement);\n }, 'image/png', 0.95);\n exporting = false;\n exportBtn.innerHTML = '打印';\n // canvas2.toBlob(function (blob) {\n // let imgBlobData = URL.createObjectURL(blob);\n // let downloadElement = document.createElement('a');\n // downloadElement.href = imgBlobData;\n // downloadElement.download = `高清出图-${getDateTimeString()}.png`;\n // document.body.appendChild(downloadElement);\n // downloadElement.click();\n // document.body.removeChild(downloadElement);\n // URL.revokeObjectURL(imgBlobData);\n\n // // 在释放资源后执行回调\n // exporting = false;\n // exportBtn.innerHTML = '打印';\n // });\n };\n };\n getDateTimeString = function _getDateTimeString() {\n // 创建一个表示当前时间的 Date 对象\n var now = new Date();\n // 获取年份\n var year = now.getFullYear();\n // 获取月份(从 0 开始,所以要加 1),并将其转换为两位字符串,不足两位在前面补零\n var month = String(now.getMonth() + 1).padStart(2, '0');\n // 获取日期,并将其转换为两位字符串,不足两位在前面补零\n var day = String(now.getDate()).padStart(2, '0');\n // 获取小时,并将其转换为两位字符串,不足两位在前面补零\n var hours = String(now.getHours()).padStart(2, '0');\n // 获取分钟,并将其转换为两位字符串,不足两位在前面补零\n var minutes = String(now.getMinutes()).padStart(2, '0');\n // 获取秒,并将其转换为两位字符串,不足两位在前面补零\n var seconds = String(now.getSeconds()).padStart(2, '0');\n // 获取毫秒,并将其转换为三位字符串,不足三位在前面补零\n var milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n // 将年、月、日、时、分、秒、毫秒拼接成所需的字符串\n return \"\".concat(year).concat(month).concat(day).concat(hours).concat(minutes).concat(seconds).concat(milliseconds);\n };\n getPlottingScale = function _getPlottingScale() {\n if (!rectangle) {\n return;\n }\n var westLng = Cesium.Math.toDegrees(rectangle.west);\n var eastLng = Cesium.Math.toDegrees(rectangle.east);\n var northLat = Cesium.Math.toDegrees(rectangle.north);\n var southLat = Cesium.Math.toDegrees(rectangle.south);\n var from = turf.point([westLng, northLat]);\n var to = turf.point([eastLng, northLat]);\n var distance = turf.distance(from, to, {\n units: 'kilometers'\n });\n unitDistance = distance * 1000 / imgElm.width;\n };\n drawSelectionBorder = function _drawSelectionBorder(element) {\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n var cornerRadius = canvas.height * 0.005;\n ctx.strokeStyle = 'red';\n ctx.lineWidth = canvas.height * 0.002;\n if ('text' in element) {\n ctx.strokeRect(imgElm.width * element.x + allmargin, imgElm.height * element.y + allmargin - imgElm.height * element.height, imgElm.height * element.width, imgElm.height * element.height);\n } else if ('url' in element) {\n ctx.strokeRect(imgElm.width * element.x + allmargin, imgElm.height * element.y + allmargin, imgElm.height * element.width, imgElm.height * element.height);\n } else if (element === plottingScale) {\n ctx.strokeRect(imgElm.width * element.x + allmargin - plottingScale.width * 0.2, imgElm.height * element.y + allmargin - element.height - plottingScale.height * 0.5, element.width + plottingScale.width * 0.6, element.height + plottingScale.height);\n return;\n }\n var corners = getCorners(element, allmargin);\n ctx.fillStyle = 'red';\n corners.forEach(function (corner) {\n ctx.beginPath();\n ctx.arc(corner.x, corner.y, cornerRadius, 0, 2 * Math.PI);\n ctx.fill();\n });\n };\n drawBorder = function _drawBorder(ctx, img, x, y, size, position) {\n var isStart = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n ctx.save();\n ctx.translate(x + size / 2, y + size / 2);\n\n // 根据位置设置旋转角度\n switch (position) {\n case 'right':\n ctx.rotate(Math.PI / 2);\n break;\n case 'bottom':\n ctx.rotate(Math.PI);\n break;\n case 'left':\n ctx.rotate(3 * Math.PI / 2);\n break;\n }\n // 创建45度角的裁剪路径\n ctx.beginPath();\n ctx.moveTo(-size * isStart / 2, -size / 2);\n if (position === 'top' || position === 'bottom') {\n ctx.lineTo(canvas.width - margin * 2 - size / 2, -size / 2);\n ctx.lineTo(canvas.width - (margin + size) * 2 + size / 2, size / 2);\n } else {\n ctx.lineTo(canvas.height - margin * 2 - size / 2, -size / 2);\n ctx.lineTo(canvas.height - (margin + size) * 2 + size / 2, size / 2);\n }\n ctx.lineTo(size * isStart / 2, size / 2);\n ctx.closePath();\n ctx.clip();\n var imgWidth = img.width / img.height * size;\n\n // 绘制图片\n ctx.drawImage(img, -size / 2, -size / 2, imgWidth, size);\n var count;\n if (position === 'top' || position === 'bottom') {\n count = Math.ceil((canvas.width - margin * 2 - border.width * 2) / border.width);\n } else {\n count = Math.ceil((canvas.height - margin * 2 - border.width * 2) / border.width);\n }\n count++;\n for (var _i10 = 1; _i10 <= count; _i10++) {\n ctx.drawImage(img, -size / 2 + imgWidth * _i10, -size / 2, imgWidth, size);\n }\n ctx.restore();\n };\n updateCanvas = function _updateCanvas() {\n if (isLoad) {\n return;\n }\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n canvas.width = imgElm.width + allmargin * 2;\n canvas.height = imgElm.height + allmargin * 2;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.rect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#ffffff\";\n ctx.fill();\n ctx.drawImage(imgElm, allmargin, allmargin, imgElm.width, imgElm.height);\n\n // 标题内容\n if (title.show) {\n var text = title.text;\n var fontSize = Math.max(5, title.height * imgElm.height * 0.5);\n ctx.font = \"\".concat(fontSize, \"px serif\");\n // const textWidth = ctx.measureText(text).width;\n ctx.fillStyle = title.bgColor || '#5d5d5d';\n ctx.fillRect(allmargin, allmargin, canvas.width - allmargin * 2, title.height * imgElm.height);\n ctx.fillStyle = title.color || 'white';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, canvas.width / 2, title.height * imgElm.height / 2 + allmargin);\n }\n\n // 其他内容\n var _loop2 = function _loop2(_i7) {\n if (data[_i7].show) {\n if ('text' in data[_i7]) {\n ctx.font = \"\".concat(imgElm.height * data[_i7].height, \"px serif\");\n ctx.fillStyle = data[_i7].color || 'white';\n ctx.textAlign = 'left';\n ctx.textBaseline = 'bottom';\n data[_i7].width = ctx.measureText(data[_i7].text).width / imgElm.height;\n ctx.fillText(data[_i7].text, imgElm.width * data[_i7].x + allmargin, imgElm.height * data[_i7].y + allmargin);\n if (data[_i7].isSelected) {\n drawSelectionBorder(data[_i7]);\n }\n } else if ('url' in data[_i7]) {\n if (data[_i7].svg && data[_i7].svg.complete) {\n ctx.drawImage(data[_i7].svg, imgElm.width * data[_i7].x + allmargin, imgElm.height * data[_i7].y + allmargin, imgElm.height * data[_i7].width, imgElm.height * data[_i7].height);\n if (data[_i7].isSelected) {\n drawSelectionBorder(data[_i7]);\n }\n } else {\n var svg = new Image();\n svg.src = tools.getSourceRootPath() + data[_i7].url;\n svg.onload = function () {\n data[_i7].svg = svg;\n ctx.drawImage(svg, imgElm.width * data[_i7].x + allmargin, imgElm.height * data[_i7].y + allmargin, imgElm.height * data[_i7].width, imgElm.height * data[_i7].height);\n if (data[_i7].isSelected) {\n drawSelectionBorder(data[_i7]);\n }\n };\n }\n }\n }\n };\n for (var _i7 = 0; _i7 < data.length; _i7++) {\n _loop2(_i7);\n }\n\n // 比例尺\n if (plottingScale.show) {\n var _allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n _allmargin = _allmargin + border.width;\n }\n var plottingScaleX = imgElm.width * plottingScale.x + _allmargin;\n var plottingScaleY = imgElm.height * plottingScale.y + _allmargin;\n var unit = 'm';\n // const fontSize = plottingScale.width * 0.12;\n var _fontSize = imgElm.width * 0.08 * 0.12;\n var spacing = imgElm.width * 0.08 / plottingScale.cell;\n var spacingDistance = Math.round(unitDistance * spacing);\n var spacingDistanceString = spacingDistance + '';\n if (spacingDistance < 10) {} else {\n spacingDistance = Number(spacingDistanceString[0]);\n for (var _i8 = 0; _i8 < spacingDistanceString.length - 1; _i8++) {\n spacingDistance = spacingDistance * 10;\n }\n spacing = spacingDistance / unitDistance;\n }\n plottingScale.width = spacing * plottingScale.cell;\n plottingScale.height = plottingScale.width * 0.2;\n if (spacingDistance >= 1000) {\n unit = '㎞';\n spacingDistance = Math.round(spacingDistance / 1000);\n }\n var scaleY = plottingScaleY;\n ctx.beginPath();\n ctx.moveTo(plottingScaleX, scaleY);\n ctx.lineTo(plottingScaleX + plottingScale.width, scaleY);\n ctx.strokeStyle = plottingScale.color;\n ctx.lineWidth = plottingScale.width * 0.01;\n ctx.stroke();\n var tickX = 0;\n for (var _i9 = 0; _i9 <= plottingScale.cell; _i9++) {\n tickX = plottingScaleX + _i9 * spacing;\n ctx.beginPath();\n ctx.moveTo(tickX, scaleY - plottingScale.width * 0.1);\n ctx.lineTo(tickX, scaleY);\n ctx.strokeStyle = plottingScale.color;\n ctx.lineWidth = plottingScale.width * 0.01;\n ctx.stroke();\n ctx.font = \"\".concat(_fontSize, \"px Arial\");\n ctx.fillStyle = plottingScale.color;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n ctx.fillText(_i9 * spacingDistance, tickX, scaleY - plottingScale.width * 0.1);\n }\n ctx.font = \"\".concat(_fontSize, \"px Arial\");\n ctx.fillStyle = plottingScale.color;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'bottom';\n ctx.fillText(unit, tickX + _fontSize * 1.2, scaleY - plottingScale.width * 0.1);\n if (plottingScale.isSelected) {\n drawSelectionBorder(plottingScale);\n }\n }\n\n // 边框\n if (border.show && borderImage && borderImage.complete) {\n // 绘制四个角(裁剪成45度角)\n drawBorder(ctx, borderImage, margin, margin, border.width, 'top', 1);\n drawBorder(ctx, borderImage, canvas.width - border.width - margin, margin, border.width, 'right', 1);\n drawBorder(ctx, borderImage, canvas.width - border.width - margin, canvas.height - border.width - margin, border.width, 'bottom', 1);\n drawBorder(ctx, borderImage, margin, canvas.height - border.width - margin, border.width, 'left', 1);\n }\n };\n getCorners = function _getCorners(element, allmargin) {\n var elementX = element.x * imgElm.width + allmargin;\n var elementY = element.y * imgElm.height + allmargin;\n var elementWidth = element.width * imgElm.height;\n var elementHeight = element.height * imgElm.height;\n if ('text' in element) {\n return [{\n x: elementX,\n y: elementY - elementHeight\n }, {\n x: elementX + elementWidth,\n y: elementY - elementHeight\n }, {\n x: elementX,\n y: elementY\n }, {\n x: elementX + elementWidth,\n y: elementY\n }];\n } else if ('url' in element) {\n return [{\n x: elementX,\n y: elementY\n }, {\n x: elementX + elementWidth,\n y: elementY\n }, {\n x: elementX,\n y: elementY + elementHeight\n }, {\n x: elementX + elementWidth,\n y: elementY + elementHeight\n }];\n } else {\n // 比例尺\n return [{\n x: elementX,\n y: elementY\n }, {\n x: elementX + elementWidth,\n y: elementY\n }, {\n x: elementX,\n y: elementY + elementHeight\n }, {\n x: elementX + elementWidth,\n y: elementY + elementHeight\n }];\n }\n };\n getCanvasMouseX = function _getCanvasMouseX(e) {\n var rect = canvas.getBoundingClientRect();\n var containerWidth = rect.width;\n var containerHeight = rect.height;\n var canvasWidth = canvas.width;\n var canvasHeight = canvas.height;\n var scale;\n if (canvasWidth / canvasHeight > containerWidth / containerHeight) {\n scale = containerWidth / canvasWidth;\n } else {\n scale = containerHeight / canvasHeight;\n }\n var scaledWidth = canvasWidth * scale;\n var scaledHeight = canvasHeight * scale;\n var offsetX = (containerWidth - scaledWidth) / 2;\n var offsetY = (containerHeight - scaledHeight) / 2;\n var clientX = e.clientX - rect.left - offsetX;\n return clientX / scale;\n };\n getCanvasMouseY = function _getCanvasMouseY(e) {\n var rect = canvas.getBoundingClientRect();\n var containerWidth = rect.width;\n var containerHeight = rect.height;\n var canvasWidth = canvas.width;\n var canvasHeight = canvas.height;\n var scale;\n if (canvasWidth / canvasHeight > containerWidth / containerHeight) {\n scale = containerWidth / canvasWidth;\n } else {\n scale = containerHeight / canvasHeight;\n }\n var scaledWidth = canvasWidth * scale;\n var scaledHeight = canvasHeight * scale;\n var offsetX = (containerWidth - scaledWidth) / 2;\n var offsetY = (containerHeight - scaledHeight) / 2;\n var clientY = e.clientY - rect.top - offsetY;\n return clientY / scale;\n };\n changeMapBorderColor = function _changeMapBorderColor(color) {\n border.color = color || '#000000';\n new YJColorPicker({\n el: contentElm.getElementsByClassName('border-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: false,\n //是否开启透明度\n defaultColor: border.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n changeMapBorderColor(color);\n },\n //点击确认按钮事件回调\n clear: function clear() {\n changeMapBorderColor('rgba(0,0,0,1)');\n } //点击清空按钮事件回调\n });\n var currentSvg;\n var svgDataUrl;\n if (color) {\n var colorRegex = /fill=\"[^\"]+\"/g;\n currentSvg = svgText.replace(colorRegex, \"fill=\\\"\".concat(color, \"\\\"\"));\n } else {\n currentSvg = svgText;\n }\n svgDataUrl = 'data:image/svg+xml;base64,' + btoa(Array.from(new TextEncoder().encode(currentSvg), function (byte) {\n return String.fromCharCode(byte);\n }).join(''));\n borderImage = new Image();\n borderImage.setAttribute('crossOrigin', 'anonymous');\n borderImage.src = svgDataUrl;\n borderImage.onload = function () {\n if (border.show) {\n updateCanvas();\n }\n };\n };\n changeMapBorder = function _changeMapBorder(v) {\n border.url = v;\n if (!border.url) {\n return;\n }\n borderImage = new Image();\n borderImage.setAttribute('crossOrigin', 'anonymous');\n if (border.url.endsWith('svg')) {\n fetch(tools.getSourceRootPath() + border.url).then(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee(response) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!response.ok) {\n _context.next = 5;\n break;\n }\n _context.next = 3;\n return response.text();\n case 3:\n svgText = _context.sent;\n changeMapBorderColor(border.color);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x5) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n borderImage.src = tools.getSourceRootPath() + border.url;\n borderImage.onload = function () {\n if (border.show) {\n updateCanvas();\n }\n };\n }\n };\n changeTemplate = function _changeTemplate(v) {\n template = v;\n templateData = Object(_dataSource_js__WEBPACK_IMPORTED_MODULE_6__[\"getTemplateData\"])(tools);\n for (var _i6 = 0; _i6 < templateData.length; _i6++) {\n if (templateData[_i6].id === template) {\n title = templateData[_i6].title || title;\n margin = !templateData[_i6].margin && templateData[_i6].margin != 0 ? margin : templateData[_i6].margin;\n data = templateData[_i6].data || data;\n border = templateData[_i6].border || border;\n border.color = border.color || '#000000';\n plottingScale = templateData[_i6].plottingScale || plottingScale;\n break;\n }\n }\n initData();\n updateCanvas();\n };\n initData = function _initData() {\n if (isLoad) {\n return;\n }\n margin = margin * imgElm.width;\n triggerRange = imgElm.height / 140;\n titleInputElm.value = title.text;\n titleCheckboxElm.checked = title.show;\n unitInputElm.value = data[1].text;\n unitCheckboxElm.checked = data[1].show;\n compassCheckboxElm.checked = data[2].show;\n for (var _i5 = 0; _i5 < compassList.length; _i5++) {\n if (compassList[_i5] === data[2].url) {\n compassRadiosElm[_i5].checked = true;\n }\n }\n plottingScaleCheckboxElm.checked = plottingScale.show;\n border.width = imgElm.width * border.width;\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n canvas.width = imgElm.width + allmargin * 2;\n canvas.height = imgElm.height + allmargin * 2;\n printDateCheckboxElm && (printDateCheckboxElm.checked = data[0].show);\n if (jeDateObject) {\n if (data[0].text) {\n jeDateObject.setValue(data[0].text);\n } else {\n jeDateObject.nowBtn && jeDateObject.nowBtn();\n data[0].text = jeDateObject.getValue();\n }\n }\n\n // plottingScale.x = imgElm.width * plottingScale.x;\n // plottingScale.y = imgElm.height * plottingScale.y;\n\n if (mapBorderObject && mapBorderDataLegpElm && iActiveElm) {\n mapBorderDataLegpElm.value = border.url;\n mapBorderObject.legp_searchActive(border.url);\n iActiveElm.style.backgroundImage = \"url(\".concat(tools.getSourceRootPath() + border.url, \")\");\n }\n mapBorderCheckboxElm.checked = border.show;\n borderImage = null;\n if (border && border.url) {\n changeMapBorder(border.url);\n }\n };\n exporting = false;\n templateData = Object(_dataSource_js__WEBPACK_IMPORTED_MODULE_6__[\"getTemplateData\"])(tools);\n template = '1';\n isLoad = true;\n margin = 0;\n title = {\n text: '标题',\n height: 40,\n bgColor: '#5d5d5d',\n color: '#ffffff',\n show: true\n };\n border = {\n show: true,\n url: tools.getSourceRootPath() + '/custom/img/map-border1.svg',\n width: 20\n };\n data = [{\n text: '',\n x: 10,\n y: 100,\n height: 24,\n fontSize: 24,\n isSelected: false,\n show: true,\n color: '#ffffff'\n }, {\n text: '-',\n x: 10,\n y: 100,\n height: 24,\n fontSize: 24,\n isSelected: false,\n show: true,\n color: '#ffffff'\n }, {\n x: 10,\n y: 100,\n width: 100,\n height: 100,\n show: false,\n isSelected: false,\n url: tools.getSourceRootPath() + '/custom/img/icon-compass1.svg'\n }]; // 比例尺\n plottingScale = {\n cell: 2,\n color: '#ffffff',\n show: true,\n isSelected: false,\n x: 10,\n y: 100,\n width: 100\n };\n compassList = ['/custom/img/icon-compass1.svg', '/custom/img/icon-compass2.svg', '/custom/img/icon-compass3.svg', '/custom/img/icon-compass4.svg'];\n if (_DialogObject) {\n _DialogObject.close();\n _DialogObject = null;\n }\n _context3.next = 26;\n return new _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdk, {}, {\n title: '地图打印',\n left: '5%',\n top: '10%',\n ismove: false\n });\n case 26:\n _DialogObject = _context3.sent;\n _DialogObject._element.body.className = _DialogObject._element.body.className + ' map-print';\n contentElm = document.createElement('div');\n contentElm.innerHTML = \"\\n
\\n
\\n
\\u56FE\\u4EF6\\u4FE1\\u606F
\\n
\\n
\\n \\u6A21\\u677F\\n
\\n
\\n
\\n
\\n
\\n \\u6807\\u9898\\n \\n \\n
\\n
\\n
\\n
\\n \\u5236\\u56FE\\u65E5\\u671F\\n \\n \\n
\\n
\\n
\\n
\\n \\u5236\\u56FE\\u5355\\u4F4D\\n \\n \\n
\\n
\\n
\\n
\\n \\u56FE\\u6846\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\u5730\\u56FE\\u8981\\u7D20
\\n
\\n
\\n \\u6307\\u5317\\u9488\\n \\n
\\n
\\n \".concat(function () {\n var str = '';\n for (var i = 0; i < compassList.length; i++) {\n var compass = tools.getSourceRootPath() + compassList[i];\n str += \"
\\n \\n \\\"\\\"\\n
\");\n }\n return str;\n }(), \"\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6BD4\\u4F8B\\u5C3A\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \");\n _DialogObject.contentAppChild(contentElm);\n leftElm = contentElm.getElementsByClassName('left')[0];\n rightElm = contentElm.getElementsByClassName('right')[0]; // let mapImgBoxElm = rightElm.getElementsByClassName('map-img-box')[0]\n titleInputElm = leftElm.getElementsByClassName('title-input')[0];\n titleCheckboxElm = leftElm.getElementsByClassName('title-checkbox')[0];\n unitInputElm = leftElm.getElementsByClassName('unit-input')[0];\n unitCheckboxElm = leftElm.getElementsByClassName('unit-checkbox')[0];\n compassCheckboxElm = leftElm.getElementsByClassName('compass-checkbox')[0];\n compassRadiosElm = leftElm.getElementsByClassName('compass-radio');\n plottingScaleCheckboxElm = leftElm.getElementsByClassName('plotting-scale-checkbox')[0];\n mapBorderCheckboxElm = leftElm.getElementsByClassName('map-border-checkbox')[0];\n canvas = document.createElement('canvas');\n ctx = canvas.getContext('2d');\n rightElm.appendChild(canvas);\n imgElm = new Image();\n imgElm.src = thumbnailImg;\n imgElm.onload = function () {\n isLoad = false;\n getPlottingScale();\n changeTemplate(template);\n };\n\n // 标题\n titleInputElm.value = title.text;\n titleCheckboxElm.checked = title.show;\n titleInputElm.addEventListener('input', function () {\n title.text = this.value;\n if (imgElm.complete) {\n updateCanvas();\n }\n });\n titleCheckboxElm.addEventListener('change', function () {\n title.show = this.checked;\n if (imgElm.complete) {\n updateCanvas();\n }\n });\n\n // 制图单位\n unitInputElm.value = data[1].text;\n unitCheckboxElm.checked = data[1].show;\n unitInputElm.addEventListener('input', function () {\n data[1].text = this.value;\n if (imgElm && imgElm.complete) {\n updateCanvas();\n }\n });\n unitCheckboxElm.addEventListener('change', function () {\n data[1].show = this.checked;\n if (imgElm && imgElm.complete) {\n updateCanvas();\n }\n });\n\n // 指北针\n compassCheckboxElm.checked = data[2].show;\n compassCheckboxElm.addEventListener('change', function () {\n data[2].show = this.checked;\n if (imgElm && imgElm.complete) {\n updateCanvas();\n }\n });\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _loop(i) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n compassRadiosElm[i].addEventListener('change', function () {\n if (this.checked) {\n data[2].svg = null;\n data[2].url = compassList[i];\n if (imgElm && imgElm.complete) {\n updateCanvas();\n }\n }\n });\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _loop);\n });\n i = 0;\n case 59:\n if (!(i < compassRadiosElm.length)) {\n _context3.next = 64;\n break;\n }\n return _context3.delegateYield(_loop(i), \"t0\", 61);\n case 61:\n i++;\n _context3.next = 59;\n break;\n case 64:\n // 比例尺\n plottingScaleCheckboxElm.checked = plottingScale.show;\n plottingScaleCheckboxElm.addEventListener('change', function () {\n plottingScale.show = this.checked;\n if (imgElm && imgElm.complete) {\n updateCanvas();\n }\n });\n\n // 图框\n mapBorderCheckboxElm.checked = border.show;\n mapBorderCheckboxElm.addEventListener('change', function () {\n border.show = this.checked;\n if (borderImage && borderImage.complete) {\n updateCanvas();\n }\n });\n borderColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('border-color')[0],\n size: 'mini',\n //颜色box类型\n alpha: false,\n //是否开启透明度\n defaultColor: border.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n changeMapBorderColor(color);\n },\n //点击确认按钮事件回调\n clear: function clear() {\n changeMapBorderColor('rgba(0,0,0,1)');\n } //点击清空按钮事件回调\n });\n setTimeout(function () {\n closeBtn = _DialogObject._element.foot.getElementsByClassName('close')[0];\n exportBtn = document.createElement('button');\n exportBtn.className = 'export';\n exportBtn.innerHTML = '打印';\n leftElm.appendChild(closeBtn);\n leftElm.appendChild(exportBtn);\n exportBtn.addEventListener('click', function () {\n if (exporting) {\n return;\n }\n exporting = true;\n exportBtn.innerHTML = '打印';\n exportMap();\n // exporting = true\n // exportBtn.innerHTML = '打印'\n // let imgBlobData = canvas.toDataURL();\n // let downloadElement = document.createElement('a');\n // downloadElement.href = imgBlobData;\n // downloadElement.download = `高清出图-${getDateTimeString()}.png`;\n // document.body.appendChild(downloadElement);\n // downloadElement.click();\n // document.body.removeChild(downloadElement);\n // URL.revokeObjectURL(imgBlobData);\n });\n\n // 时间\n var printDateElm = contentElm.getElementsByClassName('print-date')[0];\n printDateCheckboxElm = contentElm.getElementsByClassName('print-date-checkbox')[0];\n printDateCheckboxElm.checked = data[0].show;\n printDateCheckboxElm.addEventListener('change', function () {\n data[0].show = this.checked;\n if (imgElm.complete) {\n updateCanvas();\n }\n });\n jeDateObject = jeDate(printDateElm, {\n format: \"YYYY-MM-DD\",\n isinitVal: true,\n isClear: false,\n donefun: function donefun(obj) {\n data[0].text = obj.val;\n if (imgElm.complete) {\n updateCanvas();\n }\n }\n });\n if (data[0].text) {\n jeDateObject.setValue(data[0].text);\n } else {\n jeDateObject.nowBtn && jeDateObject.nowBtn();\n data[0].text = jeDateObject.getValue();\n updateCanvas();\n }\n\n // 模板\n // let templateData = templateData\n var templateObject = Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_5__[\"legp\"])(_DialogObject._element.content.getElementsByClassName('template-box')[0], '.template');\n if (templateObject) {\n templateObject.legp_search(templateData);\n var templateDataLegpElm = _DialogObject._element.content.getElementsByClassName('template')[0].getElementsByTagName('input')[0];\n for (var _i = 0; _i < templateData.length; _i++) {\n if (templateData[_i].id == template) {\n templateDataLegpElm.value = templateData[_i].value;\n templateObject.legp_searchActive(templateData[_i].value);\n break;\n }\n }\n templateDataLegpElm.addEventListener('input', function () {\n for (var _i2 = 0; _i2 < templateData.length; _i2++) {\n if (templateData[_i2].value === templateDataLegpElm.value) {\n changeTemplate(templateData[_i2].id);\n break;\n }\n }\n });\n }\n\n // 图框\n var mapBorderData = [{\n name: \"\"),\n value: '/custom/img/map-border1.svg',\n key: 0\n }, {\n name: \"\"),\n value: '/custom/img/map-border2.svg',\n key: 1\n }, {\n name: \"\"),\n value: '/custom/img/map-border3.svg',\n key: 2\n }, {\n name: \"\"),\n value: '/custom/img/map-border4.svg',\n key: 3\n }, {\n name: \"\"),\n value: '/custom/img/map-border5.svg',\n key: 4\n }, {\n name: \"\"),\n value: '/custom/img/map-border6.svg',\n key: 5\n }];\n mapBorderObject = Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_5__[\"legp\"])(_DialogObject._element.content.getElementsByClassName('map-border-box')[0], '.map-border');\n if (mapBorderObject) {\n mapBorderObject.legp_search(mapBorderData);\n iActiveElm = document.createElement('span');\n iActiveElm.className = \"icon icon-active\";\n iActiveElm.style.width = 'calc(100% - 40px)';\n iActiveElm.style.height = 'calc(100% - 12px)';\n iActiveElm.style.position = 'absolute';\n iActiveElm.style.top = '6px';\n iActiveElm.style.left = '10px';\n iActiveElm.style.pointerEvents = 'none';\n iActiveElm.style.backgroundImage = \"url(\".concat(tools.getSourceRootPath() + border.url, \")\");\n iActiveElm.style.backgroundSize = 'auto 100%';\n iActiveElm.style.backgroundRepeat = 'repeat-x';\n _DialogObject._element.content.getElementsByClassName('map-border')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm);\n mapBorderDataLegpElm = _DialogObject._element.content.getElementsByClassName('map-border')[0].getElementsByTagName('input')[0];\n mapBorderDataLegpElm.style.fontSize = 0;\n mapBorderDataLegpElm.style.color = 'transparent';\n for (var _i3 = 0; _i3 < mapBorderData.length; _i3++) {\n if (mapBorderData[_i3].value == border.url) {\n mapBorderDataLegpElm.value = mapBorderData[_i3].value;\n mapBorderObject.legp_searchActive(mapBorderData[_i3].value);\n break;\n }\n }\n mapBorderDataLegpElm.addEventListener('input', function () {\n for (var _i4 = 0; _i4 < mapBorderData.length; _i4++) {\n if (mapBorderData[_i4].value === mapBorderDataLegpElm.value) {\n iActiveElm.style.backgroundImage = \"url(\".concat(tools.getSourceRootPath() + mapBorderData[_i4].value, \")\");\n changeMapBorder(mapBorderData[_i4].value);\n break;\n }\n }\n });\n }\n }, 0);\n isDragging = false;\n triggerRange = 5;\n selectedElement = null;\n isDraggingElement = false;\n isResizingElement = false;\n resizeCorner = null; // 记录当前字体大小\n // 绘制边框\n canvas.addEventListener('mousedown', function (e) {\n var x = getCanvasMouseX(e);\n var y = getCanvasMouseY(e);\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n if (title.show) {\n // 检查是否点击了标题编辑触发区域\n if (y >= title.height * imgElm.height + allmargin - triggerRange && y <= title.height * imgElm.height + allmargin + triggerRange) {\n isDragging = true;\n\n // 先将所有元素的选中状态置为 false\n for (var _i11 = 0; _i11 < data.length; _i11++) {\n data[_i11].isSelected = false;\n }\n selectedElement = null;\n isDraggingElement = false;\n isResizingElement = false;\n resizeCorner = null;\n return;\n }\n }\n\n // 检查是否点击了边框角上的小圆点\n if (selectedElement && selectedElement !== plottingScale) {\n var cornerRadius = canvas.height * 0.005;\n var corners = getCorners(selectedElement, allmargin);\n corners.forEach(function (corner, index) {\n if (x >= corner.x - cornerRadius && x <= corner.x + cornerRadius && y >= corner.y - cornerRadius && y <= corner.y + cornerRadius) {\n isResizingElement = true;\n isDraggingElement = false;\n resizeCorner = index;\n startX = x;\n startY = y;\n elementWidth = selectedElement.width * imgElm.height;\n elementHeight = selectedElement.height * imgElm.height;\n if ('text' in selectedElement) {\n elementWidth = selectedElement.width * imgElm.height;\n currentFontSize = selectedElement.height;\n }\n }\n });\n }\n if (isResizingElement) {\n return;\n }\n\n // 先将所有元素的选中状态置为 false\n for (var _i12 = 0; _i12 < data.length; _i12++) {\n data[_i12].isSelected = false;\n }\n plottingScale.isSelected = false;\n selectedElement = null;\n isDraggingElement = false;\n isResizingElement = false;\n resizeCorner = null;\n for (var _i13 = data.length - 1; _i13 >= 0; _i13--) {\n if (data[_i13].show) {\n if ('text' in data[_i13]) {\n if (x >= imgElm.width * data[_i13].x + allmargin && x <= imgElm.width * data[_i13].x + allmargin + imgElm.height * data[_i13].width && y >= imgElm.height * data[_i13].y + allmargin - imgElm.height * data[_i13].height && y <= imgElm.height * data[_i13].y + allmargin) {\n selectedElement = data[_i13];\n data[_i13].isSelected = true;\n isDraggingElement = true;\n startX = x;\n startY = y;\n startY2 = imgElm.height * data[_i13].y - imgElm.height * data[_i13].height;\n startX2 = imgElm.width * data[_i13].x + imgElm.height * data[_i13].width;\n elementOffsetX = imgElm.width * data[_i13].x + allmargin;\n elementOffsetY = imgElm.height * data[_i13].y + allmargin;\n updateCanvas(); // 点击时重新绘制画布以显示边框\n break;\n }\n }\n if ('url' in data[_i13]) {\n if (data[_i13].svg && data[_i13].svg.complete && data[_i13].show) {\n if (x >= imgElm.width * data[_i13].x + allmargin && x <= imgElm.width * data[_i13].x + allmargin + imgElm.height * data[_i13].width && y >= imgElm.height * data[_i13].y + allmargin && y <= imgElm.height * data[_i13].y + allmargin + imgElm.height * data[_i13].height) {\n selectedElement = data[_i13];\n data[_i13].isSelected = true;\n isDraggingElement = true;\n startX = x;\n startY = y;\n startY2 = imgElm.height * data[_i13].y + imgElm.height * data[_i13].height;\n startX2 = imgElm.width * data[_i13].x + imgElm.height * data[_i13].width;\n elementOffsetX = imgElm.width * data[_i13].x + allmargin;\n elementOffsetY = imgElm.height * data[_i13].y + allmargin;\n updateCanvas(); // 点击时重新绘制画布以显示边框\n break;\n }\n }\n }\n }\n }\n if (plottingScale.show) {\n if (x >= imgElm.width * plottingScale.x + allmargin - plottingScale.width * 0.2 && x <= imgElm.width * plottingScale.x + allmargin - plottingScale.width * 0.2 + plottingScale.width + plottingScale.width * 0.6 && y >= imgElm.height * plottingScale.y + allmargin - plottingScale.height - plottingScale.height * 0.5 && y <= imgElm.height * plottingScale.y + allmargin - plottingScale.height * 0.5 + plottingScale.height) {\n selectedElement = plottingScale;\n plottingScale.isSelected = true;\n isDraggingElement = true;\n startX = x;\n startY = y;\n startY2 = imgElm.height * plottingScale.y + allmargin + plottingScale.height;\n startX2 = imgElm.width * plottingScale.x + allmargin + plottingScale.width;\n elementOffsetX = imgElm.width * plottingScale.x + allmargin;\n elementOffsetY = imgElm.height * plottingScale.y + allmargin;\n updateCanvas(); // 点击时重新绘制画布以显示边框\n }\n }\n\n // 如果点击在内容以外,重新绘制画布以移除边框\n if (!selectedElement) {\n updateCanvas();\n }\n });\n canvas.addEventListener('mousemove', function (e) {\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n var x = getCanvasMouseX(e);\n var y = getCanvasMouseY(e);\n if (x < 0 || y < 0 || x > canvas.width || y > canvas.height) {\n return;\n }\n if (title.show) {\n var _allmargin2 = margin;\n if (border.show && borderImage && borderImage.complete) {\n _allmargin2 = _allmargin2 + border.width;\n }\n if (y >= title.height * imgElm.height + _allmargin2 - triggerRange && y <= title.height * imgElm.height + _allmargin2 + triggerRange) {\n canvas.style.cursor = 'n-resize';\n } else {\n canvas.style.cursor = 'default';\n }\n if (isDragging) {\n title.height = Math.min(Math.max(y - _allmargin2, 30) / imgElm.height, 1);\n updateCanvas();\n }\n }\n if (isDraggingElement) {\n var dx = x - startX;\n var dy = y - startY;\n selectedElement.x = (elementOffsetX + dx - allmargin) / imgElm.width;\n selectedElement.y = (elementOffsetY + dy - allmargin) / imgElm.height;\n updateCanvas();\n }\n if (isResizingElement) {\n var _dx = x - startX;\n var _dy = y - startY;\n var scaleFactor;\n switch (resizeCorner) {\n case 0:\n // 左上角\n if ('text' in selectedElement) {\n scaleFactor = (elementWidth - _dx) / elementWidth;\n selectedElement.height = Math.max(10 / imgElm.height, currentFontSize * scaleFactor);\n selectedElement.x = (startX2 - selectedElement.width * imgElm.height) / imgElm.width;\n } else if ('url' in selectedElement) {\n selectedElement.x = (startX2 - selectedElement.width * imgElm.height) / imgElm.width;\n selectedElement.y = (startY2 - selectedElement.height * imgElm.height) / imgElm.height;\n selectedElement.width = Math.max(10, elementWidth - _dx) / imgElm.height;\n selectedElement.height = Math.max(10, elementHeight - _dy) / imgElm.height;\n }\n break;\n case 1:\n // 右上角\n if ('text' in selectedElement) {\n scaleFactor = (elementWidth + _dx) / elementWidth;\n selectedElement.height = Math.max(10 / imgElm.height, currentFontSize * scaleFactor);\n } else if ('url' in selectedElement) {\n selectedElement.width = Math.max(10, elementWidth + _dx) / imgElm.height;\n selectedElement.height = Math.max(10, elementHeight - _dy) / imgElm.height;\n selectedElement.y = (startY2 - selectedElement.height * imgElm.height) / imgElm.height;\n }\n break;\n case 2:\n // 左下角\n if ('text' in selectedElement) {\n scaleFactor = (elementWidth - _dx) / elementWidth;\n selectedElement.height = Math.max(10 / imgElm.height, currentFontSize * scaleFactor);\n selectedElement.x = (startX2 - selectedElement.width * imgElm.height) / imgElm.width;\n selectedElement.y = (startY2 + selectedElement.height * imgElm.height) / imgElm.height;\n } else if ('url' in selectedElement) {\n selectedElement.x = (startX2 - selectedElement.width * imgElm.height) / imgElm.width;\n selectedElement.width = Math.max(10, elementWidth - _dx) / imgElm.height;\n selectedElement.height = Math.max(10, elementHeight + _dy) / imgElm.height;\n }\n break;\n case 3:\n // 右下角\n if ('text' in selectedElement) {\n scaleFactor = (elementWidth + _dx) / elementWidth;\n selectedElement.height = Math.max(10 / imgElm.height, currentFontSize * scaleFactor);\n selectedElement.y = (startY2 + selectedElement.height * imgElm.height) / imgElm.height;\n } else if ('url' in selectedElement) {\n selectedElement.width = Math.max(10, elementWidth + _dx) / imgElm.height;\n selectedElement.height = Math.max(10, elementHeight + _dy) / imgElm.height;\n }\n break;\n }\n updateCanvas();\n }\n });\n document.addEventListener('mouseup', function () {\n isDragging = false;\n var allmargin = margin;\n if (border.show && borderImage && borderImage.complete) {\n allmargin = allmargin + border.width;\n }\n for (var _i14 = 0; _i14 < data.length; _i14++) {\n if (data[_i14].show && data[_i14].isSelected) {\n startY2 = imgElm.height * data[_i14].y - imgElm.height * data[_i14].height;\n startX2 = imgElm.width * data[_i14].x + imgElm.height * data[_i14].width;\n if ('url' in data[_i14]) {\n startY2 = imgElm.height * data[_i14].y + imgElm.height * data[_i14].height;\n startX2 = imgElm.width * data[_i14].x + imgElm.height * data[_i14].width;\n }\n elementOffsetX = data[_i14].x;\n elementOffsetY = data[_i14].y;\n }\n }\n if (plottingScale.show && plottingScale.isSelected) {\n startY2 = plottingScale.y + plottingScale.height;\n startX2 = plottingScale.x + plottingScale.width;\n elementOffsetX = plottingScale.x;\n elementOffsetY = plottingScale.y;\n }\n isDraggingElement = false;\n isResizingElement = false;\n resizeCorner = null;\n });\n case 79:\n case \"end\":\n return _context3.stop();\n }\n }, _callee2);\n }));\n return _MapPrint.apply(this, arguments);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (MapPrint);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL01hcFByaW50L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9NYXBQcmludC9pbmRleC5qcz8yYjVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vT2JqL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IFRvb2xzIGZyb20gJy4uLy4uL1Rvb2xzJztcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL09iai9FbGVtZW50L2RhdGFsaXN0J1xyXG5pbXBvcnQgeyBnZXRUZW1wbGF0ZURhdGEgfSBmcm9tICcuL2RhdGFTb3VyY2UuanMnXHJcblxyXG5sZXQgdG9vbHMgPSBuZXcgVG9vbHMoKTtcclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBNYXBQcmludChzZGssIHRodW1ibmFpbEltZywgcmVjdGFuZ2xlLCBvcmlnaW5hbEltZykge1xyXG4gIGxldCBleHBvcnRpbmcgPSBmYWxzZTtcclxuICBsZXQgdGVtcGxhdGVEYXRhID0gZ2V0VGVtcGxhdGVEYXRhKHRvb2xzKVxyXG4gIGxldCBfRGlhbG9nT2JqZWN0XHJcbiAgbGV0IHRlbXBsYXRlID0gJzEnXHJcbiAgbGV0IHVuaXREaXN0YW5jZVxyXG4gIGxldCBpc0xvYWQgPSB0cnVlXHJcbiAgbGV0IGJvcmRlckltYWdlXHJcbiAgbGV0IG1hcmdpbiA9IDBcclxuICBsZXQgc3ZnVGV4dFxyXG4gIGxldCB0aXRsZSA9IHtcclxuICAgIHRleHQ6ICfmoIfpopgnLFxyXG4gICAgaGVpZ2h0OiA0MCxcclxuICAgIGJnQ29sb3I6ICcjNWQ1ZDVkJyxcclxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICBzaG93OiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgbGV0IGJvcmRlciA9IHtcclxuICAgIHNob3c6IHRydWUsXHJcbiAgICB1cmw6IHRvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2N1c3RvbS9pbWcvbWFwLWJvcmRlcjEuc3ZnJyxcclxuICAgIHdpZHRoOiAyMCxcclxuICB9XHJcblxyXG4gIGxldCBkYXRhID0gW1xyXG4gICAge1xyXG4gICAgICB0ZXh0OiAnJyxcclxuICAgICAgeDogMTAsXHJcbiAgICAgIHk6IDEwMCxcclxuICAgICAgaGVpZ2h0OiAyNCxcclxuICAgICAgZm9udFNpemU6IDI0LFxyXG4gICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6ICctJyxcclxuICAgICAgeDogMTAsXHJcbiAgICAgIHk6IDEwMCxcclxuICAgICAgaGVpZ2h0OiAyNCxcclxuICAgICAgZm9udFNpemU6IDI0LFxyXG4gICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHg6IDEwLFxyXG4gICAgICB5OiAxMDAsXHJcbiAgICAgIHdpZHRoOiAxMDAsXHJcbiAgICAgIGhlaWdodDogMTAwLFxyXG4gICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHVybDogdG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvY3VzdG9tL2ltZy9pY29uLWNvbXBhc3MxLnN2ZydcclxuICAgIH1cclxuICBdXHJcblxyXG4gIC8vIOavlOS+i+WwulxyXG4gIGxldCBwbG90dGluZ1NjYWxlID0ge1xyXG4gICAgY2VsbDogMixcclxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICBzaG93OiB0cnVlLFxyXG4gICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICB4OiAxMCxcclxuICAgIHk6IDEwMCxcclxuICAgIHdpZHRoOiAxMDAsXHJcbiAgfVxyXG5cclxuICBsZXQgY29tcGFzc0xpc3QgPSBbXHJcbiAgICAnL2N1c3RvbS9pbWcvaWNvbi1jb21wYXNzMS5zdmcnLFxyXG4gICAgJy9jdXN0b20vaW1nL2ljb24tY29tcGFzczIuc3ZnJyxcclxuICAgICcvY3VzdG9tL2ltZy9pY29uLWNvbXBhc3MzLnN2ZycsXHJcbiAgICAnL2N1c3RvbS9pbWcvaWNvbi1jb21wYXNzNC5zdmcnXHJcbiAgXVxyXG5cclxuICBpZiAoX0RpYWxvZ09iamVjdCkge1xyXG4gICAgX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICBfRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gIH1cclxuICBfRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyhzZGssIHt9LCB7XHJcbiAgICB0aXRsZTogJ+WcsOWbvuaJk+WNsCcsIGxlZnQ6ICc1JScsIHRvcDogJzEwJScsIGlzbW92ZTogZmFsc2VcclxuICB9KVxyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBtYXAtcHJpbnQnXHJcbiAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBjb250ZW50RWxtLmlubmVySFRNTCA9IGBcclxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPuWbvuS7tuS/oeaBrzwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB0ZW1wbGF0ZS1ib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+5qih5p2/PC9zcGFuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGVcIiBzdHlsZT1cIndpZHRoOiAyMTNweDtcIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDtcIj7moIfpopg8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRpdGxlLWlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGl0bGUtY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNXB4O1wiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPuWItuWbvuaXpeacnzwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicHJpbnQtZGF0ZVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJZWVlZLU1NLUREXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInByaW50LWRhdGUtY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNXB4O1wiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPuWItuWbvuWNleS9jTwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidW5pdC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInVuaXQtY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNXB4O1wiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIG1hcC1ib3JkZXItYm94XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPuWbvuahhjwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxNzNweDtcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1jb2xvclwiIHN0eWxlPVwibWFyZ2luLXRvcDogM3B4O21hcmdpbi1sZWZ0OiAxMnB4O1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtYXAtYm9yZGVyLWNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+5Zyw5Zu+6KaB57SgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7bWFyZ2luLXRvcDogOXB4O1wiPuaMh+WMl+mSiDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY29tcGFzcy1jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTFweDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O2ZsZXgtd3JhcDogd3JhcDtcIj5cclxuICAgICAgICAgICAgICAkeygoKSA9PiB7XHJcbiAgICAgIGxldCBzdHIgPSAnJztcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wYXNzTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhc3MgPSB0b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgY29tcGFzc0xpc3RbaV07XHJcbiAgICAgICAgc3RyICs9IGA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNvbXBhc3MtcmFkaW9cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke2NvbXBhc3N9XCIgYWx0PVwiXCIgc3R5bGU9XCJ3aWR0aDogMzhweDsgaGVpZ2h0OiAzOHB4OyBtYXJnaW46IDAgNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0clxyXG4gICAgfSkoKX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDttYXJnaW4tdG9wOiA5cHg7XCI+5q+U5L6L5bC6PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbG90dGluZy1zY2FsZS1jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTFweDtcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYXAtaW1nLWJveFwiPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgO1xyXG4gIF9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgbGV0IGxlZnRFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xlZnQnKVswXVxyXG4gIGxldCByaWdodEVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmlnaHQnKVswXVxyXG4gIC8vIGxldCBtYXBJbWdCb3hFbG0gPSByaWdodEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXAtaW1nLWJveCcpWzBdXHJcbiAgbGV0IHRpdGxlSW5wdXRFbG0gPSBsZWZ0RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RpdGxlLWlucHV0JylbMF1cclxuICBsZXQgdGl0bGVDaGVja2JveEVsbSA9IGxlZnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGl0bGUtY2hlY2tib3gnKVswXVxyXG4gIGxldCB1bml0SW5wdXRFbG0gPSBsZWZ0RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VuaXQtaW5wdXQnKVswXVxyXG4gIGxldCB1bml0Q2hlY2tib3hFbG0gPSBsZWZ0RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VuaXQtY2hlY2tib3gnKVswXVxyXG4gIGxldCBjb21wYXNzQ2hlY2tib3hFbG0gPSBsZWZ0RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvbXBhc3MtY2hlY2tib3gnKVswXVxyXG4gIGxldCBjb21wYXNzUmFkaW9zRWxtID0gbGVmdEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb21wYXNzLXJhZGlvJylcclxuICBsZXQgcGxvdHRpbmdTY2FsZUNoZWNrYm94RWxtID0gbGVmdEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwbG90dGluZy1zY2FsZS1jaGVja2JveCcpWzBdXHJcbiAgbGV0IG1hcEJvcmRlckNoZWNrYm94RWxtID0gbGVmdEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXAtYm9yZGVyLWNoZWNrYm94JylbMF1cclxuXHJcblxyXG4gIGxldCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICBsZXQgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgcmlnaHRFbG0uYXBwZW5kQ2hpbGQoY2FudmFzKVxyXG4gIGxldCBpbWdFbG0gPSBuZXcgSW1hZ2UoKTtcclxuICBpbWdFbG0uc3JjID0gdGh1bWJuYWlsSW1nXHJcblxyXG4gIGltZ0VsbS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpc0xvYWQgPSBmYWxzZVxyXG4gICAgZ2V0UGxvdHRpbmdTY2FsZSgpXHJcbiAgICBjaGFuZ2VUZW1wbGF0ZSh0ZW1wbGF0ZSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8g5qCH6aKYXHJcbiAgdGl0bGVJbnB1dEVsbS52YWx1ZSA9IHRpdGxlLnRleHQ7XHJcbiAgdGl0bGVDaGVja2JveEVsbS5jaGVja2VkID0gdGl0bGUuc2hvdztcclxuICB0aXRsZUlucHV0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgdGl0bGUudGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAoaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgIHVwZGF0ZUNhbnZhcygpXHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgdGl0bGVDaGVja2JveEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aXRsZS5zaG93ID0gdGhpcy5jaGVja2VkO1xyXG4gICAgaWYgKGltZ0VsbS5jb21wbGV0ZSkge1xyXG4gICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyDliLblm77ljZXkvY1cclxuICB1bml0SW5wdXRFbG0udmFsdWUgPSBkYXRhWzFdLnRleHQ7XHJcbiAgdW5pdENoZWNrYm94RWxtLmNoZWNrZWQgPSBkYXRhWzFdLnNob3c7XHJcbiAgdW5pdElucHV0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgZGF0YVsxXS50ZXh0ID0gdGhpcy52YWx1ZTtcclxuICAgIGlmIChpbWdFbG0gJiYgaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgIHVwZGF0ZUNhbnZhcygpXHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgdW5pdENoZWNrYm94RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIGRhdGFbMV0uc2hvdyA9IHRoaXMuY2hlY2tlZDtcclxuICAgIGlmIChpbWdFbG0gJiYgaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgIHVwZGF0ZUNhbnZhcygpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgLy8g5oyH5YyX6ZKIXHJcbiAgY29tcGFzc0NoZWNrYm94RWxtLmNoZWNrZWQgPSBkYXRhWzJdLnNob3c7XHJcbiAgY29tcGFzc0NoZWNrYm94RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIGRhdGFbMl0uc2hvdyA9IHRoaXMuY2hlY2tlZDtcclxuICAgIGlmIChpbWdFbG0gJiYgaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgIHVwZGF0ZUNhbnZhcygpXHJcbiAgICB9XHJcbiAgfSlcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBhc3NSYWRpb3NFbG0ubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbXBhc3NSYWRpb3NFbG1baV0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgICAgZGF0YVsyXS5zdmcgPSBudWxsXHJcbiAgICAgICAgZGF0YVsyXS51cmwgPSBjb21wYXNzTGlzdFtpXVxyXG4gICAgICAgIGlmIChpbWdFbG0gJiYgaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIOavlOS+i+WwulxyXG4gIHBsb3R0aW5nU2NhbGVDaGVja2JveEVsbS5jaGVja2VkID0gcGxvdHRpbmdTY2FsZS5zaG93O1xyXG4gIHBsb3R0aW5nU2NhbGVDaGVja2JveEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBwbG90dGluZ1NjYWxlLnNob3cgPSB0aGlzLmNoZWNrZWQ7XHJcbiAgICBpZiAoaW1nRWxtICYmIGltZ0VsbS5jb21wbGV0ZSkge1xyXG4gICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIC8vIOWbvuahhlxyXG4gIG1hcEJvcmRlckNoZWNrYm94RWxtLmNoZWNrZWQgPSBib3JkZXIuc2hvdztcclxuICBtYXBCb3JkZXJDaGVja2JveEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBib3JkZXIuc2hvdyA9IHRoaXMuY2hlY2tlZDtcclxuICAgIGlmIChib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgbGV0IGJvcmRlckNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYm9yZGVyLWNvbG9yJylbMF0sXHJcbiAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICBhbHBoYTogZmFsc2UsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICBkZWZhdWx0Q29sb3I6IGJvcmRlci5jb2xvcixcclxuICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgY2hhbmdlTWFwQm9yZGVyQ29sb3IoY29sb3IpXHJcbiAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgY2hhbmdlTWFwQm9yZGVyQ29sb3IoJ3JnYmEoMCwwLDAsMSknKVxyXG4gICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gIH0pXHJcblxyXG5cclxuXHJcbiAgbGV0IGplRGF0ZU9iamVjdFxyXG5cclxuXHJcbiAgbGV0IHByaW50RGF0ZUNoZWNrYm94RWxtXHJcbiAgbGV0IG1hcEJvcmRlckRhdGFMZWdwRWxtXHJcbiAgbGV0IG1hcEJvcmRlck9iamVjdFxyXG4gIGxldCBpQWN0aXZlRWxtXHJcblxyXG4gIGxldCBjbG9zZUJ0blxyXG4gIGxldCBleHBvcnRCdG5cclxuXHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICBjbG9zZUJ0biA9IF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9zZScpWzBdXHJcbiAgICBleHBvcnRCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKVxyXG4gICAgZXhwb3J0QnRuLmNsYXNzTmFtZSA9ICdleHBvcnQnO1xyXG4gICAgZXhwb3J0QnRuLmlubmVySFRNTCA9ICfmiZPljbAnO1xyXG4gICAgbGVmdEVsbS5hcHBlbmRDaGlsZChjbG9zZUJ0bilcclxuICAgIGxlZnRFbG0uYXBwZW5kQ2hpbGQoZXhwb3J0QnRuKVxyXG4gICAgZXhwb3J0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoZXhwb3J0aW5nKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgZXhwb3J0aW5nID0gdHJ1ZVxyXG4gICAgICBleHBvcnRCdG4uaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOiAwO2xlZnQ6IDA7Ym9yZGVyLXJhZGl1czogM3B4O2JhY2tncm91bmQtY29sb3I6ICM2Zjg5ODQ4ZjtcIj48c3ZnIGNsYXNzPVwiaWNvbi1sb2FkXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tbG9hZFwiPjwvdXNlPjwvc3ZnPjwvc3Bhbj7miZPljbAnXHJcbiAgICAgIGV4cG9ydE1hcCgpXHJcbiAgICAgIC8vIGV4cG9ydGluZyA9IHRydWVcclxuICAgICAgLy8gZXhwb3J0QnRuLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDogMDtsZWZ0OiAwO2JvcmRlci1yYWRpdXM6IDNweDtiYWNrZ3JvdW5kLWNvbG9yOiAjNmY4OTg0OGY7XCI+PHN2ZyBjbGFzcz1cImljb24tbG9hZFwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWxvYWRcIj48L3VzZT48L3N2Zz48L3NwYW4+5omT5Y2wJ1xyXG4gICAgICAvLyBsZXQgaW1nQmxvYkRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgICAgIC8vIGxldCBkb3dubG9hZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIC8vIGRvd25sb2FkRWxlbWVudC5ocmVmID0gaW1nQmxvYkRhdGE7XHJcbiAgICAgIC8vIGRvd25sb2FkRWxlbWVudC5kb3dubG9hZCA9IGDpq5jmuIXlh7rlm74tJHtnZXREYXRlVGltZVN0cmluZygpfS5wbmdgO1xyXG4gICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkRWxlbWVudCk7XHJcbiAgICAgIC8vIGRvd25sb2FkRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAvLyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvd25sb2FkRWxlbWVudCk7XHJcbiAgICAgIC8vIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nQmxvYkRhdGEpO1xyXG4gICAgfSlcclxuXHJcblxyXG4gICAgLy8g5pe26Ze0XHJcbiAgICBsZXQgcHJpbnREYXRlRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcmludC1kYXRlJylbMF1cclxuICAgIHByaW50RGF0ZUNoZWNrYm94RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcmludC1kYXRlLWNoZWNrYm94JylbMF1cclxuXHJcbiAgICBwcmludERhdGVDaGVja2JveEVsbS5jaGVja2VkID0gZGF0YVswXS5zaG93O1xyXG4gICAgcHJpbnREYXRlQ2hlY2tib3hFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBkYXRhWzBdLnNob3cgPSB0aGlzLmNoZWNrZWQ7XHJcbiAgICAgIGlmIChpbWdFbG0uY29tcGxldGUpIHtcclxuICAgICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgamVEYXRlT2JqZWN0ID0gamVEYXRlKHByaW50RGF0ZUVsbSwge1xyXG4gICAgICBmb3JtYXQ6IFwiWVlZWS1NTS1ERFwiLFxyXG4gICAgICBpc2luaXRWYWw6IHRydWUsXHJcbiAgICAgIGlzQ2xlYXI6IGZhbHNlLFxyXG4gICAgICBkb25lZnVuOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZGF0YVswXS50ZXh0ID0gb2JqLnZhbDtcclxuICAgICAgICBpZiAoaW1nRWxtLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgICB1cGRhdGVDYW52YXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZGF0YVswXS50ZXh0KSB7XHJcbiAgICAgIGplRGF0ZU9iamVjdC5zZXRWYWx1ZShkYXRhWzBdLnRleHQpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgamVEYXRlT2JqZWN0Lm5vd0J0biAmJiBqZURhdGVPYmplY3Qubm93QnRuKClcclxuICAgICAgZGF0YVswXS50ZXh0ID0gamVEYXRlT2JqZWN0LmdldFZhbHVlKClcclxuICAgICAgdXBkYXRlQ2FudmFzKClcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8g5qih5p2/XHJcbiAgICAvLyBsZXQgdGVtcGxhdGVEYXRhID0gdGVtcGxhdGVEYXRhXHJcbiAgICBsZXQgdGVtcGxhdGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAndGVtcGxhdGUtYm94J1xyXG4gICAgICApWzBdLFxyXG4gICAgICAnLnRlbXBsYXRlJ1xyXG4gICAgKVxyXG4gICAgaWYgKHRlbXBsYXRlT2JqZWN0KSB7XHJcbiAgICAgIHRlbXBsYXRlT2JqZWN0LmxlZ3Bfc2VhcmNoKHRlbXBsYXRlRGF0YSlcclxuICAgICAgbGV0IHRlbXBsYXRlRGF0YUxlZ3BFbG0gPSBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGVtcGxhdGUnKVswXVxyXG4gICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBsYXRlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZURhdGFbaV0uaWQgPT0gdGVtcGxhdGUpIHtcclxuICAgICAgICAgIHRlbXBsYXRlRGF0YUxlZ3BFbG0udmFsdWUgPSB0ZW1wbGF0ZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgIHRlbXBsYXRlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRlbXBsYXRlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW1wbGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0ZW1wbGF0ZURhdGFbaV0udmFsdWUgPT09IHRlbXBsYXRlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgY2hhbmdlVGVtcGxhdGUodGVtcGxhdGVEYXRhW2ldLmlkKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvLyDlm77moYZcclxuICAgIGxldCBtYXBCb3JkZXJEYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyMS5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXIxLnN2ZycsXHJcbiAgICAgICAga2V5OiAwLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyMi5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXIyLnN2ZycsXHJcbiAgICAgICAga2V5OiAxLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyMy5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXIzLnN2ZycsXHJcbiAgICAgICAga2V5OiAyLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyNC5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXI0LnN2ZycsXHJcbiAgICAgICAga2V5OiAzLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyNS5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXI1LnN2ZycsXHJcbiAgICAgICAga2V5OiA0LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vY3VzdG9tL2ltZy9tYXAtYm9yZGVyNi5zdmcpO2JhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcIj48L3NwYW4+YCxcclxuICAgICAgICB2YWx1ZTogJy9jdXN0b20vaW1nL21hcC1ib3JkZXI2LnN2ZycsXHJcbiAgICAgICAga2V5OiA1LFxyXG4gICAgICB9LFxyXG4gICAgXVxyXG4gICAgbWFwQm9yZGVyT2JqZWN0ID0gbGVncChcclxuICAgICAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ21hcC1ib3JkZXItYm94J1xyXG4gICAgICApWzBdLFxyXG4gICAgICAnLm1hcC1ib3JkZXInXHJcbiAgICApXHJcbiAgICBpZiAobWFwQm9yZGVyT2JqZWN0KSB7XHJcbiAgICAgIG1hcEJvcmRlck9iamVjdC5sZWdwX3NlYXJjaChtYXBCb3JkZXJEYXRhKVxyXG4gICAgICBpQWN0aXZlRWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgIGlBY3RpdmVFbG0uY2xhc3NOYW1lID0gXCJpY29uIGljb24tYWN0aXZlXCJcclxuICAgICAgaUFjdGl2ZUVsbS5zdHlsZS53aWR0aCA9ICdjYWxjKDEwMCUgLSA0MHB4KSdcclxuICAgICAgaUFjdGl2ZUVsbS5zdHlsZS5oZWlnaHQgPSAnY2FsYygxMDAlIC0gMTJweCknXHJcbiAgICAgIGlBY3RpdmVFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICAgIGlBY3RpdmVFbG0uc3R5bGUudG9wID0gJzZweCdcclxuICAgICAgaUFjdGl2ZUVsbS5zdHlsZS5sZWZ0ID0gJzEwcHgnXHJcbiAgICAgIGlBY3RpdmVFbG0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJ1xyXG4gICAgICBpQWN0aXZlRWxtLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHt0b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgYm9yZGVyLnVybH0pYFxyXG4gICAgICBpQWN0aXZlRWxtLnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2F1dG8gMTAwJSdcclxuICAgICAgaUFjdGl2ZUVsbS5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ3JlcGVhdC14J1xyXG4gICAgICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWFwLWJvcmRlcicpWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2N5X2RhdGFsaXN0JylbMF0uYXBwZW5kQ2hpbGQoaUFjdGl2ZUVsbSlcclxuICAgICAgbWFwQm9yZGVyRGF0YUxlZ3BFbG0gPSBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWFwLWJvcmRlcicpWzBdXHJcbiAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIG1hcEJvcmRlckRhdGFMZWdwRWxtLnN0eWxlLmZvbnRTaXplID0gMFxyXG4gICAgICBtYXBCb3JkZXJEYXRhTGVncEVsbS5zdHlsZS5jb2xvciA9ICd0cmFuc3BhcmVudCdcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXBCb3JkZXJEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1hcEJvcmRlckRhdGFbaV0udmFsdWUgPT0gYm9yZGVyLnVybCkge1xyXG4gICAgICAgICAgbWFwQm9yZGVyRGF0YUxlZ3BFbG0udmFsdWUgPSBtYXBCb3JkZXJEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICBtYXBCb3JkZXJPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgICAgIG1hcEJvcmRlckRhdGFbaV0udmFsdWVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG1hcEJvcmRlckRhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwQm9yZGVyRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKG1hcEJvcmRlckRhdGFbaV0udmFsdWUgPT09IG1hcEJvcmRlckRhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlBY3RpdmVFbG0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3Rvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyBtYXBCb3JkZXJEYXRhW2ldLnZhbHVlfSlgXHJcbiAgICAgICAgICAgIGNoYW5nZU1hcEJvcmRlcihtYXBCb3JkZXJEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9LCAwKTtcclxuXHJcbiAgZnVuY3Rpb24gaW5pdERhdGEoKSB7XHJcbiAgICBpZiAoaXNMb2FkKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbWFyZ2luID0gbWFyZ2luICogaW1nRWxtLndpZHRoXHJcbiAgICB0cmlnZ2VyUmFuZ2UgPSBpbWdFbG0uaGVpZ2h0IC8gMTQwO1xyXG5cclxuICAgIHRpdGxlSW5wdXRFbG0udmFsdWUgPSB0aXRsZS50ZXh0O1xyXG4gICAgdGl0bGVDaGVja2JveEVsbS5jaGVja2VkID0gdGl0bGUuc2hvdztcclxuICAgIHVuaXRJbnB1dEVsbS52YWx1ZSA9IGRhdGFbMV0udGV4dDtcclxuICAgIHVuaXRDaGVja2JveEVsbS5jaGVja2VkID0gZGF0YVsxXS5zaG93O1xyXG4gICAgY29tcGFzc0NoZWNrYm94RWxtLmNoZWNrZWQgPSBkYXRhWzJdLnNob3c7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBhc3NMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChjb21wYXNzTGlzdFtpXSA9PT0gZGF0YVsyXS51cmwpIHtcclxuICAgICAgICBjb21wYXNzUmFkaW9zRWxtW2ldLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHBsb3R0aW5nU2NhbGVDaGVja2JveEVsbS5jaGVja2VkID0gcGxvdHRpbmdTY2FsZS5zaG93O1xyXG5cclxuICAgIGJvcmRlci53aWR0aCA9IGltZ0VsbS53aWR0aCAqIGJvcmRlci53aWR0aFxyXG4gICAgbGV0IGFsbG1hcmdpbiA9IG1hcmdpblxyXG4gICAgaWYgKGJvcmRlci5zaG93ICYmIGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLmNvbXBsZXRlKSB7XHJcbiAgICAgIGFsbG1hcmdpbiA9IGFsbG1hcmdpbiArIGJvcmRlci53aWR0aFxyXG4gICAgfVxyXG5cclxuICAgIGNhbnZhcy53aWR0aCA9IGltZ0VsbS53aWR0aCArIChhbGxtYXJnaW4gKiAyKVxyXG4gICAgY2FudmFzLmhlaWdodCA9IGltZ0VsbS5oZWlnaHQgKyAoYWxsbWFyZ2luICogMilcclxuXHJcbiAgICBwcmludERhdGVDaGVja2JveEVsbSAmJiAocHJpbnREYXRlQ2hlY2tib3hFbG0uY2hlY2tlZCA9IGRhdGFbMF0uc2hvdyk7XHJcbiAgICBpZiAoamVEYXRlT2JqZWN0KSB7XHJcbiAgICAgIGlmIChkYXRhWzBdLnRleHQpIHtcclxuICAgICAgICBqZURhdGVPYmplY3Quc2V0VmFsdWUoZGF0YVswXS50ZXh0KVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGplRGF0ZU9iamVjdC5ub3dCdG4gJiYgamVEYXRlT2JqZWN0Lm5vd0J0bigpXHJcbiAgICAgICAgZGF0YVswXS50ZXh0ID0gamVEYXRlT2JqZWN0LmdldFZhbHVlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHBsb3R0aW5nU2NhbGUueCA9IGltZ0VsbS53aWR0aCAqIHBsb3R0aW5nU2NhbGUueDtcclxuICAgIC8vIHBsb3R0aW5nU2NhbGUueSA9IGltZ0VsbS5oZWlnaHQgKiBwbG90dGluZ1NjYWxlLnk7XHJcblxyXG5cclxuICAgIGlmIChtYXBCb3JkZXJPYmplY3QgJiYgbWFwQm9yZGVyRGF0YUxlZ3BFbG0gJiYgaUFjdGl2ZUVsbSkge1xyXG4gICAgICBtYXBCb3JkZXJEYXRhTGVncEVsbS52YWx1ZSA9IGJvcmRlci51cmw7XHJcbiAgICAgIG1hcEJvcmRlck9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICBib3JkZXIudXJsXHJcbiAgICAgIClcclxuICAgICAgaUFjdGl2ZUVsbS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArIGJvcmRlci51cmx9KWBcclxuICAgIH1cclxuICAgIG1hcEJvcmRlckNoZWNrYm94RWxtLmNoZWNrZWQgPSBib3JkZXIuc2hvdztcclxuICAgIGJvcmRlckltYWdlID0gbnVsbFxyXG4gICAgaWYgKGJvcmRlciAmJiBib3JkZXIudXJsKSB7XHJcbiAgICAgIGNoYW5nZU1hcEJvcmRlcihib3JkZXIudXJsKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hhbmdlVGVtcGxhdGUodikge1xyXG4gICAgdGVtcGxhdGUgPSB2XHJcbiAgICB0ZW1wbGF0ZURhdGEgPSBnZXRUZW1wbGF0ZURhdGEodG9vbHMpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBsYXRlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGVtcGxhdGVEYXRhW2ldLmlkID09PSB0ZW1wbGF0ZSkge1xyXG4gICAgICAgIHRpdGxlID0gdGVtcGxhdGVEYXRhW2ldLnRpdGxlIHx8IHRpdGxlXHJcbiAgICAgICAgbWFyZ2luID0gKCghdGVtcGxhdGVEYXRhW2ldLm1hcmdpbiAmJiB0ZW1wbGF0ZURhdGFbaV0ubWFyZ2luICE9IDApID8gbWFyZ2luIDogdGVtcGxhdGVEYXRhW2ldLm1hcmdpbilcclxuICAgICAgICBkYXRhID0gdGVtcGxhdGVEYXRhW2ldLmRhdGEgfHwgZGF0YVxyXG4gICAgICAgIGJvcmRlciA9IHRlbXBsYXRlRGF0YVtpXS5ib3JkZXIgfHwgYm9yZGVyXHJcbiAgICAgICAgYm9yZGVyLmNvbG9yID0gYm9yZGVyLmNvbG9yIHx8ICcjMDAwMDAwJ1xyXG4gICAgICAgIHBsb3R0aW5nU2NhbGUgPSB0ZW1wbGF0ZURhdGFbaV0ucGxvdHRpbmdTY2FsZSB8fCBwbG90dGluZ1NjYWxlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaW5pdERhdGEoKVxyXG4gICAgdXBkYXRlQ2FudmFzKClcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZU1hcEJvcmRlcih2KSB7XHJcbiAgICBib3JkZXIudXJsID0gdlxyXG4gICAgaWYgKCFib3JkZXIudXJsKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgYm9yZGVySW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGJvcmRlckltYWdlLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICBpZiAoYm9yZGVyLnVybC5lbmRzV2l0aCgnc3ZnJykpIHtcclxuICAgICAgZmV0Y2godG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArIGJvcmRlci51cmwpLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICBzdmdUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG4gICAgICAgICAgY2hhbmdlTWFwQm9yZGVyQ29sb3IoYm9yZGVyLmNvbG9yKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBib3JkZXJJbWFnZS5zcmMgPSB0b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgYm9yZGVyLnVybDtcclxuICAgICAgYm9yZGVySW1hZ2Uub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChib3JkZXIuc2hvdykge1xyXG4gICAgICAgICAgdXBkYXRlQ2FudmFzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjaGFuZ2VNYXBCb3JkZXJDb2xvcihjb2xvcikge1xyXG4gICAgYm9yZGVyLmNvbG9yID0gY29sb3IgfHwgJyMwMDAwMDAnXHJcbiAgICBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2JvcmRlci1jb2xvcicpWzBdLFxyXG4gICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgIGFscGhhOiBmYWxzZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgZGVmYXVsdENvbG9yOiBib3JkZXIuY29sb3IsXHJcbiAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgY2hhbmdlTWFwQm9yZGVyQ29sb3IoY29sb3IpXHJcbiAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgY2hhbmdlTWFwQm9yZGVyQ29sb3IoJ3JnYmEoMCwwLDAsMSknKVxyXG4gICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICB9KVxyXG4gICAgbGV0IGN1cnJlbnRTdmdcclxuICAgIGxldCBzdmdEYXRhVXJsXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgY29uc3QgY29sb3JSZWdleCA9IC9maWxsPVwiW15cIl0rXCIvZztcclxuICAgICAgY3VycmVudFN2ZyA9IHN2Z1RleHQucmVwbGFjZShjb2xvclJlZ2V4LCBgZmlsbD1cIiR7Y29sb3J9XCJgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjdXJyZW50U3ZnID0gc3ZnVGV4dFxyXG4gICAgfVxyXG4gICAgc3ZnRGF0YVVybCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcgK1xyXG4gICAgICBidG9hKEFycmF5LmZyb20obmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGN1cnJlbnRTdmcpLFxyXG4gICAgICAgIChieXRlKSA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpKS5qb2luKCcnKSk7XHJcbiAgICBib3JkZXJJbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgYm9yZGVySW1hZ2Uuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKTtcclxuICAgIGJvcmRlckltYWdlLnNyYyA9IHN2Z0RhdGFVcmw7XHJcbiAgICBib3JkZXJJbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChib3JkZXIuc2hvdykge1xyXG4gICAgICAgIHVwZGF0ZUNhbnZhcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgbGV0IHRyaWdnZXJSYW5nZSA9IDU7XHJcbiAgbGV0IHNlbGVjdGVkRWxlbWVudCA9IG51bGw7XHJcbiAgbGV0IGlzRHJhZ2dpbmdFbGVtZW50ID0gZmFsc2U7XHJcbiAgbGV0IGlzUmVzaXppbmdFbGVtZW50ID0gZmFsc2U7XHJcbiAgbGV0IHJlc2l6ZUNvcm5lciA9IG51bGw7XHJcbiAgbGV0IHN0YXJ0WCwgc3RhcnRZLCBzdGFydFkyLCBzdGFydFgyO1xyXG4gIGxldCBlbGVtZW50T2Zmc2V0WCwgZWxlbWVudE9mZnNldFk7XHJcbiAgbGV0IGVsZW1lbnRXaWR0aCwgZWxlbWVudEhlaWdodDtcclxuICBsZXQgY3VycmVudEZvbnRTaXplOyAvLyDorrDlvZXlvZPliY3lrZfkvZPlpKflsI9cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q2FudmFzTW91c2VZKGUpIHtcclxuICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHJlY3Qud2lkdGg7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSByZWN0LmhlaWdodDtcclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcclxuXHJcbiAgICBsZXQgc2NhbGU7XHJcbiAgICBpZiAoY2FudmFzV2lkdGggLyBjYW52YXNIZWlnaHQgPiBjb250YWluZXJXaWR0aCAvIGNvbnRhaW5lckhlaWdodCkge1xyXG4gICAgICBzY2FsZSA9IGNvbnRhaW5lcldpZHRoIC8gY2FudmFzV2lkdGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzY2FsZSA9IGNvbnRhaW5lckhlaWdodCAvIGNhbnZhc0hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY2FsZWRXaWR0aCA9IGNhbnZhc1dpZHRoICogc2NhbGU7XHJcbiAgICBjb25zdCBzY2FsZWRIZWlnaHQgPSBjYW52YXNIZWlnaHQgKiBzY2FsZTtcclxuICAgIGNvbnN0IG9mZnNldFggPSAoY29udGFpbmVyV2lkdGggLSBzY2FsZWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3Qgb2Zmc2V0WSA9IChjb250YWluZXJIZWlnaHQgLSBzY2FsZWRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICBjb25zdCBjbGllbnRZID0gZS5jbGllbnRZIC0gcmVjdC50b3AgLSBvZmZzZXRZO1xyXG4gICAgcmV0dXJuIGNsaWVudFkgLyBzY2FsZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENhbnZhc01vdXNlWChlKSB7XHJcbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSByZWN0LndpZHRoO1xyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy53aWR0aDtcclxuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcblxyXG4gICAgbGV0IHNjYWxlO1xyXG4gICAgaWYgKGNhbnZhc1dpZHRoIC8gY2FudmFzSGVpZ2h0ID4gY29udGFpbmVyV2lkdGggLyBjb250YWluZXJIZWlnaHQpIHtcclxuICAgICAgc2NhbGUgPSBjb250YWluZXJXaWR0aCAvIGNhbnZhc1dpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2NhbGUgPSBjb250YWluZXJIZWlnaHQgLyBjYW52YXNIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2NhbGVkV2lkdGggPSBjYW52YXNXaWR0aCAqIHNjYWxlO1xyXG4gICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gY2FudmFzSGVpZ2h0ICogc2NhbGU7XHJcbiAgICBjb25zdCBvZmZzZXRYID0gKGNvbnRhaW5lcldpZHRoIC0gc2NhbGVkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG9mZnNldFkgPSAoY29udGFpbmVySGVpZ2h0IC0gc2NhbGVkSGVpZ2h0KSAvIDI7XHJcblxyXG4gICAgY29uc3QgY2xpZW50WCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIG9mZnNldFg7XHJcbiAgICByZXR1cm4gY2xpZW50WCAvIHNjYWxlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q29ybmVycyhlbGVtZW50LCBhbGxtYXJnaW4pIHtcclxuICAgIGxldCBlbGVtZW50WCA9IGVsZW1lbnQueCAqIGltZ0VsbS53aWR0aCArIGFsbG1hcmdpbjtcclxuICAgIGxldCBlbGVtZW50WSA9IGVsZW1lbnQueSAqIGltZ0VsbS5oZWlnaHQgKyBhbGxtYXJnaW47XHJcbiAgICBsZXQgZWxlbWVudFdpZHRoID0gZWxlbWVudC53aWR0aCAqIGltZ0VsbS5oZWlnaHQ7XHJcbiAgICBsZXQgZWxlbWVudEhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0ICogaW1nRWxtLmhlaWdodDtcclxuICAgIGlmICgndGV4dCcgaW4gZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHsgeDogZWxlbWVudFgsIHk6IGVsZW1lbnRZIC0gZWxlbWVudEhlaWdodCB9LFxyXG4gICAgICAgIHsgeDogZWxlbWVudFggKyBlbGVtZW50V2lkdGgsIHk6IGVsZW1lbnRZIC0gZWxlbWVudEhlaWdodCB9LFxyXG4gICAgICAgIHsgeDogZWxlbWVudFgsIHk6IGVsZW1lbnRZIH0sXHJcbiAgICAgICAgeyB4OiBlbGVtZW50WCArIGVsZW1lbnRXaWR0aCwgeTogZWxlbWVudFkgfVxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIGlmICgndXJsJyBpbiBlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgeyB4OiBlbGVtZW50WCwgeTogZWxlbWVudFkgfSxcclxuICAgICAgICB7IHg6IGVsZW1lbnRYICsgZWxlbWVudFdpZHRoLCB5OiBlbGVtZW50WSB9LFxyXG4gICAgICAgIHsgeDogZWxlbWVudFgsIHk6IGVsZW1lbnRZICsgZWxlbWVudEhlaWdodCB9LFxyXG4gICAgICAgIHsgeDogZWxlbWVudFggKyBlbGVtZW50V2lkdGgsIHk6IGVsZW1lbnRZICsgZWxlbWVudEhlaWdodCB9XHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDmr5TkvovlsLpcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICB7IHg6IGVsZW1lbnRYLCB5OiBlbGVtZW50WSB9LFxyXG4gICAgICAgIHsgeDogZWxlbWVudFggKyBlbGVtZW50V2lkdGgsIHk6IGVsZW1lbnRZIH0sXHJcbiAgICAgICAgeyB4OiBlbGVtZW50WCwgeTogZWxlbWVudFkgKyBlbGVtZW50SGVpZ2h0IH0sXHJcbiAgICAgICAgeyB4OiBlbGVtZW50WCArIGVsZW1lbnRXaWR0aCwgeTogZWxlbWVudFkgKyBlbGVtZW50SGVpZ2h0IH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQ2FudmFzKCkge1xyXG4gICAgaWYgKGlzTG9hZCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgYWxsbWFyZ2luID0gbWFyZ2luXHJcbiAgICBpZiAoYm9yZGVyLnNob3cgJiYgYm9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UuY29tcGxldGUpIHtcclxuICAgICAgYWxsbWFyZ2luID0gYWxsbWFyZ2luICsgYm9yZGVyLndpZHRoXHJcbiAgICB9XHJcblxyXG4gICAgY2FudmFzLndpZHRoID0gaW1nRWxtLndpZHRoICsgKGFsbG1hcmdpbiAqIDIpXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gaW1nRWxtLmhlaWdodCArIChhbGxtYXJnaW4gKiAyKVxyXG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgY3R4LnJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBcIiNmZmZmZmZcIjtcclxuICAgIGN0eC5maWxsKCk7XHJcbiAgICBjdHguZHJhd0ltYWdlKGltZ0VsbSwgYWxsbWFyZ2luLCBhbGxtYXJnaW4sIGltZ0VsbS53aWR0aCwgaW1nRWxtLmhlaWdodCk7XHJcblxyXG4gICAgLy8g5qCH6aKY5YaF5a65XHJcbiAgICBpZiAodGl0bGUuc2hvdykge1xyXG4gICAgICBjb25zdCB0ZXh0ID0gdGl0bGUudGV4dDtcclxuICAgICAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1heCg1LCAodGl0bGUuaGVpZ2h0ICogaW1nRWxtLmhlaWdodCkgKiAwLjUpO1xyXG4gICAgICBjdHguZm9udCA9IGAke2ZvbnRTaXplfXB4IHNlcmlmYDtcclxuICAgICAgLy8gY29uc3QgdGV4dFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gdGl0bGUuYmdDb2xvciB8fCAnIzVkNWQ1ZCc7XHJcblxyXG4gICAgICBjdHguZmlsbFJlY3QoYWxsbWFyZ2luLCBhbGxtYXJnaW4sIGNhbnZhcy53aWR0aCAtIChhbGxtYXJnaW4gKiAyKSwgKHRpdGxlLmhlaWdodCAqIGltZ0VsbS5oZWlnaHQpKTtcclxuXHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSB0aXRsZS5jb2xvciB8fCAnd2hpdGUnO1xyXG4gICAgICBjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcclxuICAgICAgY3R4LmZpbGxUZXh0KHRleHQsIGNhbnZhcy53aWR0aCAvIDIsICgodGl0bGUuaGVpZ2h0ICogaW1nRWxtLmhlaWdodCkgLyAyKSArIGFsbG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5YW25LuW5YaF5a65XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGRhdGFbaV0uc2hvdykge1xyXG4gICAgICAgIGlmICgndGV4dCcgaW4gZGF0YVtpXSkge1xyXG4gICAgICAgICAgY3R4LmZvbnQgPSBgJHtpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS5oZWlnaHR9cHggc2VyaWZgO1xyXG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGRhdGFbaV0uY29sb3IgfHwgJ3doaXRlJztcclxuICAgICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcbiAgICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XHJcbiAgICAgICAgICBkYXRhW2ldLndpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGRhdGFbaV0udGV4dCkud2lkdGggLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGRhdGFbaV0udGV4dCwgKGltZ0VsbS53aWR0aCAqIGRhdGFbaV0ueCkgKyBhbGxtYXJnaW4sIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSArIGFsbG1hcmdpbik7XHJcbiAgICAgICAgICBpZiAoZGF0YVtpXS5pc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGRyYXdTZWxlY3Rpb25Cb3JkZXIoZGF0YVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCd1cmwnIGluIGRhdGFbaV0pIHtcclxuICAgICAgICAgIGlmIChkYXRhW2ldLnN2ZyAmJiBkYXRhW2ldLnN2Zy5jb21wbGV0ZSkge1xyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGRhdGFbaV0uc3ZnLCAoaW1nRWxtLndpZHRoICogZGF0YVtpXS54KSArIGFsbG1hcmdpbiwgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpICsgYWxsbWFyZ2luLCBpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS53aWR0aCwgaW1nRWxtLmhlaWdodCAqIGRhdGFbaV0uaGVpZ2h0KTtcclxuICAgICAgICAgICAgaWYgKGRhdGFbaV0uaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgIGRyYXdTZWxlY3Rpb25Cb3JkZXIoZGF0YVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzdmcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgc3ZnLnNyYyA9IHRvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyBkYXRhW2ldLnVybDtcclxuICAgICAgICAgICAgc3ZnLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBkYXRhW2ldLnN2ZyA9IHN2Z1xyXG4gICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2Uoc3ZnLCAoaW1nRWxtLndpZHRoICogZGF0YVtpXS54KSArIGFsbG1hcmdpbiwgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpICsgYWxsbWFyZ2luLCBpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS53aWR0aCwgaW1nRWxtLmhlaWdodCAqIGRhdGFbaV0uaGVpZ2h0KTtcclxuICAgICAgICAgICAgICBpZiAoZGF0YVtpXS5pc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBkcmF3U2VsZWN0aW9uQm9yZGVyKGRhdGFbaV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOavlOS+i+WwulxyXG4gICAgaWYgKHBsb3R0aW5nU2NhbGUuc2hvdykge1xyXG4gICAgICBsZXQgYWxsbWFyZ2luID0gbWFyZ2luXHJcbiAgICAgIGlmIChib3JkZXIuc2hvdyAmJiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICAgIGFsbG1hcmdpbiA9IGFsbG1hcmdpbiArIGJvcmRlci53aWR0aFxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwbG90dGluZ1NjYWxlWCA9IGltZ0VsbS53aWR0aCAqIHBsb3R0aW5nU2NhbGUueCArIGFsbG1hcmdpblxyXG4gICAgICBsZXQgcGxvdHRpbmdTY2FsZVkgPSBpbWdFbG0uaGVpZ2h0ICogcGxvdHRpbmdTY2FsZS55ICsgYWxsbWFyZ2luXHJcbiAgICAgIGxldCB1bml0ID0gJ20nXHJcbiAgICAgIC8vIGNvbnN0IGZvbnRTaXplID0gcGxvdHRpbmdTY2FsZS53aWR0aCAqIDAuMTI7XHJcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gaW1nRWxtLndpZHRoICogMC4wOCAqIDAuMTI7XHJcbiAgICAgIGxldCBzcGFjaW5nID0gaW1nRWxtLndpZHRoICogMC4wOCAvIHBsb3R0aW5nU2NhbGUuY2VsbDtcclxuICAgICAgbGV0IHNwYWNpbmdEaXN0YW5jZSA9IE1hdGgucm91bmQodW5pdERpc3RhbmNlICogc3BhY2luZyk7XHJcbiAgICAgIGxldCBzcGFjaW5nRGlzdGFuY2VTdHJpbmcgPSBzcGFjaW5nRGlzdGFuY2UgKyAnJ1xyXG4gICAgICBpZiAoc3BhY2luZ0Rpc3RhbmNlIDwgMTApIHtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzcGFjaW5nRGlzdGFuY2UgPSBOdW1iZXIoc3BhY2luZ0Rpc3RhbmNlU3RyaW5nWzBdKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhY2luZ0Rpc3RhbmNlU3RyaW5nLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgc3BhY2luZ0Rpc3RhbmNlID0gc3BhY2luZ0Rpc3RhbmNlICogMTBcclxuICAgICAgICB9XHJcbiAgICAgICAgc3BhY2luZyA9IHNwYWNpbmdEaXN0YW5jZSAvIHVuaXREaXN0YW5jZVxyXG4gICAgICB9XHJcbiAgICAgIHBsb3R0aW5nU2NhbGUud2lkdGggPSBzcGFjaW5nICogcGxvdHRpbmdTY2FsZS5jZWxsO1xyXG4gICAgICBwbG90dGluZ1NjYWxlLmhlaWdodCA9IHBsb3R0aW5nU2NhbGUud2lkdGggKiAwLjI7XHJcbiAgICAgIGlmIChzcGFjaW5nRGlzdGFuY2UgPj0gMTAwMCkge1xyXG4gICAgICAgIHVuaXQgPSAn446eJ1xyXG4gICAgICAgIHNwYWNpbmdEaXN0YW5jZSA9IE1hdGgucm91bmQoc3BhY2luZ0Rpc3RhbmNlIC8gMTAwMCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2NhbGVZID0gcGxvdHRpbmdTY2FsZVk7XHJcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgY3R4Lm1vdmVUbyhwbG90dGluZ1NjYWxlWCwgc2NhbGVZKTtcclxuICAgICAgY3R4LmxpbmVUbyhwbG90dGluZ1NjYWxlWCArIHBsb3R0aW5nU2NhbGUud2lkdGgsIHNjYWxlWSk7XHJcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHBsb3R0aW5nU2NhbGUuY29sb3I7XHJcbiAgICAgIGN0eC5saW5lV2lkdGggPSBwbG90dGluZ1NjYWxlLndpZHRoICogMC4wMTtcclxuICAgICAgY3R4LnN0cm9rZSgpO1xyXG5cclxuICAgICAgbGV0IHRpY2tYID0gMFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBwbG90dGluZ1NjYWxlLmNlbGw7IGkrKykge1xyXG4gICAgICAgIHRpY2tYID0gcGxvdHRpbmdTY2FsZVggKyBpICogc3BhY2luZztcclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY3R4Lm1vdmVUbyh0aWNrWCwgc2NhbGVZIC0gcGxvdHRpbmdTY2FsZS53aWR0aCAqIDAuMSk7XHJcbiAgICAgICAgY3R4LmxpbmVUbyh0aWNrWCwgc2NhbGVZKTtcclxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBwbG90dGluZ1NjYWxlLmNvbG9yO1xyXG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBwbG90dGluZ1NjYWxlLndpZHRoICogMC4wMTtcclxuICAgICAgICBjdHguc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgIGN0eC5mb250ID0gYCR7Zm9udFNpemV9cHggQXJpYWxgO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBwbG90dGluZ1NjYWxlLmNvbG9yO1xyXG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XHJcbiAgICAgICAgY3R4LmZpbGxUZXh0KGkgKiBzcGFjaW5nRGlzdGFuY2UsIHRpY2tYLCBzY2FsZVkgLSBwbG90dGluZ1NjYWxlLndpZHRoICogMC4xKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3R4LmZvbnQgPSBgJHtmb250U2l6ZX1weCBBcmlhbGA7XHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBwbG90dGluZ1NjYWxlLmNvbG9yO1xyXG4gICAgICBjdHgudGV4dEFsaWduID0gJ2xlZnQnO1xyXG4gICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XHJcbiAgICAgIGN0eC5maWxsVGV4dCh1bml0LCB0aWNrWCArIChmb250U2l6ZSAqIDEuMiksIHNjYWxlWSAtIHBsb3R0aW5nU2NhbGUud2lkdGggKiAwLjEpO1xyXG5cclxuICAgICAgaWYgKHBsb3R0aW5nU2NhbGUuaXNTZWxlY3RlZCkge1xyXG4gICAgICAgIGRyYXdTZWxlY3Rpb25Cb3JkZXIocGxvdHRpbmdTY2FsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDovrnmoYZcclxuICAgIGlmIChib3JkZXIuc2hvdyAmJiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICAvLyDnu5jliLblm5vkuKrop5LvvIjoo4HliarmiJA0NeW6puinku+8iVxyXG4gICAgICBkcmF3Qm9yZGVyKGN0eCwgYm9yZGVySW1hZ2UsIG1hcmdpbiwgbWFyZ2luLCBib3JkZXIud2lkdGgsICd0b3AnLCAxKTtcclxuICAgICAgZHJhd0JvcmRlcihjdHgsIGJvcmRlckltYWdlLCBjYW52YXMud2lkdGggLSBib3JkZXIud2lkdGggLSBtYXJnaW4sIG1hcmdpbiwgYm9yZGVyLndpZHRoLCAncmlnaHQnLCAxKTtcclxuICAgICAgZHJhd0JvcmRlcihjdHgsIGJvcmRlckltYWdlLCBjYW52YXMud2lkdGggLSBib3JkZXIud2lkdGggLSBtYXJnaW4sIGNhbnZhcy5oZWlnaHQgLSBib3JkZXIud2lkdGggLSBtYXJnaW4sIGJvcmRlci53aWR0aCwgJ2JvdHRvbScsIDEpO1xyXG4gICAgICBkcmF3Qm9yZGVyKGN0eCwgYm9yZGVySW1hZ2UsIG1hcmdpbiwgY2FudmFzLmhlaWdodCAtIGJvcmRlci53aWR0aCAtIG1hcmdpbiwgYm9yZGVyLndpZHRoLCAnbGVmdCcsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g57uY5Yi26L655qGGXHJcbiAgZnVuY3Rpb24gZHJhd0JvcmRlcihjdHgsIGltZywgeCwgeSwgc2l6ZSwgcG9zaXRpb24sIGlzU3RhcnQgPSAxKSB7XHJcbiAgICBjdHguc2F2ZSgpO1xyXG4gICAgY3R4LnRyYW5zbGF0ZSh4ICsgc2l6ZSAvIDIsIHkgKyBzaXplIC8gMik7XHJcblxyXG4gICAgLy8g5qC55o2u5L2N572u6K6+572u5peL6L2s6KeS5bqmXHJcbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICBjdHgucm90YXRlKE1hdGguUEkgLyAyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICBjdHgucm90YXRlKE1hdGguUEkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICBjdHgucm90YXRlKDMgKiBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyDliJvlu7o0NeW6puinkueahOijgeWJqui3r+W+hFxyXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgY3R4Lm1vdmVUbygoLXNpemUgKiBpc1N0YXJ0KSAvIDIsIC1zaXplIC8gMik7XHJcbiAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnYm90dG9tJykge1xyXG4gICAgICBjdHgubGluZVRvKGNhbnZhcy53aWR0aCAtIChtYXJnaW4gKiAyKSAtIChzaXplIC8gMiksIC1zaXplIC8gMik7XHJcbiAgICAgIGN0eC5saW5lVG8oY2FudmFzLndpZHRoIC0gKG1hcmdpbiArIHNpemUpICogMiArIChzaXplIC8gMiksIHNpemUgLyAyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjdHgubGluZVRvKGNhbnZhcy5oZWlnaHQgLSAobWFyZ2luICogMikgLSAoc2l6ZSAvIDIpLCAtc2l6ZSAvIDIpO1xyXG4gICAgICBjdHgubGluZVRvKGNhbnZhcy5oZWlnaHQgLSAobWFyZ2luICsgc2l6ZSkgKiAyICsgKHNpemUgLyAyKSwgc2l6ZSAvIDIpO1xyXG4gICAgfVxyXG4gICAgY3R4LmxpbmVUbygoc2l6ZSAqIGlzU3RhcnQpIC8gMiwgc2l6ZSAvIDIpO1xyXG4gICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgY3R4LmNsaXAoKTtcclxuXHJcbiAgICBsZXQgaW1nV2lkdGggPSBpbWcud2lkdGggLyBpbWcuaGVpZ2h0ICogc2l6ZVxyXG5cclxuICAgIC8vIOe7mOWItuWbvueJh1xyXG4gICAgY3R4LmRyYXdJbWFnZShpbWcsIC1zaXplIC8gMiwgLXNpemUgLyAyLCBpbWdXaWR0aCwgc2l6ZSk7XHJcblxyXG4gICAgbGV0IGNvdW50O1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgY291bnQgPSBNYXRoLmNlaWwoKGNhbnZhcy53aWR0aCAtIChtYXJnaW4gKiAyKSAtIChib3JkZXIud2lkdGggKiAyKSkgLyBib3JkZXIud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY291bnQgPSBNYXRoLmNlaWwoKGNhbnZhcy5oZWlnaHQgLSAobWFyZ2luICogMikgLSAoYm9yZGVyLndpZHRoICogMikpIC8gYm9yZGVyLndpZHRoKTtcclxuICAgIH1cclxuICAgIGNvdW50KytcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBjb3VudDsgaSsrKSB7XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAtc2l6ZSAvIDIgKyBpbWdXaWR0aCAqIGksIC1zaXplIC8gMiwgaW1nV2lkdGgsIHNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uQm9yZGVyKGVsZW1lbnQpIHtcclxuICAgIGxldCBhbGxtYXJnaW4gPSBtYXJnaW5cclxuICAgIGlmIChib3JkZXIuc2hvdyAmJiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICBhbGxtYXJnaW4gPSBhbGxtYXJnaW4gKyBib3JkZXIud2lkdGhcclxuICAgIH1cclxuICAgIGNvbnN0IGNvcm5lclJhZGl1cyA9IGNhbnZhcy5oZWlnaHQgKiAwLjAwNTtcclxuICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZWQnO1xyXG4gICAgY3R4LmxpbmVXaWR0aCA9IGNhbnZhcy5oZWlnaHQgKiAwLjAwMjtcclxuICAgIGlmICgndGV4dCcgaW4gZWxlbWVudCkge1xyXG4gICAgICBjdHguc3Ryb2tlUmVjdCgoaW1nRWxtLndpZHRoICogZWxlbWVudC54ICsgYWxsbWFyZ2luKSwgKGltZ0VsbS5oZWlnaHQgKiBlbGVtZW50LnkgKyBhbGxtYXJnaW4pIC0gKGltZ0VsbS5oZWlnaHQgKiBlbGVtZW50LmhlaWdodCksIChpbWdFbG0uaGVpZ2h0ICogZWxlbWVudC53aWR0aCksIChpbWdFbG0uaGVpZ2h0ICogZWxlbWVudC5oZWlnaHQpKTtcclxuICAgIH0gZWxzZSBpZiAoJ3VybCcgaW4gZWxlbWVudCkge1xyXG4gICAgICBjdHguc3Ryb2tlUmVjdCgoaW1nRWxtLndpZHRoICogZWxlbWVudC54ICsgYWxsbWFyZ2luKSwgKGltZ0VsbS5oZWlnaHQgKiBlbGVtZW50LnkgKyBhbGxtYXJnaW4pLCAoaW1nRWxtLmhlaWdodCAqIGVsZW1lbnQud2lkdGgpLCAoaW1nRWxtLmhlaWdodCAqIGVsZW1lbnQuaGVpZ2h0KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlbGVtZW50ID09PSBwbG90dGluZ1NjYWxlKSB7XHJcbiAgICAgIGN0eC5zdHJva2VSZWN0KChpbWdFbG0ud2lkdGggKiBlbGVtZW50LnggKyBhbGxtYXJnaW4pIC0gKHBsb3R0aW5nU2NhbGUud2lkdGggKiAwLjIpLCAoaW1nRWxtLmhlaWdodCAqIGVsZW1lbnQueSArIGFsbG1hcmdpbikgLSBlbGVtZW50LmhlaWdodCAtIChwbG90dGluZ1NjYWxlLmhlaWdodCAqIDAuNSksIGVsZW1lbnQud2lkdGggKyAocGxvdHRpbmdTY2FsZS53aWR0aCAqIDAuNiksIGVsZW1lbnQuaGVpZ2h0ICsgKHBsb3R0aW5nU2NhbGUuaGVpZ2h0KSk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgY29uc3QgY29ybmVycyA9IGdldENvcm5lcnMoZWxlbWVudCwgYWxsbWFyZ2luKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSAncmVkJztcclxuICAgIGNvcm5lcnMuZm9yRWFjaChjb3JuZXIgPT4ge1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGN0eC5hcmMoY29ybmVyLngsIGNvcm5lci55LCBjb3JuZXJSYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcclxuICAgICAgY3R4LmZpbGwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICBjb25zdCB4ID0gZ2V0Q2FudmFzTW91c2VYKGUpO1xyXG4gICAgY29uc3QgeSA9IGdldENhbnZhc01vdXNlWShlKTtcclxuICAgIGxldCBhbGxtYXJnaW4gPSBtYXJnaW5cclxuICAgIGlmIChib3JkZXIuc2hvdyAmJiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICBhbGxtYXJnaW4gPSBhbGxtYXJnaW4gKyBib3JkZXIud2lkdGhcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGl0bGUuc2hvdykge1xyXG4gICAgICAvLyDmo4Dmn6XmmK/lkKbngrnlh7vkuobmoIfpopjnvJbovpHop6blj5HljLrln59cclxuICAgICAgaWYgKHkgPj0gKCh0aXRsZS5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSArIGFsbG1hcmdpbikgLSB0cmlnZ2VyUmFuZ2UgJiYgeSA8PSAoKHRpdGxlLmhlaWdodCAqIGltZ0VsbS5oZWlnaHQpICsgYWxsbWFyZ2luKSArIHRyaWdnZXJSYW5nZSkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyDlhYjlsIbmiYDmnInlhYPntKDnmoTpgInkuK3nirbmgIHnva7kuLogZmFsc2VcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGRhdGFbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGlzRHJhZ2dpbmdFbGVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgaXNSZXNpemluZ0VsZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICByZXNpemVDb3JuZXIgPSBudWxsO1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIOajgOafpeaYr+WQpueCueWHu+S6hui+ueahhuinkuS4iueahOWwj+WchueCuVxyXG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudCAmJiBzZWxlY3RlZEVsZW1lbnQgIT09IHBsb3R0aW5nU2NhbGUpIHtcclxuICAgICAgY29uc3QgY29ybmVyUmFkaXVzID0gY2FudmFzLmhlaWdodCAqIDAuMDA1O1xyXG4gICAgICBjb25zdCBjb3JuZXJzID0gZ2V0Q29ybmVycyhzZWxlY3RlZEVsZW1lbnQsIGFsbG1hcmdpbik7XHJcbiAgICAgIGNvcm5lcnMuZm9yRWFjaCgoY29ybmVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmICh4ID49IGNvcm5lci54IC0gY29ybmVyUmFkaXVzICYmIHggPD0gY29ybmVyLnggKyBjb3JuZXJSYWRpdXMgJiZcclxuICAgICAgICAgIHkgPj0gY29ybmVyLnkgLSBjb3JuZXJSYWRpdXMgJiYgeSA8PSBjb3JuZXIueSArIGNvcm5lclJhZGl1cykge1xyXG4gICAgICAgICAgaXNSZXNpemluZ0VsZW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaXNEcmFnZ2luZ0VsZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlc2l6ZUNvcm5lciA9IGluZGV4O1xyXG4gICAgICAgICAgc3RhcnRYID0geDtcclxuICAgICAgICAgIHN0YXJ0WSA9IHk7XHJcbiAgICAgICAgICBlbGVtZW50V2lkdGggPSAoc2VsZWN0ZWRFbGVtZW50LndpZHRoICogaW1nRWxtLmhlaWdodCk7XHJcbiAgICAgICAgICBlbGVtZW50SGVpZ2h0ID0gKHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KTtcclxuICAgICAgICAgIGlmICgndGV4dCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IChzZWxlY3RlZEVsZW1lbnQud2lkdGggKiBpbWdFbG0uaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3VycmVudEZvbnRTaXplID0gc2VsZWN0ZWRFbGVtZW50LmhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzUmVzaXppbmdFbGVtZW50KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWFiOWwhuaJgOacieWFg+e0oOeahOmAieS4reeKtuaAgee9ruS4uiBmYWxzZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRhdGFbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcGxvdHRpbmdTY2FsZS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgaXNEcmFnZ2luZ0VsZW1lbnQgPSBmYWxzZTtcclxuICAgIGlzUmVzaXppbmdFbGVtZW50ID0gZmFsc2U7XHJcbiAgICByZXNpemVDb3JuZXIgPSBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldLnNob3cpIHtcclxuICAgICAgICBpZiAoJ3RleHQnIGluIGRhdGFbaV0pIHtcclxuICAgICAgICAgIGlmICh4ID49IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgYWxsbWFyZ2luICYmIHggPD0gKGltZ0VsbS53aWR0aCAqIGRhdGFbaV0ueCkgKyBhbGxtYXJnaW4gKyAoaW1nRWxtLmhlaWdodCAqIGRhdGFbaV0ud2lkdGgpICYmXHJcbiAgICAgICAgICAgIHkgPj0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpICsgYWxsbWFyZ2luIC0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLmhlaWdodCkgJiYgeSA8PSAoaW1nRWxtLmhlaWdodCAqIGRhdGFbaV0ueSkgKyBhbGxtYXJnaW4pIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gZGF0YVtpXTtcclxuICAgICAgICAgICAgZGF0YVtpXS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaXNEcmFnZ2luZ0VsZW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzdGFydFggPSB4O1xyXG4gICAgICAgICAgICBzdGFydFkgPSB5O1xyXG4gICAgICAgICAgICBzdGFydFkyID0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpIC0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLmhlaWdodClcclxuICAgICAgICAgICAgc3RhcnRYMiA9IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLndpZHRoKVxyXG4gICAgICAgICAgICBlbGVtZW50T2Zmc2V0WCA9IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgYWxsbWFyZ2luO1xyXG4gICAgICAgICAgICBlbGVtZW50T2Zmc2V0WSA9IChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSArIGFsbG1hcmdpbjtcclxuICAgICAgICAgICAgdXBkYXRlQ2FudmFzKCk7IC8vIOeCueWHu+aXtumHjeaWsOe7mOWItueUu+W4g+S7peaYvuekuui+ueahhlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCd1cmwnIGluIGRhdGFbaV0pIHtcclxuICAgICAgICAgIGlmIChkYXRhW2ldLnN2ZyAmJiBkYXRhW2ldLnN2Zy5jb21wbGV0ZSAmJiBkYXRhW2ldLnNob3cpIHtcclxuICAgICAgICAgICAgaWYgKHggPj0gKGltZ0VsbS53aWR0aCAqIGRhdGFbaV0ueCkgKyBhbGxtYXJnaW4gJiYgeCA8PSAoaW1nRWxtLndpZHRoICogZGF0YVtpXS54KSArIGFsbG1hcmdpbiArIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS53aWR0aCkgJiZcclxuICAgICAgICAgICAgICB5ID49IChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSArIGFsbG1hcmdpbiAmJiB5IDw9IChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSArIGFsbG1hcmdpbiArIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS5oZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gZGF0YVtpXTtcclxuICAgICAgICAgICAgICBkYXRhW2ldLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlzRHJhZ2dpbmdFbGVtZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBzdGFydFggPSB4O1xyXG4gICAgICAgICAgICAgIHN0YXJ0WSA9IHk7XHJcbiAgICAgICAgICAgICAgc3RhcnRZMiA9IChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSArIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS5oZWlnaHQpXHJcbiAgICAgICAgICAgICAgc3RhcnRYMiA9IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLndpZHRoKTtcclxuICAgICAgICAgICAgICBlbGVtZW50T2Zmc2V0WCA9IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgYWxsbWFyZ2luO1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRPZmZzZXRZID0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpICsgYWxsbWFyZ2luO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZUNhbnZhcygpOyAvLyDngrnlh7vml7bph43mlrDnu5jliLbnlLvluIPku6XmmL7npLrovrnmoYZcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwbG90dGluZ1NjYWxlLnNob3cpIHtcclxuICAgICAgaWYgKHggPj0gKGltZ0VsbS53aWR0aCAqIHBsb3R0aW5nU2NhbGUueCArIGFsbG1hcmdpbikgLSAocGxvdHRpbmdTY2FsZS53aWR0aCAqIDAuMikgJiYgeCA8PSAoaW1nRWxtLndpZHRoICogcGxvdHRpbmdTY2FsZS54ICsgYWxsbWFyZ2luKSAtIChwbG90dGluZ1NjYWxlLndpZHRoICogMC4yKSArIHBsb3R0aW5nU2NhbGUud2lkdGggKyAocGxvdHRpbmdTY2FsZS53aWR0aCAqIDAuNikgJiZcclxuICAgICAgICB5ID49IChpbWdFbG0uaGVpZ2h0ICogcGxvdHRpbmdTY2FsZS55ICsgYWxsbWFyZ2luKSAtIHBsb3R0aW5nU2NhbGUuaGVpZ2h0IC0gKHBsb3R0aW5nU2NhbGUuaGVpZ2h0ICogMC41KSAmJiB5IDw9IChpbWdFbG0uaGVpZ2h0ICogcGxvdHRpbmdTY2FsZS55ICsgYWxsbWFyZ2luKSAtIChwbG90dGluZ1NjYWxlLmhlaWdodCAqIDAuNSkgKyAocGxvdHRpbmdTY2FsZS5oZWlnaHQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gcGxvdHRpbmdTY2FsZTtcclxuICAgICAgICBwbG90dGluZ1NjYWxlLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlzRHJhZ2dpbmdFbGVtZW50ID0gdHJ1ZTtcclxuICAgICAgICBzdGFydFggPSB4O1xyXG4gICAgICAgIHN0YXJ0WSA9IHk7XHJcbiAgICAgICAgc3RhcnRZMiA9IChpbWdFbG0uaGVpZ2h0ICogcGxvdHRpbmdTY2FsZS55ICsgYWxsbWFyZ2luKSArIHBsb3R0aW5nU2NhbGUuaGVpZ2h0O1xyXG4gICAgICAgIHN0YXJ0WDIgPSAoaW1nRWxtLndpZHRoICogcGxvdHRpbmdTY2FsZS54ICsgYWxsbWFyZ2luKSArIHBsb3R0aW5nU2NhbGUud2lkdGg7XHJcbiAgICAgICAgZWxlbWVudE9mZnNldFggPSAoaW1nRWxtLndpZHRoICogcGxvdHRpbmdTY2FsZS54ICsgYWxsbWFyZ2luKTtcclxuICAgICAgICBlbGVtZW50T2Zmc2V0WSA9IGltZ0VsbS5oZWlnaHQgKiBwbG90dGluZ1NjYWxlLnkgKyBhbGxtYXJnaW47XHJcbiAgICAgICAgdXBkYXRlQ2FudmFzKCk7IC8vIOeCueWHu+aXtumHjeaWsOe7mOWItueUu+W4g+S7peaYvuekuui+ueahhlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c54K55Ye75Zyo5YaF5a655Lul5aSW77yM6YeN5paw57uY5Yi255S75biD5Lul56e76Zmk6L655qGGXHJcbiAgICBpZiAoIXNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICB1cGRhdGVDYW52YXMoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgYWxsbWFyZ2luID0gbWFyZ2luXHJcbiAgICBpZiAoYm9yZGVyLnNob3cgJiYgYm9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UuY29tcGxldGUpIHtcclxuICAgICAgYWxsbWFyZ2luID0gYWxsbWFyZ2luICsgYm9yZGVyLndpZHRoXHJcbiAgICB9XHJcbiAgICBjb25zdCB4ID0gZ2V0Q2FudmFzTW91c2VYKGUpO1xyXG4gICAgY29uc3QgeSA9IGdldENhbnZhc01vdXNlWShlKTtcclxuICAgIGlmICh4IDwgMCB8fCB5IDwgMCB8fCB4ID4gY2FudmFzLndpZHRoIHx8IHkgPiBjYW52YXMuaGVpZ2h0KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aXRsZS5zaG93KSB7XHJcbiAgICAgIGxldCBhbGxtYXJnaW4gPSBtYXJnaW5cclxuICAgICAgaWYgKGJvcmRlci5zaG93ICYmIGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgYWxsbWFyZ2luID0gYWxsbWFyZ2luICsgYm9yZGVyLndpZHRoXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHkgPj0gKCh0aXRsZS5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSArIGFsbG1hcmdpbikgLSB0cmlnZ2VyUmFuZ2UgJiYgeSA8PSAoKHRpdGxlLmhlaWdodCAqIGltZ0VsbS5oZWlnaHQpICsgYWxsbWFyZ2luKSArIHRyaWdnZXJSYW5nZSkge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnbi1yZXNpemUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgdGl0bGUuaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5tYXgoeSAtIGFsbG1hcmdpbiwgMzApIC8gaW1nRWxtLmhlaWdodCwgMSk7XHJcbiAgICAgICAgdXBkYXRlQ2FudmFzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGlzRHJhZ2dpbmdFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGR4ID0geCAtIHN0YXJ0WDtcclxuICAgICAgY29uc3QgZHkgPSB5IC0gc3RhcnRZO1xyXG4gICAgICBzZWxlY3RlZEVsZW1lbnQueCA9ICgoZWxlbWVudE9mZnNldFggKyBkeCkgLSBhbGxtYXJnaW4pIC8gaW1nRWxtLndpZHRoO1xyXG4gICAgICBzZWxlY3RlZEVsZW1lbnQueSA9ICgoZWxlbWVudE9mZnNldFkgKyBkeSkgLSBhbGxtYXJnaW4pIC8gaW1nRWxtLmhlaWdodDtcclxuICAgICAgdXBkYXRlQ2FudmFzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUmVzaXppbmdFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGR4ID0geCAtIHN0YXJ0WDtcclxuICAgICAgY29uc3QgZHkgPSB5IC0gc3RhcnRZO1xyXG4gICAgICBsZXQgc2NhbGVGYWN0b3I7XHJcblxyXG4gICAgICBzd2l0Y2ggKHJlc2l6ZUNvcm5lcikge1xyXG4gICAgICAgIGNhc2UgMDogLy8g5bem5LiK6KeSXHJcbiAgICAgICAgICBpZiAoJ3RleHQnIGluIHNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBzY2FsZUZhY3RvciA9IChlbGVtZW50V2lkdGggLSBkeCkgLyBlbGVtZW50V2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgPSBNYXRoLm1heCgoMTAgLyBpbWdFbG0uaGVpZ2h0KSwgY3VycmVudEZvbnRTaXplICogc2NhbGVGYWN0b3IpXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC54ID0gKHN0YXJ0WDIgLSAoc2VsZWN0ZWRFbGVtZW50LndpZHRoICogaW1nRWxtLmhlaWdodCkpIC8gaW1nRWxtLndpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoJ3VybCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC54ID0gKHN0YXJ0WDIgLSAoc2VsZWN0ZWRFbGVtZW50LndpZHRoICogaW1nRWxtLmhlaWdodCkpIC8gaW1nRWxtLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQueSA9IChzdGFydFkyIC0gKHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQud2lkdGggPSBNYXRoLm1heCgxMCwgZWxlbWVudFdpZHRoIC0gZHgpIC8gaW1nRWxtLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmhlaWdodCA9IE1hdGgubWF4KDEwLCBlbGVtZW50SGVpZ2h0IC0gZHkpIC8gaW1nRWxtLmhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTogLy8g5Y+z5LiK6KeSXHJcbiAgICAgICAgICBpZiAoJ3RleHQnIGluIHNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBzY2FsZUZhY3RvciA9IChlbGVtZW50V2lkdGggKyBkeCkgLyBlbGVtZW50V2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgPSBNYXRoLm1heCgoMTAgLyBpbWdFbG0uaGVpZ2h0KSwgY3VycmVudEZvbnRTaXplICogc2NhbGVGYWN0b3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoJ3VybCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC53aWR0aCA9IE1hdGgubWF4KDEwLCBlbGVtZW50V2lkdGggKyBkeCkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuaGVpZ2h0ID0gTWF0aC5tYXgoMTAsIGVsZW1lbnRIZWlnaHQgLSBkeSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQueSA9IChzdGFydFkyIC0gKHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOiAvLyDlt6bkuIvop5JcclxuICAgICAgICAgIGlmICgndGV4dCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNjYWxlRmFjdG9yID0gKGVsZW1lbnRXaWR0aCAtIGR4KSAvIGVsZW1lbnRXaWR0aDtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmhlaWdodCA9IE1hdGgubWF4KCgxMCAvIGltZ0VsbS5oZWlnaHQpLCBjdXJyZW50Rm9udFNpemUgKiBzY2FsZUZhY3Rvcik7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC54ID0gKHN0YXJ0WDIgLSAoc2VsZWN0ZWRFbGVtZW50LndpZHRoICogaW1nRWxtLmhlaWdodCkpIC8gaW1nRWxtLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQueSA9IChzdGFydFkyICsgKHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoJ3VybCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC54ID0gKHN0YXJ0WDIgLSAoc2VsZWN0ZWRFbGVtZW50LndpZHRoICogaW1nRWxtLmhlaWdodCkpIC8gaW1nRWxtLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQud2lkdGggPSBNYXRoLm1heCgxMCwgZWxlbWVudFdpZHRoIC0gZHgpIC8gaW1nRWxtLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmhlaWdodCA9IE1hdGgubWF4KDEwLCBlbGVtZW50SGVpZ2h0ICsgZHkpIC8gaW1nRWxtLmhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzogLy8g5Y+z5LiL6KeSXHJcbiAgICAgICAgICBpZiAoJ3RleHQnIGluIHNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBzY2FsZUZhY3RvciA9IChlbGVtZW50V2lkdGggKyBkeCkgLyBlbGVtZW50V2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgPSBNYXRoLm1heCgoMTAgLyBpbWdFbG0uaGVpZ2h0KSwgY3VycmVudEZvbnRTaXplICogc2NhbGVGYWN0b3IpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQueSA9IChzdGFydFkyICsgKHNlbGVjdGVkRWxlbWVudC5oZWlnaHQgKiBpbWdFbG0uaGVpZ2h0KSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoJ3VybCcgaW4gc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC53aWR0aCA9IE1hdGgubWF4KDEwLCBlbGVtZW50V2lkdGggKyBkeCkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuaGVpZ2h0ID0gTWF0aC5tYXgoMTAsIGVsZW1lbnRIZWlnaHQgKyBkeSkgLyBpbWdFbG0uaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwZGF0ZUNhbnZhcygpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZnVuY3Rpb24gKCkge1xyXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGFsbG1hcmdpbiA9IG1hcmdpblxyXG4gICAgaWYgKGJvcmRlci5zaG93ICYmIGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLmNvbXBsZXRlKSB7XHJcbiAgICAgIGFsbG1hcmdpbiA9IGFsbG1hcmdpbiArIGJvcmRlci53aWR0aFxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldLnNob3cgJiYgZGF0YVtpXS5pc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgc3RhcnRZMiA9IChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS55KSAtIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS5oZWlnaHQpXHJcbiAgICAgICAgc3RhcnRYMiA9IChpbWdFbG0ud2lkdGggKiBkYXRhW2ldLngpICsgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLndpZHRoKVxyXG4gICAgICAgIGlmICgndXJsJyBpbiBkYXRhW2ldKSB7XHJcbiAgICAgICAgICBzdGFydFkyID0gKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLnkpICsgKGltZ0VsbS5oZWlnaHQgKiBkYXRhW2ldLmhlaWdodClcclxuICAgICAgICAgIHN0YXJ0WDIgPSAoaW1nRWxtLndpZHRoICogZGF0YVtpXS54KSArIChpbWdFbG0uaGVpZ2h0ICogZGF0YVtpXS53aWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRPZmZzZXRYID0gZGF0YVtpXS54O1xyXG4gICAgICAgIGVsZW1lbnRPZmZzZXRZID0gZGF0YVtpXS55O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGxvdHRpbmdTY2FsZS5zaG93ICYmIHBsb3R0aW5nU2NhbGUuaXNTZWxlY3RlZCkge1xyXG4gICAgICBzdGFydFkyID0gcGxvdHRpbmdTY2FsZS55ICsgcGxvdHRpbmdTY2FsZS5oZWlnaHRcclxuICAgICAgc3RhcnRYMiA9IHBsb3R0aW5nU2NhbGUueCArIHBsb3R0aW5nU2NhbGUud2lkdGhcclxuICAgICAgZWxlbWVudE9mZnNldFggPSBwbG90dGluZ1NjYWxlLng7XHJcbiAgICAgIGVsZW1lbnRPZmZzZXRZID0gcGxvdHRpbmdTY2FsZS55O1xyXG4gICAgfVxyXG4gICAgaXNEcmFnZ2luZ0VsZW1lbnQgPSBmYWxzZTtcclxuICAgIGlzUmVzaXppbmdFbGVtZW50ID0gZmFsc2U7XHJcbiAgICByZXNpemVDb3JuZXIgPSBudWxsO1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBnZXRQbG90dGluZ1NjYWxlKCkge1xyXG4gICAgaWYgKCFyZWN0YW5nbGUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgd2VzdExuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUud2VzdClcclxuICAgIGxldCBlYXN0TG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHJlY3RhbmdsZS5lYXN0KVxyXG4gICAgbGV0IG5vcnRoTGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHJlY3RhbmdsZS5ub3J0aClcclxuICAgIGxldCBzb3V0aExhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUuc291dGgpXHJcblxyXG4gICAgbGV0IGZyb20gPSB0dXJmLnBvaW50KFt3ZXN0TG5nLCBub3J0aExhdF0pO1xyXG4gICAgbGV0IHRvID0gdHVyZi5wb2ludChbZWFzdExuZywgbm9ydGhMYXRdKTtcclxuICAgIGxldCBkaXN0YW5jZSA9IHR1cmYuZGlzdGFuY2UoZnJvbSwgdG8sIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuXHJcbiAgICB1bml0RGlzdGFuY2UgPSBkaXN0YW5jZSAqIDEwMDAgLyBpbWdFbG0ud2lkdGg7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXREYXRlVGltZVN0cmluZygpIHtcclxuICAgIC8vIOWIm+W7uuS4gOS4quihqOekuuW9k+WJjeaXtumXtOeahCBEYXRlIOWvueixoVxyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIC8vIOiOt+WPluW5tOS7vVxyXG4gICAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpO1xyXG4gICAgLy8g6I635Y+W5pyI5Lu977yI5LuOIDAg5byA5aeL77yM5omA5Lul6KaB5YqgIDHvvInvvIzlubblsIblhbbovazmjaLkuLrkuKTkvY3lrZfnrKbkuLLvvIzkuI3otrPkuKTkvY3lnKjliY3pnaLooaXpm7ZcclxuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIC8vIOiOt+WPluaXpeacn++8jOW5tuWwhuWFtui9rOaNouS4uuS4pOS9jeWtl+espuS4su+8jOS4jei2s+S4pOS9jeWcqOWJjemdouihpembtlxyXG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAvLyDojrflj5blsI/ml7bvvIzlubblsIblhbbovazmjaLkuLrkuKTkvY3lrZfnrKbkuLLvvIzkuI3otrPkuKTkvY3lnKjliY3pnaLooaXpm7ZcclxuICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgLy8g6I635Y+W5YiG6ZKf77yM5bm25bCG5YW26L2s5o2i5Li65Lik5L2N5a2X56ym5Liy77yM5LiN6Laz5Lik5L2N5Zyo5YmN6Z2i6KGl6Zu2XHJcbiAgICBjb25zdCBtaW51dGVzID0gU3RyaW5nKG5vdy5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAvLyDojrflj5bnp5LvvIzlubblsIblhbbovazmjaLkuLrkuKTkvY3lrZfnrKbkuLLvvIzkuI3otrPkuKTkvY3lnKjliY3pnaLooaXpm7ZcclxuICAgIGNvbnN0IHNlY29uZHMgPSBTdHJpbmcobm93LmdldFNlY29uZHMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIC8vIOiOt+WPluavq+enku+8jOW5tuWwhuWFtui9rOaNouS4uuS4ieS9jeWtl+espuS4su+8jOS4jei2s+S4ieS9jeWcqOWJjemdouihpembtlxyXG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gU3RyaW5nKG5vdy5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoMywgJzAnKTtcclxuICAgIC8vIOWwhuW5tOOAgeaciOOAgeaXpeOAgeaXtuOAgeWIhuOAgeenkuOAgeavq+enkuaLvOaOpeaIkOaJgOmcgOeahOWtl+espuS4slxyXG4gICAgcmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9JHttaWxsaXNlY29uZHN9YDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGV4cG9ydE1hcCgpIHtcclxuICAgIGxldCB1bml0RGlzdGFuY2UyXHJcbiAgICBsZXQgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgbGV0IGN0eDIgPSBjYW52YXMyLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBsZXQgaW1nRWxtMiA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1nRWxtMi5zcmMgPSBvcmlnaW5hbEltZ1xyXG4gICAgaW1nRWxtMi5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChpc0xvYWQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgdGl0bGUyID0geyAuLi50aXRsZSB9XHJcbiAgICAgIGxldCBkYXRhMiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgIGxldCBwbG90dGluZ1NjYWxlMiA9IHsgLi4ucGxvdHRpbmdTY2FsZSB9XHJcbiAgICAgIGxldCBib3JkZXIyID0geyAuLi5ib3JkZXIgfVxyXG4gICAgICBib3JkZXIyLndpZHRoID0gYm9yZGVyLndpZHRoIC8gaW1nRWxtLndpZHRoICogaW1nRWxtMi53aWR0aFxyXG5cclxuICAgICAgbGV0IG1hcmdpbjIgPSBtYXJnaW4gLyBpbWdFbG0ud2lkdGggKiBpbWdFbG0yLndpZHRoO1xyXG4gICAgICBsZXQgYWxsbWFyZ2luID0gbWFyZ2luMlxyXG4gICAgICBpZiAoYm9yZGVyMi5zaG93ICYmIGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgYWxsbWFyZ2luID0gYWxsbWFyZ2luICsgYm9yZGVyMi53aWR0aFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjYW52YXMyLndpZHRoID0gaW1nRWxtMi53aWR0aCArIChhbGxtYXJnaW4gKiAyKTtcclxuICAgICAgY2FudmFzMi5oZWlnaHQgPSBpbWdFbG0yLmhlaWdodCArIChhbGxtYXJnaW4gKiAyKTtcclxuXHJcbiAgICAgIGN0eDIuY2xlYXJSZWN0KDAsIDAsIGNhbnZhczIud2lkdGgsIGNhbnZhczIuaGVpZ2h0KTtcclxuICAgICAgY3R4Mi5yZWN0KDAsIDAsIGNhbnZhczIud2lkdGgsIGNhbnZhczIuaGVpZ2h0KTtcclxuICAgICAgY3R4Mi5maWxsU3R5bGUgPSBcIiNmZmZmZmZcIjtcclxuICAgICAgY3R4Mi5maWxsKCk7XHJcbiAgICAgIGN0eDIuZHJhd0ltYWdlKGltZ0VsbTIsIGFsbG1hcmdpbiwgYWxsbWFyZ2luLCBpbWdFbG0yLndpZHRoLCBpbWdFbG0yLmhlaWdodCk7XHJcbiAgICAgIC8vIOagh+mimOWGheWuuVxyXG4gICAgICBpZiAodGl0bGUyLnNob3cpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gdGl0bGUyLnRleHQ7XHJcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1heCg1LCAodGl0bGUyLmhlaWdodCAqIGltZ0VsbTIuaGVpZ2h0KSAqIDAuNSk7XHJcbiAgICAgICAgY3R4Mi5mb250ID0gYCR7Zm9udFNpemV9cHggc2VyaWZgO1xyXG4gICAgICAgIGN0eDIuZmlsbFN0eWxlID0gdGl0bGUyLmJnQ29sb3IgfHwgJyM1ZDVkNWQnO1xyXG5cclxuICAgICAgICBjdHgyLmZpbGxSZWN0KGFsbG1hcmdpbiwgYWxsbWFyZ2luLCBjYW52YXMyLndpZHRoIC0gKGFsbG1hcmdpbiAqIDIpLCAodGl0bGUyLmhlaWdodCAqIGltZ0VsbTIuaGVpZ2h0KSk7XHJcblxyXG4gICAgICAgIGN0eDIuZmlsbFN0eWxlID0gdGl0bGUyLmNvbG9yIHx8ICd3aGl0ZSc7XHJcbiAgICAgICAgY3R4Mi50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICBjdHgyLnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG4gICAgICAgIGN0eDIuZmlsbFRleHQodGV4dCwgY2FudmFzMi53aWR0aCAvIDIsICgodGl0bGUyLmhlaWdodCAqIGltZ0VsbTIuaGVpZ2h0KSAvIDIpICsgYWxsbWFyZ2luKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5YW25LuW5YaF5a65XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YTIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZGF0YTJbaV0uc2hvdykge1xyXG4gICAgICAgICAgaWYgKCd0ZXh0JyBpbiBkYXRhMltpXSkge1xyXG4gICAgICAgICAgICBjdHgyLmZvbnQgPSBgJHtpbWdFbG0yLmhlaWdodCAqIGRhdGEyW2ldLmhlaWdodH1weCBzZXJpZmA7XHJcbiAgICAgICAgICAgIGN0eDIuZmlsbFN0eWxlID0gZGF0YTJbaV0uY29sb3IgfHwgJ3doaXRlJztcclxuICAgICAgICAgICAgY3R4Mi50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcbiAgICAgICAgICAgIGN0eDIudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XHJcbiAgICAgICAgICAgIGRhdGEyW2ldLndpZHRoID0gY3R4Mi5tZWFzdXJlVGV4dChkYXRhMltpXS50ZXh0KS53aWR0aCAvIGltZ0VsbTIuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjdHgyLmZpbGxUZXh0KGRhdGEyW2ldLnRleHQsIChpbWdFbG0yLndpZHRoICogZGF0YTJbaV0ueCkgKyBhbGxtYXJnaW4sIChpbWdFbG0yLmhlaWdodCAqIGRhdGEyW2ldLnkpICsgYWxsbWFyZ2luKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKCd1cmwnIGluIGRhdGEyW2ldKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhW2ldLnN2ZyAmJiBkYXRhW2ldLnN2Zy5jb21wbGV0ZSkge1xyXG4gICAgICAgICAgICAgIGN0eDIuZHJhd0ltYWdlKGRhdGFbaV0uc3ZnLCAoaW1nRWxtMi53aWR0aCAqIGRhdGEyW2ldLngpICsgYWxsbWFyZ2luLCAoaW1nRWxtMi5oZWlnaHQgKiBkYXRhMltpXS55KSArIGFsbG1hcmdpbiwgaW1nRWxtMi5oZWlnaHQgKiBkYXRhMltpXS53aWR0aCwgaW1nRWxtMi5oZWlnaHQgKiBkYXRhMltpXS5oZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN2ZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgIHN2Zy5zcmMgPSB0b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgZGF0YTJbaV0udXJsO1xyXG4gICAgICAgICAgICAgIHN2Zy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhMltpXS5zdmcgPSBzdmdcclxuICAgICAgICAgICAgICAgIGN0eDIuZHJhd0ltYWdlKHN2ZywgKGltZ0VsbTIud2lkdGggKiBkYXRhMltpXS54KSArIGFsbG1hcmdpbiwgKGltZ0VsbTIuaGVpZ2h0ICogZGF0YTJbaV0ueSkgKyBhbGxtYXJnaW4sIGltZ0VsbTIuaGVpZ2h0ICogZGF0YTJbaV0ud2lkdGgsIGltZ0VsbTIuaGVpZ2h0ICogZGF0YTJbaV0uaGVpZ2h0KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5q+U5L6L5bC6XHJcbiAgICAgIGlmIChwbG90dGluZ1NjYWxlMi5zaG93KSB7XHJcbiAgICAgICAgZ2V0UGxvdHRpbmdTY2FsZSgpXHJcbiAgICAgICAgbGV0IHBsb3R0aW5nU2NhbGUyWCA9IGltZ0VsbTIud2lkdGggKiBwbG90dGluZ1NjYWxlMi54ICsgYWxsbWFyZ2luXHJcbiAgICAgICAgbGV0IHBsb3R0aW5nU2NhbGUyWSA9IGltZ0VsbTIuaGVpZ2h0ICogcGxvdHRpbmdTY2FsZTIueSArIGFsbG1hcmdpblxyXG4gICAgICAgIGxldCB1bml0ID0gJ20nXHJcbiAgICAgICAgLy8gY29uc3QgZm9udFNpemUgPSBwbG90dGluZ1NjYWxlMi53aWR0aCAqIDAuMTI7XHJcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBpbWdFbG0yLndpZHRoICogMC4wOCAqIDAuMTI7XHJcbiAgICAgICAgbGV0IHNwYWNpbmcgPSBpbWdFbG0yLndpZHRoICogMC4wOCAvIHBsb3R0aW5nU2NhbGUyLmNlbGw7XHJcbiAgICAgICAgbGV0IHNwYWNpbmdEaXN0YW5jZSA9IE1hdGgucm91bmQodW5pdERpc3RhbmNlMiAqIHNwYWNpbmcpO1xyXG4gICAgICAgIGxldCBzcGFjaW5nRGlzdGFuY2VTdHJpbmcgPSBzcGFjaW5nRGlzdGFuY2UgKyAnJ1xyXG4gICAgICAgIGlmIChzcGFjaW5nRGlzdGFuY2UgPCAxMCkge1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNwYWNpbmdEaXN0YW5jZSA9IE51bWJlcihzcGFjaW5nRGlzdGFuY2VTdHJpbmdbMF0pXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYWNpbmdEaXN0YW5jZVN0cmluZy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgc3BhY2luZ0Rpc3RhbmNlID0gc3BhY2luZ0Rpc3RhbmNlICogMTBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNwYWNpbmcgPSBzcGFjaW5nRGlzdGFuY2UgLyB1bml0RGlzdGFuY2UyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBsb3R0aW5nU2NhbGUyLndpZHRoID0gc3BhY2luZyAqIHBsb3R0aW5nU2NhbGUyLmNlbGw7XHJcbiAgICAgICAgcGxvdHRpbmdTY2FsZTIuaGVpZ2h0ID0gcGxvdHRpbmdTY2FsZTIud2lkdGggKiAwLjI7XHJcbiAgICAgICAgaWYgKHNwYWNpbmdEaXN0YW5jZSA+PSAxMDAwKSB7XHJcbiAgICAgICAgICB1bml0ID0gJ+OOnidcclxuICAgICAgICAgIHNwYWNpbmdEaXN0YW5jZSA9IE1hdGgucm91bmQoc3BhY2luZ0Rpc3RhbmNlIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjYWxlWSA9IHBsb3R0aW5nU2NhbGUyWTtcclxuICAgICAgICBjdHgyLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eDIubW92ZVRvKHBsb3R0aW5nU2NhbGUyWCwgc2NhbGVZKTtcclxuICAgICAgICBjdHgyLmxpbmVUbyhwbG90dGluZ1NjYWxlMlggKyBwbG90dGluZ1NjYWxlMi53aWR0aCwgc2NhbGVZKTtcclxuICAgICAgICBjdHgyLnN0cm9rZVN0eWxlID0gcGxvdHRpbmdTY2FsZTIuY29sb3I7XHJcbiAgICAgICAgY3R4Mi5saW5lV2lkdGggPSBwbG90dGluZ1NjYWxlMi53aWR0aCAqIDAuMDE7XHJcbiAgICAgICAgY3R4Mi5zdHJva2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHRpY2tYID0gMFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBsb3R0aW5nU2NhbGUyLmNlbGw7IGkrKykge1xyXG4gICAgICAgICAgdGlja1ggPSBwbG90dGluZ1NjYWxlMlggKyBpICogc3BhY2luZztcclxuICAgICAgICAgIGN0eDIuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICBjdHgyLm1vdmVUbyh0aWNrWCwgc2NhbGVZIC0gcGxvdHRpbmdTY2FsZTIud2lkdGggKiAwLjEpO1xyXG4gICAgICAgICAgY3R4Mi5saW5lVG8odGlja1gsIHNjYWxlWSk7XHJcbiAgICAgICAgICBjdHgyLnN0cm9rZVN0eWxlID0gcGxvdHRpbmdTY2FsZTIuY29sb3I7XHJcbiAgICAgICAgICBjdHgyLmxpbmVXaWR0aCA9IHBsb3R0aW5nU2NhbGUyLndpZHRoICogMC4wMTtcclxuICAgICAgICAgIGN0eDIuc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgICAgY3R4Mi5mb250ID0gYCR7Zm9udFNpemV9cHggQXJpYWxgO1xyXG4gICAgICAgICAgY3R4Mi5maWxsU3R5bGUgPSBwbG90dGluZ1NjYWxlMi5jb2xvcjtcclxuICAgICAgICAgIGN0eDIudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICBjdHgyLnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xyXG4gICAgICAgICAgY3R4Mi5maWxsVGV4dChpICogc3BhY2luZ0Rpc3RhbmNlLCB0aWNrWCwgc2NhbGVZIC0gcGxvdHRpbmdTY2FsZTIud2lkdGggKiAwLjEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Mi5mb250ID0gYCR7Zm9udFNpemV9cHggQXJpYWxgO1xyXG4gICAgICAgIGN0eDIuZmlsbFN0eWxlID0gcGxvdHRpbmdTY2FsZTIuY29sb3I7XHJcbiAgICAgICAgY3R4Mi50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcbiAgICAgICAgY3R4Mi50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcclxuICAgICAgICBjdHgyLmZpbGxUZXh0KHVuaXQsIHRpY2tYICsgKGZvbnRTaXplICogMS4yKSwgc2NhbGVZIC0gcGxvdHRpbmdTY2FsZTIud2lkdGggKiAwLjEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDovrnmoYZcclxuICAgICAgaWYgKGJvcmRlcjIuc2hvdyAmJiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS5jb21wbGV0ZSkge1xyXG4gICAgICAgIC8vIOe7mOWItuWbm+S4quinku+8iOijgeWJquaIkDQ15bqm6KeS77yJXHJcbiAgICAgICAgZHJhd0JvcmRlcjIoY3R4MiwgYm9yZGVySW1hZ2UsIG1hcmdpbjIsIG1hcmdpbjIsIGJvcmRlcjIud2lkdGgsICd0b3AnLCAxKTtcclxuICAgICAgICBkcmF3Qm9yZGVyMihjdHgyLCBib3JkZXJJbWFnZSwgY2FudmFzMi53aWR0aCAtIGJvcmRlcjIud2lkdGggLSBtYXJnaW4yLCBtYXJnaW4yLCBib3JkZXIyLndpZHRoLCAncmlnaHQnLCAxKTtcclxuICAgICAgICBkcmF3Qm9yZGVyMihjdHgyLCBib3JkZXJJbWFnZSwgY2FudmFzMi53aWR0aCAtIGJvcmRlcjIud2lkdGggLSBtYXJnaW4yLCBjYW52YXMyLmhlaWdodCAtIGJvcmRlcjIud2lkdGggLSBtYXJnaW4yLCBib3JkZXIyLndpZHRoLCAnYm90dG9tJywgMSk7XHJcbiAgICAgICAgZHJhd0JvcmRlcjIoY3R4MiwgYm9yZGVySW1hZ2UsIG1hcmdpbjIsIGNhbnZhczIuaGVpZ2h0IC0gYm9yZGVyMi53aWR0aCAtIG1hcmdpbjIsIGJvcmRlcjIud2lkdGgsICdsZWZ0JywgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldFBsb3R0aW5nU2NhbGUoKSB7XHJcbiAgICAgICAgaWYgKCFyZWN0YW5nbGUpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgd2VzdExuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUud2VzdClcclxuICAgICAgICBsZXQgZWFzdExuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUuZWFzdClcclxuICAgICAgICBsZXQgbm9ydGhMYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMocmVjdGFuZ2xlLm5vcnRoKVxyXG4gICAgICAgIGxldCBzb3V0aExhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUuc291dGgpXHJcblxyXG4gICAgICAgIGxldCBmcm9tID0gdHVyZi5wb2ludChbd2VzdExuZywgbm9ydGhMYXRdKTtcclxuICAgICAgICBsZXQgdG8gPSB0dXJmLnBvaW50KFtlYXN0TG5nLCBub3J0aExhdF0pO1xyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHR1cmYuZGlzdGFuY2UoZnJvbSwgdG8sIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuXHJcbiAgICAgICAgdW5pdERpc3RhbmNlMiA9IGRpc3RhbmNlICogMTAwMCAvIGltZ0VsbTIud2lkdGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOe7mOWItui+ueahhlxyXG4gICAgICBmdW5jdGlvbiBkcmF3Qm9yZGVyMihjdHgyLCBpbWcsIHgsIHksIHNpemUsIHBvc2l0aW9uLCBpc1N0YXJ0ID0gMSkge1xyXG4gICAgICAgIGN0eDIuc2F2ZSgpO1xyXG4gICAgICAgIGN0eDIudHJhbnNsYXRlKHggKyBzaXplIC8gMiwgeSArIHNpemUgLyAyKTtcclxuXHJcbiAgICAgICAgLy8g5qC55o2u5L2N572u6K6+572u5peL6L2s6KeS5bqmXHJcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xyXG4gICAgICAgICAgY2FzZSAncmlnaHQnOlxyXG4gICAgICAgICAgICBjdHgyLnJvdGF0ZShNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICAgICAgY3R4Mi5yb3RhdGUoTWF0aC5QSSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgICAgIGN0eDIucm90YXRlKDMgKiBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDliJvlu7o0NeW6puinkueahOijgeWJqui3r+W+hFxyXG4gICAgICAgIGN0eDIuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY3R4Mi5tb3ZlVG8oKC1zaXplICogaXNTdGFydCkgLyAyLCAtc2l6ZSAvIDIpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdib3R0b20nKSB7XHJcbiAgICAgICAgICBjdHgyLmxpbmVUbyhjYW52YXMyLndpZHRoIC0gKG1hcmdpbjIgKiAyKSAtIChzaXplIC8gMiksIC1zaXplIC8gMik7XHJcbiAgICAgICAgICBjdHgyLmxpbmVUbyhjYW52YXMyLndpZHRoIC0gKG1hcmdpbjIgKyBzaXplKSAqIDIgKyAoc2l6ZSAvIDIpLCBzaXplIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY3R4Mi5saW5lVG8oY2FudmFzMi5oZWlnaHQgLSAobWFyZ2luMiAqIDIpIC0gKHNpemUgLyAyKSwgLXNpemUgLyAyKTtcclxuICAgICAgICAgIGN0eDIubGluZVRvKGNhbnZhczIuaGVpZ2h0IC0gKG1hcmdpbjIgKyBzaXplKSAqIDIgKyAoc2l6ZSAvIDIpLCBzaXplIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eDIubGluZVRvKChzaXplICogaXNTdGFydCkgLyAyLCBzaXplIC8gMik7XHJcbiAgICAgICAgY3R4Mi5jbG9zZVBhdGgoKTtcclxuICAgICAgICBjdHgyLmNsaXAoKTtcclxuXHJcbiAgICAgICAgbGV0IGltZ1dpZHRoID0gaW1nLndpZHRoIC8gaW1nLmhlaWdodCAqIHNpemVcclxuXHJcbiAgICAgICAgLy8g57uY5Yi25Zu+54mHXHJcbiAgICAgICAgY3R4Mi5kcmF3SW1hZ2UoaW1nLCAtc2l6ZSAvIDIsIC1zaXplIC8gMiwgaW1nV2lkdGgsIHNpemUpO1xyXG5cclxuICAgICAgICBsZXQgY291bnQ7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgICAgIGNvdW50ID0gTWF0aC5jZWlsKChjYW52YXMyLndpZHRoIC0gKG1hcmdpbjIgKiAyKSAtIChib3JkZXIyLndpZHRoICogMikpIC8gYm9yZGVyMi53aWR0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvdW50ID0gTWF0aC5jZWlsKChjYW52YXMyLmhlaWdodCAtIChtYXJnaW4yICogMikgLSAoYm9yZGVyMi53aWR0aCAqIDIpKSAvIGJvcmRlcjIud2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgIGN0eDIuZHJhd0ltYWdlKGltZywgLXNpemUgLyAyICsgaW1nV2lkdGggKiBpLCAtc2l6ZSAvIDIsIGltZ1dpZHRoLCBzaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eDIucmVzdG9yZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsZXQgZGF0YVVSTCA9IGNhbnZhczIudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45NSlcclxuICAgICAgLy8gbGV0IGRvd25sb2FkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgLy8gZG93bmxvYWRFbGVtZW50LmhyZWYgPSBkYXRhVVJMO1xyXG4gICAgICAvLyBkb3dubG9hZEVsZW1lbnQuZG93bmxvYWQgPSBg6auY5riF5Ye65Zu+LSR7Z2V0RGF0ZVRpbWVTdHJpbmcoKX0uanBnYDtcclxuICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZEVsZW1lbnQpO1xyXG4gICAgICAvLyBkb3dubG9hZEVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgLy8gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb3dubG9hZEVsZW1lbnQpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnZGF0YVVSTCcsIGRhdGFVUkwpXHJcbiAgICAgIC8vIFVSTC5yZXZva2VPYmplY3RVUkwoZGF0YVVSTCk7XHJcblxyXG4gICAgICAvLyDlnKjph4rmlL7otYTmupDlkI7miafooYzlm57osINcclxuXHJcbiAgICAgIGNhbnZhczIudG9CbG9iKGZ1bmN0aW9uIChibG9iKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICBsZXQgZG93bmxvYWRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGRvd25sb2FkRWxlbWVudC5ocmVmID0gdXJsO1xyXG4gICAgICAgIGRvd25sb2FkRWxlbWVudC5kb3dubG9hZCA9IGDpq5jmuIXlh7rlm74tJHtnZXREYXRlVGltZVN0cmluZygpfS5wbmdgO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRFbGVtZW50KTtcclxuICAgICAgICBkb3dubG9hZEVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvd25sb2FkRWxlbWVudCk7XHJcbiAgICAgIH0sICdpbWFnZS9wbmcnLCAwLjk1KTtcclxuICAgICAgZXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgICAgIGV4cG9ydEJ0bi5pbm5lckhUTUwgPSAn5omT5Y2wJztcclxuICAgICAgLy8gY2FudmFzMi50b0Jsb2IoZnVuY3Rpb24gKGJsb2IpIHtcclxuICAgICAgLy8gICBsZXQgaW1nQmxvYkRhdGEgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAvLyAgIGxldCBkb3dubG9hZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIC8vICAgZG93bmxvYWRFbGVtZW50LmhyZWYgPSBpbWdCbG9iRGF0YTtcclxuICAgICAgLy8gICBkb3dubG9hZEVsZW1lbnQuZG93bmxvYWQgPSBg6auY5riF5Ye65Zu+LSR7Z2V0RGF0ZVRpbWVTdHJpbmcoKX0ucG5nYDtcclxuICAgICAgLy8gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkRWxlbWVudCk7XHJcbiAgICAgIC8vICAgZG93bmxvYWRFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgIC8vICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb3dubG9hZEVsZW1lbnQpO1xyXG4gICAgICAvLyAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nQmxvYkRhdGEpO1xyXG5cclxuICAgICAgLy8gICAvLyDlnKjph4rmlL7otYTmupDlkI7miafooYzlm57osINcclxuICAgICAgLy8gICBleHBvcnRpbmcgPSBmYWxzZTtcclxuICAgICAgLy8gICBleHBvcnRCdG4uaW5uZXJIVE1MID0gJ+aJk+WNsCc7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hcFByaW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVxQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4QkE7QUFBQTtBQUFBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQWhTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFuTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakNBO0FBQUE7QUFBQTtBQUNBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQW5EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQXhFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5ZkE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQThJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtT0E7QUE4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThSQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/MapPrint/index.js\n"); /***/ }), /***/ "./src/Global/MapX/index.js": /*!**********************************!*\ !*** ./src/Global/MapX/index.js ***! \**********************************/ /*! exports provided: open, close */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"open\", function() { return open; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"close\", function() { return close; });\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Event */ \"./src/Event/index.js\");\n\n\nvar tools;\nvar Xevent;\nvar mapx = {};\nvar curRectangle = undefined;\nvar centerResult = undefined;\nvar mouseStart = false;\nvar syncObject = {};\nvar init = function init(sdk) {\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n var div = document.createElement('div');\n div.id = 'mapxDiv';\n div.style.width = '222px';\n div.style.height = '112px';\n div.style.position = 'absolute';\n div.style.right = '10px';\n div.style.bottom = '82px';\n div.style.zIndex = '1';\n document.getElementById(sdk.div_id).appendChild(div);\n var options = {\n imageryProvider: new Cesium.TileMapServiceImageryProvider({\n url: Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\")\n }),\n sceneMode: Cesium.SceneMode.SCENE2D,\n // mapMode2D: Cesium.MapMode2D.ROTATE,\n baseLayerPicker: false,\n geocoder: false,\n animation: false,\n fullscreenButton: false,\n navigationHelpButton: false,\n // vrButton?: boolean;\n homeButton: false,\n infoBox: false,\n sceneModePicker: false,\n selectionIndicator: false,\n timeline: false,\n shouldAnimate: true\n };\n mapx.viewer = new Cesium.Viewer('mapxDiv', options);\n mapx.viewer.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(0, 0, 40000000)\n });\n mapx.viewer.trackedEntity = undefined;\n mapx.viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n mapx.viewer.scene.screenSpaceCameraController.enableRotate = false;\n mapx.viewer.scene.screenSpaceCameraController.enableTranslate = false;\n mapx.viewer.scene.screenSpaceCameraController.enableZoom = false;\n mapx.viewer.scene.screenSpaceCameraController.enableTilt = false;\n mapx.viewer.scene.screenSpaceCameraController.enableLook = false;\n\n // 创建范围框\n var entity = mapx.viewer.entities.add({\n name: 'mapX rectangle',\n position: new Cesium.CallbackProperty(function () {\n return centerResult || Cesium.Cartesian3.fromDegrees(0, 0, 0);\n }, false),\n rectangle: {\n coordinates: new Cesium.CallbackProperty(function () {\n return curRectangle || Cesium.Rectangle.fromDegrees(0.0, 0.0, 0.01, 0.01);\n }, false),\n material: Cesium.Color.RED.withAlpha(0.01),\n outline: true,\n outlineColor: Cesium.Color.RED,\n outlineWidth: 2,\n height: 1\n },\n billboard: {\n image: tools.getSourceRootPath() + '/img/cross.svg',\n scale: 1,\n width: 16,\n height: 16\n }\n });\n syncObject = {\n sdk: sdk,\n entity: entity\n };\n mapx.viewer.camera.percentageChanged = 0.001;\n sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject); // 鹰眼与主图同步\n var pick;\n Xevent = new _Event__WEBPACK_IMPORTED_MODULE_1__[\"default\"]({\n viewer: mapx.viewer\n });\n Xevent.mouse_left_down(function (movement, cartesian) {\n mouseStart = true;\n pick = mapx.viewer.scene.pick(movement.position);\n });\n Xevent.mouse_left_up(function (movement, cartesian) {\n mouseStart = false;\n });\n Xevent.mouse_move(function (movement, cartesian) {\n if (pick && mouseStart) {\n var sdkCH = tools.cartesian3Towgs84(sdk.viewer.camera.position, sdk.viewer).alt;\n var pos84 = tools.cartesian3Towgs84(cartesian, mapx.viewer);\n // sdk.viewer.camera.position = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, sdkCH)\n sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, sdkCH),\n duration: 0\n });\n }\n });\n};\nfunction syncViewer() {\n if (!this.sdk || !this.sdk.viewer) {\n return;\n }\n // 视角中心点(伪)\n centerResult = this.sdk.viewer.camera.pickEllipsoid(new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight / (2 - (90 + this.sdk.viewer.camera.pitch / (Cesium.Math.PI / 180)) / 110)));\n if (!centerResult) {\n centerResult = this.sdk.viewer.camera.position;\n }\n var height = tools.cartesian3Towgs84(this.sdk.viewer.camera.position, this.sdk.viewer).alt;\n var centerResult84 = tools.cartesian3Towgs84(centerResult, this.sdk.viewer);\n var stepX = 120000;\n var stepY = 280000;\n if (height > 9000000) {\n height = 9000000;\n }\n if (height < 400000) {\n this.entity.billboard.show = true;\n this.entity.rectangle.show = false;\n } else {\n this.entity.billboard.show = false;\n this.entity.rectangle.show = true;\n }\n curRectangle = new Cesium.Rectangle(Cesium.Math.toRadians(centerResult84.lng - height / stepX), Cesium.Math.toRadians(centerResult84.lat - height / stepY), Cesium.Math.toRadians(centerResult84.lng + height / stepX), Cesium.Math.toRadians(centerResult84.lat + height / stepY));\n}\n;\nfunction open(sdk) {\n if (!mapx.viewer) {\n init(sdk);\n } else {\n mapx.viewer.container.style.display = 'block';\n var entity;\n var entities = mapx.viewer.entities.values;\n for (var i = 0; i < entities.length; i++) {\n if (entities[i].name === 'mapX rectangle') {\n entity = entities[i];\n break;\n }\n }\n sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject); // 鹰眼与主图同步\n }\n}\nfunction close(sdk) {\n if (!mapx.viewer) {\n return;\n }\n mapx.viewer.container.style.display = 'none';\n var entity;\n var entities = mapx.viewer.entities.values;\n for (var i = 0; i < entities.length; i++) {\n if (entities[i].name === 'mapX rectangle') {\n entity = entities[i];\n break;\n }\n }\n sdk.viewer.scene.preRender.removeEventListener(syncViewer, syncObject);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL01hcFgvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL01hcFgvaW5kZXguanM/ZTk0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9vbHMgZnJvbSAnLi4vLi4vVG9vbHMnXHJcbmltcG9ydCBFdmVudCBmcm9tICcuLi8uLi9FdmVudCdcclxuXHJcbmxldCB0b29sc1xyXG5sZXQgWGV2ZW50XHJcbmxldCBtYXB4ID0ge31cclxubGV0IGN1clJlY3RhbmdsZSA9IHVuZGVmaW5lZDtcclxubGV0IGNlbnRlclJlc3VsdCA9IHVuZGVmaW5lZFxyXG5sZXQgbW91c2VTdGFydCA9IGZhbHNlXHJcbmxldCBzeW5jT2JqZWN0ID0ge31cclxuY29uc3QgaW5pdCA9IChzZGspID0+IHtcclxuICB0b29scyA9IG5ldyBUb29scygpXHJcbiAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIGRpdi5pZCA9ICdtYXB4RGl2J1xyXG4gIGRpdi5zdHlsZS53aWR0aCA9ICcyMjJweCc7XHJcbiAgZGl2LnN0eWxlLmhlaWdodCA9ICcxMTJweCc7XHJcbiAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICBkaXYuc3R5bGUucmlnaHQgPSAnMTBweCc7XHJcbiAgZGl2LnN0eWxlLmJvdHRvbSA9ICc4MnB4JztcclxuICBkaXYuc3R5bGUuekluZGV4ID0gJzEnO1xyXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNkay5kaXZfaWQpLmFwcGVuZENoaWxkKGRpdilcclxuICBsZXQgb3B0aW9ucyA9IHtcclxuICAgIGltYWdlcnlQcm92aWRlcjogbmV3IENlc2l1bS5UaWxlTWFwU2VydmljZUltYWdlcnlQcm92aWRlcih7XHJcbiAgICAgIHVybDogQ2VzaXVtLmJ1aWxkTW9kdWxlVXJsKFwiQXNzZXRzL1RleHR1cmVzL05hdHVyYWxFYXJ0aElJXCIpLFxyXG4gICAgfSksXHJcbiAgICBzY2VuZU1vZGU6IENlc2l1bS5TY2VuZU1vZGUuU0NFTkUyRCxcclxuICAgIC8vIG1hcE1vZGUyRDogQ2VzaXVtLk1hcE1vZGUyRC5ST1RBVEUsXHJcbiAgICBiYXNlTGF5ZXJQaWNrZXI6IGZhbHNlLFxyXG4gICAgZ2VvY29kZXI6IGZhbHNlLFxyXG4gICAgYW5pbWF0aW9uOiBmYWxzZSxcclxuICAgIGZ1bGxzY3JlZW5CdXR0b246IGZhbHNlLFxyXG4gICAgbmF2aWdhdGlvbkhlbHBCdXR0b246IGZhbHNlLFxyXG4gICAgLy8gdnJCdXR0b24/OiBib29sZWFuO1xyXG4gICAgaG9tZUJ1dHRvbjogZmFsc2UsXHJcbiAgICBpbmZvQm94OiBmYWxzZSxcclxuICAgIHNjZW5lTW9kZVBpY2tlcjogZmFsc2UsXHJcbiAgICBzZWxlY3Rpb25JbmRpY2F0b3I6IGZhbHNlLFxyXG4gICAgdGltZWxpbmU6IGZhbHNlLFxyXG4gICAgc2hvdWxkQW5pbWF0ZTogdHJ1ZVxyXG4gIH1cclxuICBtYXB4LnZpZXdlciA9IG5ldyBDZXNpdW0uVmlld2VyKCdtYXB4RGl2Jywgb3B0aW9ucyk7XHJcbiAgbWFweC52aWV3ZXIuY2FtZXJhLnNldFZpZXcoe1xyXG4gICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKDAsIDAsIDQwMDAwMDAwKSxcclxuICB9KVxyXG4gIG1hcHgudmlld2VyLnRyYWNrZWRFbnRpdHkgPSB1bmRlZmluZWQ7XHJcbiAgbWFweC52aWV3ZXIuY2VzaXVtV2lkZ2V0LnNjcmVlblNwYWNlRXZlbnRIYW5kbGVyLnJlbW92ZUlucHV0QWN0aW9uKFxyXG4gICAgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLkxFRlRfRE9VQkxFX0NMSUNLXHJcbiAgKTtcclxuICBtYXB4LnZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlUm90YXRlID0gZmFsc2U7XHJcbiAgbWFweC52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVRyYW5zbGF0ZSA9IGZhbHNlO1xyXG4gIG1hcHgudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgbWFweC52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVRpbHQgPSBmYWxzZTtcclxuICBtYXB4LnZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlTG9vayA9IGZhbHNlO1xyXG5cclxuICAvLyDliJvlu7rojIPlm7TmoYZcclxuICBsZXQgZW50aXR5ID0gbWFweC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgIG5hbWU6ICdtYXBYIHJlY3RhbmdsZScsXHJcbiAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBjZW50ZXJSZXN1bHQgfHwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoMCwgMCwgMClcclxuICAgICAgKTtcclxuICAgIH0sIGZhbHNlKSxcclxuICAgIHJlY3RhbmdsZToge1xyXG4gICAgICBjb29yZGluYXRlczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgY3VyUmVjdGFuZ2xlIHx8IENlc2l1bS5SZWN0YW5nbGUuZnJvbURlZ3JlZXMoMC4wLCAwLjAsIDAuMDEsIDAuMDEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLlJFRC53aXRoQWxwaGEoMC4wMSksXHJcbiAgICAgIG91dGxpbmU6IHRydWUsXHJcbiAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLlJFRCxcclxuICAgICAgb3V0bGluZVdpZHRoOiAyLFxyXG4gICAgICBoZWlnaHQ6IDEsXHJcbiAgICB9LFxyXG4gICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgIGltYWdlOiB0b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvY3Jvc3Muc3ZnJyxcclxuICAgICAgc2NhbGU6IDEsXHJcbiAgICAgIHdpZHRoOiAxNixcclxuICAgICAgaGVpZ2h0OiAxNlxyXG4gICAgfSxcclxuICB9KTtcclxuICBzeW5jT2JqZWN0ID0geyBzZGssIGVudGl0eSB9XHJcbiAgbWFweC52aWV3ZXIuY2FtZXJhLnBlcmNlbnRhZ2VDaGFuZ2VkID0gMC4wMDE7XHJcbiAgc2RrLnZpZXdlci5zY2VuZS5wcmVSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcihzeW5jVmlld2VyLCBzeW5jT2JqZWN0KTsgLy8g6bmw55y85LiO5Li75Zu+5ZCM5q2lXHJcbiAgbGV0IHBpY2tcclxuICBYZXZlbnQgPSBuZXcgRXZlbnQoeyB2aWV3ZXI6IG1hcHgudmlld2VyIH0pXHJcbiAgWGV2ZW50Lm1vdXNlX2xlZnRfZG93bigobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgbW91c2VTdGFydCA9IHRydWVcclxuICAgIHBpY2sgPSBtYXB4LnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gIH0pXHJcbiAgWGV2ZW50Lm1vdXNlX2xlZnRfdXAoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgIG1vdXNlU3RhcnQgPSBmYWxzZVxyXG4gIH0pXHJcbiAgWGV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgIGlmIChwaWNrICYmIG1vdXNlU3RhcnQpIHtcclxuICAgICAgbGV0IHNka0NIID0gdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb24sIHNkay52aWV3ZXIpLmFsdFxyXG4gICAgICBsZXQgcG9zODQgPSB0b29scy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIG1hcHgudmlld2VyKVxyXG4gICAgICAvLyBzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCBzZGtDSClcclxuICAgICAgc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3M4NC5sbmcsIHBvczg0LmxhdCwgc2RrQ0gpLFxyXG4gICAgICAgIGR1cmF0aW9uOiAwXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5mdW5jdGlvbiBzeW5jVmlld2VyKCkge1xyXG4gIGlmKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgLy8g6KeG6KeS5Lit5b+D54K5KOS8qilcclxuICBjZW50ZXJSZXN1bHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBpY2tFbGxpcHNvaWQoXHJcbiAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50V2lkdGggLyAyLFxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FudmFzLmNsaWVudEhlaWdodCAvICgyIC0gKCg5MCArIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucGl0Y2ggLyAoQ2VzaXVtLk1hdGguUEkgLyAxODApKSAvIDExMCkpLFxyXG4gICAgKSxcclxuICApXHJcbiAgaWYgKCFjZW50ZXJSZXN1bHQpIHtcclxuICAgIGNlbnRlclJlc3VsdCA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25cclxuICB9XHJcbiAgbGV0IGhlaWdodCA9IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcikuYWx0XHJcbiAgbGV0IGNlbnRlclJlc3VsdDg0ID0gdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoY2VudGVyUmVzdWx0LCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgbGV0IHN0ZXBYID0gMTIwMDAwXHJcbiAgbGV0IHN0ZXBZID0gMjgwMDAwXHJcbiAgaWYgKGhlaWdodCA+IDkwMDAwMDApIHtcclxuICAgIGhlaWdodCA9IDkwMDAwMDBcclxuICB9XHJcbiAgaWYgKGhlaWdodCA8IDQwMDAwMCkge1xyXG4gICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSB0cnVlXHJcbiAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUuc2hvdyA9IGZhbHNlXHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSBmYWxzZVxyXG4gICAgdGhpcy5lbnRpdHkucmVjdGFuZ2xlLnNob3cgPSB0cnVlXHJcbiAgfVxyXG4gIGN1clJlY3RhbmdsZSA9IG5ldyBDZXNpdW0uUmVjdGFuZ2xlKENlc2l1bS5NYXRoLnRvUmFkaWFucyhjZW50ZXJSZXN1bHQ4NC5sbmcgLSAoaGVpZ2h0IC8gc3RlcFgpKSwgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGNlbnRlclJlc3VsdDg0LmxhdCAtIChoZWlnaHQgLyBzdGVwWSkpLCBDZXNpdW0uTWF0aC50b1JhZGlhbnMoY2VudGVyUmVzdWx0ODQubG5nICsgKGhlaWdodCAvIHN0ZXBYKSksIENlc2l1bS5NYXRoLnRvUmFkaWFucyhjZW50ZXJSZXN1bHQ4NC5sYXQgKyAoaGVpZ2h0IC8gc3RlcFkpKSlcclxufTtcclxuZnVuY3Rpb24gb3BlbihzZGspIHtcclxuICBpZiAoIW1hcHgudmlld2VyKSB7XHJcbiAgICBpbml0KHNkaylcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBtYXB4LnZpZXdlci5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICBsZXQgZW50aXR5XHJcbiAgICBsZXQgZW50aXRpZXMgPSBtYXB4LnZpZXdlci5lbnRpdGllcy52YWx1ZXNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGVudGl0aWVzW2ldLm5hbWUgPT09ICdtYXBYIHJlY3RhbmdsZScpIHtcclxuICAgICAgICBlbnRpdHkgPSBlbnRpdGllc1tpXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNkay52aWV3ZXIuc2NlbmUucHJlUmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoc3luY1ZpZXdlciwgc3luY09iamVjdCk7IC8vIOm5sOecvOS4juS4u+WbvuWQjOatpVxyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBjbG9zZShzZGspIHtcclxuICBpZiAoIW1hcHgudmlld2VyKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgbWFweC52aWV3ZXIuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgbGV0IGVudGl0eVxyXG4gIGxldCBlbnRpdGllcyA9IG1hcHgudmlld2VyLmVudGl0aWVzLnZhbHVlc1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChlbnRpdGllc1tpXS5uYW1lID09PSAnbWFwWCByZWN0YW5nbGUnKSB7XHJcbiAgICAgIGVudGl0eSA9IGVudGl0aWVzW2ldXHJcbiAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG4gIHNkay52aWV3ZXIuc2NlbmUucHJlUmVuZGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3luY1ZpZXdlciwgc3luY09iamVjdClcclxufVxyXG5cclxuZXhwb3J0IHsgb3BlbiwgY2xvc2UgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/MapX/index.js\n"); /***/ }), /***/ "./src/Global/MouseCoordinate/index.js": /*!*********************************************!*\ !*** ./src/Global/MouseCoordinate/index.js ***! \*********************************************/ /*! exports provided: MouseCoordinate */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MouseCoordinate\", function() { return MouseCoordinate; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/**\r\n * 鼠标坐标\r\n */\n\n\n\n\n\nvar event;\nvar event2;\nvar MouseCoordinateElm;\nvar requestAnimationFrameEventId;\nvar tmovement;\nvar targetSdk;\nvar sdkD;\nvar MouseCoordinate = function MouseCoordinate(sdk, status) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n targetSdk = sdk;\n sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_4__[\"getSdk\"])().sdkD;\n if (!sdkD) {\n sdkD = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_5__[\"getSdk\"])().sdkD;\n }\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_1__[\"default\"](sdk);\n if (status) {\n var _animateUpdate = function animateUpdate() {\n requestAnimationFrameEventId = requestAnimationFrame(_animateUpdate);\n getPosition();\n };\n if (event) {\n event.destroy();\n }\n if (event2) {\n event2.destroy();\n event2 = undefined;\n }\n event = new _Event_index__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdk);\n tmovement = null;\n var position = {\n x: '',\n y: '',\n z: ''\n };\n var contentElm;\n if (MouseCoordinateElm) {\n contentElm = MouseCoordinateElm;\n } else {\n contentElm = document.createElement('div');\n contentElm.style.position = 'absolute';\n contentElm.style['z-index'] = 777;\n contentElm.style.color = '#ff0000';\n contentElm.style.left = '0px';\n contentElm.style.top = '0px';\n contentElm.style.width = '100%';\n contentElm.style.height = '100%';\n contentElm.style['font-size'] = '12px';\n contentElm.style['pointer-events'] = 'none';\n contentElm.style.background = \"url(\".concat(tools.getSourceRootPath(), \"/img/cross.png) no-repeat 100% 100%\");\n contentElm.style['background-size'] = \"200% 200%\";\n MouseCoordinateElm = contentElm;\n }\n sdk.viewer.container.appendChild(contentElm);\n event.mouse_move(function (movement, cartesian) {\n targetSdk = sdk;\n tmovement = _objectSpread({}, movement.endPosition);\n });\n var getPosition = function getPosition() {\n if (!targetSdk) {\n return;\n }\n var canvas = sdk.viewer._element.getElementsByTagName('canvas')[0];\n sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_4__[\"getSdk\"])().sdkD;\n if (!sdkD) {\n sdkD = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_5__[\"getSdk\"])().sdkD;\n }\n if (!event2 && sdkD) {\n event2 = new _Event_index__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdkD);\n event2.mouse_move(function (movement, cartesian) {\n targetSdk = sdkD;\n tmovement = {\n x: movement.endPosition.x,\n y: movement.endPosition.y\n };\n });\n }\n if (!tmovement) {\n return;\n }\n var left = tmovement.x;\n var top = tmovement.y;\n var cartesian;\n if (targetSdk.viewer.scene.mode === 2) {\n left = left + canvas.width;\n cartesian = targetSdk.viewer.camera.pickEllipsoid(tmovement, targetSdk.viewer.scene.globe.ellipsoid);\n } else {\n cartesian = targetSdk.viewer.scene.pickPosition(tmovement);\n if (!cartesian) {\n var ray = targetSdk.viewer.camera.getPickRay(position); //相交的射线\n var pickedObjects = targetSdk.viewer.scene.drillPickFromRay(ray, 10);\n var result = {};\n for (var i = 0; i < pickedObjects.length; i++) {\n if (pickedObjects[i].position) {\n result = pickedObjects[i];\n break;\n }\n }\n cartesian = result.position;\n if (!cartesian) {\n cartesian = targetSdk.viewer.scene.globe.pick(ray, targetSdk.viewer.scene);\n }\n }\n }\n contentElm.style['background-position-x'] = \"\".concat(-sdk.viewer.container.clientWidth + left + 4, \"px\");\n contentElm.style['background-position-y'] = \"\".concat(-sdk.viewer.container.clientHeight + top - 2, \"px\");\n // this.entity.position = cartesian\n if (cartesian) {\n var degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer);\n var coordinateSystem = Object(_Global_global__WEBPACK_IMPORTED_MODULE_2__[\"getCoordinateSystem\"])();\n if (coordinateSystem === 'EPSG:4326') {\n position = {\n x: degrees.lng,\n y: degrees.lat,\n z: degrees.alt\n };\n contentElm.innerHTML = \"

\\u7ECF\\u5EA6\\uFF1A\").concat(degrees.lng.toFixed(6), \"\\xB0

\\u7EF4\\u5EA6\\uFF1A\").concat(degrees.lat.toFixed(6), \"\\xB0

\\u6D77\\u62D4\\uFF1A\").concat(degrees.alt.toFixed(2), \" m

\");\n } else {\n var _result = tools.convert([{\n x: degrees.lng,\n y: degrees.lat,\n z: degrees.alt\n }], 'EPSG:4326', coordinateSystem);\n position = _result.points[0];\n contentElm.innerHTML = \"

x\\uFF1A\").concat(position.x.toFixed(6), \"

y\\uFF1A\").concat(position.y.toFixed(6), \"

z\\uFF1A\").concat(position.z.toFixed(6), \"

\");\n }\n } else {\n var _coordinateSystem = Object(_Global_global__WEBPACK_IMPORTED_MODULE_2__[\"getCoordinateSystem\"])();\n if (_coordinateSystem === 'EPSG:4326') {\n contentElm.innerHTML = \"

\\u7ECF\\u5EA6\\uFF1A-

\\u7EF4\\u5EA6\\uFF1A-

\\u6D77\\u62D4\\uFF1A-

\");\n } else {\n contentElm.innerHTML = \"

x\\uFF1A-

y\\uFF1A-

z\\uFF1A-

\");\n }\n }\n };\n _animateUpdate();\n } else {\n if (event) {\n event.destroy();\n }\n if (event2) {\n event2.destroy();\n event2 = undefined;\n }\n if (MouseCoordinateElm) {\n sdk.viewer.container.removeChild(MouseCoordinateElm);\n MouseCoordinateElm = undefined;\n }\n if (requestAnimationFrameEventId) {\n cancelAnimationFrame(requestAnimationFrameEventId);\n }\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL01vdXNlQ29vcmRpbmF0ZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvTW91c2VDb29yZGluYXRlL2luZGV4LmpzP2RhZjQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOm8oOagh+WdkOagh1xyXG4gKi9cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi8uLi9Ub29sc1wiO1xyXG5pbXBvcnQgeyBnZXRDb29yZGluYXRlU3lzdGVtIH0gZnJvbSBcIi4uLy4uL0dsb2JhbC9nbG9iYWxcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7IGdldFNkayBhcyBnZXQyRFNkayB9IGZyb20gJy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgZ2V0U2RrIGFzIGdldFNwbGl0U2NyZWVuU2RrIH0gZnJvbSBcIi4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlblwiO1xyXG5cclxubGV0IGV2ZW50XHJcbmxldCBldmVudDJcclxubGV0IE1vdXNlQ29vcmRpbmF0ZUVsbVxyXG5sZXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZFxyXG5sZXQgdG1vdmVtZW50XHJcbmxldCB0YXJnZXRTZGtcclxubGV0IHNka0RcclxuXHJcbmNvbnN0IE1vdXNlQ29vcmRpbmF0ZSA9IChzZGssIHN0YXR1cykgPT4ge1xyXG4gIGlmICghc2RrIHx8ICFzZGsudmlld2VyKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgdGFyZ2V0U2RrID0gc2RrXHJcbiAgc2RrRCA9IGdldDJEU2RrKCkuc2RrRFxyXG4gIGlmKCFzZGtEKSB7XHJcbiAgICBzZGtEID0gZ2V0U3BsaXRTY3JlZW5TZGsoKS5zZGtEXHJcbiAgfVxyXG5cclxuICBsZXQgdG9vbHMgPSBuZXcgVG9vbHMoc2RrKVxyXG4gIGlmIChzdGF0dXMpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIGlmIChldmVudDIpIHtcclxuICAgICAgZXZlbnQyLmRlc3Ryb3koKVxyXG4gICAgICBldmVudDIgPSB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoc2RrKVxyXG4gICAgdG1vdmVtZW50ID0gbnVsbFxyXG4gICAgbGV0IHBvc2l0aW9uID0ge1xyXG4gICAgICB4OiAnJyxcclxuICAgICAgeTogJycsXHJcbiAgICAgIHo6ICcnXHJcbiAgICB9XHJcbiAgICBsZXQgY29udGVudEVsbVxyXG4gICAgaWYgKE1vdXNlQ29vcmRpbmF0ZUVsbSkge1xyXG4gICAgICBjb250ZW50RWxtID0gTW91c2VDb29yZGluYXRlRWxtXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgY29udGVudEVsbS5zdHlsZVsnei1pbmRleCddID0gNzc3O1xyXG4gICAgICBjb250ZW50RWxtLnN0eWxlLmNvbG9yID0gJyNmZjAwMDAnO1xyXG4gICAgICBjb250ZW50RWxtLnN0eWxlLmxlZnQgPSAnMHB4JztcclxuICAgICAgY29udGVudEVsbS5zdHlsZS50b3AgPSAnMHB4JztcclxuICAgICAgY29udGVudEVsbS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgY29udGVudEVsbS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgIGNvbnRlbnRFbG0uc3R5bGVbJ2ZvbnQtc2l6ZSddID0gJzEycHgnO1xyXG4gICAgICBjb250ZW50RWxtLnN0eWxlWydwb2ludGVyLWV2ZW50cyddID0gJ25vbmUnO1xyXG4gICAgICBjb250ZW50RWxtLnN0eWxlLmJhY2tncm91bmQgPSBgdXJsKCR7dG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKX0vaW1nL2Nyb3NzLnBuZykgbm8tcmVwZWF0IDEwMCUgMTAwJWA7XHJcbiAgICAgIGNvbnRlbnRFbG0uc3R5bGVbJ2JhY2tncm91bmQtc2l6ZSddID0gYDIwMCUgMjAwJWA7XHJcbiAgICAgIE1vdXNlQ29vcmRpbmF0ZUVsbSA9IGNvbnRlbnRFbG1cclxuICAgIH1cclxuICAgIHNkay52aWV3ZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICB0YXJnZXRTZGsgPSBzZGtcclxuICAgICAgdG1vdmVtZW50ID0geyAuLi5tb3ZlbWVudC5lbmRQb3NpdGlvbiB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIXRhcmdldFNkaykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBjYW52YXMgPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXVxyXG4gICAgICBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmKCFzZGtEKSB7XHJcbiAgICAgICAgc2RrRCA9IGdldFNwbGl0U2NyZWVuU2RrKCkuc2RrRFxyXG4gICAgICB9XHJcbiAgICAgIGlmICghZXZlbnQyICYmIHNka0QpIHtcclxuICAgICAgICBldmVudDIgPSBuZXcgTW91c2VFdmVudChzZGtEKVxyXG4gICAgICAgIGV2ZW50Mi5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICB0YXJnZXRTZGsgPSBzZGtEXHJcbiAgICAgICAgICB0bW92ZW1lbnQgPSB7IHg6IG1vdmVtZW50LmVuZFBvc2l0aW9uLngsIHk6IG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0bW92ZW1lbnQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgbGVmdCA9IHRtb3ZlbWVudC54O1xyXG4gICAgICBsZXQgdG9wID0gdG1vdmVtZW50Lnk7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW5cclxuICAgICAgaWYgKHRhcmdldFNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICAgIGxlZnQgPSBsZWZ0ICsgY2FudmFzLndpZHRoXHJcbiAgICAgICAgY2FydGVzaWFuID0gdGFyZ2V0U2RrLnZpZXdlci5jYW1lcmEucGlja0VsbGlwc29pZCh0bW92ZW1lbnQsIHRhcmdldFNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNhcnRlc2lhbiA9IHRhcmdldFNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKHRtb3ZlbWVudClcclxuICAgICAgICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgICAgICAgY29uc3QgcmF5ID0gdGFyZ2V0U2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICAgICAgICBsZXQgcGlja2VkT2JqZWN0cyA9IHRhcmdldFNkay52aWV3ZXIuc2NlbmUuZHJpbGxQaWNrRnJvbVJheShyYXksIDEwKTtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSB7fVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gcGlja2VkT2JqZWN0c1tpXVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhcnRlc2lhbiA9IHJlc3VsdC5wb3NpdGlvblxyXG4gICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgICAgY2FydGVzaWFuID0gdGFyZ2V0U2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheSwgdGFyZ2V0U2RrLnZpZXdlci5zY2VuZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnRlbnRFbG0uc3R5bGVbJ2JhY2tncm91bmQtcG9zaXRpb24teCddID0gYCR7LXNkay52aWV3ZXIuY29udGFpbmVyLmNsaWVudFdpZHRoICsgbGVmdCArIDR9cHhgO1xyXG5cclxuICAgICAgY29udGVudEVsbS5zdHlsZVsnYmFja2dyb3VuZC1wb3NpdGlvbi15J10gPSBgJHstc2RrLnZpZXdlci5jb250YWluZXIuY2xpZW50SGVpZ2h0ICsgdG9wIC0gMn1weGA7XHJcbiAgICAgIC8vIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gY2FydGVzaWFuXHJcbiAgICAgIGlmIChjYXJ0ZXNpYW4pIHtcclxuICAgICAgICBsZXQgZGVncmVlcyA9IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlcilcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZVN5c3RlbSA9IGdldENvb3JkaW5hdGVTeXN0ZW0oKVxyXG4gICAgICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09PSAnRVBTRzo0MzI2Jykge1xyXG4gICAgICAgICAgcG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IGRlZ3JlZXMubG5nLFxyXG4gICAgICAgICAgICB5OiBkZWdyZWVzLmxhdCxcclxuICAgICAgICAgICAgejogZGVncmVlcy5hbHRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9J3dpZHRoOiAxNTBweDtwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDc3NzsgY29sb3I6ICNmZjAwMDA7IGZvbnQtc2l6ZTogMTJweDsgbGVmdDoke2xlZnQgKyAyMH1weDsgdG9wOiR7dG9wICsgMTB9cHg7Jz48cCBzdHlsZT0nbWFyZ2luOiAwOyc+57uP5bqm77yaJHtkZWdyZWVzLmxuZy50b0ZpeGVkKDYpfcKwPC9wPjxwIHN0eWxlPSdtYXJnaW46IDA7Jz7nu7TluqbvvJoke2RlZ3JlZXMubGF0LnRvRml4ZWQoNil9wrA8L3A+PHAgc3R5bGU9J21hcmdpbjogMDsnPua1t+aLlO+8miR7ZGVncmVlcy5hbHQudG9GaXhlZCgyKX0gbTwvcD48L2Rpdj5gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHRvb2xzLmNvbnZlcnQoW3sgeDogZGVncmVlcy5sbmcsIHk6IGRlZ3JlZXMubGF0LCB6OiBkZWdyZWVzLmFsdCB9XSwgJ0VQU0c6NDMyNicsIGNvb3JkaW5hdGVTeXN0ZW0pXHJcbiAgICAgICAgICBwb3NpdGlvbiA9IHJlc3VsdC5wb2ludHNbMF1cclxuICAgICAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9J3dpZHRoOiAxNTBweDtwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDc3NzsgY29sb3I6ICNmZjAwMDA7IGZvbnQtc2l6ZTogMTJweDsgbGVmdDoke2xlZnQgKyAyMH1weDsgdG9wOiR7dG9wICsgMTB9cHg7Jz48cCBzdHlsZT0nbWFyZ2luOiAwOyc+eO+8miR7cG9zaXRpb24ueC50b0ZpeGVkKDYpfTwvcD48cCBzdHlsZT0nbWFyZ2luOiAwOyc+ee+8miR7cG9zaXRpb24ueS50b0ZpeGVkKDYpfTwvcD48cCBzdHlsZT0nbWFyZ2luOiAwOyc+eu+8miR7cG9zaXRpb24uei50b0ZpeGVkKDYpfTwvcD48L2Rpdj5gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBjb29yZGluYXRlU3lzdGVtID0gZ2V0Q29vcmRpbmF0ZVN5c3RlbSgpXHJcbiAgICAgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT09ICdFUFNHOjQzMjYnKSB7XHJcbiAgICAgICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGA8ZGl2IHN0eWxlPSd3aWR0aDogMTUwcHg7cG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiA3Nzc7IGNvbG9yOiAjZmYwMDAwOyBmb250LXNpemU6IDEycHg7IGxlZnQ6JHtsZWZ0ICsgMjB9cHg7IHRvcDoke3RvcCArIDEwfXB4Oyc+PHAgc3R5bGU9J21hcmdpbjogMDsnPue7j+W6pu+8mi08L3A+PHAgc3R5bGU9J21hcmdpbjogMDsnPue7tOW6pu+8mi08L3A+PHAgc3R5bGU9J21hcmdpbjogMDsnPua1t+aLlO+8mi08L3A+PC9kaXY+YFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9J3dpZHRoOiAxNTBweDtwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDc3NzsgY29sb3I6ICNmZjAwMDA7IGZvbnQtc2l6ZTogMTJweDsgbGVmdDoke2xlZnQgKyAyMH1weDsgdG9wOiR7dG9wICsgMTB9cHg7Jz48cCBzdHlsZT0nbWFyZ2luOiAwOyc+eO+8mi08L3A+PHAgc3R5bGU9J21hcmdpbjogMDsnPnnvvJotPC9wPjxwIHN0eWxlPSdtYXJnaW46IDA7Jz5677yaLTwvcD48L2Rpdj5gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFuaW1hdGVVcGRhdGUoKVxyXG4gICAgZnVuY3Rpb24gYW5pbWF0ZVVwZGF0ZSgpIHtcclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShcclxuICAgICAgICBhbmltYXRlVXBkYXRlXHJcbiAgICAgIClcclxuICAgICAgZ2V0UG9zaXRpb24oKVxyXG4gICAgfVxyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIGlmIChldmVudDIpIHtcclxuICAgICAgZXZlbnQyLmRlc3Ryb3koKVxyXG4gICAgICBldmVudDIgPSB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGlmIChNb3VzZUNvb3JkaW5hdGVFbG0pIHtcclxuICAgICAgc2RrLnZpZXdlci5jb250YWluZXIucmVtb3ZlQ2hpbGQoTW91c2VDb29yZGluYXRlRWxtKVxyXG4gICAgICBNb3VzZUNvb3JkaW5hdGVFbG0gPSB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGlmIChyZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlcXVlc3RBbmltYXRpb25GcmFtZUV2ZW50SWQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBNb3VzZUNvb3JkaW5hdGUgfVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQXdIQTtBQUdBO0FBQ0E7QUEzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/MouseCoordinate/index.js\n"); /***/ }), /***/ "./src/Global/MultiViewportMode/ClickCallback/index.js": /*!*************************************************************!*\ !*** ./src/Global/MultiViewportMode/ClickCallback/index.js ***! \*************************************************************/ /*! exports provided: openLeftClick, closeLeftClick, regLeftClickCallback, unRegLeftClickCallback, openRightClick, closeRightClick, regRightClickCallback, unRegRightClickCallback, openMove, closeMove, regMoveCallback, unregMoveCallback, getLeftClickState, getRightClickState, getMoveState */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openLeftClick\", function() { return openLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeLeftClick\", function() { return closeLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regLeftClickCallback\", function() { return regLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegLeftClickCallback\", function() { return unRegLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openRightClick\", function() { return openRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeRightClick\", function() { return closeRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regRightClickCallback\", function() { return regRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegRightClickCallback\", function() { return unRegRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openMove\", function() { return openMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeMove\", function() { return closeMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regMoveCallback\", function() { return regMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unregMoveCallback\", function() { return unregMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLeftClickState\", function() { return getLeftClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRightClickState\", function() { return getRightClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMoveState\", function() { return getMoveState; });\n/**\r\n * @name: click\r\n * @author: Administrator\r\n * @date: 2023-05-28 11:05\r\n * @description:click\r\n * @update: 2023-05-28 11:05\r\n */\nvar leftClickHandler = null;\nvar rightClickHandler = null;\nvar MoveHandler = null;\nvar leftClickCallbackMap = new Map();\nvar rightClickCallbackMap = new Map();\nvar MoveCallbackMap = new Map();\nvar selectedFeature;\nfunction cartesian3Towgs84(cartesian, viewer) {\n var ellipsoid = viewer.scene.globe.ellipsoid;\n var cartesian3 = new Cesium.Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n var cartographic = ellipsoid.cartesianToCartographic(cartesian3);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n var alt = cartographic.height < 0 ? 0 : cartographic.height;\n return {\n lng: lng,\n lat: lat,\n alt: alt\n };\n}\nfunction getcartesian(sdk, movement) {\n if (movement.endPosition) {\n movement.endPosition.y -= 2;\n }\n var position = movement.position || movement.endPosition;\n // 获取世界坐标系地表坐标,考虑地形,不包括模型,倾斜摄影模型表面;\n var cartesian = sdk.viewer.scene.pickPosition(position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n return cartesian;\n}\nfunction openLeftClick(sdk, cb) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n var click = true;\n leftClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n leftClickHandler.setInputAction(function (movement) {\n var cartesian = sdk.viewer.scene.pickPosition(movement.position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(movement.position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n if (!cartesian) {\n return;\n }\n var pos84 = cartesian3Towgs84(cartesian, sdk.viewer);\n cb && cb(pos84);\n if (click) {\n click = false;\n setTimeout(function () {\n click = true;\n }, 600);\n if (!YJ.Measure.GetMeasureStatus() && cartesian) {\n var flag = false;\n for (var i = leftClickCallbackMap.size - 1; i >= 0; i--) {\n var key = Array.from(leftClickCallbackMap.keys())[i];\n var obj = leftClickCallbackMap.get(key);\n if (obj) {\n if (obj.that) {\n // 是否为多边形\n if (obj.that.type === 'PolygonObject') {\n // 是否可点击y\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var pt = turf.point([pos84.lng, pos84.lat]);\n var polyPos = [];\n for (var _i = 0; _i < obj.that.options.positions.length; _i++) {\n polyPos.push([obj.that.options.positions[_i].lng, obj.that.options.positions[_i].lat]);\n }\n polyPos.push([obj.that.options.positions[0].lng, obj.that.options.positions[0].lat]);\n var poly = turf.polygon([polyPos]);\n var contain = turf.booleanPointInPolygon(pt, poly);\n if (contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 聚集地\n else if (obj.that.type === 'AssembleObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var positions = obj.that.computeAssemble(obj.that.options.positions, true);\n var _pt = turf.point([pos84.lng, pos84.lat]);\n var _polyPos = [];\n for (var _i2 = 0; _i2 < positions.length; _i2 += 2) {\n _polyPos.push([positions[_i2], positions[_i2 + 1]]);\n }\n var _poly = turf.polygon([_polyPos]);\n var _contain = turf.booleanPointInPolygon(_pt, _poly);\n if (_contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 单箭头\n else if (obj.that.type === 'AttackArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var _pt2 = turf.point([pos84.lng, pos84.lat]);\n var _positions = obj.that.computeAttackArrow(obj.that.options.positions);\n var _polyPos2 = [];\n for (var m = 0; m < _positions.length; m++) {\n var _pos = cartesian3Towgs84(_positions[m], sdk.viewer);\n _polyPos2.push([_pos.lng, _pos.lat]);\n }\n var _poly2 = turf.polygon([_polyPos2]);\n var _contain2 = turf.booleanPointInPolygon(_pt2, _poly2);\n if (_contain2) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 双箭头\n else if (obj.that.type === 'PincerArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 5) {\n var _pt3 = turf.point([pos84.lng, pos84.lat]);\n var _positions2 = obj.that.computePincerArrow(obj.that.options.positions);\n var _polyPos3 = [];\n for (var _m = 0; _m < _positions2.length; _m++) {\n var _pos2 = cartesian3Towgs84(_positions2[_m], sdk.viewer);\n _polyPos3.push([_pos2.lng, _pos2.lat]);\n }\n var pos84_0 = cartesian3Towgs84(_positions2[0], sdk.viewer);\n _polyPos3.push([pos84_0.lng, pos84_0.lat]);\n var _poly3 = turf.polygon([_polyPos3]);\n var _contain3 = turf.booleanPointInPolygon(_pt3, _poly3);\n if (_contain3) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 圆\n else if (obj.that.type === 'CircleObject') {\n if (obj.that.picking) {\n var _pt4 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius) {\n var center = [obj.that.options.center.lng, obj.that.options.center.lat];\n var radius = obj.that.options.radius / 1000;\n var options = {\n steps: 360,\n units: 'kilometers'\n };\n var circle = turf.circle(center, radius, options);\n var _contain4 = turf.booleanPointInPolygon(_pt4, circle);\n if (_contain4) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 扇形\n else if (obj.that.type === 'SectorObject') {\n if (obj.that.picking) {\n var _pt5 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) {\n var _positions3 = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true);\n var _polyPos4 = [];\n for (var _m2 = 0; _m2 < _positions3.length; _m2++) {\n _polyPos4.push([_positions3[_m2].lng, _positions3[_m2].lat]);\n }\n var _poly4 = turf.polygon([_polyPos4]);\n var _contain5 = turf.booleanPointInPolygon(_pt5, _poly4);\n if (_contain5) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n }\n }\n }\n if (!flag) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick) {\n if (pick.id) {\n var entityId;\n // 矢量\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var _obj = leftClickCallbackMap.get(pick.id.parentId);\n if (_obj.that.picking && _obj.that.geojson) {\n for (var _i3 = 0; _i3 < _obj.that.geojson.features.length; _i3++) {\n if (_obj.that.geojson.features[_i3].id === pick.id._id) {\n _obj.callback(movement, _obj.that.geojson.features[_i3].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj.that);\n }\n }\n }\n } else if (typeof pick.id.id == 'string') {\n var array = pick.id.id.split('-');\n array.splice(array.length - 1, 1);\n entityId = array.join('-');\n }\n if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) {\n var _obj2 = leftClickCallbackMap.get(pick.id.properties.id._value);\n if (_obj2.that.picking) {\n _obj2.callback(movement, pick.id.properties.id._value, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj2.that);\n }\n } else if (leftClickCallbackMap.has(pick.id.id)) {\n var _obj3 = leftClickCallbackMap.get(pick.id.id);\n if (_obj3.that.picking) {\n _obj3.callback(movement, pick.id.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj3.that);\n }\n } else if (entityId && leftClickCallbackMap.has(entityId)) {\n var _obj4 = leftClickCallbackMap.get(entityId);\n if (_obj4.that.picking) {\n _obj4.callback(movement, entityId, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj4.that);\n }\n } else if (pick.primitive) {\n if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) {\n var _obj5 = leftClickCallbackMap.get(pick.id);\n _obj5.callback(movement, pick.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj5.that);\n }\n }\n } else {\n if (pick.primitive && pick.primitive.id) {\n if (leftClickCallbackMap.has(pick.primitive.id)) {\n var _obj6 = leftClickCallbackMap.get(pick.primitive.id);\n if (_obj6.that.picking) {\n if (_obj6.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj6.callback(movement, pick.primitive, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n } else {\n _obj6.callback(movement, pick.primitive.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n }\n }\n }\n }\n if (pick.content && (!pick.primitive || !pick.primitive.id)) {\n if (leftClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj7 = leftClickCallbackMap.get(pick.content.tileset.id);\n if (_obj7.that.picking) {\n if (_obj7.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj7.callback(movement, pick.content.tileset, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n } else {\n _obj7.callback(movement, pick.content.tileset.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // if (click) {\n // click = false\n // setTimeout(() => {\n // click = true\n // }, 300);\n // if (!YJ.Measure.GetMeasureStatus()) {\n\n // }\n // }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n\n // leftClickHandler.setInputAction(function (movement) {\n // const feature = sdk.viewer.scene.pick(movement.endPosition);\n // // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // selectedFeature.color = Cesium.Color.WHITE;\n // }\n // selectedFeature = feature\n // if (feature) {\n // feature.color = Cesium.Color.YELLOW;\n // }\n // }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n // }\n}\nfunction closeLeftClick(sdk) {\n leftClickHandler.destroy(); //关闭事件句柄\n leftClickHandler = null;\n // }\n}\nfunction openRightClick(sdk) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n rightClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n rightClickHandler.setInputAction(function (movement) {\n if (!YJ.Measure.GetMeasureStatus()) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id) {\n var id;\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var obj = rightClickCallbackMap.get(pick.id.parentId);\n if (obj.that.picking && obj.that.geojson) {\n for (var i = 0; i < obj.that.geojson.features.length; i++) {\n if (obj.that.geojson.features[i].id === pick.id._id) {\n obj.callback(movement, obj.that.geojson.features[i].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n }\n }\n }\n } else {\n if (typeof pick.id === 'string') {\n id = pick.id;\n } else {\n id = pick.id.id;\n }\n if (rightClickCallbackMap.has(id)) {\n var _obj8 = rightClickCallbackMap.get(id);\n if (_obj8.that.picking) {\n var cartesian = getcartesian(sdk, movement);\n if (!cartesian) {\n return;\n }\n _obj8.callback(movement, id, cartesian3Towgs84(cartesian, sdk.viewer), _obj8.that);\n }\n }\n }\n }\n if (pick && pick.content) {\n if (rightClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj9 = rightClickCallbackMap.get(pick.content.tileset.id);\n if (_obj9.that.picking) {\n if (_obj9.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n var _cartesian = getcartesian(sdk, movement);\n if (!_cartesian) {\n return;\n }\n _obj9.callback(movement, pick.getProperty('id'), cartesian3Towgs84(_cartesian, sdk.viewer), _obj9.that);\n }\n } else {\n var _cartesian2 = getcartesian(sdk, movement);\n if (!_cartesian2) {\n return;\n }\n _obj9.callback(movement, pick.content.tileset.id, cartesian3Towgs84(_cartesian2, sdk.viewer), _obj9.that);\n }\n }\n }\n }\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n}\nfunction closeRightClick() {\n if (rightClickHandler) {\n rightClickHandler.destroy(); //关闭事件句柄\n rightClickHandler = null;\n }\n}\nfunction openMove(sdk) {\n MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n MoveHandler.setInputAction(function (movement) {\n var pick = sdk.viewer.scene.pick(movement.endPosition);\n // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // let color = '#fff'\n // let state = selectedFeature.getProperty('state')\n // switch (state) {\n // case '0':\n // color = '#fff'\n // break;\n // case '1':\n // color = '#f00'\n // break;\n // case '2':\n // color = '#0f0'\n // break;\n // case '3':\n // color = '#00f'\n // break;\n // default:\n // }\n // selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency)\n // }\n // if (pick && pick.id) { }\n // if (pick && pick.content) {\n // if (MoveCallbackMap.has(pick.content.tileset.id)) {\n // let obj = MoveCallbackMap.get(pick.content.tileset.id)\n // if (obj.that.picking) {\n // if (obj.that.type === 'bim') {\n // if (YJ.Global.getBimPickStatus(sdk)) {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // else {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n}\nfunction closeMove() {\n if (MoveHandler) {\n MoveHandler.destroy(); //关闭事件句柄\n MoveHandler = null;\n }\n}\n\n/*注册左键回调*/\nfunction regLeftClickCallback(id, callback, that) {\n leftClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unRegLeftClickCallback(id) {\n leftClickCallbackMap.delete(id);\n}\n\n/*注册右键回调*/\nfunction regRightClickCallback(id, callback, that) {\n rightClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消右键回调*/\nfunction unRegRightClickCallback(id) {\n rightClickCallbackMap.delete(id);\n}\n\n/*注册左键回调*/\nfunction regMoveCallback(id, callback, that) {\n MoveCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unregMoveCallback(id) {\n MoveCallbackMap.delete(id);\n}\nfunction getLeftClickState() {\n if (leftClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getRightClickState() {\n if (rightClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getMoveState() {\n if (MoveHandler) {\n return true;\n } else {\n false;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL011bHRpVmlld3BvcnRNb2RlL0NsaWNrQ2FsbGJhY2svaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL011bHRpVmlld3BvcnRNb2RlL0NsaWNrQ2FsbGJhY2svaW5kZXguanM/NzMyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGNsaWNrXHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMDUtMjggMTE6MDVcclxuICogQGRlc2NyaXB0aW9u77yaY2xpY2tcclxuICogQHVwZGF0ZTogMjAyMy0wNS0yOCAxMTowNVxyXG4gKi9cclxubGV0IGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbmxldCByaWdodENsaWNrSGFuZGxlciA9IG51bGxcclxubGV0IE1vdmVIYW5kbGVyID0gbnVsbFxyXG5sZXQgbGVmdENsaWNrQ2FsbGJhY2tNYXAgPSBuZXcgTWFwKClcclxubGV0IHJpZ2h0Q2xpY2tDYWxsYmFja01hcCA9IG5ldyBNYXAoKVxyXG5sZXQgTW92ZUNhbGxiYWNrTWFwID0gbmV3IE1hcCgpXHJcbmxldCBzZWxlY3RlZEZlYXR1cmU7XHJcblxyXG5cclxuZnVuY3Rpb24gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB2aWV3ZXIpIHtcclxuICB2YXIgZWxsaXBzb2lkID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZFxyXG4gIHZhciBjYXJ0ZXNpYW4zID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgY2FydGVzaWFuLngsXHJcbiAgICBjYXJ0ZXNpYW4ueSxcclxuICAgIGNhcnRlc2lhbi56XHJcbiAgKVxyXG4gIHZhciBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoY2FydGVzaWFuMylcclxuICB2YXIgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSlcclxuICB2YXIgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpXHJcbiAgdmFyIGFsdCA9IGNhcnRvZ3JhcGhpYy5oZWlnaHQgPCAwID8gMCA6IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICByZXR1cm4ge1xyXG4gICAgbG5nOiBsbmcsXHJcbiAgICBsYXQ6IGxhdCxcclxuICAgIGFsdDogYWx0LFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpIHtcclxuICBpZiAobW92ZW1lbnQuZW5kUG9zaXRpb24pIHtcclxuICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLT0gMlxyXG4gIH1cclxuICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvbiB8fCBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gIC8vIOiOt+WPluS4lueVjOWdkOagh+ezu+WcsOihqOWdkOagh++8jOiAg+iZkeWcsOW9ou+8jOS4jeWMheaLrOaooeWei++8jOWAvuaWnOaRhOW9seaooeWei+ihqOmdou+8m1xyXG4gIGxldCBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihwb3NpdGlvbilcclxuICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCBzZGsudmlld2VyLnNjZW5lKTtcclxuICB9XHJcbiAgcmV0dXJuIGNhcnRlc2lhblxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuTGVmdENsaWNrKHNkaywgY2IpIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCBjbGljayA9IHRydWVcclxuICBsZWZ0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShtb3ZlbWVudC5wb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICAgIGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXksIHNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvczg0ID0gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCBzZGsudmlld2VyKVxyXG5cclxuICAgIGNiICYmIGNiKHBvczg0KVxyXG5cclxuICAgIGlmIChjbGljaykge1xyXG4gICAgICBjbGljayA9IGZhbHNlXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNsaWNrID0gdHJ1ZVxyXG4gICAgICB9LCA2MDApO1xyXG4gICAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpICYmIGNhcnRlc2lhbikge1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICBmb3IgKGxldCBpID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBsZXQga2V5ID0gQXJyYXkuZnJvbShsZWZ0Q2xpY2tDYWxsYmFja01hcC5rZXlzKCkpW2ldXHJcbiAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KGtleSlcclxuICAgICAgICAgIGlmIChvYmopIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdCkge1xyXG4gICAgICAgICAgICAgIC8vIOaYr+WQpuS4uuWkmui+ueW9olxyXG4gICAgICAgICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnUG9seWdvbk9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIOaYr+WQpuWPr+eCueWHu3lcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDogZrpm4blnLBcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnQXNzZW1ibGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gb2JqLnRoYXQuY29tcHV0ZUFzc2VtYmxlKG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV1cclxuICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWNleeureWktFxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdBdHRhY2tBcnJvd09iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IG9iai50aGF0LmNvbXB1dGVBdHRhY2tBcnJvdyhvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3M4NCA9IGNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1ttXSwgc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zODQubG5nLCBwb3M4NC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDlj4znrq3lpLRcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnUGluY2VyQXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jb21wdXRlUGluY2VyQXJyb3cob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgcG9zaXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zODQgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbbV0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW3Bvczg0LmxuZywgcG9zODQubGF0XSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvczg0XzAgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgcG9seVBvcy5wdXNoKFtwb3M4NF8wLmxuZywgcG9zODRfMC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWchlxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdDaXJjbGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIgJiYgb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2VudGVyID0gW29iai50aGF0Lm9wdGlvbnMuY2VudGVyLmxuZywgb2JqLnRoYXQub3B0aW9ucy5jZW50ZXIubGF0XTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaXVzID0gb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0geyBzdGVwczogMzYwLCB1bml0czogJ2tpbG9tZXRlcnMnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmNsZSA9IHR1cmYuY2lyY2xlKGNlbnRlciwgcmFkaXVzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGFpbiA9IHR1cmYuYm9vbGVhblBvaW50SW5Qb2x5Z29uKHB0LCBjaXJjbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8g5omH5b2iXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ1NlY3Rvck9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLmNlbnRlciAmJiBvYmoudGhhdC5vcHRpb25zLnJhZGl1cyAmJiBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUgJiYgb2JqLnRoYXQub3B0aW9ucy5lbmRBbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jYWxTZWN0b3Iob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIsIG9iai50aGF0Lm9wdGlvbnMucmFkaXVzLCBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUsIG9iai50aGF0Lm9wdGlvbnMuZW5kQW5nbGUsIHVuZGVmaW5lZCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICAgIGNvbnN0IHBpY2sgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pXHJcbiAgICAgICAgICBpZiAocGljaykge1xyXG4gICAgICAgICAgICBpZiAocGljay5pZCkge1xyXG4gICAgICAgICAgICAgIGxldCBlbnRpdHlJZFxyXG4gICAgICAgICAgICAgIC8vIOefoumHj1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KHBpY2suaWQucGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZyAmJiBvYmoudGhhdC5nZW9qc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmlkID09PSBwaWNrLmlkLl9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwaWNrLmlkLmlkID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBwaWNrLmlkLmlkLnNwbGl0KCctJylcclxuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShhcnJheS5sZW5ndGggLSAxLCAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5SWQgPSBhcnJheS5qb2luKCctJylcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnByb3BlcnRpZXMgJiYgcGljay5pZC5wcm9wZXJ0aWVzLmlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQucHJvcGVydGllcy5pZC5fdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLmlkKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0eUlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhlbnRpdHlJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQoZW50aXR5SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHBpY2sucHJpbWl0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBpY2suaWQgPT0gJ3N0cmluZycgJiYgbGVmdENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5pZClcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLnByaW1pdGl2ZSAmJiBwaWNrLnByaW1pdGl2ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLnByaW1pdGl2ZS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLnByaW1pdGl2ZS5pZClcclxuICAgICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChZSi5HbG9iYWwuZ2V0QmltUGlja1N0YXR1cyhzZGspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwaWNrLmNvbnRlbnQgJiYgKCFwaWNrLnByaW1pdGl2ZSB8fCAhcGljay5wcmltaXRpdmUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmNvbnRlbnQudGlsZXNldC5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGljay5jb250ZW50LnRpbGVzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgIHBpY2suY29udGVudC50aWxlc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gaWYgKGNsaWNrKSB7XHJcbiAgICAvLyAgIGNsaWNrID0gZmFsc2VcclxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgY2xpY2sgPSB0cnVlXHJcbiAgICAvLyAgIH0sIDMwMCk7XHJcbiAgICAvLyAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuXHJcbiAgLy8gbGVmdENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbihmdW5jdGlvbiAobW92ZW1lbnQpIHtcclxuICAvLyAgIGNvbnN0IGZlYXR1cmUgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQuZW5kUG9zaXRpb24pO1xyXG4gIC8vICAgLy8gdW5zZWxlY3RGZWF0dXJlKHNlbGVjdGVkRmVhdHVyZSk7XHJcbiAgLy8gICBpZiAoc2VsZWN0ZWRGZWF0dXJlKSB7XHJcbiAgLy8gICAgIHNlbGVjdGVkRmVhdHVyZS5jb2xvciA9IENlc2l1bS5Db2xvci5XSElURTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmVcclxuICAvLyAgIGlmIChmZWF0dXJlKSB7XHJcbiAgLy8gICAgIGZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gIC8vICAgfVxyXG4gIC8vIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5NT1VTRV9NT1ZFKTtcclxuICAvLyB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZUxlZnRDbGljayhzZGspIHtcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gIGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbiAgLy8gfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuUmlnaHRDbGljayhzZGspIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICByaWdodENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgaWYgKHBpY2sgJiYgcGljay5pZCkge1xyXG4gICAgICAgIGxldCBpZFxyXG4gICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmlnaHRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnBhcmVudElkKVxyXG4gICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcgJiYgb2JqLnRoYXQuZ2VvanNvbikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAob2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9PT0gcGljay5pZC5faWQpIHtcclxuICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgIG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXNbaV0uaWQsXHJcbiAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgcGljay5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmlnaHRDbGlja0NhbGxiYWNrTWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQoaWQpXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwaWNrICYmIHBpY2suY29udGVudCkge1xyXG4gICAgICAgIGlmIChyaWdodENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suY29udGVudC50aWxlc2V0LmlkKSkge1xyXG4gICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICBwaWNrLmdldFByb3BlcnR5KCdpZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBwaWNrLmNvbnRlbnQudGlsZXNldC5pZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZVJpZ2h0Q2xpY2soKSB7XHJcbiAgaWYgKHJpZ2h0Q2xpY2tIYW5kbGVyKSB7XHJcbiAgICByaWdodENsaWNrSGFuZGxlci5kZXN0cm95KCkgLy/lhbPpl63kuovku7blj6Xmn4RcclxuICAgIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbnVsbFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gb3Blbk1vdmUoc2RrKSB7XHJcbiAgTW92ZUhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHNkay52aWV3ZXIuY2FudmFzKVxyXG4gIE1vdmVIYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uIChtb3ZlbWVudCkge1xyXG4gICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5lbmRQb3NpdGlvbik7XHJcbiAgICAvLyB1bnNlbGVjdEZlYXR1cmUoc2VsZWN0ZWRGZWF0dXJlKTtcclxuICAgIC8vIGlmIChzZWxlY3RlZEZlYXR1cmUpIHtcclxuICAgIC8vICAgbGV0IGNvbG9yID0gJyNmZmYnXHJcbiAgICAvLyAgIGxldCBzdGF0ZSA9IHNlbGVjdGVkRmVhdHVyZS5nZXRQcm9wZXJ0eSgnc3RhdGUnKVxyXG4gICAgLy8gICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAvLyAgICAgY2FzZSAnMCc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZmZmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMSc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZjAwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMic6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMGYwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMyc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMDBmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZWxlY3RlZEZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKS53aXRoQWxwaGEoc2VsZWN0ZWRGZWF0dXJlLnRpbGVzZXQudHJhbnNwYXJlbmN5KVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHBpY2sgJiYgcGljay5pZCkgeyB9XHJcbiAgICAvLyBpZiAocGljayAmJiBwaWNrLmNvbnRlbnQpIHtcclxuICAgIC8vICAgaWYgKE1vdmVDYWxsYmFja01hcC5oYXMocGljay5jb250ZW50LnRpbGVzZXQuaWQpKSB7XHJcbiAgICAvLyAgICAgbGV0IG9iaiA9IE1vdmVDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAvLyAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgIC8vICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnYmltJykge1xyXG4gICAgLy8gICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgLy8gICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IHBpY2tcclxuICAgIC8vICAgICAgICAgICBwaWNrLmNvbG9yID0gQ2VzaXVtLkNvbG9yLllFTExPVztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBudWxsXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBwaWNrXHJcbiAgICAvLyAgICAgICAgIHBpY2suY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IG51bGxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb3NlTW92ZSgpIHtcclxuICBpZiAoTW92ZUhhbmRsZXIpIHtcclxuICAgIE1vdmVIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gICAgTW92ZUhhbmRsZXIgPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ0xlZnRDbGlja0NhbGxiYWNrKGlkLCBjYWxsYmFjaywgdGhhdCkge1xyXG5cclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5zZXQoaWQsIHsgY2FsbGJhY2ssIHRoYXQgfSlcclxufS8q5Y+W5raI5bem6ZSu5Zue6LCDKi9cclxuZnVuY3Rpb24gdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjayhpZCwpIHtcclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ1JpZ2h0Q2xpY2tDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICByaWdodENsaWNrQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVuUmVnUmlnaHRDbGlja0NhbGxiYWNrKGlkLCkge1xyXG4gIHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ01vdmVDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICBNb3ZlQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVucmVnTW92ZUNhbGxiYWNrKGlkLCkge1xyXG4gIE1vdmVDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMZWZ0Q2xpY2tTdGF0ZSgpIHtcclxuICBpZiAobGVmdENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmlnaHRDbGlja1N0YXRlKCkge1xyXG4gIGlmIChyaWdodENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TW92ZVN0YXRlKCkge1xyXG4gIGlmIChNb3ZlSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCB7IG9wZW5MZWZ0Q2xpY2ssIGNsb3NlTGVmdENsaWNrLCByZWdMZWZ0Q2xpY2tDYWxsYmFjaywgdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjaywgb3BlblJpZ2h0Q2xpY2ssIGNsb3NlUmlnaHRDbGljaywgcmVnUmlnaHRDbGlja0NhbGxiYWNrLCB1blJlZ1JpZ2h0Q2xpY2tDYWxsYmFjaywgb3Blbk1vdmUsIGNsb3NlTW92ZSwgcmVnTW92ZUNhbGxiYWNrLCB1bnJlZ01vdmVDYWxsYmFjaywgZ2V0TGVmdENsaWNrU3RhdGUsIGdldFJpZ2h0Q2xpY2tTdGF0ZSwgZ2V0TW92ZVN0YXRlIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/MultiViewportMode/ClickCallback/index.js\n"); /***/ }), /***/ "./src/Global/MultiViewportMode/index.js": /*!***********************************************!*\ !*** ./src/Global/MultiViewportMode/index.js ***! \***********************************************/ /*! exports provided: on, off, syncData, syncEntities, syncDataSources, syncPrimitives, get2DView, get3DView, setActiveViewer, getSdk */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"on\", function() { return on; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"off\", function() { return off; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncData\", function() { return syncData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncEntities\", function() { return syncEntities; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncDataSources\", function() { return syncDataSources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncPrimitives\", function() { return syncPrimitives; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"get2DView\", function() { return get2DView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"get3DView\", function() { return get3DView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setActiveViewer\", function() { return setActiveViewer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSdk\", function() { return getSdk; });\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../global */ \"./src/Global/global.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _SheetIndex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../SheetIndex */ \"./src/Global/SheetIndex/index.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _ClickCallback__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ClickCallback */ \"./src/Global/MultiViewportMode/ClickCallback/index.js\");\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n/**\r\n * 多视口模式 \r\n * */\n\n\n\n\n\n\n\n\nvar sdk2D;\nvar sdk3D;\nvar activeViewer;\nvar controlViewer;\nvar syncObject = {};\nvar handlers = [];\nfunction init(_x) {\n return _init.apply(this, arguments);\n}\nfunction _init() {\n _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(sdk) {\n var tools, sdk2, imageryLayers, i, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n sdk3D = sdk;\n activeViewer = 0;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n _context.next = 5;\n return new YJ.YJEarth(sdk.div_id);\n case 5:\n sdk2 = _context.sent;\n sdk2.viewer._element.className = 'cesium-viewer 2d';\n Object(_SheetIndex__WEBPACK_IMPORTED_MODULE_8__[\"SheetIndexStatusSwitch\"])(sdk2, Object(_SheetIndex__WEBPACK_IMPORTED_MODULE_8__[\"getStatus\"])());\n // setTimeout(() => {\n // let switchCluster = new YJ.Global.switchCluster(sdk2, true)\n // }, 500);\n Object(_global__WEBPACK_IMPORTED_MODULE_6__[\"CesiumContainer\"])(sdk2, {\n compass: false,\n // 罗盘\n // legend: false, // 比例尺\n info: false,\n // 信息栏\n frame: false // 刷新率\n });\n sdk2.viewer.scene.mode = Cesium.SceneMode.SCENE2D;\n _context.next = 12;\n return sdk2;\n case 12:\n sdk2D = _context.sent;\n if (Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"getLeftClickState\"])()) {\n Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"openLeftClick\"])(sdk2D);\n }\n if (Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"getRightClickState\"])()) {\n Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"openRightClick\"])(sdk2D);\n }\n if (Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"getMoveState\"])()) {\n Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"openMove\"])(sdk2D);\n }\n\n // window.sdk2D = sdk2D\n solveBug();\n syncObject = {\n sdks: [sdk, sdk2],\n tools: tools\n };\n _context.next = 20;\n return eventBind(sdk, 0, syncObject);\n case 20:\n _context.next = 22;\n return eventBind(sdk2, 1, syncObject);\n case 22:\n _context.next = 24;\n return syncData(sdk);\n case 24:\n sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject);\n sdk.viewer.imageryLayers.layerAdded.addEventListener(syncImageryLayerAdded);\n sdk.viewer.imageryLayers.layerMoved.addEventListener(syncImageryLayerMoved);\n sdk.viewer.imageryLayers.layerRemoved.addEventListener(syncImageryLayerRemoved);\n sdk.viewer.imageryLayers.layerShownOrHidden.addEventListener(syncImageryLayerShownOrHidden);\n imageryLayers = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(sdk.viewer.imageryLayers._layers);\n imageryLayers.sort(function (a, b) {\n return a._layerIndex - b._layerIndex;\n });\n sdk2D.viewer.imageryLayers.removeAll();\n for (i = 0; i < imageryLayers.length; i++) {\n entity = sdk2D.viewer.imageryLayers.addImageryProvider(imageryLayers[i].imageryProvider, imageryLayers[i]._layerIndex);\n if (imageryLayers[i]._id) {\n entity._id = imageryLayers[i]._id;\n }\n entity.show = imageryLayers[i].show;\n entity.alpha = imageryLayers[i].alpha;\n if (imageryLayers[i]._objectState) {\n if (imageryLayers[i]._showView == 3) {\n entity.show = false;\n }\n }\n }\n // sdk.viewer.entities.collectionChanged.addEventListener(syncEntities)\n // sdk.viewer.dataSources.dataSourceAdded.addEventListener(syncDataSources)\n\n if (Object(_global__WEBPACK_IMPORTED_MODULE_6__[\"getFlwStatus\"])(sdk)) {\n Object(_global__WEBPACK_IMPORTED_MODULE_6__[\"FlwStatusSwitch\"])(sdk2, true);\n }\n if (Object(_global__WEBPACK_IMPORTED_MODULE_6__[\"getJwwStatus\"])(sdk)) {\n Object(_global__WEBPACK_IMPORTED_MODULE_6__[\"JwwStatusSwitch\"])(sdk2, true);\n }\n sdk.entityMap.forEach(function (item, key) {\n if (item.showView == 2) {\n item.showView = 2;\n }\n });\n case 36:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _init.apply(this, arguments);\n}\nfunction on(_x2) {\n return _on.apply(this, arguments);\n}\nfunction _on() {\n _on = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2(sdk) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (sdk2D) {} else {\n init(sdk);\n Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_7__[\"off\"])();\n }\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return _on.apply(this, arguments);\n}\nfunction off(sdk) {\n sdk.viewer.scene.preRender.removeEventListener(syncViewer, syncObject);\n sdk.viewer.imageryLayers.layerAdded.removeEventListener(syncImageryLayerAdded);\n sdk.viewer.imageryLayers.layerMoved.removeEventListener(syncImageryLayerMoved);\n sdk.viewer.imageryLayers.layerRemoved.removeEventListener(syncImageryLayerRemoved);\n sdk.viewer.imageryLayers.layerShownOrHidden.removeEventListener(syncImageryLayerShownOrHidden);\n // sdk.viewer.entities.collectionChanged.removeEventListener(syncEntities)\n // sdk.viewer.dataSources.dataSourceAdded.removeEventListener(syncDataSources)\n\n //primitiveAdded=undefined基元同步设置在add位置\n // sdk.viewer.scene.primitives.primitiveAdded.removeEventListener(syncPrimitivesAdded)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].destroy();\n }\n if (sdk2D) {\n sdk2D.destroy();\n handlers = [];\n sdk2D = null;\n sdk3D = null;\n activeViewer = null;\n syncObject = {};\n }\n sdk.entityMap.forEach(function (item, key) {\n if (item.showView) {\n item.show = item.show;\n }\n });\n}\nfunction syncData2(_x3, _x4, _x5) {\n return _syncData.apply(this, arguments);\n}\nfunction _syncData() {\n _syncData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee3(sdk, id, entityId) {\n var entityMap, that, that2, options, callback, newObject, state, _that, _iterator, _step, _step$value, key, obj, _that2, _iterator2, _step2, _loop;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee3$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!(sdk && sdk.viewer && sdk.viewer._element && sdk.viewer._element.className === 'cesium-viewer 2d')) {\n _context4.next = 2;\n break;\n }\n return _context4.abrupt(\"return\");\n case 2:\n if (!(!sdk3D || !sdk2D)) {\n _context4.next = 4;\n break;\n }\n return _context4.abrupt(\"return\");\n case 4:\n entityMap = sdk3D.entityMap;\n if (!id) {\n _context4.next = 39;\n break;\n }\n that = entityMap.get(id);\n if (!that) {\n _context4.next = 33;\n break;\n }\n that2 = sdk2D.entityMap.get(id);\n if (!that2) {\n _context4.next = 12;\n break;\n }\n _context4.next = 12;\n return that2.remove();\n case 12:\n options = syncObject.tools.deepCopyObj(that.options);\n if (that.type === 'BillboardObject') {\n options.heightReference = 1;\n }\n if (that.type === 'PolygonObject') {\n options.heightMode = 0;\n options.height = 0;\n }\n if (!(!that.type || that.type !== 'tileset' && that.type !== 'bim' && that.type !== 'glb' && that.type !== 'layer' && that.type !== 'wallStereoscopic')) {\n _context4.next = 31;\n break;\n }\n if (that.showView == 3) {\n options.show = false;\n }\n if (that.type === 'TextBox') {\n callback = that.callback;\n }\n _context4.next = 20;\n return new that.constructor(sdk2D, options, callback);\n case 20:\n newObject = _context4.sent;\n newObject.onClick = that.onClick;\n newObject.onRightClick = that.onRightClick;\n newObject.onMouseMove = that.onMouseMove;\n if (that.type === 'TrajectoryMotion') {\n that.firstPersonView = false;\n if (that.TweenAnimate) {\n state = that.state;\n if (state) {\n that.state = false;\n }\n if (!newObject.state) {\n setTimeout(function () {\n newObject.setMovePositionByDistance(Number(that.TweenAnimate._object.distance.toFixed(8)) + 0.00000001);\n setTimeout(function () {\n newObject.setMovePositionByDistance(Number(that.TweenAnimate._object.distance.toFixed(8)) + 0.00000002);\n }, 500);\n }, 500);\n } else {\n newObject.setMovePositionByDistance(Number(that.TweenAnimate._object.distance.toFixed(8)));\n }\n that.state = state;\n } else {\n setTimeout(function () {\n newObject.setMovePositionByDistance(0.00000001);\n setTimeout(function () {\n newObject.setMovePositionByDistance(0.00000002);\n }, 500);\n }, 500);\n }\n if (that.viewFollow) {\n newObject.viewFollow = true;\n }\n }\n if (that.type === 'AttackArrowObject' || that.type === 'StraightArrowObject') {\n if (that.spreadState && that.TweenAnimate && that.TweenAnimate._object) {\n newObject.setSpreadProgressByTime(that.TweenAnimate._object.distance / that.TweenAnimate._valuesEnd.distance * that.spreadTime);\n }\n }\n if (that.type === 'PincerArrowObject') {\n if (that.spreadState && that.TweenAnimate && that.TweenAnimate._object) {\n newObject.setSpreadProgressByTime(that.TweenAnimate._object.distance1 / that.TweenAnimate._valuesEnd.distance1 * that.spreadTime);\n }\n }\n if (!(newObject.on && newObject.type !== 'glb')) {\n _context4.next = 31;\n break;\n }\n if (newObject.type === 'vector') {\n newObject.data = that.data;\n newObject.load(function () {\n if (newObject.entity) {\n for (var i = 0; i < newObject.entity.entities.values.length; i++) {\n newObject.entity.entities.values[i].show = that.entity.entities.values[i]._customShow === false ? false : true;\n }\n }\n });\n }\n _context4.next = 31;\n return newObject.on();\n case 31:\n _context4.next = 37;\n break;\n case 33:\n _that = sdk2D.entityMap.get(id);\n if (!_that) {\n _context4.next = 37;\n break;\n }\n _context4.next = 37;\n return _that.remove();\n case 37:\n _context4.next = 74;\n break;\n case 39:\n _iterator = _createForOfIteratorHelper(sdk2D.entityMap);\n _context4.prev = 40;\n _iterator.s();\n case 42:\n if ((_step = _iterator.n()).done) {\n _context4.next = 50;\n break;\n }\n _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2), key = _step$value[0], obj = _step$value[1];\n _that2 = sdk2D.entityMap.get(key);\n if (!_that2) {\n _context4.next = 48;\n break;\n }\n _context4.next = 48;\n return _that2.remove();\n case 48:\n _context4.next = 42;\n break;\n case 50:\n _context4.next = 55;\n break;\n case 52:\n _context4.prev = 52;\n _context4.t0 = _context4[\"catch\"](40);\n _iterator.e(_context4.t0);\n case 55:\n _context4.prev = 55;\n _iterator.f();\n return _context4.finish(55);\n case 58:\n _iterator2 = _createForOfIteratorHelper(entityMap);\n _context4.prev = 59;\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _loop() {\n var _step2$value, key, obj, options, target, _callback, _state;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _loop$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _step2$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step2.value, 2), key = _step2$value[0], obj = _step2$value[1];\n if (obj.type === 'BillboardObject') {\n obj.options.heightReference = 1;\n }\n options = syncObject.tools.deepCopyObj(obj.options);\n if (!(!obj.type || obj.type !== 'tileset' && obj.type !== 'bim' && obj.type !== 'glb' && obj.type !== 'layer' && obj.type !== 'wallStereoscopic')) {\n _context3.next = 25;\n break;\n }\n if (obj.showView == 3) {\n options.show = false;\n }\n _context3.next = 7;\n return sdk2D.entityMap.get(options.id);\n case 7:\n target = _context3.sent;\n if (!target) {\n _context3.next = 11;\n break;\n }\n _context3.next = 11;\n return target.remove();\n case 11:\n if (obj.type === 'TextBox') {\n _callback = obj.callback;\n }\n _context3.next = 14;\n return new obj.constructor(sdk2D, options, _callback);\n case 14:\n target = _context3.sent;\n target.onClick = obj.onClick;\n target.onRightClick = obj.onRightClick;\n target.onMouseMove = obj.onMouseMove;\n if (obj.type === 'TrajectoryMotion') {\n obj.firstPersonView = false;\n if (obj.TweenAnimate) {\n _state = obj.state;\n if (_state) {\n obj.state = false;\n }\n if (!target.state) {\n setTimeout(function () {\n target.setMovePositionByDistance(Number(obj.TweenAnimate._object.distance.toFixed(8)) + 0.000000001);\n setTimeout(function () {\n target.setMovePositionByDistance(Number(obj.TweenAnimate._object.distance.toFixed(8)) + 0.000000002);\n }, 1500);\n }, 1500);\n } else {\n target.setMovePositionByDistance(Number(obj.TweenAnimate._object.distance.toFixed(8)));\n }\n obj.state = _state;\n } else {\n setTimeout(function () {\n target.setMovePositionByDistance(0.000000001);\n setTimeout(function () {\n target.setMovePositionByDistance(0.000000002);\n }, 1500);\n }, 1500);\n }\n if (obj.viewFollow) {\n target.viewFollow = true;\n }\n // else {\n // newObject.viewFollow = false\n // }\n }\n if (obj.type === 'AttackArrowObject' || obj.type === 'StraightArrowObject') {\n if (obj.spreadState && obj.TweenAnimate && obj.TweenAnimate._object) {\n target.setSpreadProgressByTime(obj.TweenAnimate._object.distance / obj.TweenAnimate._valuesEnd.distance * obj.spreadTime);\n }\n }\n if (obj.type === 'PincerArrowObject') {\n if (obj.spreadState && obj.TweenAnimate && obj.TweenAnimate._object) {\n target.setSpreadProgressByTime(obj.TweenAnimate._object.distance1 / obj.TweenAnimate._valuesEnd.distance1 * obj.spreadTime);\n }\n }\n if (!(target.on && obj.type !== 'glb')) {\n _context3.next = 25;\n break;\n }\n if (target.type === 'vector') {\n target.data = obj.data;\n target.load(function () {\n if (target.entity) {\n for (var i = 0; i < target.entity.entities.values.length; i++) {\n target.entity.entities.values[i].show = obj.entity.entities.values[i]._customShow === false ? false : true;\n }\n }\n });\n }\n _context3.next = 25;\n return target.on();\n case 25:\n case \"end\":\n return _context3.stop();\n }\n }, _loop);\n });\n _iterator2.s();\n case 62:\n if ((_step2 = _iterator2.n()).done) {\n _context4.next = 66;\n break;\n }\n return _context4.delegateYield(_loop(), \"t1\", 64);\n case 64:\n _context4.next = 62;\n break;\n case 66:\n _context4.next = 71;\n break;\n case 68:\n _context4.prev = 68;\n _context4.t2 = _context4[\"catch\"](59);\n _iterator2.e(_context4.t2);\n case 71:\n _context4.prev = 71;\n _iterator2.f();\n return _context4.finish(71);\n case 74:\n case \"end\":\n return _context4.stop();\n }\n }, _callee3, null, [[40, 52, 55, 58], [59, 68, 71, 74]]);\n }));\n return _syncData.apply(this, arguments);\n}\nfunction syncData(_x6, _x7, _x8) {\n return _syncData2.apply(this, arguments);\n}\nfunction _syncData2() {\n _syncData2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee4(sdk, id, entityId) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee4$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n syncData2(sdk, id, entityId);\n // syncEntities()\n // syncDataSources()\n case 1:\n case \"end\":\n return _context5.stop();\n }\n }, _callee4);\n }));\n return _syncData2.apply(this, arguments);\n}\nfunction syncEntities(entities1, entities2) {\n if (!sdk3D) {\n return;\n }\n if (sdk2D) {\n if (Array.isArray(entities1) || Array.isArray(entities2)) {\n entities1 = null;\n entities2 = null;\n }\n if (!entities1) {\n entities1 = sdk2D.viewer.entities;\n }\n if (!entities2) {\n entities2 = sdk3D.viewer.entities;\n }\n var entities2D = entities1;\n var entities3D = entities2;\n for (var i = entities2D.values.length - 1; i >= 0; i--) {\n var flag = false;\n for (var m = entities3D.values.length - 1; m >= 0; m--) {\n if (entities2D.values[i].id === entities3D.values[m].id) {\n flag = true;\n entities2D.values[i] === entities3D.values[m];\n }\n }\n if (!flag) {\n entities2D.remove(entities2D.values[i]);\n }\n }\n for (var _m = entities3D.values.length - 1; _m >= 0; _m--) {\n var _flag = false;\n for (var _i = entities2D.values.length - 1; _i >= 0; _i--) {\n if (entities2D.values[_i].id === entities3D.values[_m].id) {\n _flag = true;\n break;\n }\n }\n if (!_flag) {\n var entity = entities2D.add(entities3D.values[_m]);\n // if (entity.rectangle) {\n // // 设置高度,否则在某些位置无法显示,但色彩会变暗\n // entity.rectangle.height = 0\n // console.log('242342354235',entities3D.values[m])\n // }\n }\n }\n }\n}\nfunction syncDataSources(dataSources, type) {\n if (!sdk3D) {\n return;\n }\n if (sdk2D) {\n var dataSources2D = sdk2D.viewer.dataSources;\n if (dataSources) {\n for (var i = dataSources2D._dataSources.length - 1; i >= 0; i--) {\n if (dataSources2D._dataSources[i].name === dataSources.name) {\n if (type === 'entities') {\n syncEntities(dataSources2D._dataSources[i].entities, dataSources.entities);\n }\n if (type === 'clustering') {\n dataSources2D._dataSources[i].clustering.enabled = dataSources.clustering.enabled;\n }\n }\n }\n }\n // for (let m = dataSources3D._dataSources.length - 1; m >= 0; m--) {\n // let flag = false\n // for (let i = dataSources2D._dataSources.length - 1; i >= 0; i--) {\n // console.log(dataSources2D._dataSources[i].name, dataSources3D._dataSources[m].name)\n // if (dataSources2D._dataSources[i].name === dataSources3D._dataSources[m].name) {\n // flag = true\n // break\n // }\n // }\n // if (!flag) {\n // dataSources2D.add(dataSources3D._dataSources[m])\n // }\n // }\n }\n}\nfunction syncImageryLayerAdded(layer, index) {\n sdk2D.viewer.imageryLayers.addImageryProvider(layer.imageryProvider, index);\n}\nfunction syncImageryLayerMoved(layer, newindxe, oldindex) {\n var layer2d = sdk2D.viewer.imageryLayers._layers[oldindex];\n if (!layer2d) {\n return;\n }\n // 移到最底层\n if (newindxe === 0) {\n sdk2D.viewer.imageryLayers.lowerToBottom(layer2d);\n }\n // 移到最高层\n else if (newindxe === sdk3D.viewer.imageryLayers._layers.length - 1) {\n sdk2D.viewer.imageryLayers.raiseToTop(layer2d);\n } else {\n if (newindxe < oldindex) {\n sdk2D.viewer.imageryLayers.lower(layer2d);\n } else {\n sdk2D.viewer.imageryLayers.raise(layer2d);\n }\n }\n}\nfunction syncImageryLayerRemoved(layer, index) {\n var layer2d = sdk2D.viewer.imageryLayers._layers[index];\n if (!layer2d) {\n return;\n }\n sdk2D.viewer.imageryLayers.remove(layer2d);\n}\nfunction syncImageryLayerShownOrHidden(layer, index, state) {\n return;\n var layer2d = sdk2D.viewer.imageryLayers._layers[index];\n var layer3d = sdk3D.viewer.imageryLayers._layers[index];\n console.log('layer2d', layer2d, sdk2D, layer3d);\n if (!layer2d) {\n return;\n }\n if (layer3d._objectState) {\n if (!layer3d._showView || layer3d._showView == 2) {\n layer2d.show = true;\n }\n if (layer3d._showView == 3) {\n layer2d.show = false;\n }\n } else {\n layer2d.show = state;\n }\n}\nfunction syncPrimitives(_x9) {\n return _syncPrimitives.apply(this, arguments);\n}\nfunction _syncPrimitives() {\n _syncPrimitives = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee5(primitive) {\n var primitives2D, primitives3D, i, flag, m, _m2, _flag2, _i2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee5$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n if (sdk3D) {\n _context6.next = 2;\n break;\n }\n return _context6.abrupt(\"return\");\n case 2:\n if (sdk2D) {\n // await sdk2D.viewer.scene.primitives.remove(primitive)\n // await sdk2D.viewer.scene.primitives.add(primitive)\n primitives2D = sdk2D.viewer.scene.primitives._primitives;\n primitives3D = sdk3D.viewer.scene.primitives._primitives; // console.log(primitives2D, primitives3D)\n // setTimeout(() => {\n // sdk2D.viewer.scene.primitives._primitives[1] = sdk3D.viewer.scene.primitives._primitives[1]\n // }, 2000);\n for (i = primitives2D.length - 1; i >= 1; i--) {\n flag = false;\n for (m = primitives3D.length - 1; m >= 1; m--) {\n if (primitives3D[m].id && primitives2D[m].id && primitives3D[m].id === primitives2D[i].id) {\n flag = true;\n }\n }\n if (!flag) {\n sdk2D.viewer.scene.primitives.remove(primitives2D[i]);\n }\n }\n for (_m2 = primitives3D.length - 1; _m2 >= 1; _m2--) {\n _flag2 = false;\n for (_i2 = primitives2D.length - 1; _i2 >= 1; _i2--) {\n if (primitives3D[_m2].id && primitives2D[_m2].id && primitives3D[_m2].id === primitives2D[_i2].id) {\n _flag2 = true;\n primitives2D[_i2].show = primitives3D[_m2].show;\n primitives2D[_i2].startColor = primitives3D[_m2].startColor;\n primitives2D[_i2].endColor = primitives3D[_m2].endColor;\n primitives2D[_i2].minimumSpeed = primitives3D[_m2].minimumSpeed;\n primitives2D[_i2].maximumSpeed = primitives3D[_m2].maximumSpeed;\n primitives2D[_i2].minimumParticleLife = primitives3D[_m2].minimumParticleLife;\n primitives2D[_i2].maximumParticleLife = primitives3D[_m2].maximumParticleLife;\n primitives2D[_i2].startScale = primitives3D[_m2].startScale;\n primitives2D[_i2].endScale = primitives3D[_m2].endScale;\n primitives2D[_i2].emissionRate = primitives3D[_m2].emissionRate;\n primitives2D[_i2].particleSize = primitives3D[_m2].particleSize;\n primitives2D[_i2].modelMatrix = primitives3D[_m2].modelMatrix;\n }\n }\n if (!_flag2) {\n sdk2D.viewer.scene.primitives.add(primitives3D[_m2]);\n }\n }\n }\n case 3:\n case \"end\":\n return _context6.stop();\n }\n }, _callee5);\n }));\n return _syncPrimitives.apply(this, arguments);\n}\nfunction eventBind(sdk, i, syncObject) {\n var handler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n handler.setInputAction(function () {\n activeViewer = i;\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n handler.setInputAction(function () {\n activeViewer = i;\n }, Cesium.ScreenSpaceEventType.RIGHT_DOWN);\n handler.setInputAction(function () {\n activeViewer = i;\n }, Cesium.ScreenSpaceEventType.WHEEL);\n handlers.push(handler);\n}\nfunction syncViewer() {\n var sdk = this.sdks[activeViewer];\n var sdk2;\n if (activeViewer === 0) {\n sdk2 = this.sdks[1];\n } else if (activeViewer === 1) {\n sdk2 = this.sdks[0];\n }\n // this.sdks[0].viewer.trackedEntity = null\n // this.sdks[1].viewer.trackedEntity = null\n if (sdk.viewer.scene.mode === 2) {\n if (this.sdks[0].viewer.trackedEntity) {\n var distance = sdk.viewer.camera.positionCartographic.height;\n sdk2.viewer.camera.lookAt(Cesium.Cartesian3.fromRadians(sdk.viewer.camera.positionCartographic.longitude, sdk.viewer.camera.positionCartographic.latitude, 0), new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-90), distance));\n } else {\n if (this.sdks[1].viewer.trackedEntity) {\n this.sdks[1].viewer.entities.remove(this.sdks[1].viewer.trackedEntity);\n this.sdks[1].viewer.trackedEntity = null;\n }\n var centerResult84 = this.tools.cartesian3Towgs84(Cesium.Cartesian3.fromRadians(sdk.viewer.camera.positionCartographic.longitude, sdk.viewer.camera.positionCartographic.latitude, sdk.viewer.camera.positionCartographic.height), sdk.viewer);\n sdk2.viewer.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(centerResult84.lng, centerResult84.lat, centerResult84.alt)\n });\n }\n } else {\n // 视角中心点(伪)\n var centerResult = sdk.viewer.camera.pickEllipsoid(new Cesium.Cartesian2(sdk.viewer.canvas.clientWidth / 2, sdk.viewer.canvas.clientHeight / (2 - (90 + sdk.viewer.camera.pitch / (Cesium.Math.PI / 180)) / 110)));\n if (!centerResult) {\n centerResult = sdk.viewer.camera.positionWC;\n }\n var height = this.tools.cartesian3Towgs84(sdk.viewer.camera.positionWC, sdk.viewer).alt;\n var _centerResult = this.tools.cartesian3Towgs84(centerResult, sdk.viewer);\n\n // console.log('--------------', sdk.viewer.camera.position, sdk.viewer.camera.positionWC, centerResult84, height)\n\n sdk2.viewer.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(_centerResult.lng, _centerResult.lat, height)\n // orientation: {\n // heading: sdk2.viewer.camera.heading,\n // pitch: sdk2.viewer.camera.pitch,\n // roll: sdk2.viewer.camera.roll\n // }\n });\n }\n}\nfunction get2DView() {\n return sdk2D;\n}\nfunction get3DView() {\n return sdk3D;\n}\nfunction solveBug() {\n // 在能显示的地方加载一个多边形,解决二维模式下某些地方无法显示多边形的bug,原因不明\n sdk2D && sdk2D.viewer.entities.add({\n show: false,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray([100, 50, 100.0001, 50, 100.0001, 50.0001]))\n }\n });\n}\nfunction setActiveViewer(v) {\n activeViewer = v;\n}\nfunction getSdk() {\n return {\n sdkP: sdk3D,\n sdkD: sdk2D\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL011bHRpVmlld3BvcnRNb2RlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZS9pbmRleC5qcz9mYjYwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDlpJrop4blj6PmqKHlvI8gXHJcbiAqICovXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vLi4vVG9vbHNcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vRXZlbnQnXHJcbmltcG9ydCB7IENlc2l1bUNvbnRhaW5lciB9IGZyb20gJy4uL2dsb2JhbCdcclxuaW1wb3J0IHsgb2ZmIGFzIG9mZlNwbGl0U2NyZWVuIH0gZnJvbSBcIi4uL1NwbGl0U2NyZWVuXCI7XHJcbmltcG9ydCB7IEZsd1N0YXR1c1N3aXRjaCwgSnd3U3RhdHVzU3dpdGNoLCBnZXRGbHdTdGF0dXMsIGdldEp3d1N0YXR1cyB9IGZyb20gXCIuLi9nbG9iYWxcIlxyXG5pbXBvcnQgeyBTaGVldEluZGV4U3RhdHVzU3dpdGNoLCBnZXRTdGF0dXMgfSBmcm9tICcuLi9TaGVldEluZGV4J1xyXG5pbXBvcnQgeyBnZXRMZWZ0Q2xpY2tTdGF0ZSwgZ2V0UmlnaHRDbGlja1N0YXRlLCBnZXRNb3ZlU3RhdGUgfSBmcm9tIFwiLi4vLi4vR2xvYmFsL0NsaWNrQ2FsbGJhY2tcIlxyXG5pbXBvcnQgeyBvcGVuTGVmdENsaWNrLCBvcGVuUmlnaHRDbGljaywgb3Blbk1vdmUgfSBmcm9tIFwiLi9DbGlja0NhbGxiYWNrXCJcclxuXHJcblxyXG5sZXQgc2RrMkRcclxubGV0IHNkazNEXHJcbmxldCBhY3RpdmVWaWV3ZXJcclxubGV0IGNvbnRyb2xWaWV3ZXJcclxubGV0IHN5bmNPYmplY3QgPSB7fVxyXG5sZXQgaGFuZGxlcnMgPSBbXVxyXG5hc3luYyBmdW5jdGlvbiBpbml0KHNkaykge1xyXG4gIHNkazNEID0gc2RrXHJcbiAgYWN0aXZlVmlld2VyID0gMFxyXG4gIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgbGV0IHNkazIgPSBhd2FpdCBuZXcgWUouWUpFYXJ0aChzZGsuZGl2X2lkKVxyXG4gIHNkazIudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZSA9ICdjZXNpdW0tdmlld2VyIDJkJ1xyXG4gIFNoZWV0SW5kZXhTdGF0dXNTd2l0Y2goc2RrMiwgZ2V0U3RhdHVzKCkpXHJcbiAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICBsZXQgc3dpdGNoQ2x1c3RlciA9IG5ldyBZSi5HbG9iYWwuc3dpdGNoQ2x1c3RlcihzZGsyLCB0cnVlKVxyXG4gIC8vIH0sIDUwMCk7XHJcbiAgQ2VzaXVtQ29udGFpbmVyKHNkazIsIHtcclxuICAgIGNvbXBhc3M6IGZhbHNlLCAvLyDnvZfnm5hcclxuICAgIC8vIGxlZ2VuZDogZmFsc2UsIC8vIOavlOS+i+WwulxyXG4gICAgaW5mbzogZmFsc2UsIC8vIOS/oeaBr+agj1xyXG4gICAgZnJhbWU6IGZhbHNlIC8vIOWIt+aWsOeOh1xyXG4gIH0pXHJcbiAgc2RrMi52aWV3ZXIuc2NlbmUubW9kZSA9IENlc2l1bS5TY2VuZU1vZGUuU0NFTkUyRFxyXG4gIHNkazJEID0gYXdhaXQgc2RrMlxyXG4gIGlmKGdldExlZnRDbGlja1N0YXRlKCkpIHtcclxuICAgIG9wZW5MZWZ0Q2xpY2soc2RrMkQpXHJcbiAgfVxyXG4gIGlmKGdldFJpZ2h0Q2xpY2tTdGF0ZSgpKSB7XHJcbiAgICBvcGVuUmlnaHRDbGljayhzZGsyRClcclxuICB9XHJcbiAgaWYoZ2V0TW92ZVN0YXRlKCkpIHtcclxuICAgIG9wZW5Nb3ZlKHNkazJEKVxyXG4gIH1cclxuXHJcbiAgLy8gd2luZG93LnNkazJEID0gc2RrMkRcclxuICBzb2x2ZUJ1ZygpXHJcbiAgc3luY09iamVjdCA9IHsgc2RrczogW3Nkaywgc2RrMl0sIHRvb2xzIH1cclxuICBhd2FpdCBldmVudEJpbmQoc2RrLCAwLCBzeW5jT2JqZWN0KVxyXG4gIGF3YWl0IGV2ZW50QmluZChzZGsyLCAxLCBzeW5jT2JqZWN0KVxyXG4gIGF3YWl0IHN5bmNEYXRhKHNkaylcclxuICBzZGsudmlld2VyLnNjZW5lLnByZVJlbmRlci5hZGRFdmVudExpc3RlbmVyKHN5bmNWaWV3ZXIsIHN5bmNPYmplY3QpXHJcblxyXG4gIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllckFkZGVkLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllckFkZGVkKTtcclxuICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJNb3ZlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNJbWFnZXJ5TGF5ZXJNb3ZlZCk7XHJcbiAgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxheWVyUmVtb3ZlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNJbWFnZXJ5TGF5ZXJSZW1vdmVkKTtcclxuICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJTaG93bk9ySGlkZGVuLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllclNob3duT3JIaWRkZW4pO1xyXG4gIGxldCBpbWFnZXJ5TGF5ZXJzID0gWy4uLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzXVxyXG4gIGltYWdlcnlMYXllcnMuc29ydCgoYSwgYikgPT4gYS5fbGF5ZXJJbmRleCAtIGIuX2xheWVySW5kZXgpO1xyXG4gIHNkazJELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLnJlbW92ZUFsbCgpXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXJ5TGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgZW50aXR5ID0gc2RrMkQudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKGltYWdlcnlMYXllcnNbaV0uaW1hZ2VyeVByb3ZpZGVyLCBpbWFnZXJ5TGF5ZXJzW2ldLl9sYXllckluZGV4KVxyXG4gICAgaWYoaW1hZ2VyeUxheWVyc1tpXS5faWQpIHtcclxuICAgICAgZW50aXR5Ll9pZCA9IGltYWdlcnlMYXllcnNbaV0uX2lkXHJcbiAgICB9XHJcbiAgICBlbnRpdHkuc2hvdyA9IGltYWdlcnlMYXllcnNbaV0uc2hvd1xyXG4gICAgZW50aXR5LmFscGhhID0gaW1hZ2VyeUxheWVyc1tpXS5hbHBoYVxyXG4gICAgaWYgKGltYWdlcnlMYXllcnNbaV0uX29iamVjdFN0YXRlKSB7XHJcbiAgICAgIGlmIChpbWFnZXJ5TGF5ZXJzW2ldLl9zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgICAgZW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIHNkay52aWV3ZXIuZW50aXRpZXMuY29sbGVjdGlvbkNoYW5nZWQuYWRkRXZlbnRMaXN0ZW5lcihzeW5jRW50aXRpZXMpXHJcbiAgLy8gc2RrLnZpZXdlci5kYXRhU291cmNlcy5kYXRhU291cmNlQWRkZWQuYWRkRXZlbnRMaXN0ZW5lcihzeW5jRGF0YVNvdXJjZXMpXHJcblxyXG4gIGlmIChnZXRGbHdTdGF0dXMoc2RrKSkge1xyXG4gICAgRmx3U3RhdHVzU3dpdGNoKHNkazIsIHRydWUpXHJcbiAgfVxyXG4gIGlmIChnZXRKd3dTdGF0dXMoc2RrKSkge1xyXG4gICAgSnd3U3RhdHVzU3dpdGNoKHNkazIsIHRydWUpXHJcbiAgfVxyXG5cclxuICBzZGsuZW50aXR5TWFwLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xyXG4gICAgaWYgKGl0ZW0uc2hvd1ZpZXcgPT0gMikge1xyXG4gICAgICBpdGVtLnNob3dWaWV3ID0gMlxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG59XHJcbmFzeW5jIGZ1bmN0aW9uIG9uKHNkaykge1xyXG4gIGlmIChzZGsyRCkge1xyXG5cclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBpbml0KHNkaylcclxuICAgIG9mZlNwbGl0U2NyZWVuKClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9mZihzZGspIHtcclxuICBzZGsudmlld2VyLnNjZW5lLnByZVJlbmRlci5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNWaWV3ZXIsIHN5bmNPYmplY3QpXHJcbiAgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxheWVyQWRkZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyQWRkZWQpO1xyXG4gIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllck1vdmVkLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllck1vdmVkKTtcclxuICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJSZW1vdmVkLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllclJlbW92ZWQpO1xyXG4gIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllclNob3duT3JIaWRkZW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyU2hvd25PckhpZGRlbik7XHJcbiAgLy8gc2RrLnZpZXdlci5lbnRpdGllcy5jb2xsZWN0aW9uQ2hhbmdlZC5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNFbnRpdGllcylcclxuICAvLyBzZGsudmlld2VyLmRhdGFTb3VyY2VzLmRhdGFTb3VyY2VBZGRlZC5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNEYXRhU291cmNlcylcclxuXHJcbiAgLy9wcmltaXRpdmVBZGRlZD11bmRlZmluZWTln7rlhYPlkIzmraXorr7nva7lnKhhZGTkvY3nva5cclxuICAvLyBzZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucHJpbWl0aXZlQWRkZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jUHJpbWl0aXZlc0FkZGVkKVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGhhbmRsZXJzW2ldLmRlc3Ryb3koKVxyXG4gIH1cclxuICBpZiAoc2RrMkQpIHtcclxuICAgIHNkazJELmRlc3Ryb3koKVxyXG4gICAgaGFuZGxlcnMgPSBbXVxyXG4gICAgc2RrMkQgPSBudWxsXHJcbiAgICBzZGszRCA9IG51bGxcclxuICAgIGFjdGl2ZVZpZXdlciA9IG51bGxcclxuICAgIHN5bmNPYmplY3QgPSB7fVxyXG4gIH1cclxuICBzZGsuZW50aXR5TWFwLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xyXG4gICAgaWYgKGl0ZW0uc2hvd1ZpZXcpIHtcclxuICAgICAgaXRlbS5zaG93ID0gaXRlbS5zaG93XHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3luY0RhdGEyKHNkaywgaWQsIGVudGl0eUlkKSB7XHJcbiAgaWYgKHNkayAmJiBzZGsudmlld2VyICYmIHNkay52aWV3ZXIuX2VsZW1lbnQgJiYgc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWUgPT09ICdjZXNpdW0tdmlld2VyIDJkJykge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGlmICghc2RrM0QgfHwgIXNkazJEKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgbGV0IGVudGl0eU1hcCA9IHNkazNELmVudGl0eU1hcFxyXG4gIGlmIChpZCkge1xyXG4gICAgbGV0IHRoYXQgPSBlbnRpdHlNYXAuZ2V0KGlkKVxyXG4gICAgaWYgKHRoYXQpIHtcclxuICAgICAgbGV0IHRoYXQyID0gc2RrMkQuZW50aXR5TWFwLmdldChpZClcclxuICAgICAgaWYgKHRoYXQyKSB7XHJcbiAgICAgICAgYXdhaXQgdGhhdDIucmVtb3ZlKClcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHN5bmNPYmplY3QudG9vbHMuZGVlcENvcHlPYmoodGhhdC5vcHRpb25zKVxyXG4gICAgICBpZiAodGhhdC50eXBlID09PSAnQmlsbGJvYXJkT2JqZWN0Jykge1xyXG4gICAgICAgIG9wdGlvbnMuaGVpZ2h0UmVmZXJlbmNlID0gMVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGF0LnR5cGUgPT09ICdQb2x5Z29uT2JqZWN0Jykge1xyXG4gICAgICAgIG9wdGlvbnMuaGVpZ2h0TW9kZSA9IDBcclxuICAgICAgICBvcHRpb25zLmhlaWdodCA9IDBcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGF0LnR5cGUgfHwgKHRoYXQudHlwZSAhPT0gJ3RpbGVzZXQnICYmIHRoYXQudHlwZSAhPT0gJ2JpbScgJiYgdGhhdC50eXBlICE9PSAnZ2xiJyAmJiB0aGF0LnR5cGUgIT09ICdsYXllcicgJiYgdGhhdC50eXBlICE9PSAnd2FsbFN0ZXJlb3Njb3BpYycpKSB7XHJcbiAgICAgICAgaWYgKHRoYXQuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICAgICAgb3B0aW9ucy5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNhbGxiYWNrXHJcbiAgICAgICAgaWYodGhhdC50eXBlID09PSAnVGV4dEJveCcpIHtcclxuICAgICAgICAgIGNhbGxiYWNrID0gdGhhdC5jYWxsYmFja1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5ld09iamVjdCA9IGF3YWl0IG5ldyB0aGF0LmNvbnN0cnVjdG9yKHNkazJELCBvcHRpb25zLCBjYWxsYmFjaylcclxuICAgICAgICBuZXdPYmplY3Qub25DbGljayA9IHRoYXQub25DbGlja1xyXG4gICAgICAgIG5ld09iamVjdC5vblJpZ2h0Q2xpY2sgPSB0aGF0Lm9uUmlnaHRDbGlja1xyXG4gICAgICAgIG5ld09iamVjdC5vbk1vdXNlTW92ZSA9IHRoYXQub25Nb3VzZU1vdmVcclxuICAgICAgICBpZiAodGhhdC50eXBlID09PSAnVHJhamVjdG9yeU1vdGlvbicpIHtcclxuICAgICAgICAgIHRoYXQuZmlyc3RQZXJzb25WaWV3ID0gZmFsc2VcclxuICAgICAgICAgIGlmICh0aGF0LlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGF0LnN0YXRlXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoYXQuc3RhdGUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghbmV3T2JqZWN0LnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZXdPYmplY3Quc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZShOdW1iZXIodGhhdC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZS50b0ZpeGVkKDgpKSArIDAuMDAwMDAwMDEpXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LnNldE1vdmVQb3NpdGlvbkJ5RGlzdGFuY2UoTnVtYmVyKHRoYXQuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UudG9GaXhlZCg4KSkgKyAwLjAwMDAwMDAyKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIG5ld09iamVjdC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKE51bWJlcih0aGF0LlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlLnRvRml4ZWQoOCkpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoYXQuc3RhdGUgPSBzdGF0ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIG5ld09iamVjdC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKDAuMDAwMDAwMDEpXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZXdPYmplY3Quc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZSgwLjAwMDAwMDAyKVxyXG4gICAgICAgICAgICAgIH0sIDUwMClcclxuICAgICAgICAgICAgfSwgNTAwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQudmlld0ZvbGxvdykge1xyXG4gICAgICAgICAgICBuZXdPYmplY3Qudmlld0ZvbGxvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoYXQudHlwZSA9PT0gJ0F0dGFja0Fycm93T2JqZWN0JyB8fCB0aGF0LnR5cGUgPT09ICdTdHJhaWdodEFycm93T2JqZWN0Jykge1xyXG4gICAgICAgICAgaWYgKHRoYXQuc3ByZWFkU3RhdGUgJiYgdGhhdC5Ud2VlbkFuaW1hdGUgJiYgdGhhdC5Ud2VlbkFuaW1hdGUuX29iamVjdCkge1xyXG4gICAgICAgICAgICBuZXdPYmplY3Quc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUodGhhdC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSAvIHRoYXQuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UgKiB0aGF0LnNwcmVhZFRpbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGF0LnR5cGUgPT09ICdQaW5jZXJBcnJvd09iamVjdCcpIHtcclxuICAgICAgICAgIGlmICh0aGF0LnNwcmVhZFN0YXRlICYmIHRoYXQuVHdlZW5BbmltYXRlICYmIHRoYXQuVHdlZW5BbmltYXRlLl9vYmplY3QpIHtcclxuICAgICAgICAgICAgbmV3T2JqZWN0LnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRoYXQuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UxIC8gdGhhdC5Ud2VlbkFuaW1hdGUuX3ZhbHVlc0VuZC5kaXN0YW5jZTEgKiB0aGF0LnNwcmVhZFRpbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdPYmplY3Qub24gJiYgbmV3T2JqZWN0LnR5cGUgIT09ICdnbGInKSB7XHJcbiAgICAgICAgICBpZiAobmV3T2JqZWN0LnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgIG5ld09iamVjdC5kYXRhID0gdGhhdC5kYXRhXHJcbiAgICAgICAgICAgIG5ld09iamVjdC5sb2FkKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAobmV3T2JqZWN0LmVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdPYmplY3QuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBuZXdPYmplY3QuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gdGhhdC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IG5ld09iamVjdC5vbigpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIChuZXdPYmplY3QudHlwZSAmJiAobmV3T2JqZWN0LnR5cGUgPT09ICd0aWxlc2V0JyB8fCBuZXdPYmplY3QudHlwZSA9PT0gJ2JpbScpKSB7XHJcbiAgICAgICAgLy8gICBuZXdPYmplY3QuaGVpZ2h0ID0gLTEwMDAwXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIC8vIENlc2l1bTEuOTjniYjmnKzkuoznu7TmqKHlvI/kuIvliJ3mrKHmmL7npLrmnInpl67popjvvIwxLjExMOS7peS4iueJiOacrOato+W4uFxyXG4gICAgICAgIC8vIGlmIChuZXdPYmplY3QudHlwZSAmJiAobmV3T2JqZWN0LnR5cGUgPT09ICdnbGInKSkge1xyXG4gICAgICAgIC8vICAgbmV3T2JqZWN0Lm9wdGlvbnMucG9zaXRpb24uYWx0ID0gMFxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB0aGF0MiA9IHNkazJELmVudGl0eU1hcC5nZXQoaWQpXHJcbiAgICAgIGlmICh0aGF0Mikge1xyXG4gICAgICAgIGF3YWl0IHRoYXQyLnJlbW92ZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmb3IgKGxldCBba2V5LCBvYmpdIG9mIHNkazJELmVudGl0eU1hcCkge1xyXG4gICAgICBsZXQgdGhhdCA9IHNkazJELmVudGl0eU1hcC5nZXQoa2V5KVxyXG4gICAgICBpZiAodGhhdCkge1xyXG4gICAgICAgIGF3YWl0IHRoYXQucmVtb3ZlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgW2tleSwgb2JqXSBvZiBlbnRpdHlNYXApIHtcclxuICAgICAgaWYgKG9iai50eXBlID09PSAnQmlsbGJvYXJkT2JqZWN0Jykge1xyXG4gICAgICAgIG9iai5vcHRpb25zLmhlaWdodFJlZmVyZW5jZSA9IDFcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHN5bmNPYmplY3QudG9vbHMuZGVlcENvcHlPYmoob2JqLm9wdGlvbnMpXHJcbiAgICAgIGlmICghb2JqLnR5cGUgfHwgKG9iai50eXBlICE9PSAndGlsZXNldCcgJiYgb2JqLnR5cGUgIT09ICdiaW0nICYmIG9iai50eXBlICE9PSAnZ2xiJyAmJiBvYmoudHlwZSAhPT0gJ2xheWVyJyAmJiBvYmoudHlwZSAhPT0gJ3dhbGxTdGVyZW9zY29waWMnKSkge1xyXG4gICAgICAgIGlmIChvYmouc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICAgICAgb3B0aW9ucy5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGF3YWl0IHNkazJELmVudGl0eU1hcC5nZXQob3B0aW9ucy5pZClcclxuICAgICAgICBpZih0YXJnZXQpIHtcclxuICAgICAgICAgIGF3YWl0IHRhcmdldC5yZW1vdmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2FsbGJhY2tcclxuICAgICAgICBpZihvYmoudHlwZSA9PT0gJ1RleHRCb3gnKSB7XHJcbiAgICAgICAgICBjYWxsYmFjayA9IG9iai5jYWxsYmFja1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXQgPSBhd2FpdCBuZXcgb2JqLmNvbnN0cnVjdG9yKHNkazJELCBvcHRpb25zLCBjYWxsYmFjaylcclxuICAgICAgICB0YXJnZXQub25DbGljayA9IG9iai5vbkNsaWNrXHJcbiAgICAgICAgdGFyZ2V0Lm9uUmlnaHRDbGljayA9IG9iai5vblJpZ2h0Q2xpY2tcclxuICAgICAgICB0YXJnZXQub25Nb3VzZU1vdmUgPSBvYmoub25Nb3VzZU1vdmVcclxuICAgICAgICBpZiAob2JqLnR5cGUgPT09ICdUcmFqZWN0b3J5TW90aW9uJykge1xyXG4gICAgICAgICAgb2JqLmZpcnN0UGVyc29uVmlldyA9IGZhbHNlXHJcbiAgICAgICAgICBpZiAob2JqLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBvYmouc3RhdGVcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgb2JqLnN0YXRlID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRhcmdldC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldE1vdmVQb3NpdGlvbkJ5RGlzdGFuY2UoTnVtYmVyKG9iai5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZS50b0ZpeGVkKDgpKSArIDAuMDAwMDAwMDAxKVxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKE51bWJlcihvYmouVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UudG9GaXhlZCg4KSkgKyAwLjAwMDAwMDAwMilcclxuICAgICAgICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRhcmdldC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKE51bWJlcihvYmouVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UudG9GaXhlZCg4KSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqLnN0YXRlID0gc3RhdGVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0YXJnZXQuc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZSgwLjAwMDAwMDAwMSlcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKDAuMDAwMDAwMDAyKVxyXG4gICAgICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvYmoudmlld0ZvbGxvdykge1xyXG4gICAgICAgICAgICB0YXJnZXQudmlld0ZvbGxvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdPYmplY3Qudmlld0ZvbGxvdyA9IGZhbHNlXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmoudHlwZSA9PT0gJ0F0dGFja0Fycm93T2JqZWN0JyB8fCBvYmoudHlwZSA9PT0gJ1N0cmFpZ2h0QXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICBpZiAob2JqLnNwcmVhZFN0YXRlICYmIG9iai5Ud2VlbkFuaW1hdGUgJiYgb2JqLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZShvYmouVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UgLyBvYmouVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UgKiBvYmouc3ByZWFkVGltZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai50eXBlID09PSAnUGluY2VyQXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICBpZiAob2JqLnNwcmVhZFN0YXRlICYmIG9iai5Ud2VlbkFuaW1hdGUgJiYgb2JqLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZShvYmouVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UxIC8gb2JqLlR3ZWVuQW5pbWF0ZS5fdmFsdWVzRW5kLmRpc3RhbmNlMSAqIG9iai5zcHJlYWRUaW1lKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0Lm9uICYmIG9iai50eXBlICE9PSAnZ2xiJykge1xyXG4gICAgICAgICAgaWYgKHRhcmdldC50eXBlID09PSAndmVjdG9yJykge1xyXG4gICAgICAgICAgICB0YXJnZXQuZGF0YSA9IG9iai5kYXRhXHJcbiAgICAgICAgICAgIHRhcmdldC5sb2FkKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGFyZ2V0LmVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gb2JqLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGFyZ2V0Lm9uKClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKG9iai50eXBlICYmIChvYmoudHlwZSA9PT0gJ3RpbGVzZXQnIHx8IG9iai50eXBlID09PSAnYmltJykpIHtcclxuICAgICAgICAvLyAgIHRhcmdldC5oZWlnaHQgPSAtMTAwMDBcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKG9iai50eXBlICYmIChvYmoudHlwZSA9PT0gJ2dsYicpKSB7XHJcbiAgICAgICAgLy8gICB0YXJnZXQub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSAwXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzeW5jRGF0YShzZGssIGlkLCBlbnRpdHlJZCkge1xyXG4gIHN5bmNEYXRhMihzZGssIGlkLCBlbnRpdHlJZClcclxuICAvLyBzeW5jRW50aXRpZXMoKVxyXG4gIC8vIHN5bmNEYXRhU291cmNlcygpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN5bmNFbnRpdGllcyhlbnRpdGllczEsIGVudGl0aWVzMikge1xyXG4gIGlmICghc2RrM0QpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBpZiAoc2RrMkQpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVudGl0aWVzMSkgfHwgQXJyYXkuaXNBcnJheShlbnRpdGllczIpKSB7XHJcbiAgICAgIGVudGl0aWVzMSA9IG51bGxcclxuICAgICAgZW50aXRpZXMyID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKCFlbnRpdGllczEpIHtcclxuICAgICAgZW50aXRpZXMxID0gc2RrMkQudmlld2VyLmVudGl0aWVzXHJcbiAgICB9XHJcbiAgICBpZiAoIWVudGl0aWVzMikge1xyXG4gICAgICBlbnRpdGllczIgPSBzZGszRC52aWV3ZXIuZW50aXRpZXNcclxuICAgIH1cclxuICAgIGxldCBlbnRpdGllczJEID0gZW50aXRpZXMxXHJcbiAgICBsZXQgZW50aXRpZXMzRCA9IGVudGl0aWVzMlxyXG4gICAgZm9yIChsZXQgaSA9IGVudGl0aWVzMkQudmFsdWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgZm9yIChsZXQgbSA9IGVudGl0aWVzM0QudmFsdWVzLmxlbmd0aCAtIDE7IG0gPj0gMDsgbS0tKSB7XHJcbiAgICAgICAgaWYgKGVudGl0aWVzMkQudmFsdWVzW2ldLmlkID09PSBlbnRpdGllczNELnZhbHVlc1ttXS5pZCkge1xyXG4gICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgIGVudGl0aWVzMkQudmFsdWVzW2ldID09PSBlbnRpdGllczNELnZhbHVlc1ttXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICBlbnRpdGllczJELnJlbW92ZShlbnRpdGllczJELnZhbHVlc1tpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbSA9IGVudGl0aWVzM0QudmFsdWVzLmxlbmd0aCAtIDE7IG0gPj0gMDsgbS0tKSB7XHJcbiAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgZm9yIChsZXQgaSA9IGVudGl0aWVzMkQudmFsdWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKGVudGl0aWVzMkQudmFsdWVzW2ldLmlkID09PSBlbnRpdGllczNELnZhbHVlc1ttXS5pZCkge1xyXG4gICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgIGxldCBlbnRpdHkgPSBlbnRpdGllczJELmFkZChlbnRpdGllczNELnZhbHVlc1ttXSlcclxuICAgICAgICAvLyBpZiAoZW50aXR5LnJlY3RhbmdsZSkge1xyXG4gICAgICAgIC8vICAgLy8g6K6+572u6auY5bqm77yM5ZCm5YiZ5Zyo5p+Q5Lqb5L2N572u5peg5rOV5pi+56S677yM5L2G6Imy5b2p5Lya5Y+Y5pqXXHJcbiAgICAgICAgLy8gICBlbnRpdHkucmVjdGFuZ2xlLmhlaWdodCA9IDBcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCcyNDIzNDIzNTQyMzUnLGVudGl0aWVzM0QudmFsdWVzW21dKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBzeW5jRGF0YVNvdXJjZXMoZGF0YVNvdXJjZXMsIHR5cGUpIHtcclxuICBpZiAoIXNkazNEKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHNkazJEKSB7XHJcbiAgICBsZXQgZGF0YVNvdXJjZXMyRCA9IHNkazJELnZpZXdlci5kYXRhU291cmNlc1xyXG4gICAgaWYgKGRhdGFTb3VyY2VzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBkYXRhU291cmNlczJELl9kYXRhU291cmNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChkYXRhU291cmNlczJELl9kYXRhU291cmNlc1tpXS5uYW1lID09PSBkYXRhU291cmNlcy5uYW1lKSB7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VudGl0aWVzJykge1xyXG4gICAgICAgICAgICBzeW5jRW50aXRpZXMoZGF0YVNvdXJjZXMyRC5fZGF0YVNvdXJjZXNbaV0uZW50aXRpZXMsIGRhdGFTb3VyY2VzLmVudGl0aWVzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdjbHVzdGVyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlczJELl9kYXRhU291cmNlc1tpXS5jbHVzdGVyaW5nLmVuYWJsZWQgPSBkYXRhU291cmNlcy5jbHVzdGVyaW5nLmVuYWJsZWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGZvciAobGV0IG0gPSBkYXRhU291cmNlczNELl9kYXRhU291cmNlcy5sZW5ndGggLSAxOyBtID49IDA7IG0tLSkge1xyXG4gICAgLy8gICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAvLyAgIGZvciAobGV0IGkgPSBkYXRhU291cmNlczJELl9kYXRhU291cmNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKGRhdGFTb3VyY2VzMkQuX2RhdGFTb3VyY2VzW2ldLm5hbWUsIGRhdGFTb3VyY2VzM0QuX2RhdGFTb3VyY2VzW21dLm5hbWUpXHJcbiAgICAvLyAgICAgaWYgKGRhdGFTb3VyY2VzMkQuX2RhdGFTb3VyY2VzW2ldLm5hbWUgPT09IGRhdGFTb3VyY2VzM0QuX2RhdGFTb3VyY2VzW21dLm5hbWUpIHtcclxuICAgIC8vICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAvLyAgICAgICBicmVha1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBpZiAoIWZsYWcpIHtcclxuICAgIC8vICAgICBkYXRhU291cmNlczJELmFkZChkYXRhU291cmNlczNELl9kYXRhU291cmNlc1ttXSlcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBzeW5jSW1hZ2VyeUxheWVyQWRkZWQobGF5ZXIsIGluZGV4KSB7XHJcbiAgc2RrMkQudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKGxheWVyLmltYWdlcnlQcm92aWRlciwgaW5kZXgpXHJcbn1cclxuZnVuY3Rpb24gc3luY0ltYWdlcnlMYXllck1vdmVkKGxheWVyLCBuZXdpbmR4ZSwgb2xkaW5kZXgpIHtcclxuICBsZXQgbGF5ZXIyZCA9IHNkazJELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbb2xkaW5kZXhdXHJcbiAgaWYgKCFsYXllcjJkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgLy8g56e75Yiw5pyA5bqV5bGCXHJcbiAgaWYgKG5ld2luZHhlID09PSAwKSB7XHJcbiAgICBzZGsyRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5sb3dlclRvQm90dG9tKGxheWVyMmQpXHJcbiAgfVxyXG4gIC8vIOenu+WIsOacgOmrmOWxglxyXG4gIGVsc2UgaWYgKG5ld2luZHhlID09PSBzZGszRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aCAtIDEpIHtcclxuICAgIHNkazJELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLnJhaXNlVG9Ub3AobGF5ZXIyZClcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBpZiAobmV3aW5keGUgPCBvbGRpbmRleCkge1xyXG4gICAgICBzZGsyRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5sb3dlcihsYXllcjJkKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNkazJELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLnJhaXNlKGxheWVyMmQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmZ1bmN0aW9uIHN5bmNJbWFnZXJ5TGF5ZXJSZW1vdmVkKGxheWVyLCBpbmRleCkge1xyXG4gIGxldCBsYXllcjJkID0gc2RrMkQudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpbmRleF1cclxuICBpZiAoIWxheWVyMmQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBzZGsyRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5yZW1vdmUobGF5ZXIyZClcclxufVxyXG5mdW5jdGlvbiBzeW5jSW1hZ2VyeUxheWVyU2hvd25PckhpZGRlbihsYXllciwgaW5kZXgsIHN0YXRlKSB7XHJcbiAgcmV0dXJuXHJcbiAgbGV0IGxheWVyMmQgPSBzZGsyRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2luZGV4XVxyXG4gIGxldCBsYXllcjNkID0gc2RrM0Qudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpbmRleF1cclxuICBjb25zb2xlLmxvZygnbGF5ZXIyZCcsIGxheWVyMmQsIHNkazJELCBsYXllcjNkKVxyXG5cclxuICBpZiAoIWxheWVyMmQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBpZiAobGF5ZXIzZC5fb2JqZWN0U3RhdGUpIHtcclxuICAgIGlmICghbGF5ZXIzZC5fc2hvd1ZpZXcgfHwgbGF5ZXIzZC5fc2hvd1ZpZXcgPT0gMikge1xyXG4gICAgICBsYXllcjJkLnNob3cgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAobGF5ZXIzZC5fc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICBsYXllcjJkLnNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGxheWVyMmQuc2hvdyA9IHN0YXRlXHJcbiAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzeW5jUHJpbWl0aXZlcyhwcmltaXRpdmUpIHtcclxuICBpZiAoIXNkazNEKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHNkazJEKSB7XHJcbiAgICAvLyBhd2FpdCBzZGsyRC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUocHJpbWl0aXZlKVxyXG4gICAgLy8gYXdhaXQgc2RrMkQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZSlcclxuICAgIGxldCBwcmltaXRpdmVzMkQgPSBzZGsyRC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlc1xyXG4gICAgbGV0IHByaW1pdGl2ZXMzRCA9IHNkazNELnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLl9wcmltaXRpdmVzXHJcbiAgICAvLyBjb25zb2xlLmxvZyhwcmltaXRpdmVzMkQsIHByaW1pdGl2ZXMzRClcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICBzZGsyRC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlc1sxXSA9IHNkazNELnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLl9wcmltaXRpdmVzWzFdXHJcbiAgICAvLyB9LCAyMDAwKTtcclxuICAgIGZvciAobGV0IGkgPSBwcmltaXRpdmVzMkQubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICBmb3IgKGxldCBtID0gcHJpbWl0aXZlczNELmxlbmd0aCAtIDE7IG0gPj0gMTsgbS0tKSB7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZXMzRFttXS5pZCAmJiBwcmltaXRpdmVzMkRbbV0uaWQgJiYgKHByaW1pdGl2ZXMzRFttXS5pZCA9PT0gcHJpbWl0aXZlczJEW2ldLmlkKSkge1xyXG4gICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgc2RrMkQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHByaW1pdGl2ZXMyRFtpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbSA9IHByaW1pdGl2ZXMzRC5sZW5ndGggLSAxOyBtID49IDE7IG0tLSkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgIGZvciAobGV0IGkgPSBwcmltaXRpdmVzMkQubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgICBpZiAocHJpbWl0aXZlczNEW21dLmlkICYmIHByaW1pdGl2ZXMyRFttXS5pZCAmJiAocHJpbWl0aXZlczNEW21dLmlkID09PSBwcmltaXRpdmVzMkRbaV0uaWQpKSB7XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLnNob3cgPSBwcmltaXRpdmVzM0RbbV0uc2hvd1xyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLnN0YXJ0Q29sb3IgPSBwcmltaXRpdmVzM0RbbV0uc3RhcnRDb2xvclxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLmVuZENvbG9yID0gcHJpbWl0aXZlczNEW21dLmVuZENvbG9yXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0ubWluaW11bVNwZWVkID0gcHJpbWl0aXZlczNEW21dLm1pbmltdW1TcGVlZFxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLm1heGltdW1TcGVlZCA9IHByaW1pdGl2ZXMzRFttXS5tYXhpbXVtU3BlZWRcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5taW5pbXVtUGFydGljbGVMaWZlID0gcHJpbWl0aXZlczNEW21dLm1pbmltdW1QYXJ0aWNsZUxpZmVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5tYXhpbXVtUGFydGljbGVMaWZlID0gcHJpbWl0aXZlczNEW21dLm1heGltdW1QYXJ0aWNsZUxpZmVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5zdGFydFNjYWxlID0gcHJpbWl0aXZlczNEW21dLnN0YXJ0U2NhbGVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5lbmRTY2FsZSA9IHByaW1pdGl2ZXMzRFttXS5lbmRTY2FsZVxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLmVtaXNzaW9uUmF0ZSA9IHByaW1pdGl2ZXMzRFttXS5lbWlzc2lvblJhdGVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5wYXJ0aWNsZVNpemUgPSBwcmltaXRpdmVzM0RbbV0ucGFydGljbGVTaXplXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0ubW9kZWxNYXRyaXggPSBwcmltaXRpdmVzM0RbbV0ubW9kZWxNYXRyaXhcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgc2RrMkQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZXMzRFttXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXZlbnRCaW5kKHNkaywgaSwgc3luY09iamVjdCkge1xyXG4gIGxldCBoYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihcclxuICAgIHNkay52aWV3ZXIuY2FudmFzXHJcbiAgKVxyXG4gIGhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKCkgPT4ge1xyXG4gICAgYWN0aXZlVmlld2VyID0gaVxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0RPV04pXHJcbiAgaGFuZGxlci5zZXRJbnB1dEFjdGlvbigoKSA9PiB7XHJcbiAgICBhY3RpdmVWaWV3ZXIgPSBpXHJcbiAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0RPV04pXHJcbiAgaGFuZGxlci5zZXRJbnB1dEFjdGlvbigoKSA9PiB7XHJcbiAgICBhY3RpdmVWaWV3ZXIgPSBpXHJcbiAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLldIRUVMKVxyXG4gIGhhbmRsZXJzLnB1c2goaGFuZGxlcilcclxufVxyXG5cclxuZnVuY3Rpb24gc3luY1ZpZXdlcigpIHtcclxuICBsZXQgc2RrID0gdGhpcy5zZGtzW2FjdGl2ZVZpZXdlcl1cclxuICBsZXQgc2RrMlxyXG5cclxuICBpZiAoYWN0aXZlVmlld2VyID09PSAwKSB7XHJcbiAgICBzZGsyID0gdGhpcy5zZGtzWzFdXHJcbiAgfVxyXG4gIGVsc2UgaWYgKGFjdGl2ZVZpZXdlciA9PT0gMSkge1xyXG4gICAgc2RrMiA9IHRoaXMuc2Rrc1swXVxyXG4gIH1cclxuICAvLyB0aGlzLnNka3NbMF0udmlld2VyLnRyYWNrZWRFbnRpdHkgPSBudWxsXHJcbiAgLy8gdGhpcy5zZGtzWzFdLnZpZXdlci50cmFja2VkRW50aXR5ID0gbnVsbFxyXG4gIGlmIChzZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgIGlmICh0aGlzLnNka3NbMF0udmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgICAgbGV0IGRpc3RhbmNlID0gc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0XHJcbiAgICAgIHNkazIudmlld2VyLmNhbWVyYS5sb29rQXQoXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbVJhZGlhbnMoc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLCBzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYy5sYXRpdHVkZSwgMCksXHJcbiAgICAgICAgbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSYW5nZSgwLCBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwKSwgZGlzdGFuY2UpXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zZGtzWzFdLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5zZGtzWzFdLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGtzWzFdLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gICAgICAgIHRoaXMuc2Rrc1sxXS52aWV3ZXIudHJhY2tlZEVudGl0eSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBsZXQgY2VudGVyUmVzdWx0ODQgPSB0aGlzLnRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21SYWRpYW5zKHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmxvbmdpdHVkZSwgc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMubGF0aXR1ZGUsIHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodCksIHNkay52aWV3ZXIpXHJcbiAgICAgIHNkazIudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudGVyUmVzdWx0ODQubG5nLCBjZW50ZXJSZXN1bHQ4NC5sYXQsIGNlbnRlclJlc3VsdDg0LmFsdCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgLy8g6KeG6KeS5Lit5b+D54K5KOS8qilcclxuICAgIGxldCBjZW50ZXJSZXN1bHQgPSBzZGsudmlld2VyLmNhbWVyYS5waWNrRWxsaXBzb2lkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgc2RrLnZpZXdlci5jYW52YXMuY2xpZW50V2lkdGggLyAyLFxyXG4gICAgICAgIHNkay52aWV3ZXIuY2FudmFzLmNsaWVudEhlaWdodCAvICgyIC0gKCg5MCArIHNkay52aWV3ZXIuY2FtZXJhLnBpdGNoIC8gKENlc2l1bS5NYXRoLlBJIC8gMTgwKSkgLyAxMTApKSxcclxuICAgICAgKSxcclxuICAgIClcclxuICAgIGlmICghY2VudGVyUmVzdWx0KSB7XHJcbiAgICAgIGNlbnRlclJlc3VsdCA9IHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uV0NcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy50b29scy5jYXJ0ZXNpYW4zVG93Z3M4NChzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbldDLCBzZGsudmlld2VyKS5hbHRcclxuICAgIGxldCBjZW50ZXJSZXN1bHQ4NCA9IHRoaXMudG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoY2VudGVyUmVzdWx0LCBzZGsudmlld2VyKVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLScsIHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uLCBzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbldDLCBjZW50ZXJSZXN1bHQ4NCwgaGVpZ2h0KVxyXG5cclxuICAgIHNkazIudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNlbnRlclJlc3VsdDg0LmxuZywgY2VudGVyUmVzdWx0ODQubGF0LCBoZWlnaHQpLFxyXG4gICAgICAvLyBvcmllbnRhdGlvbjoge1xyXG4gICAgICAvLyAgIGhlYWRpbmc6IHNkazIudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICAvLyAgIHBpdGNoOiBzZGsyLnZpZXdlci5jYW1lcmEucGl0Y2gsXHJcbiAgICAgIC8vICAgcm9sbDogc2RrMi52aWV3ZXIuY2FtZXJhLnJvbGxcclxuICAgICAgLy8gfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldDJEVmlldygpIHtcclxuICByZXR1cm4gc2RrMkRcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0M0RWaWV3KCkge1xyXG4gIHJldHVybiBzZGszRFxyXG59XHJcblxyXG5mdW5jdGlvbiBzb2x2ZUJ1ZygpIHtcclxuICAvLyDlnKjog73mmL7npLrnmoTlnLDmlrnliqDovb3kuIDkuKrlpJrovrnlvaLvvIzop6PlhrPkuoznu7TmqKHlvI/kuIvmn5DkupvlnLDmlrnml6Dms5XmmL7npLrlpJrovrnlvaLnmoRidWfvvIzljp/lm6DkuI3mmI5cclxuICBzZGsyRCAmJiBzZGsyRC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgIHNob3c6IGZhbHNlLFxyXG4gICAgcG9seWdvbjoge1xyXG4gICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KFsxMDAsIDUwLCAxMDAuMDAwMSwgNTAsIDEwMC4wMDAxLCA1MC4wMDAxXSkpXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0QWN0aXZlVmlld2VyKHYpIHtcclxuICBhY3RpdmVWaWV3ZXIgPSB2XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNkaygpIHtcclxuICByZXR1cm4ge1xyXG4gICAgc2RrUDogc2RrM0QsXHJcbiAgICBzZGtEOiBzZGsyRFxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCB7IG9uLCBvZmYsIHN5bmNEYXRhLCBzeW5jRW50aXRpZXMsIHN5bmNEYXRhU291cmNlcywgc3luY1ByaW1pdGl2ZXMsIGdldDJEVmlldywgZ2V0M0RWaWV3LCBzZXRBY3RpdmVWaWV3ZXIsIGdldFNkayB9Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBWUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/MultiViewportMode/index.js\n"); /***/ }), /***/ "./src/Global/ScreenRecord/index.js": /*!******************************************!*\ !*** ./src/Global/ScreenRecord/index.js ***! \******************************************/ /*! exports provided: startScreenRecord, stopScreenRecord */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"startScreenRecord\", function() { return startScreenRecord; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stopScreenRecord\", function() { return stopScreenRecord; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nvar ScreenRecord = /*#__PURE__*/function () {\n function ScreenRecord() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, ScreenRecord);\n this.start();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(ScreenRecord, [{\n key: \"start\",\n value: function start() {\n var _this = this;\n navigator.mediaDevices.getDisplayMedia({\n video: true\n }).then(function (stream) {\n // 需要更好的浏览器支持\n // const mime = MediaRecorder.isTypeSupported('video/webm; codecs=vp9')\n // ? 'video/webm; codecs=vp9'\n // : 'video/webm'\n _this.mediaRecorder = new MediaRecorder(stream, {\n // mimeType: mime,\n mimeType: 'video/webm'\n });\n var chunks = [];\n _this.mediaRecorder.addEventListener('dataavailable', function (e) {\n chunks.push(e.data);\n });\n _this.mediaRecorder.addEventListener('stop', /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee() {\n var blob, opts, handle, writable;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n blob = new Blob(chunks, {\n type: 'video/mp4'\n });\n opts = {\n suggestedName: '视频录制.mp4',\n types: [{\n description: '文件类型',\n accept: {\n 'video/mp4': ['.mp4']\n }\n }],\n excludeAcceptAllOption: true\n };\n _context.next = 5;\n return window.showSaveFilePicker(opts);\n case 5:\n handle = _context.sent;\n _context.next = 8;\n return handle.createWritable();\n case 8:\n writable = _context.sent;\n // 创建可写入的文件对象\n // 写入视频内容\n writable.write(blob);\n _context.next = 12;\n return writable.close();\n case 12:\n YJ.Global.ScreenRecord.screenRecord = null;\n _context.next = 18;\n break;\n case 15:\n _context.prev = 15;\n _context.t0 = _context[\"catch\"](0);\n console.info('文件保存失败:', _context.t0);\n case 18:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[0, 15]]);\n })));\n\n // 必须手动启动\n _this.mediaRecorder.start();\n }).catch(function (e) {\n console.info('取消录屏');\n console.info(e);\n YJ.Global.ScreenRecord.screenRecord = null;\n });\n }\n }]);\n}();\nfunction startScreenRecord() {\n if (YJ.Global.ScreenRecord.screenRecord) {\n return '录屏任务进行中';\n } else {\n YJ.Global.ScreenRecord.screenRecord = new ScreenRecord();\n }\n}\nfunction stopScreenRecord() {\n if (YJ.Global.ScreenRecord && YJ.Global.ScreenRecord.screenRecord && YJ.Global.ScreenRecord.screenRecord) {\n YJ.Global.ScreenRecord.screenRecord.mediaRecorder.stop();\n YJ.Global.ScreenRecord.screenRecord = null;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NjcmVlblJlY29yZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvU2NyZWVuUmVjb3JkL2luZGV4LmpzPzVkMzYiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgU2NyZWVuUmVjb3JkIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc3RhcnQoKVxyXG4gIH1cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh7XHJcbiAgICAgIHZpZGVvOiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKChzdHJlYW0pID0+IHtcclxuICAgICAgICAvLyDpnIDopoHmm7Tlpb3nmoTmtY/op4jlmajmlK/mjIFcclxuICAgICAgICAvLyBjb25zdCBtaW1lID0gTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQoJ3ZpZGVvL3dlYm07IGNvZGVjcz12cDknKVxyXG4gICAgICAgIC8vICAgPyAndmlkZW8vd2VibTsgY29kZWNzPXZwOSdcclxuICAgICAgICAvLyAgIDogJ3ZpZGVvL3dlYm0nXHJcbiAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCB7XHJcbiAgICAgICAgICAvLyBtaW1lVHlwZTogbWltZSxcclxuICAgICAgICAgIG1pbWVUeXBlOiAndmlkZW8vd2VibScsXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgbGV0IGNodW5rcyA9IFtdXHJcbiAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RhdGFhdmFpbGFibGUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgY2h1bmtzLnB1c2goZS5kYXRhKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5hZGRFdmVudExpc3RlbmVyKCdzdG9wJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihjaHVua3MsIHtcclxuICAgICAgICAgICAgICB0eXBlOiAndmlkZW8vbXA0JyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiAn6KeG6aKR5b2V5Yi2Lm1wNCcsXHJcbiAgICAgICAgICAgICAgdHlwZXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICfmlofku7bnsbvlnosnLFxyXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAndmlkZW8vbXA0JzogWycubXA0J10sXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb246IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIob3B0cyk7IC8vIOaJk+W8gOS/neWtmOaWh+S7tuWvueivneahhlxyXG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpOyAvLyDliJvlu7rlj6/lhpnlhaXnmoTmlofku7blr7nosaFcclxuICAgICAgICAgICAgLy8g5YaZ5YWl6KeG6aKR5YaF5a65XHJcbiAgICAgICAgICAgIHdyaXRhYmxlLndyaXRlKGJsb2IpO1xyXG4gICAgICAgICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICBZSi5HbG9iYWwuU2NyZWVuUmVjb3JkLnNjcmVlblJlY29yZCA9IG51bGxcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygn5paH5Lu25L+d5a2Y5aSx6LSlOicsIGVycm9yKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBsZXQgYmxvYiA9IG5ldyBCbG9iKGNodW5rcywge1xyXG4gICAgICAgICAgLy8gICB0eXBlOiBjaHVua3NbMF0udHlwZSxcclxuICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAvLyBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxyXG5cclxuICAgICAgICAgIC8vIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXHJcbiAgICAgICAgICAvLyBhLmhyZWYgPSB1cmxcclxuICAgICAgICAgIC8vIGEuZG93bmxvYWQgPSAndmlkZW8ud2VibSdcclxuICAgICAgICAgIC8vIGEuY2xpY2soKVxyXG4gICAgICAgICAgLy8gdGhpcy5yZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgLy8gWUouR2xvYmFsLlNjcmVlblJlY29yZC5zY3JlZW5SZWNvcmQgPSBudWxsXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8g5b+F6aG75omL5Yqo5ZCv5YqoXHJcbiAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLnN0YXJ0KClcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKCflj5bmtojlvZXlsY8nKVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhlKVxyXG4gICAgICAgIFlKLkdsb2JhbC5TY3JlZW5SZWNvcmQuc2NyZWVuUmVjb3JkID0gbnVsbFxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRTY3JlZW5SZWNvcmQoKSB7XHJcbiAgaWYgKFlKLkdsb2JhbC5TY3JlZW5SZWNvcmQuc2NyZWVuUmVjb3JkKSB7XHJcbiAgICByZXR1cm4gJ+W9leWxj+S7u+WKoei/m+ihjOS4rSdcclxuICB9IGVsc2Uge1xyXG4gICAgWUouR2xvYmFsLlNjcmVlblJlY29yZC5zY3JlZW5SZWNvcmQgPSBuZXcgU2NyZWVuUmVjb3JkKClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0b3BTY3JlZW5SZWNvcmQoKSB7XHJcbiAgaWYgKFlKLkdsb2JhbC5TY3JlZW5SZWNvcmQgJiYgWUouR2xvYmFsLlNjcmVlblJlY29yZC5zY3JlZW5SZWNvcmQgJiYgWUouR2xvYmFsLlNjcmVlblJlY29yZC5zY3JlZW5SZWNvcmQpIHtcclxuICAgIFlKLkdsb2JhbC5TY3JlZW5SZWNvcmQuc2NyZWVuUmVjb3JkLm1lZGlhUmVjb3JkZXIuc3RvcCgpXHJcbiAgICBZSi5HbG9iYWwuU2NyZWVuUmVjb3JkLnNjcmVlblJlY29yZCA9IG51bGxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IHN0YXJ0U2NyZWVuUmVjb3JkLCBzdG9wU2NyZWVuUmVjb3JkIH1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/ScreenRecord/index.js\n"); /***/ }), /***/ "./src/Global/ScreenShot/index.js": /*!****************************************!*\ !*** ./src/Global/ScreenShot/index.js ***! \****************************************/ /*! exports provided: ScreenShot, ScreenShotHD */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ScreenShot\", function() { return ScreenShot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ScreenShotHD\", function() { return ScreenShotHD; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../Obj/Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Obj/Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _MapPrint__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../MapPrint */ \"./src/Global/MapPrint/index.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _MultiViewportMode__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\n\n\n\n\n// 生成快照\nvar convertToImage = function convertToImage(container) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // 设置放大倍数\n var scale = window.devicePixelRatio;\n\n // 传入节点原始宽高\n var width = container.offsetWidth;\n var height = container.offsetHeight;\n\n // html2canvas配置项\n var ops = _objectSpread({\n scale: scale,\n //比例,越大分辨率越高,图片越小\n width: width,\n height: height,\n async: false,\n x: 0,\n y: 0,\n backgroundColor: 'rgb(20,47,65)',\n imageTimeout: 0,\n useCORS: true,\n //允许跨域\n allowTaint: false,\n //允许跨域数据污染'被污染'的canvas\n tainttest: true,\n foreignObjectRendering: true\n }, options);\n return html2canvas(container, ops).then(function (canvas) {\n // 返回图片的二进制数据\n return canvas.toDataURL(\"image/png\");\n });\n};\nfunction ScreenShot(_x) {\n return _ScreenShot.apply(this, arguments);\n}\nfunction _ScreenShot() {\n _ScreenShot = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee(sdk) {\n var cd,\n imgBlobData,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n cd = _args.length > 1 && _args[1] !== undefined ? _args[1] : function () {};\n // const imgBlobData = await convertToImage(sdk.viewer.canvas);\n imgBlobData = sdk.viewer.canvas.toDataURL();\n cd && cd(imgBlobData);\n // try {\n // const imgBlobData = await convertToImage(sdk.viewer.canvas);\n // let arr = imgBlobData.split(','), mime = arr[0].match(/:(.*?);/)[1],\n // bstr = atob(arr[1]), i = bstr.length, u8arr = new Uint8Array(i);\n // while (i--) {\n // u8arr[i] = bstr.charCodeAt(i);\n // }\n\n // let blob = new Blob([u8arr], { type: mime });\n // const opts = {\n // suggestedName: '截图.png',\n // types: [\n // {\n // description: '文件类型',\n // accept: {\n // 'image/png': ['.png'],\n // 'image/jpg': ['.jpg']\n // }\n // }\n // ],\n // excludeAcceptAllOption: true\n // };\n\n // const handle = await window.showSaveFilePicker(opts); // 打开保存文件对话框\n // const writable = await handle.createWritable(); // 创建可写入的文件对象\n // // 写入视频内容\n // writable.write(blob);\n // await writable.close();\n // YJ.Global.ScreenRecord.screenRecord = null\n // } catch (error) {\n // console.info('文件保存失败:', error);\n // }\n case 3:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _ScreenShot.apply(this, arguments);\n}\nvar _DialogObject;\nfunction ScreenShotHD(_x2) {\n return _ScreenShotHD.apply(this, arguments);\n}\nfunction _ScreenShotHD() {\n _ScreenShotHD = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee4(sdk) {\n var options,\n cd,\n enableTranslate,\n enableTilt,\n enableLook,\n scale,\n level,\n progressInputElm,\n progressBarElm,\n rangeNodeActive,\n rangeNodeActiveText,\n startScreenShotObject,\n tools,\n contentElm,\n centerResult,\n height,\n centerResult84,\n scaleData,\n i,\n scaleDataLegpObject,\n scaleDataLegpElm,\n startScreenShot,\n _args4 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : {};\n cd = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : function () {};\n if (sdk) {\n _context4.next = 4;\n break;\n }\n return _context4.abrupt(\"return\");\n case 4:\n Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_9__[\"off\"])(sdk);\n Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_10__[\"off\"])(sdk);\n if (_DialogObject) {\n _DialogObject.close();\n _DialogObject = null;\n }\n enableTranslate = sdk.viewer.scene.screenSpaceCameraController.enableTranslate;\n enableTilt = sdk.viewer.scene.screenSpaceCameraController.enableTilt;\n enableLook = sdk.viewer.scene.screenSpaceCameraController.enableLook;\n scale = 1;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n _context4.next = 14;\n return new _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_6__[\"default\"](sdk, {}, {\n title: '高清出图',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n if (startScreenShotObject) {\n startScreenShotObject.desist();\n startScreenShotObject = null;\n }\n progressInputElm && (progressInputElm.style.width = '0%');\n rangeNodeActive && (rangeNodeActive.style.left = '0%');\n progressBarElm && (progressBarElm.style.width = '0%');\n rangeNodeActiveText && (rangeNodeActiveText.innerHTML = '0%');\n startScreenShotObject = new startScreenShot();\n },\n closeCallBack: function closeCallBack() {\n sdk.viewer.scene.screenSpaceCameraController.enableTranslate = enableTranslate;\n sdk.viewer.scene.screenSpaceCameraController.enableTilt = enableTilt;\n sdk.viewer.scene.screenSpaceCameraController.enableLook = enableLook;\n sdk.viewer._element.getElementsByClassName('compass')[0].style.pointerEvents = 'auto';\n if (startScreenShotObject) {\n startScreenShotObject.desist();\n startScreenShotObject = null;\n }\n _DialogObject = undefined;\n }\n });\n case 14:\n _DialogObject = _context4.sent;\n _DialogObject._element.body.className = _DialogObject._element.body.className + ' screenShotHD';\n contentElm = document.createElement('div');\n contentElm.innerHTML = \"\\n \\n
\\n
\\n
\\n \\u5F53\\u524D\\u7A97\\u53E3\\u957F\\u5BBD\\uFF1A\".concat(sdk.viewer.canvas.width, \"*\").concat(sdk.viewer.canvas.height, \"\\u50CF\\u7D20\\n
\\n
\\n
\\n
\\n \\u56FE\\u7247\\u5927\\u5C0F\\n
\\n \\u500D\\u7A97\\u53E3\\n
\\n
\\n
\\n
\\n \\u8F93\\u51FA\\u56FE\\u7247\\u957F\\u5BBD\\uFF1A\").concat(sdk.viewer.canvas.width * scale, \"*\").concat(sdk.viewer.canvas.height * scale, \"\\u50CF\\u7D20\\n
\\n
\\n
\\n
\\n \\u8F93\\u51FA\\u8FDB\\u5EA6\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n 0%\\n 100%\\n
0%
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \");\n _DialogObject.contentAppChild(contentElm);\n sdk.viewer.scene.screenSpaceCameraController.enableTranslate = false;\n sdk.viewer.scene.screenSpaceCameraController.enableTilt = false;\n sdk.viewer.scene.screenSpaceCameraController.enableLook = false;\n sdk.viewer._element.getElementsByClassName('compass')[0].style.pointerEvents = 'none';\n centerResult = sdk.viewer.camera.pickEllipsoid(new Cesium.Cartesian2(sdk.viewer.canvas.clientWidth / 2, sdk.viewer.canvas.clientHeight / 2));\n if (!centerResult) {\n centerResult = sdk.viewer.camera.pickEllipsoid(new Cesium.Cartesian2(sdk.viewer.canvas.clientWidth / 2, sdk.viewer.canvas.clientHeight / (2 - (90 + sdk.viewer.camera.pitch / (Cesium.Math.PI / 180)) / 110)));\n if (!centerResult) {\n centerResult = sdk.viewer.camera.position;\n }\n }\n height = tools.cartesian3Towgs84(sdk.viewer.camera.position, sdk.viewer).alt;\n centerResult84 = tools.cartesian3Towgs84(centerResult, sdk.viewer);\n sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(centerResult84.lng, centerResult84.lat, height),\n orientation: {\n heading: 0,\n pitch: Cesium.Math.toRadians(-90),\n roll: 0\n },\n duration: 1\n });\n scaleData = [];\n for (i = 1; i <= 10; i++) {\n scaleData.push({\n name: i,\n value: i\n });\n }\n progressInputElm = document.getElementsByClassName('progress-input')[0];\n progressBarElm = document.getElementsByClassName('range-process')[0];\n rangeNodeActive = contentElm.getElementsByClassName('range-node-active')[0];\n rangeNodeActiveText = contentElm.getElementsByClassName('range-node-active-text')[0];\n scaleDataLegpObject = Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_7__[\"legp\"])(_DialogObject._element.content.getElementsByClassName('scale-box')[0], \".scale\");\n if (scaleDataLegpObject) {\n scaleDataLegpObject.legp_search(scaleData);\n scaleDataLegpElm = _DialogObject._element.content.getElementsByClassName('scale')[0].getElementsByTagName('input')[0];\n scale = scaleData[0].value;\n scaleDataLegpObject.legp_searchActive(scaleData[0].value);\n scaleDataLegpElm.value = scaleData[0].value;\n scaleDataLegpElm.addEventListener('input', function () {\n for (var _i = 0; _i < scaleData.length; _i++) {\n if (scaleData[_i].value == scaleDataLegpElm.value) {\n scale = scaleData[_i].value;\n _DialogObject._element.content.getElementsByClassName('output-width')[0].innerHTML = sdk.viewer.canvas.width * scale;\n _DialogObject._element.content.getElementsByClassName('output-height')[0].innerHTML = sdk.viewer.canvas.height * scale;\n break;\n }\n }\n });\n }\n startScreenShot = /*#__PURE__*/function () {\n function startScreenShot() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, startScreenShot);\n this.state = false;\n this.start();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(startScreenShot, [{\n key: \"start\",\n value: function start() {\n if (sdk.viewer.scene.imageryLayers._layers.length <= 1) {\n this.error = '未加载底图!';\n window.ELEMENT && window.ELEMENT.Message({\n message: this.error,\n type: 'warning',\n duration: 1500\n });\n console.warn(this.error);\n return;\n }\n var haveBaseMap = false;\n for (var _i2 = 0; _i2 < sdk.viewer.scene.imageryLayers._layers.length; _i2++) {\n var layer = sdk.viewer.scene.imageryLayers._layers[_i2];\n if (layer && layer.show && (!layer.notes || layer.notes !== 'default-base-map')) {\n haveBaseMap = true;\n }\n }\n if (!haveBaseMap) {\n this.error = '未加载底图!';\n window.ELEMENT && window.ELEMENT.Message({\n message: this.error,\n type: 'warning',\n duration: 1500\n });\n console.warn(this.error);\n return;\n }\n var scaleZoom = 0;\n this.state = true;\n var _this = this;\n computeLayers(1);\n function computeLayers(s) {\n var num = s * 2;\n if (num <= scale) {\n scaleZoom++;\n computeLayers(num);\n }\n }\n scaleZoom = scaleZoom + 1;\n var centerResult = sdk.viewer.camera.pickEllipsoid(new Cesium.Cartesian2(sdk.viewer.canvas.width / 2, sdk.viewer.canvas.height / (2 - (90 + sdk.viewer.camera.pitch / (Cesium.Math.PI / 180)) / 110)));\n if (!centerResult) {\n centerResult = sdk.viewer.camera.position;\n }\n function altitudeToZoom(altitude) {\n var A = 40487.57;\n var B = 0.00007096758;\n var C = 91610.74;\n var D = -40467.74;\n return Math.round(D + (A - D) / (1 + Math.pow(altitude / C, B)));\n }\n var height = tools.cartesian3Towgs84(sdk.viewer.camera.position, sdk.viewer).alt;\n var zoom = altitudeToZoom(height) + 1;\n var rectangle = sdk.viewer.camera.computeViewRectangle();\n // if (height > 9000000) {\n // height = 9000000\n // }\n // let curRectangle = new Cesium.Rectangle(Cesium.Math.toRadians(centerResult84.lng - (height / stepX)), Cesium.Math.toRadians(centerResult84.lat - (height / stepY)), Cesium.Math.toRadians(centerResult84.lng + (height / stepX)), Cesium.Math.toRadians(centerResult84.lat + (height / stepY)))\n // for (let i = 1; i < sdk.viewer.scene.imageryLayers._layers.length; i++) {\n // let layer = sdk.viewer.scene.imageryLayers._layers[i]\n // createCanvas(layer)\n // }\n var total;\n var totalCount = 0;\n var progress = {};\n var index = 0;\n var layerLength = 0;\n var countIndex = 0;\n for (var _i3 = 0; _i3 < sdk.viewer.scene.imageryLayers._layers.length; _i3++) {\n var _layer = sdk.viewer.scene.imageryLayers._layers[_i3];\n if (_layer && _layer.show && _layer.imageryProvider && _layer.imageryProvider.url && Cesium.Rectangle.intersection(rectangle, _layer.imageryProvider.rectangle) && (!_layer.notes || _layer.notes !== 'default-base-map')) {\n layerLength++;\n }\n }\n var itemTotalProgress = 100 / layerLength;\n var flag = false;\n createCanvas(index);\n function createCanvas(i, totalCanvas) {\n var layer = sdk.viewer.scene.imageryLayers._layers[i];\n if (!layer) {\n if (!flag) {\n _this.error = '当前范围内未找到底图数据!';\n window.ELEMENT && window.ELEMENT.Message({\n message: _this.error,\n type: 'warning',\n duration: 1500\n });\n console.warn(_this.error);\n }\n return;\n }\n if (!layer.show || !layer.imageryProvider || !layer.imageryProvider.url || !Cesium.Rectangle.intersection(rectangle, layer.imageryProvider.rectangle) || layer.notes && layer.notes === 'default-base-map') {\n var m = i += 1;\n createCanvas(m, totalCanvas);\n return;\n }\n flag = true;\n countIndex++;\n progress[i] = {\n value: 0\n };\n var itemTotalCount = 0;\n var targetLevel;\n var imageryProvider = layer.imageryProvider;\n if (level || level === 0) {\n targetLevel = level;\n } else {\n targetLevel = zoom + scaleZoom - 1;\n if (targetLevel > imageryProvider.maximumLevel) {\n targetLevel = imageryProvider.maximumLevel;\n }\n if (targetLevel < imageryProvider.minimumLevel) {\n targetLevel = imageryProvider.minimumLevel;\n }\n }\n function readyPromise() {\n var MinTile = imageryProvider.tilingScheme.positionToTileXY(Cesium.Rectangle.northwest(rectangle), targetLevel);\n var MaxTile = imageryProvider.tilingScheme.positionToTileXY(Cesium.Rectangle.southeast(rectangle), targetLevel);\n if (!MinTile || !MaxTile) {\n var error = '超出地球范围!';\n window.ELEMENT && window.ELEMENT.Message({\n message: error,\n type: 'warning',\n duration: 1500\n });\n console.warn(error);\n return;\n }\n var OfXTilesAtLevel = imageryProvider.tilingScheme.getNumberOfXTilesAtLevel(targetLevel);\n var OfYTilesAtLevel = imageryProvider.tilingScheme.getNumberOfYTilesAtLevel(targetLevel);\n var MinTileX = MinTile.x;\n var MinTileY = MinTile.y;\n var MaxTileX = MaxTile.x;\n var MaxTileY = MaxTile.y;\n\n // if (MinTileX > MaxTileX) {\n // MinTileX = MinTileX - OfXTilesAtLevel\n // }\n\n var imgWidth = 256;\n var imgHeight = 256;\n var itemTotal = (MaxTileX - MinTileX + 1) * (MaxTileY - MinTileY + 1);\n // var canvas = new fabric.Canvas();\n var canvas = document.createElement('canvas');\n canvas.width = (MaxTileX - MinTileX + 1) * imgWidth;\n canvas.height = (MaxTileY - MinTileY + 1) * imgHeight;\n var ctx = canvas.getContext('2d');\n var maxRectangle = imageryProvider.tilingScheme.tileXYToRectangle(MaxTileX, MaxTileY, targetLevel);\n var minRectangle = imageryProvider.tilingScheme.tileXYToRectangle(MinTileX, MinTileY, targetLevel);\n var canvasNativeRectangle = new Cesium.Rectangle(minRectangle.west, maxRectangle.south, maxRectangle.east, minRectangle.north);\n // sdk.viewer.entities.add({\n // rectangle: {\n // coordinates: canvasNativeRectangle,\n // material: Cesium.Color.YELLOW.withAlpha(0.2),\n // },\n // });\n // sdk.viewer.entities.add({\n // rectangle: {\n // coordinates: rectangle,\n // material: Cesium.Color.BLACK.withAlpha(0.2),\n // },\n // });\n var nativeRectangle = rectangle;\n var x1 = nativeRectangle.west - canvasNativeRectangle.west;\n var x2 = canvasNativeRectangle.east - nativeRectangle.east;\n var y1 = canvasNativeRectangle.north - nativeRectangle.north;\n var y2 = nativeRectangle.south - canvasNativeRectangle.south;\n var ratioX1 = x1 / (canvasNativeRectangle.east - canvasNativeRectangle.west);\n if (ratioX1 === Infinity) {\n ratioX1 = 0;\n }\n var ratioX2 = x2 / (canvasNativeRectangle.east - canvasNativeRectangle.west);\n if (ratioX2 === Infinity) {\n ratioX2 = 0;\n }\n var ratioY1 = y1 / (canvasNativeRectangle.north - canvasNativeRectangle.south);\n if (ratioY1 === Infinity) {\n ratioY1 = 0;\n }\n var ratioY2 = y2 / (canvasNativeRectangle.north - canvasNativeRectangle.south);\n if (ratioY2 === Infinity) {\n ratioY2 = 0;\n }\n var differenceX1 = canvas.width * ratioX1;\n var differenceY1 = canvas.height * ratioY1;\n var differenceX2 = canvas.width * ratioX2;\n var differenceY2 = canvas.height * ratioY2;\n canvas.width = canvas.width - differenceX1 - differenceX2;\n canvas.height = canvas.height - differenceY1 - differenceY2;\n if (canvas.width == 0) {\n canvas.width = 1;\n }\n if (canvas.height == 0) {\n canvas.height = 1;\n }\n var y = MaxTileY;\n var x = MaxTileX;\n var tileArray = [];\n for (var _y = MaxTileY; _y >= MinTileY; _y--) {\n for (var _x3 = MaxTileX; _x3 >= MinTileX; _x3--) {\n tileArray.push({\n x: _x3,\n y: _y\n });\n }\n }\n var speed = 30;\n var obj = {\n count: 0\n };\n var count = 0;\n var times = -1;\n var obj2 = {\n count: 0\n };\n var count2 = 0;\n Object.defineProperty(obj2, 'count', {\n get: function get() {\n return count2;\n },\n set: function set(newValue) {\n count2 = newValue;\n if (count2 >= speed) {\n traversal10();\n }\n }\n });\n Object.defineProperty(obj, 'count', {\n get: function get() {\n return count;\n },\n set: function set(newValue) {\n count = newValue;\n progress[i].value = itemTotalCount / itemTotal * itemTotalProgress;\n var totalProgress = 0;\n for (var key in progress) {\n totalProgress = totalProgress + progress[key].value;\n }\n progressBarElm.style.width = totalProgress * 0.99 + '%';\n rangeNodeActive.style.left = totalProgress * 0.99 + '%';\n rangeNodeActiveText.innerHTML = Math.floor(totalProgress * 0.99 * 100) / 100 + '%';\n if (count === (MaxTileX - MinTileX + 1) * (MaxTileY - MinTileY + 1)) {\n var _ctx = canvas.getContext('2d');\n var cloneCanvas = canvas.cloneNode(true);\n var cloneCtx = cloneCanvas.getContext('2d');\n var imageData = _ctx.getImageData(0, 0, canvas.width, canvas.height);\n cloneCtx.putImageData(imageData, 0, 0);\n canvas.width = sdk.viewer.canvas.width * scale;\n canvas.height = sdk.viewer.canvas.height * scale;\n _ctx.drawImage(cloneCanvas, 0, 0, canvas.width, canvas.height);\n if (totalCanvas) {\n var _ctx2 = totalCanvas.getContext('2d');\n _ctx2.drawImage(canvas, 0, 0);\n if (countIndex != layerLength) {\n var _m = i += 1;\n createCanvas(_m, totalCanvas);\n return;\n } else {\n var imgBlobData = totalCanvas.toDataURL('image/jpeg', 0.95);\n var tempCanvas = document.createElement('canvas');\n var tempCtx = tempCanvas.getContext('2d');\n tempCanvas.width = totalCanvas.width / scale;\n tempCanvas.height = totalCanvas.height / scale;\n tempCtx.drawImage(totalCanvas, 0, 0, tempCanvas.width, tempCanvas.height);\n Object(_MapPrint__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(sdk, tempCanvas.toDataURL('image/jpeg', 0.95), rectangle, imgBlobData);\n progressBarElm.style.width = '100%';\n rangeNodeActive.style.left = '100%';\n rangeNodeActiveText.innerHTML = '100%';\n _this.state = false;\n }\n } else {\n if (countIndex != layerLength) {\n var _m2 = i += 1;\n createCanvas(_m2, canvas);\n return;\n } else {\n var _imgBlobData = canvas.toDataURL('image/jpeg', 0.95);\n var _tempCanvas = document.createElement('canvas');\n var _tempCtx = _tempCanvas.getContext('2d');\n _tempCanvas.width = canvas.width / scale;\n _tempCanvas.height = canvas.height / scale;\n _tempCtx.drawImage(canvas, 0, 0, _tempCanvas.width, _tempCanvas.height);\n // canvas.width = canvas.width / scale\n // canvas.height = canvas.height / scale\n Object(_MapPrint__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(sdk, _tempCanvas.toDataURL('image/jpeg', 0.95), rectangle, _imgBlobData);\n progressBarElm.style.width = '100%';\n rangeNodeActive.style.left = '100%';\n rangeNodeActiveText.innerHTML = '100%';\n _this.state = false;\n }\n }\n }\n }\n });\n if (imageryProvider._readyError) {\n obj.count = (MaxTileX - MinTileX + 1) * (MaxTileY - MinTileY + 1);\n } else {\n traversal10();\n }\n function traversal10() {\n obj2.count = 0;\n count2 = 0;\n times++;\n for (var _i4 = times * speed; _i4 < (times + 1) * speed; _i4++) {\n if (_i4 >= tileArray.length) {\n return;\n }\n traversal(_i4);\n }\n }\n function traversal(i) {\n if (!_this.state) {\n return;\n }\n try {\n var _x4 = tileArray[i].x;\n if (_x4 < 0) {\n _x4 = _x4 + OfXTilesAtLevel;\n }\n var img = new Image();\n img.setAttribute('crossOrigin', 'anonymous');\n img.onload = /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n ctx.drawImage(img, (tileArray[i].x - MinTileX) * imgWidth - parseFloat(differenceX1.toFixed(0)), (tileArray[i].y - MinTileY) * imgHeight - parseFloat(differenceY1.toFixed(0)), imgWidth, imgHeight);\n itemTotalCount++;\n obj.count++;\n obj2.count++;\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n img.onerror = function () {\n itemTotalCount++;\n obj.count++;\n obj2.count++;\n };\n var url;\n if (imageryProvider.url.indexOf('{x}') !== -1 && imageryProvider.url.indexOf('{y}') !== -1 && imageryProvider.url.indexOf('{z}') !== -1) {\n url = imageryProvider.url.replace(/\\{x\\}/g, _x4).replace(/\\{y\\}/g, tileArray[i].y).replace(/\\{z\\}/g, targetLevel);\n } else if (imageryProvider.url.indexOf('{TileMatrix}') !== -1 && imageryProvider.url.indexOf('{TileRow}') !== -1 && imageryProvider.url.indexOf('{TileCol}') !== -1) {\n url = imageryProvider.url.replace(/\\{TileCol\\}/g, _x4).replace(/\\{TileRow\\}/g, tileArray[i].y).replace(/\\{TileMatrix\\}/g, targetLevel);\n } else if (imageryProvider._layer && imageryProvider._style && imageryProvider._tileMatrixSetID && imageryProvider._format) {\n url = imageryProvider.url + \"&tilematrix=\".concat(targetLevel, \"&layer=\").concat(imageryProvider._layer, \"&style=\").concat(imageryProvider._style, \"&tilerow=\").concat(y, \"&tilecol=\").concat(_x4, \"&tilematrixset=\").concat(imageryProvider._tileMatrixSetID, \"&format=\").concat(imageryProvider._format);\n } else {\n url = imageryProvider.url + \"tile/\".concat(targetLevel, \"/\").concat(tileArray[i].y, \"/\").concat(_x4);\n }\n img.src = url;\n } catch (error) {\n itemTotalCount++;\n obj.count++;\n obj2.count++;\n }\n }\n function traversal2() {\n if (!_this.state) {\n return;\n }\n try {\n var img = new Image();\n img.setAttribute('crossOrigin', 'anonymous');\n img.onload = /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n ctx.drawImage(img, (x - MinTileX) * imgWidth - parseFloat(differenceX1.toFixed(0)), (y - MinTileY) * imgHeight - parseFloat(differenceY1.toFixed(0)), imgWidth, imgHeight);\n itemTotalCount++;\n obj.count++;\n if (!(x > MinTileX)) {\n _context3.next = 7;\n break;\n }\n x--;\n _context3.next = 13;\n break;\n case 7:\n if (!(y > MinTileY)) {\n _context3.next = 12;\n break;\n }\n y--;\n x = MaxTileX;\n _context3.next = 13;\n break;\n case 12:\n return _context3.abrupt(\"return\");\n case 13:\n traversal();\n case 14:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n var url;\n if (imageryProvider.url.indexOf('{x}') !== -1 && imageryProvider.url.indexOf('{y}') !== -1 && imageryProvider.url.indexOf('{z}') !== -1) {\n url = imageryProvider.url.replace(/\\{x\\}/g, x).replace(/\\{y\\}/g, y).replace(/\\{z\\}/g, targetLevel);\n } else if (imageryProvider.url.indexOf('{TileMatrix}') !== -1 && imageryProvider.url.indexOf('{TileRow}') !== -1 && imageryProvider.url.indexOf('{TileCol}') !== -1) {\n url = imageryProvider.url.replace(/\\{TileCol\\}/g, x).replace(/\\{TileRow\\}/g, y).replace(/\\{TileMatrix\\}/g, targetLevel);\n } else if (imageryProvider._layer && imageryProvider._style && imageryProvider._tileMatrixSetID && imageryProvider._format) {\n url = imageryProvider.url + \"&tilematrix=\".concat(targetLevel, \"&layer=\").concat(imageryProvider._layer, \"&style=\").concat(imageryProvider._style, \"&tilerow=\").concat(y, \"&tilecol=\").concat(x, \"&tilematrixset=\").concat(imageryProvider._tileMatrixSetID, \"&format=\").concat(imageryProvider._format);\n } else {\n url = imageryProvider.url + \"tile/\".concat(targetLevel, \"/\").concat(y, \"/\").concat(x);\n }\n img.src = url;\n } catch (error) {\n itemTotalCount++;\n obj.count++;\n if (x >= MinTileX) {\n x--;\n } else {\n if (y >= MinTileY) {\n y--;\n x = MaxTileX;\n } else {\n return;\n }\n }\n traversal();\n }\n }\n }\n if (imageryProvider._readyError) {\n progress[i] = {\n value: itemTotalProgress\n };\n readyPromise();\n return;\n }\n imageryProvider.readyPromise.then(function () {\n readyPromise();\n }).catch(function (e) {\n imageryProvider._readyError = true;\n progress[i] = {\n value: itemTotalProgress\n };\n readyPromise();\n });\n }\n }\n }, {\n key: \"desist\",\n value: function desist() {\n this.state = false;\n }\n }]);\n }();\n case 37:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n return _ScreenShotHD.apply(this, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NjcmVlblNob3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL1NjcmVlblNob3QvaW5kZXguanM/ODQwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9vbHMgZnJvbSAnLi4vLi4vVG9vbHMnXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vT2JqL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL09iai9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IE1hcFByaW50IGZyb20gJy4uL01hcFByaW50JztcclxuaW1wb3J0IHsgb2ZmIGFzIG9mZlNwbGl0U2NyZWVuIH0gZnJvbSBcIi4uL1NwbGl0U2NyZWVuXCI7XHJcbmltcG9ydCB7IG9mZiBhcyBvZmZNdWx0aVZpZXdwb3J0TW9kZSB9IGZyb20gXCIuLi9NdWx0aVZpZXdwb3J0TW9kZVwiO1xyXG5cclxuLy8g55Sf5oiQ5b+r54WnXHJcbmNvbnN0IGNvbnZlcnRUb0ltYWdlID0gKGNvbnRhaW5lciwgb3B0aW9ucyA9IHt9KSA9PiB7XHJcbiAgLy8g6K6+572u5pS+5aSn5YCN5pWwXHJcbiAgY29uc3Qgc2NhbGUgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgLy8g5Lyg5YWl6IqC54K55Y6f5aeL5a696auYXHJcbiAgY29uc3Qgd2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodDtcclxuXHJcbiAgLy8gaHRtbDJjYW52YXPphY3nva7poblcclxuICBjb25zdCBvcHMgPSB7XHJcbiAgICBzY2FsZSwvL+avlOS+i++8jOi2iuWkp+WIhui+qOeOh+i2iumrmO+8jOWbvueJh+i2iuWwj1xyXG4gICAgd2lkdGgsXHJcbiAgICBoZWlnaHQsXHJcbiAgICBhc3luYzogZmFsc2UsXHJcbiAgICB4OiAwLFxyXG4gICAgeTogMCxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYigyMCw0Nyw2NSknLFxyXG4gICAgaW1hZ2VUaW1lb3V0OiAwLFxyXG4gICAgdXNlQ09SUzogdHJ1ZSwvL+WFgeiuuOi3qOWfn1xyXG4gICAgYWxsb3dUYWludDogZmFsc2UsIC8v5YWB6K646Leo5Z+f5pWw5o2u5rGh5p+TJ+iiq+axoeafkyfnmoRjYW52YXNcclxuICAgIHRhaW50dGVzdDogdHJ1ZSxcclxuICAgIGZvcmVpZ25PYmplY3RSZW5kZXJpbmc6IHRydWUsICAgLy/lnKjmtY/op4jlmajmlK/mjIHnmoTmg4XlhrXkuIvkvb/nlKhGb3JlaWduT2JqZWN05qih5byP5riy5p+T5Zu+54mHICAgICAgICAgICAgICAgICBcclxuICAgIC4uLm9wdGlvbnNcclxuICB9O1xyXG5cclxuICByZXR1cm4gaHRtbDJjYW52YXMoY29udGFpbmVyLCBvcHMpLnRoZW4oY2FudmFzID0+IHtcclxuICAgIC8vIOi/lOWbnuWbvueJh+eahOS6jOi/m+WItuaVsOaNrlxyXG4gICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIFNjcmVlblNob3Qoc2RrLCBjZCA9ICgpID0+IHsgfSkge1xyXG4gIC8vIGNvbnN0IGltZ0Jsb2JEYXRhID0gYXdhaXQgY29udmVydFRvSW1hZ2Uoc2RrLnZpZXdlci5jYW52YXMpO1xyXG4gIGNvbnN0IGltZ0Jsb2JEYXRhID0gc2RrLnZpZXdlci5jYW52YXMudG9EYXRhVVJMKClcclxuICBjZCAmJiBjZChpbWdCbG9iRGF0YSlcclxuICAvLyB0cnkge1xyXG4gIC8vICAgY29uc3QgaW1nQmxvYkRhdGEgPSBhd2FpdCBjb252ZXJ0VG9JbWFnZShzZGsudmlld2VyLmNhbnZhcyk7XHJcbiAgLy8gICBsZXQgYXJyID0gaW1nQmxvYkRhdGEuc3BsaXQoJywnKSwgbWltZSA9IGFyclswXS5tYXRjaCgvOiguKj8pOy8pWzFdLFxyXG4gIC8vICAgICBic3RyID0gYXRvYihhcnJbMV0pLCBpID0gYnN0ci5sZW5ndGgsIHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkoaSk7XHJcbiAgLy8gICB3aGlsZSAoaS0tKSB7XHJcbiAgLy8gICAgIHU4YXJyW2ldID0gYnN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGxldCBibG9iID0gbmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pO1xyXG4gIC8vICAgY29uc3Qgb3B0cyA9IHtcclxuICAvLyAgICAgc3VnZ2VzdGVkTmFtZTogJ+aIquWbvi5wbmcnLFxyXG4gIC8vICAgICB0eXBlczogW1xyXG4gIC8vICAgICAgIHtcclxuICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAn5paH5Lu257G75Z6LJyxcclxuICAvLyAgICAgICAgIGFjY2VwdDoge1xyXG4gIC8vICAgICAgICAgICAnaW1hZ2UvcG5nJzogWycucG5nJ10sXHJcbiAgLy8gICAgICAgICAgICdpbWFnZS9qcGcnOiBbJy5qcGcnXVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgXSxcclxuICAvLyAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHJ1ZVxyXG4gIC8vICAgfTtcclxuXHJcbiAgLy8gICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKG9wdHMpOyAvLyDmiZPlvIDkv53lrZjmlofku7blr7nor53moYZcclxuICAvLyAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7IC8vIOWIm+W7uuWPr+WGmeWFpeeahOaWh+S7tuWvueixoVxyXG4gIC8vICAgLy8g5YaZ5YWl6KeG6aKR5YaF5a65XHJcbiAgLy8gICB3cml0YWJsZS53cml0ZShibG9iKTtcclxuICAvLyAgIGF3YWl0IHdyaXRhYmxlLmNsb3NlKCk7XHJcbiAgLy8gICBZSi5HbG9iYWwuU2NyZWVuUmVjb3JkLnNjcmVlblJlY29yZCA9IG51bGxcclxuICAvLyB9IGNhdGNoIChlcnJvcikge1xyXG4gIC8vICAgY29uc29sZS5pbmZvKCfmlofku7bkv53lrZjlpLHotKU6JywgZXJyb3IpO1xyXG4gIC8vIH1cclxufVxyXG5cclxubGV0IF9EaWFsb2dPYmplY3RcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIFNjcmVlblNob3RIRChzZGssIG9wdGlvbnMgPSB7fSwgY2QgPSAoKSA9PiB7IH0pIHtcclxuICBpZiAoIXNkaykge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIG9mZlNwbGl0U2NyZWVuKHNkaylcclxuICBvZmZNdWx0aVZpZXdwb3J0TW9kZShzZGspXHJcbiAgaWYgKF9EaWFsb2dPYmplY3QpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcblxyXG4gIGxldCBlbmFibGVUcmFuc2xhdGUgPSBzZGsudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVUcmFuc2xhdGVcclxuICBsZXQgZW5hYmxlVGlsdCA9IHNkay52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVRpbHRcclxuICBsZXQgZW5hYmxlTG9vayA9IHNkay52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZUxvb2tcclxuXHJcbiAgbGV0IHNjYWxlID0gMVxyXG4gIGxldCBsZXZlbFxyXG5cclxuICBsZXQgcHJvZ3Jlc3NJbnB1dEVsbVxyXG4gIGxldCBwcm9ncmVzc0JhckVsbVxyXG4gIGxldCByYW5nZU5vZGVBY3RpdmVcclxuICBsZXQgcmFuZ2VOb2RlQWN0aXZlVGV4dFxyXG4gIGxldCBzdGFydFNjcmVlblNob3RPYmplY3RcclxuICBsZXQgdG9vbHMgPSBuZXcgVG9vbHMoKTtcclxuICBfRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyhzZGssIHt9LCB7XHJcbiAgICB0aXRsZTogJ+mrmOa4heWHuuWbvicsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgaWYgKHN0YXJ0U2NyZWVuU2hvdE9iamVjdCkge1xyXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hvdE9iamVjdC5kZXNpc3QoKVxyXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hvdE9iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBwcm9ncmVzc0lucHV0RWxtICYmIChwcm9ncmVzc0lucHV0RWxtLnN0eWxlLndpZHRoID0gJzAlJylcclxuICAgICAgcmFuZ2VOb2RlQWN0aXZlICYmIChyYW5nZU5vZGVBY3RpdmUuc3R5bGUubGVmdCA9ICcwJScpXHJcbiAgICAgIHByb2dyZXNzQmFyRWxtICYmIChwcm9ncmVzc0JhckVsbS5zdHlsZS53aWR0aCA9ICcwJScpXHJcbiAgICAgIHJhbmdlTm9kZUFjdGl2ZVRleHQgJiYgKHJhbmdlTm9kZUFjdGl2ZVRleHQuaW5uZXJIVE1MID0gJzAlJylcclxuICAgICAgc3RhcnRTY3JlZW5TaG90T2JqZWN0ID0gbmV3IHN0YXJ0U2NyZWVuU2hvdCgpXHJcbiAgICB9LFxyXG4gICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICBzZGsudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVUcmFuc2xhdGUgPSBlbmFibGVUcmFuc2xhdGU7XHJcbiAgICAgIHNkay52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVRpbHQgPSBlbmFibGVUaWx0O1xyXG4gICAgICBzZGsudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVMb29rID0gZW5hYmxlTG9vaztcclxuICAgICAgc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb21wYXNzJylbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJ1xyXG4gICAgICBpZiAoc3RhcnRTY3JlZW5TaG90T2JqZWN0KSB7XHJcbiAgICAgICAgc3RhcnRTY3JlZW5TaG90T2JqZWN0LmRlc2lzdCgpXHJcbiAgICAgICAgc3RhcnRTY3JlZW5TaG90T2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIF9EaWFsb2dPYmplY3QgPSB1bmRlZmluZWRcclxuICAgIH1cclxuICB9KVxyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBzY3JlZW5TaG90SEQnXHJcbiAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBjb250ZW50RWxtLmlubmVySFRNTCA9IGBcclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dFwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPuW9k+WJjeeql+WPo+mVv+Wuve+8mjxzcGFuIGNsYXNzPVwiaW5wdXQtd2lkdGhcIj4ke3Nkay52aWV3ZXIuY2FudmFzLndpZHRofTwvc3Bhbj4qPHNwYW4gY2xhc3M9XCJpbnB1dC1oZWlnaHRcIj4ke3Nkay52aWV3ZXIuY2FudmFzLmhlaWdodH08L3NwYW4+5YOP57SgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNjYWxlLWJveFwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lm77niYflpKflsI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0IHNjYWxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj7lgI3nqpflj6M8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dFwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPui+k+WHuuWbvueJh+mVv+Wuve+8mjxzcGFuIGNsYXNzPVwib3V0cHV0LXdpZHRoXCI+JHtzZGsudmlld2VyLmNhbnZhcy53aWR0aCAqIHNjYWxlfTwvc3Bhbj4qPHNwYW4gY2xhc3M9XCJvdXRwdXQtaGVpZ2h0XCI+JHtzZGsudmlld2VyLmNhbnZhcy5oZWlnaHQgKiBzY2FsZX08L3NwYW4+5YOP57SgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDsgbWFyZ2luLWJvdHRvbTogMjBweDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui+k+WHuui/m+W6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYW5nZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtYmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLXByb2Nlc3MtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtcHJvY2Vzc1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2Utbm9kZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZS1ub2RlLXRleHRcIj4wJTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZS1ub2RlLXRleHRcIj4xMDAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2Utbm9kZS1hY3RpdmVcIj48c3BhbiBjbGFzcz1cInJhbmdlLW5vZGUtYWN0aXZlLXRleHRcIj4wJTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwcm9ncmVzcy1pbnB1dFwiIHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMC4wMVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIGBcclxuICBfRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICBzZGsudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVUcmFuc2xhdGUgPSBmYWxzZTtcclxuICBzZGsudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVUaWx0ID0gZmFsc2U7XHJcbiAgc2RrLnZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlTG9vayA9IGZhbHNlO1xyXG4gIHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29tcGFzcycpWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSdcclxuXHJcblxyXG4gIGxldCBjZW50ZXJSZXN1bHQgPSBzZGsudmlld2VyLmNhbWVyYS5waWNrRWxsaXBzb2lkKFxyXG4gICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICBzZGsudmlld2VyLmNhbnZhcy5jbGllbnRXaWR0aCAvIDIsXHJcbiAgICAgIHNkay52aWV3ZXIuY2FudmFzLmNsaWVudEhlaWdodCAvIDIsXHJcbiAgICApLFxyXG4gIClcclxuICBpZiAoIWNlbnRlclJlc3VsdCkge1xyXG4gICAgY2VudGVyUmVzdWx0ID0gc2RrLnZpZXdlci5jYW1lcmEucGlja0VsbGlwc29pZChcclxuICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgIHNkay52aWV3ZXIuY2FudmFzLmNsaWVudFdpZHRoIC8gMixcclxuICAgICAgICBzZGsudmlld2VyLmNhbnZhcy5jbGllbnRIZWlnaHQgLyAoMiAtICgoOTAgKyBzZGsudmlld2VyLmNhbWVyYS5waXRjaCAvIChDZXNpdW0uTWF0aC5QSSAvIDE4MCkpIC8gMTEwKSksXHJcbiAgICAgICksXHJcbiAgICApXHJcbiAgICBpZiAoIWNlbnRlclJlc3VsdCkge1xyXG4gICAgICBjZW50ZXJSZXN1bHQgPSBzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvblxyXG4gICAgfVxyXG4gIH1cclxuICBsZXQgaGVpZ2h0ID0gdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb24sIHNkay52aWV3ZXIpLmFsdFxyXG4gIGxldCBjZW50ZXJSZXN1bHQ4NCA9IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KGNlbnRlclJlc3VsdCwgc2RrLnZpZXdlcilcclxuICBzZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudGVyUmVzdWx0ODQubG5nLCBjZW50ZXJSZXN1bHQ4NC5sYXQsIGhlaWdodCksXHJcbiAgICBvcmllbnRhdGlvbjogeyBoZWFkaW5nOiAwLCBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MCksIHJvbGw6IDAgfSxcclxuICAgIGR1cmF0aW9uOiAxLFxyXG4gIH0pXHJcblxyXG5cclxuICBsZXQgc2NhbGVEYXRhID0gW11cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSB7XHJcbiAgICBzY2FsZURhdGEucHVzaCh7XHJcbiAgICAgIG5hbWU6IGksXHJcbiAgICAgIHZhbHVlOiBpXHJcbiAgICB9KVxyXG4gIH1cclxuICBwcm9ncmVzc0lucHV0RWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncHJvZ3Jlc3MtaW5wdXQnKVswXVxyXG4gIHByb2dyZXNzQmFyRWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmFuZ2UtcHJvY2VzcycpWzBdXHJcbiAgcmFuZ2VOb2RlQWN0aXZlID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyYW5nZS1ub2RlLWFjdGl2ZScpWzBdXHJcbiAgcmFuZ2VOb2RlQWN0aXZlVGV4dCA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmFuZ2Utbm9kZS1hY3RpdmUtdGV4dCcpWzBdXHJcbiAgbGV0IHNjYWxlRGF0YUxlZ3BPYmplY3QgPSBsZWdwKF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzY2FsZS1ib3gnKVswXSwgXCIuc2NhbGVcIilcclxuICBpZiAoc2NhbGVEYXRhTGVncE9iamVjdCkge1xyXG4gICAgc2NhbGVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaChzY2FsZURhdGEpXHJcbiAgICBsZXQgc2NhbGVEYXRhTGVncEVsbSA9IF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzY2FsZScpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICBzY2FsZSA9IHNjYWxlRGF0YVswXS52YWx1ZVxyXG4gICAgc2NhbGVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShzY2FsZURhdGFbMF0udmFsdWUpXHJcbiAgICBzY2FsZURhdGFMZWdwRWxtLnZhbHVlID0gc2NhbGVEYXRhWzBdLnZhbHVlXHJcbiAgICBzY2FsZURhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjYWxlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChzY2FsZURhdGFbaV0udmFsdWUgPT0gc2NhbGVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgc2NhbGUgPSBzY2FsZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvdXRwdXQtd2lkdGgnKVswXS5pbm5lckhUTUwgPSBzZGsudmlld2VyLmNhbnZhcy53aWR0aCAqIHNjYWxlXHJcbiAgICAgICAgICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3V0cHV0LWhlaWdodCcpWzBdLmlubmVySFRNTCA9IHNkay52aWV3ZXIuY2FudmFzLmhlaWdodCAqIHNjYWxlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNsYXNzIHN0YXJ0U2NyZWVuU2hvdCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuc3RhcnQoKVxyXG4gICAgfVxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgIGlmIChzZGsudmlld2VyLnNjZW5lLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSAn5pyq5Yqg6L295bqV5Zu+77yBJ1xyXG4gICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS53YXJuKHRoaXMuZXJyb3IpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhhdmVCYXNlTWFwID0gZmFsc2VcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZGsudmlld2VyLnNjZW5lLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBsYXllciA9IHNkay52aWV3ZXIuc2NlbmUuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldO1xyXG4gICAgICAgIGlmIChsYXllciAmJiBsYXllci5zaG93ICYmICghbGF5ZXIubm90ZXMgfHwgbGF5ZXIubm90ZXMgIT09ICdkZWZhdWx0LWJhc2UtbWFwJykpIHtcclxuICAgICAgICAgIGhhdmVCYXNlTWFwID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhdmVCYXNlTWFwKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9ICfmnKrliqDovb3lupXlm77vvIEnXHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLmVycm9yLFxyXG4gICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLndhcm4odGhpcy5lcnJvcilcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgc2NhbGVab29tID0gMDtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHRydWU7XHJcbiAgICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgICAgY29tcHV0ZUxheWVycygxKTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXB1dGVMYXllcnMocykge1xyXG4gICAgICAgIGxldCBudW0gPSBzICogMjtcclxuICAgICAgICBpZiAobnVtIDw9IHNjYWxlKSB7XHJcbiAgICAgICAgICBzY2FsZVpvb20rKztcclxuICAgICAgICAgIGNvbXB1dGVMYXllcnMobnVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc2NhbGVab29tID0gc2NhbGVab29tICsgMTtcclxuICAgICAgbGV0IGNlbnRlclJlc3VsdCA9IHNkay52aWV3ZXIuY2FtZXJhLnBpY2tFbGxpcHNvaWQoXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgc2RrLnZpZXdlci5jYW52YXMud2lkdGggLyAyLFxyXG4gICAgICAgICAgc2RrLnZpZXdlci5jYW52YXMuaGVpZ2h0IC8gKDIgLSAoKDkwICsgc2RrLnZpZXdlci5jYW1lcmEucGl0Y2ggLyAoQ2VzaXVtLk1hdGguUEkgLyAxODApKSAvIDExMCkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWNlbnRlclJlc3VsdCkge1xyXG4gICAgICAgIGNlbnRlclJlc3VsdCA9IHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIGFsdGl0dWRlVG9ab29tKGFsdGl0dWRlKSB7XHJcbiAgICAgICAgbGV0IEEgPSA0MDQ4Ny41NztcclxuICAgICAgICBsZXQgQiA9IDAuMDAwMDcwOTY3NTg7XHJcbiAgICAgICAgbGV0IEMgPSA5MTYxMC43NDtcclxuICAgICAgICBsZXQgRCA9IC00MDQ2Ny43NDtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChEICsgKEEgLSBEKSAvICgxICsgTWF0aC5wb3coYWx0aXR1ZGUgLyBDLCBCKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHQgPSB0b29scy5jYXJ0ZXNpYW4zVG93Z3M4NChzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgc2RrLnZpZXdlcikuYWx0O1xyXG4gICAgICBsZXQgem9vbSA9IGFsdGl0dWRlVG9ab29tKGhlaWdodCkgKyAxO1xyXG5cclxuICAgICAgbGV0IHJlY3RhbmdsZSA9IHNkay52aWV3ZXIuY2FtZXJhLmNvbXB1dGVWaWV3UmVjdGFuZ2xlKCk7XHJcbiAgICAgIC8vIGlmIChoZWlnaHQgPiA5MDAwMDAwKSB7XHJcbiAgICAgIC8vICAgaGVpZ2h0ID0gOTAwMDAwMFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGxldCBjdXJSZWN0YW5nbGUgPSBuZXcgQ2VzaXVtLlJlY3RhbmdsZShDZXNpdW0uTWF0aC50b1JhZGlhbnMoY2VudGVyUmVzdWx0ODQubG5nIC0gKGhlaWdodCAvIHN0ZXBYKSksIENlc2l1bS5NYXRoLnRvUmFkaWFucyhjZW50ZXJSZXN1bHQ4NC5sYXQgLSAoaGVpZ2h0IC8gc3RlcFkpKSwgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGNlbnRlclJlc3VsdDg0LmxuZyArIChoZWlnaHQgLyBzdGVwWCkpLCBDZXNpdW0uTWF0aC50b1JhZGlhbnMoY2VudGVyUmVzdWx0ODQubGF0ICsgKGhlaWdodCAvIHN0ZXBZKSkpXHJcbiAgICAgIC8vIGZvciAobGV0IGkgPSAxOyBpIDwgc2RrLnZpZXdlci5zY2VuZS5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBsZXQgbGF5ZXIgPSBzZGsudmlld2VyLnNjZW5lLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXVxyXG4gICAgICAvLyAgIGNyZWF0ZUNhbnZhcyhsYXllcilcclxuICAgICAgLy8gfVxyXG4gICAgICBsZXQgdG90YWw7XHJcbiAgICAgIGxldCB0b3RhbENvdW50ID0gMDtcclxuICAgICAgbGV0IHByb2dyZXNzID0ge307XHJcbiAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgIGxldCBsYXllckxlbmd0aCA9IDBcclxuICAgICAgbGV0IGNvdW50SW5kZXggPSAwXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2RrLnZpZXdlci5zY2VuZS5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgbGF5ZXIgPSBzZGsudmlld2VyLnNjZW5lLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXTtcclxuICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIuc2hvdyAmJiBsYXllci5pbWFnZXJ5UHJvdmlkZXIgJiYgbGF5ZXIuaW1hZ2VyeVByb3ZpZGVyLnVybCAmJiBDZXNpdW0uUmVjdGFuZ2xlLmludGVyc2VjdGlvbihyZWN0YW5nbGUsIGxheWVyLmltYWdlcnlQcm92aWRlci5yZWN0YW5nbGUpICYmICghbGF5ZXIubm90ZXMgfHwgbGF5ZXIubm90ZXMgIT09ICdkZWZhdWx0LWJhc2UtbWFwJykpIHtcclxuICAgICAgICAgIGxheWVyTGVuZ3RoKytcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGl0ZW1Ub3RhbFByb2dyZXNzID0gMTAwIC8gbGF5ZXJMZW5ndGhcclxuICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICBjcmVhdGVDYW52YXMoaW5kZXgpO1xyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDYW52YXMoaSwgdG90YWxDYW52YXMpIHtcclxuICAgICAgICBsZXQgbGF5ZXIgPSBzZGsudmlld2VyLnNjZW5lLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXTtcclxuICAgICAgICBpZiAoIWxheWVyKSB7XHJcbiAgICAgICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICAgICAgX3RoaXMuZXJyb3IgPSAn5b2T5YmN6IyD5Zu05YaF5pyq5om+5Yiw5bqV5Zu+5pWw5o2u77yBJ1xyXG4gICAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgICBtZXNzYWdlOiBfdGhpcy5lcnJvcixcclxuICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihfdGhpcy5lcnJvcilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxheWVyLnNob3cgfHwgIWxheWVyLmltYWdlcnlQcm92aWRlciB8fCAhbGF5ZXIuaW1hZ2VyeVByb3ZpZGVyLnVybCB8fCAhQ2VzaXVtLlJlY3RhbmdsZS5pbnRlcnNlY3Rpb24ocmVjdGFuZ2xlLCBsYXllci5pbWFnZXJ5UHJvdmlkZXIucmVjdGFuZ2xlKSB8fCAobGF5ZXIubm90ZXMgJiYgbGF5ZXIubm90ZXMgPT09ICdkZWZhdWx0LWJhc2UtbWFwJykpIHtcclxuICAgICAgICAgIGxldCBtID0gaSArPSAxO1xyXG4gICAgICAgICAgY3JlYXRlQ2FudmFzKG0sIHRvdGFsQ2FudmFzKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICBjb3VudEluZGV4KytcclxuICAgICAgICBwcm9ncmVzc1tpXSA9IHtcclxuICAgICAgICAgIHZhbHVlOiAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpdGVtVG90YWxDb3VudCA9IDA7XHJcbiAgICAgICAgbGV0IHRhcmdldExldmVsXHJcbiAgICAgICAgbGV0IGltYWdlcnlQcm92aWRlciA9IGxheWVyLmltYWdlcnlQcm92aWRlcjtcclxuICAgICAgICBpZiAobGV2ZWwgfHwgbGV2ZWwgPT09IDApIHtcclxuICAgICAgICAgIHRhcmdldExldmVsID0gbGV2ZWxcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXRMZXZlbCA9ICh6b29tICsgc2NhbGVab29tIC0gMSlcclxuICAgICAgICAgIGlmICh0YXJnZXRMZXZlbCA+IGltYWdlcnlQcm92aWRlci5tYXhpbXVtTGV2ZWwpIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGV2ZWwgPSBpbWFnZXJ5UHJvdmlkZXIubWF4aW11bUxldmVsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGFyZ2V0TGV2ZWwgPCBpbWFnZXJ5UHJvdmlkZXIubWluaW11bUxldmVsKSB7XHJcbiAgICAgICAgICAgIHRhcmdldExldmVsID0gaW1hZ2VyeVByb3ZpZGVyLm1pbmltdW1MZXZlbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiByZWFkeVByb21pc2UoKSB7XHJcbiAgICAgICAgICBsZXQgTWluVGlsZSA9IGltYWdlcnlQcm92aWRlci50aWxpbmdTY2hlbWUucG9zaXRpb25Ub1RpbGVYWShcclxuICAgICAgICAgICAgQ2VzaXVtLlJlY3RhbmdsZS5ub3J0aHdlc3QocmVjdGFuZ2xlKSxcclxuICAgICAgICAgICAgdGFyZ2V0TGV2ZWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgTWF4VGlsZSA9IGltYWdlcnlQcm92aWRlci50aWxpbmdTY2hlbWUucG9zaXRpb25Ub1RpbGVYWShcclxuICAgICAgICAgICAgQ2VzaXVtLlJlY3RhbmdsZS5zb3V0aGVhc3QocmVjdGFuZ2xlKSxcclxuICAgICAgICAgICAgdGFyZ2V0TGV2ZWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIU1pblRpbGUgfHwgIU1heFRpbGUpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gJ+i2heWHuuWcsOeQg+iMg+WbtO+8gSdcclxuICAgICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IsXHJcbiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IE9mWFRpbGVzQXRMZXZlbCA9IGltYWdlcnlQcm92aWRlci50aWxpbmdTY2hlbWUuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKHRhcmdldExldmVsKVxyXG4gICAgICAgICAgbGV0IE9mWVRpbGVzQXRMZXZlbCA9IGltYWdlcnlQcm92aWRlci50aWxpbmdTY2hlbWUuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKHRhcmdldExldmVsKVxyXG4gICAgICAgICAgbGV0IE1pblRpbGVYID0gTWluVGlsZS54O1xyXG4gICAgICAgICAgbGV0IE1pblRpbGVZID0gTWluVGlsZS55O1xyXG4gICAgICAgICAgbGV0IE1heFRpbGVYID0gTWF4VGlsZS54O1xyXG4gICAgICAgICAgbGV0IE1heFRpbGVZID0gTWF4VGlsZS55O1xyXG5cclxuICAgICAgICAgIC8vIGlmIChNaW5UaWxlWCA+IE1heFRpbGVYKSB7XHJcbiAgICAgICAgICAvLyAgIE1pblRpbGVYID0gTWluVGlsZVggLSBPZlhUaWxlc0F0TGV2ZWxcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICBsZXQgaW1nV2lkdGggPSAyNTY7XHJcbiAgICAgICAgICBsZXQgaW1nSGVpZ2h0ID0gMjU2O1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtVG90YWwgPSAoTWF4VGlsZVggLSBNaW5UaWxlWCArIDEpICogKE1heFRpbGVZIC0gTWluVGlsZVkgKyAxKTtcclxuICAgICAgICAgIC8vIHZhciBjYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcygpO1xyXG4gICAgICAgICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gKE1heFRpbGVYIC0gTWluVGlsZVggKyAxKSAqIGltZ1dpZHRoO1xyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IChNYXhUaWxlWSAtIE1pblRpbGVZICsgMSkgKiBpbWdIZWlnaHQ7XHJcbiAgICAgICAgICBsZXQgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICBsZXQgbWF4UmVjdGFuZ2xlID0gaW1hZ2VyeVByb3ZpZGVyLnRpbGluZ1NjaGVtZS50aWxlWFlUb1JlY3RhbmdsZShNYXhUaWxlWCwgTWF4VGlsZVksIHRhcmdldExldmVsKTtcclxuICAgICAgICAgIGxldCBtaW5SZWN0YW5nbGUgPSBpbWFnZXJ5UHJvdmlkZXIudGlsaW5nU2NoZW1lLnRpbGVYWVRvUmVjdGFuZ2xlKE1pblRpbGVYLCBNaW5UaWxlWSwgdGFyZ2V0TGV2ZWwpO1xyXG4gICAgICAgICAgbGV0IGNhbnZhc05hdGl2ZVJlY3RhbmdsZSA9IG5ldyBDZXNpdW0uUmVjdGFuZ2xlKG1pblJlY3RhbmdsZS53ZXN0LCBtYXhSZWN0YW5nbGUuc291dGgsIG1heFJlY3RhbmdsZS5lYXN0LCBtaW5SZWN0YW5nbGUubm9ydGgpO1xyXG4gICAgICAgICAgLy8gc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgLy8gICByZWN0YW5nbGU6IHtcclxuICAgICAgICAgIC8vICAgICBjb29yZGluYXRlczogY2FudmFzTmF0aXZlUmVjdGFuZ2xlLFxyXG4gICAgICAgICAgLy8gICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuWUVMTE9XLndpdGhBbHBoYSgwLjIpLFxyXG4gICAgICAgICAgLy8gICB9LFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBzZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAvLyAgIHJlY3RhbmdsZToge1xyXG4gICAgICAgICAgLy8gICAgIGNvb3JkaW5hdGVzOiByZWN0YW5nbGUsXHJcbiAgICAgICAgICAvLyAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5CTEFDSy53aXRoQWxwaGEoMC4yKSxcclxuICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgbGV0IG5hdGl2ZVJlY3RhbmdsZSA9IHJlY3RhbmdsZTtcclxuICAgICAgICAgIGxldCB4MSA9IG5hdGl2ZVJlY3RhbmdsZS53ZXN0IC0gY2FudmFzTmF0aXZlUmVjdGFuZ2xlLndlc3Q7XHJcbiAgICAgICAgICBsZXQgeDIgPSBjYW52YXNOYXRpdmVSZWN0YW5nbGUuZWFzdCAtIG5hdGl2ZVJlY3RhbmdsZS5lYXN0O1xyXG4gICAgICAgICAgbGV0IHkxID0gY2FudmFzTmF0aXZlUmVjdGFuZ2xlLm5vcnRoIC0gbmF0aXZlUmVjdGFuZ2xlLm5vcnRoO1xyXG4gICAgICAgICAgbGV0IHkyID0gbmF0aXZlUmVjdGFuZ2xlLnNvdXRoIC0gY2FudmFzTmF0aXZlUmVjdGFuZ2xlLnNvdXRoO1xyXG5cclxuICAgICAgICAgIGxldCByYXRpb1gxID0geDEgLyAoY2FudmFzTmF0aXZlUmVjdGFuZ2xlLmVhc3QgLSBjYW52YXNOYXRpdmVSZWN0YW5nbGUud2VzdCk7XHJcbiAgICAgICAgICBpZiAocmF0aW9YMSA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgcmF0aW9YMSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcmF0aW9YMiA9IHgyIC8gKGNhbnZhc05hdGl2ZVJlY3RhbmdsZS5lYXN0IC0gY2FudmFzTmF0aXZlUmVjdGFuZ2xlLndlc3QpO1xyXG4gICAgICAgICAgaWYgKHJhdGlvWDIgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHJhdGlvWDIgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHJhdGlvWTEgPSB5MSAvIChjYW52YXNOYXRpdmVSZWN0YW5nbGUubm9ydGggLSBjYW52YXNOYXRpdmVSZWN0YW5nbGUuc291dGgpO1xyXG4gICAgICAgICAgaWYgKHJhdGlvWTEgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHJhdGlvWTEgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHJhdGlvWTIgPSB5MiAvIChjYW52YXNOYXRpdmVSZWN0YW5nbGUubm9ydGggLSBjYW52YXNOYXRpdmVSZWN0YW5nbGUuc291dGgpO1xyXG4gICAgICAgICAgaWYgKHJhdGlvWTIgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHJhdGlvWTIgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRpZmZlcmVuY2VYMSA9IGNhbnZhcy53aWR0aCAqIHJhdGlvWDE7XHJcbiAgICAgICAgICBsZXQgZGlmZmVyZW5jZVkxID0gY2FudmFzLmhlaWdodCAqIHJhdGlvWTE7XHJcbiAgICAgICAgICBsZXQgZGlmZmVyZW5jZVgyID0gY2FudmFzLndpZHRoICogcmF0aW9YMjtcclxuICAgICAgICAgIGxldCBkaWZmZXJlbmNlWTIgPSBjYW52YXMuaGVpZ2h0ICogcmF0aW9ZMjtcclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy53aWR0aCAtIGRpZmZlcmVuY2VYMSAtIGRpZmZlcmVuY2VYMjtcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0IC0gZGlmZmVyZW5jZVkxIC0gZGlmZmVyZW5jZVkyO1xyXG4gICAgICAgICAgaWYgKGNhbnZhcy53aWR0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IDFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ID09IDApIHtcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IDFcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgeSA9IE1heFRpbGVZO1xyXG4gICAgICAgICAgbGV0IHggPSBNYXhUaWxlWDtcclxuXHJcbiAgICAgICAgICBsZXQgdGlsZUFycmF5ID0gW11cclxuICAgICAgICAgIGZvciAobGV0IHkgPSBNYXhUaWxlWTsgeSA+PSBNaW5UaWxlWTsgeS0tKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSBNYXhUaWxlWDsgeCA+PSBNaW5UaWxlWDsgeC0tKSB7XHJcbiAgICAgICAgICAgICAgdGlsZUFycmF5LnB1c2goeyB4LCB5IH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgc3BlZWQgPSAzMFxyXG5cclxuICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgIGNvdW50OiAwXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgICBsZXQgdGltZXMgPSAtMVxyXG4gICAgICAgICAgbGV0IG9iajIgPSB7XHJcbiAgICAgICAgICAgIGNvdW50OiAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY291bnQyID0gMFxyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iajIsICdjb3VudCcsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvdW50MjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICBjb3VudDIgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICBpZiAoY291bnQyID49IHNwZWVkKSB7XHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzYWwxMCgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdjb3VudCcsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNvdW50ID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NbaV0udmFsdWUgPSBpdGVtVG90YWxDb3VudCAvIGl0ZW1Ub3RhbCAqIGl0ZW1Ub3RhbFByb2dyZXNzO1xyXG4gICAgICAgICAgICAgIGxldCB0b3RhbFByb2dyZXNzID0gMFxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0b3RhbFByb2dyZXNzID0gdG90YWxQcm9ncmVzcyArIHByb2dyZXNzW2tleV0udmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXJFbG0uc3R5bGUud2lkdGggPSB0b3RhbFByb2dyZXNzICogMC45OSArICclJztcclxuICAgICAgICAgICAgICByYW5nZU5vZGVBY3RpdmUuc3R5bGUubGVmdCA9IHRvdGFsUHJvZ3Jlc3MgKiAwLjk5ICsgJyUnO1xyXG4gICAgICAgICAgICAgIHJhbmdlTm9kZUFjdGl2ZVRleHQuaW5uZXJIVE1MID0gTWF0aC5mbG9vcih0b3RhbFByb2dyZXNzICogMC45OSAqIDEwMCkgLyAxMDAgKyAnJSc7XHJcbiAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAoTWF4VGlsZVggLSBNaW5UaWxlWCArIDEpICogKE1heFRpbGVZIC0gTWluVGlsZVkgKyAxKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsb25lQ2FudmFzID0gY2FudmFzLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIGxldCBjbG9uZUN0eCA9IGNsb25lQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY2xvbmVDdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBzZGsudmlld2VyLmNhbnZhcy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHNkay52aWV3ZXIuY2FudmFzLmhlaWdodCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShjbG9uZUNhbnZhcywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmICh0b3RhbENhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY3R4ID0gdG90YWxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShjYW52YXMsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY291bnRJbmRleCAhPSBsYXllckxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtID0gaSArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbnZhcyhtLCB0b3RhbENhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWdCbG9iRGF0YSA9IHRvdGFsQ2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOTUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wQ3R4ID0gdGVtcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDYW52YXMud2lkdGggPSB0b3RhbENhbnZhcy53aWR0aCAvIHNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENhbnZhcy5oZWlnaHQgPSB0b3RhbENhbnZhcy5oZWlnaHQgLyBzY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDdHguZHJhd0ltYWdlKHRvdGFsQ2FudmFzLCAwLCAwLCB0ZW1wQ2FudmFzLndpZHRoLCB0ZW1wQ2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgTWFwUHJpbnQoc2RrLCB0ZW1wQ2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOTUpLCByZWN0YW5nbGUsIGltZ0Jsb2JEYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyRWxtLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlTm9kZUFjdGl2ZS5zdHlsZS5sZWZ0ID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlTm9kZUFjdGl2ZVRleHQuaW5uZXJIVE1MID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnN0YXRlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoY291bnRJbmRleCAhPSBsYXllckxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtID0gaSArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbnZhcyhtLCBjYW52YXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1nQmxvYkRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45NSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBDdHggPSB0ZW1wQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENhbnZhcy53aWR0aCA9IGNhbnZhcy53aWR0aCAvIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDYW52YXMuaGVpZ2h0ID0gY2FudmFzLmhlaWdodCAvIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDdHguZHJhd0ltYWdlKGNhbnZhcywgMCwgMCwgdGVtcENhbnZhcy53aWR0aCwgdGVtcENhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbnZhcy53aWR0aCA9IGNhbnZhcy53aWR0aCAvIHNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBzY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgIE1hcFByaW50KHNkaywgdGVtcENhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjk1KSwgcmVjdGFuZ2xlLCBpbWdCbG9iRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0JhckVsbS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgICAgICByYW5nZU5vZGVBY3RpdmUuc3R5bGUubGVmdCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgICAgICByYW5nZU5vZGVBY3RpdmVUZXh0LmlubmVySFRNTCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGltYWdlcnlQcm92aWRlci5fcmVhZHlFcnJvcikge1xyXG4gICAgICAgICAgICBvYmouY291bnQgPSAoTWF4VGlsZVggLSBNaW5UaWxlWCArIDEpICogKE1heFRpbGVZIC0gTWluVGlsZVkgKyAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNhbDEwKClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzYWwxMCgpIHtcclxuICAgICAgICAgICAgb2JqMi5jb3VudCA9IDBcclxuICAgICAgICAgICAgY291bnQyID0gMFxyXG4gICAgICAgICAgICB0aW1lcysrXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aW1lcyAqIHNwZWVkOyBpIDwgKHRpbWVzICsgMSkgKiBzcGVlZDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGkgPj0gdGlsZUFycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRyYXZlcnNhbChpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2FsKGkpIHtcclxuICAgICAgICAgICAgaWYgKCFfdGhpcy5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgbGV0IHggPSB0aWxlQXJyYXlbaV0ueFxyXG4gICAgICAgICAgICAgIGlmICh4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgeCA9IHggKyBPZlhUaWxlc0F0TGV2ZWxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAoKHRpbGVBcnJheVtpXS54IC0gTWluVGlsZVgpICogaW1nV2lkdGgpIC0gcGFyc2VGbG9hdChkaWZmZXJlbmNlWDEudG9GaXhlZCgwKSksICgodGlsZUFycmF5W2ldLnkgLSBNaW5UaWxlWSkgKiBpbWdIZWlnaHQpIC0gcGFyc2VGbG9hdChkaWZmZXJlbmNlWTEudG9GaXhlZCgwKSksIGltZ1dpZHRoLCBpbWdIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRvdGFsQ291bnQrKztcclxuICAgICAgICAgICAgICAgIG9iai5jb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgb2JqMi5jb3VudCsrO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVG90YWxDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgb2JqLmNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBvYmoyLmNvdW50Kys7XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHVybDtcclxuICAgICAgICAgICAgICBpZiAoaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7eH0nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7eX0nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7en0nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IGltYWdlcnlQcm92aWRlci51cmwucmVwbGFjZSgvXFx7eFxcfS9nLCB4KS5yZXBsYWNlKC9cXHt5XFx9L2csIHRpbGVBcnJheVtpXS55KS5yZXBsYWNlKC9cXHt6XFx9L2csIHRhcmdldExldmVsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZU1hdHJpeH0nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZVJvd30nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZUNvbH0nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IGltYWdlcnlQcm92aWRlci51cmwucmVwbGFjZSgvXFx7VGlsZUNvbFxcfS9nLCB4KS5yZXBsYWNlKC9cXHtUaWxlUm93XFx9L2csIHRpbGVBcnJheVtpXS55KS5yZXBsYWNlKC9cXHtUaWxlTWF0cml4XFx9L2csIHRhcmdldExldmVsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VyeVByb3ZpZGVyLl9sYXllciAmJiBpbWFnZXJ5UHJvdmlkZXIuX3N0eWxlICYmIGltYWdlcnlQcm92aWRlci5fdGlsZU1hdHJpeFNldElEICYmIGltYWdlcnlQcm92aWRlci5fZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBpbWFnZXJ5UHJvdmlkZXIudXJsICsgYCZ0aWxlbWF0cml4PSR7dGFyZ2V0TGV2ZWx9JmxheWVyPSR7aW1hZ2VyeVByb3ZpZGVyLl9sYXllcn0mc3R5bGU9JHtpbWFnZXJ5UHJvdmlkZXIuX3N0eWxlfSZ0aWxlcm93PSR7eX0mdGlsZWNvbD0ke3h9JnRpbGVtYXRyaXhzZXQ9JHtpbWFnZXJ5UHJvdmlkZXIuX3RpbGVNYXRyaXhTZXRJRH0mZm9ybWF0PSR7aW1hZ2VyeVByb3ZpZGVyLl9mb3JtYXR9YDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBpbWFnZXJ5UHJvdmlkZXIudXJsICsgYHRpbGUvJHt0YXJnZXRMZXZlbH0vJHt0aWxlQXJyYXlbaV0ueX0vJHt4fWA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGltZy5zcmMgPSB1cmw7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgaXRlbVRvdGFsQ291bnQrKztcclxuICAgICAgICAgICAgICBvYmouY291bnQrKztcclxuICAgICAgICAgICAgICBvYmoyLmNvdW50Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzYWwyKCkge1xyXG4gICAgICAgICAgICBpZiAoIV90aGlzLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKTtcclxuICAgICAgICAgICAgICBpbWcub25sb2FkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsICgoeCAtIE1pblRpbGVYKSAqIGltZ1dpZHRoKSAtIHBhcnNlRmxvYXQoZGlmZmVyZW5jZVgxLnRvRml4ZWQoMCkpLCAoKHkgLSBNaW5UaWxlWSkgKiBpbWdIZWlnaHQpIC0gcGFyc2VGbG9hdChkaWZmZXJlbmNlWTEudG9GaXhlZCgwKSksIGltZ1dpZHRoLCBpbWdIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRvdGFsQ291bnQrKztcclxuICAgICAgICAgICAgICAgIG9iai5jb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4ID4gTWluVGlsZVgpIHtcclxuICAgICAgICAgICAgICAgICAgeC0tXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHkgPiBNaW5UaWxlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHktLVxyXG4gICAgICAgICAgICAgICAgICAgIHggPSBNYXhUaWxlWFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzYWwoKVxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIGxldCB1cmw7XHJcbiAgICAgICAgICAgICAgaWYgKGltYWdlcnlQcm92aWRlci51cmwuaW5kZXhPZigne3h9JykgIT09IC0xICYmIGltYWdlcnlQcm92aWRlci51cmwuaW5kZXhPZigne3l9JykgIT09IC0xICYmIGltYWdlcnlQcm92aWRlci51cmwuaW5kZXhPZigne3p9JykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBpbWFnZXJ5UHJvdmlkZXIudXJsLnJlcGxhY2UoL1xce3hcXH0vZywgeCkucmVwbGFjZSgvXFx7eVxcfS9nLCB5KS5yZXBsYWNlKC9cXHt6XFx9L2csIHRhcmdldExldmVsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZU1hdHJpeH0nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZVJvd30nKSAhPT0gLTEgJiYgaW1hZ2VyeVByb3ZpZGVyLnVybC5pbmRleE9mKCd7VGlsZUNvbH0nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IGltYWdlcnlQcm92aWRlci51cmwucmVwbGFjZSgvXFx7VGlsZUNvbFxcfS9nLCB4KS5yZXBsYWNlKC9cXHtUaWxlUm93XFx9L2csIHkpLnJlcGxhY2UoL1xce1RpbGVNYXRyaXhcXH0vZywgdGFyZ2V0TGV2ZWwpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChpbWFnZXJ5UHJvdmlkZXIuX2xheWVyICYmIGltYWdlcnlQcm92aWRlci5fc3R5bGUgJiYgaW1hZ2VyeVByb3ZpZGVyLl90aWxlTWF0cml4U2V0SUQgJiYgaW1hZ2VyeVByb3ZpZGVyLl9mb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IGltYWdlcnlQcm92aWRlci51cmwgKyBgJnRpbGVtYXRyaXg9JHt0YXJnZXRMZXZlbH0mbGF5ZXI9JHtpbWFnZXJ5UHJvdmlkZXIuX2xheWVyfSZzdHlsZT0ke2ltYWdlcnlQcm92aWRlci5fc3R5bGV9JnRpbGVyb3c9JHt5fSZ0aWxlY29sPSR7eH0mdGlsZW1hdHJpeHNldD0ke2ltYWdlcnlQcm92aWRlci5fdGlsZU1hdHJpeFNldElEfSZmb3JtYXQ9JHtpbWFnZXJ5UHJvdmlkZXIuX2Zvcm1hdH1gO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IGltYWdlcnlQcm92aWRlci51cmwgKyBgdGlsZS8ke3RhcmdldExldmVsfS8ke3l9LyR7eH1gO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbWcuc3JjID0gdXJsO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGl0ZW1Ub3RhbENvdW50Kys7XHJcbiAgICAgICAgICAgICAgb2JqLmNvdW50Kys7XHJcbiAgICAgICAgICAgICAgaWYgKHggPj0gTWluVGlsZVgpIHtcclxuICAgICAgICAgICAgICAgIHgtLVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh5ID49IE1pblRpbGVZKSB7XHJcbiAgICAgICAgICAgICAgICAgIHktLVxyXG4gICAgICAgICAgICAgICAgICB4ID0gTWF4VGlsZVhcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdHJhdmVyc2FsKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbWFnZXJ5UHJvdmlkZXIuX3JlYWR5RXJyb3IpIHtcclxuICAgICAgICAgIHByb2dyZXNzW2ldID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogaXRlbVRvdGFsUHJvZ3Jlc3NcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlYWR5UHJvbWlzZSgpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaW1hZ2VyeVByb3ZpZGVyLnJlYWR5UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHJlYWR5UHJvbWlzZSgpXHJcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgIGltYWdlcnlQcm92aWRlci5fcmVhZHlFcnJvciA9IHRydWVcclxuICAgICAgICAgIHByb2dyZXNzW2ldID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogaXRlbVRvdGFsUHJvZ3Jlc3NcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlYWR5UHJvbWlzZSgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRlc2lzdCgpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgU2NyZWVuU2hvdCwgU2NyZWVuU2hvdEhEIH0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4QkE7QUF5QkE7QUFDQTtBQUNBO0FBeUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/ScreenShot/index.js\n"); /***/ }), /***/ "./src/Global/SheetIndex/index.js": /*!****************************************!*\ !*** ./src/Global/SheetIndex/index.js ***! \****************************************/ /*! exports provided: SheetIndexStatusSwitch, changeScale, getStatus */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SheetIndexStatusSwitch\", function() { return SheetIndexStatusSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"changeScale\", function() { return changeScale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getStatus\", function() { return getStatus; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _MultiViewportMode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../global */ \"./src/Global/global.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n\n\n\n\n\n\nvar tools;\nvar state = false;\nvar scale = '1:100万';\nfunction SheetIndexStatusSwitch(sdk) {\n var s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!sdk) {\n return;\n }\n if (!tools) {\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n }\n state = s ? true : false;\n if (state) {\n changeScale(sdk, scale);\n } else {\n close(sdk);\n }\n var sdk2D = Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_2__[\"get2DView\"])();\n if (sdk2D) {\n if (state) {\n changeScale(sdk, scale);\n } else {\n close(sdk2D);\n }\n }\n var sdkD = Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_3__[\"getSdk\"])().sdkD;\n if (sdkD && sdk !== sdkD) {\n SheetIndexStatusSwitch(sdkD, s);\n }\n\n // return new Promise(async (resolve, reject) => {\n // setTimeout(() => {\n // resolve()\n // }, 1000);\n // })\n}\nfunction changeScale(sdk, v) {\n scale = v;\n if (state) {\n open(sdk);\n }\n var sdk2D = Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_2__[\"get2DView\"])();\n if (sdk2D) {\n if (state) {\n open(sdk2D);\n }\n }\n return new Promise(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(resolve, reject) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n setTimeout(function () {\n resolve();\n }, 1000);\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n}\nfunction getStatus() {\n return state;\n}\nfunction open(sdk) {\n close(sdk);\n var cartographic = sdk.viewer.camera.positionCartographic;\n var options = {\n position: {\n lng: Cesium.Math.toDegrees(cartographic.longitude),\n lat: Cesium.Math.toDegrees(cartographic.latitude),\n alt: cartographic.height\n }\n };\n var viewer = sdk.viewer;\n switch (scale) {\n case '1:100万':\n options.position.alt = 16000000;\n break;\n case '1:50万':\n options.position.alt = 5000000;\n break;\n case '1:25万':\n options.position.alt = 2300000;\n break;\n case '1:10万':\n options.position.alt = 680000;\n break;\n case '1:5万':\n options.position.alt = 385000;\n break;\n case '1:2.5万':\n options.position.alt = 180000;\n break;\n case '1:1万':\n options.position.alt = 90000;\n break;\n case '1:5000':\n options.position.alt = 46000;\n break;\n }\n var gridPrimitives;\n var labelCollection;\n for (var i = 0; i < viewer.scene.primitives._primitives.length; i++) {\n if (viewer.scene.primitives._primitives[i].name === 'SheetIndexGridPrimitives') {\n gridPrimitives = viewer.scene.primitives._primitives[i];\n for (var j = 0; j < gridPrimitives._primitives.length; j++) {\n if (gridPrimitives._primitives[j].name === 'SheetIndexLabelCollection') {\n labelCollection = gridPrimitives._primitives[j];\n break;\n }\n }\n break;\n }\n }\n if (!gridPrimitives) {\n gridPrimitives = new Cesium.PrimitiveCollection();\n gridPrimitives.name = 'SheetIndexGridPrimitives';\n viewer.scene.primitives.add(gridPrimitives);\n }\n if (!labelCollection) {\n labelCollection = new Cesium.LabelCollection();\n labelCollection.name = 'SheetIndexLabelCollection';\n }\n var stationaryFrames = 0;\n var maxRectangle = null;\n gridPrimitives.postRenderEvent = function () {\n var height = sdk.viewer.camera.positionCartographic.height;\n switch (scale) {\n case '1:100万':\n options.position.alt = 16000000;\n break;\n case '1:50万':\n options.position.alt = 5000000;\n break;\n case '1:25万':\n options.position.alt = 2300000;\n break;\n case '1:10万':\n options.position.alt = 680000;\n break;\n case '1:5万':\n options.position.alt = 385000;\n break;\n case '1:2.5万':\n options.position.alt = 180000;\n break;\n case '1:1万':\n options.position.alt = 90000;\n break;\n case '1:5000':\n options.position.alt = 46000;\n break;\n }\n if (height > options.position.alt * 5) {\n maxRectangle = null;\n gridPrimitives.removeAll();\n return;\n }\n var isChanged = false;\n var rectangle = getViewExtend();\n var minLng = Cesium.Math.toDegrees(rectangle.west);\n var minLat = Cesium.Math.toDegrees(rectangle.south);\n var maxLng = Cesium.Math.toDegrees(rectangle.east);\n var maxLat = Cesium.Math.toDegrees(rectangle.north);\n if (minLng > maxLng) {\n maxLng += 360;\n }\n rectangle = {\n minLng: minLng,\n minLat: minLat,\n maxLng: maxLng,\n maxLat: maxLat\n };\n if (maxRectangle) {\n if ((maxRectangle.minLng > rectangle.minLng || maxRectangle.minLat > rectangle.minLat || maxRectangle.maxLng < rectangle.maxLng || maxRectangle.maxLat < rectangle.maxLat) && Cesium.Math.toDegrees(sdk.viewer.camera.pitch) < 0) {\n isChanged = true;\n }\n } else {\n countMapSheet(scale);\n }\n if (isChanged) {\n stationaryFrames++;\n // 确认相机已经静止足够多帧\n if (stationaryFrames >= 50) {\n countMapSheet(scale);\n isChanged = false;\n }\n } else {\n stationaryFrames = 0;\n }\n };\n options.complete = function () {\n viewer.scene.postRender.addEventListener(gridPrimitives.postRenderEvent);\n };\n Object(_global__WEBPACK_IMPORTED_MODULE_4__[\"flyTo\"])(sdk, options, 0.5);\n\n /**\r\n * 根据比例尺创建图幅线\r\n * @param {string} scale - 比例尺(可选值:'1:100万', '1:50万', '1:25万', '1:10万', '1:5万', '1:2.5万', '1:1万', '1:5000')\r\n */\n function countMapSheet(scale) {\n labelCollection.removeAll();\n gridPrimitives.removeAll();\n labelCollection = new Cesium.LabelCollection();\n labelCollection.name = 'SheetIndexLabelCollection';\n gridPrimitives.add(labelCollection);\n var rectangle = getViewExtend();\n var lngStep; // 经度步长\n var latStep; // 纬度步长\n // let limitLng // 显示界限(根据图幅线数量显隐)\n // let limitLat\n // Math.abs(maxLng-minLng)/lngStep, Math.abs(maxLat-minLat)/latStep\n var scaleByDistance;\n switch (scale) {\n case '1:100万':\n lngStep = 6;\n latStep = 4;\n scaleByDistance = new Cesium.NearFarScalar(20000000, 1, 80000000, 0);\n break;\n case '1:50万':\n lngStep = 3;\n latStep = 2;\n scaleByDistance = new Cesium.NearFarScalar(5000000, 1, 30000000, 0);\n break;\n case '1:25万':\n lngStep = 1.5;\n latStep = 1;\n scaleByDistance = new Cesium.NearFarScalar(2300000, 1, 20000000, 0);\n break;\n case '1:10万':\n lngStep = 0.5;\n latStep = 1 / 3;\n scaleByDistance = new Cesium.NearFarScalar(680000, 1, 5000000, 0);\n break;\n case '1:5万':\n lngStep = 0.25;\n latStep = 1 / 6;\n scaleByDistance = new Cesium.NearFarScalar(385000, 1, 2400000, 0);\n break;\n case '1:2.5万':\n lngStep = 0.125;\n latStep = 1 / 12;\n scaleByDistance = new Cesium.NearFarScalar(180000, 1, 1200000, 0);\n break;\n case '1:1万':\n lngStep = 0.0625;\n latStep = 1 / 24;\n scaleByDistance = new Cesium.NearFarScalar(90000, 1, 700000, 0);\n break;\n case '1:5000':\n lngStep = 0.03125;\n latStep = 1 / 48;\n scaleByDistance = new Cesium.NearFarScalar(46000, 1, 300000, 0);\n break;\n // case '1:1000':\n // lngStep = 0.01041667;\n // latStep = 0.00694444;\n // break\n // case '1:2000':\n // lngStep = 0.00520833;\n // latStep = 0.00347222;\n // break\n }\n var minLng = Math.floor((180 + Cesium.Math.toDegrees(rectangle.west)) / lngStep) * lngStep - 180;\n var minLat = Math.floor((88 + Cesium.Math.toDegrees(rectangle.south)) / latStep) * latStep - 88;\n var maxLng = Math.ceil((180 + Cesium.Math.toDegrees(rectangle.east)) / lngStep) * lngStep - 180;\n var maxLat = Math.ceil((88 + Cesium.Math.toDegrees(rectangle.north)) / latStep) * latStep - 88;\n if (minLng > maxLng) {\n maxLng += 360;\n }\n maxRectangle = {\n minLng: minLng,\n minLat: minLat,\n maxLng: maxLng,\n maxLat: maxLat\n };\n if (minLat < -88) {\n minLat = -88;\n }\n if (maxLat > 88) {\n maxLat = 88;\n }\n if ((maxRectangle.maxLng - maxRectangle.minLng) / lngStep * ((maxRectangle.maxLat - maxRectangle.minLat) / latStep) > 7000) {\n maxRectangle = null;\n return;\n }\n\n // 绘制经线\n for (var lng = minLng; lng <= maxLng; lng += lngStep) {\n var positions = [];\n var a = [];\n for (var lat = minLat; Math.floor(lat * 1000000000) / 1000000000 <= maxLat; lat += latStep / 2) {\n a.push([lng, lat]);\n positions.push(Cesium.Cartesian3.fromDegrees(lng, lat, 8848));\n }\n if (maxLat != 88 && maxLat + latStep / 2 >= 88) {\n positions.push(Cesium.Cartesian3.fromDegrees(lng, 88, 8848));\n }\n var geometryInstances = new Cesium.GeometryInstance({\n geometry: new Cesium.PolylineGeometry({\n positions: positions,\n width: 1,\n vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,\n arcType: Cesium.ArcType.RHUMB\n })\n });\n gridPrimitives.add(new Cesium.Primitive({\n geometryInstances: geometryInstances,\n appearance: new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType('Color', {\n color: Cesium.Color.fromCssColorString('#fcfc00')\n })\n })\n }));\n if (lng < maxLng) {\n // 计算图幅中心坐标\n for (var _lat = minLat; _lat < maxLat; _lat += latStep) {\n var position = {\n lng: lng + lngStep / 2,\n lat: _lat + latStep / 2\n };\n if (position.lat > maxLat) {\n break;\n }\n var sheetNumber = calculateMapSheetNumber(position.lng, position.lat, scale);\n labelCollection.add({\n position: Cesium.Cartesian3.fromDegrees(position.lng, position.lat, 8848),\n text: sheetNumber,\n font: '16px Inter, sans-serif',\n fillColor: Cesium.Color.fromCssColorString('#fcfc00'),\n // backgroundColor: Cesium.Color.fromCssColorString('#FFA145'),\n // backgroundPadding: new Cesium.Cartesian2(8, 4),\n pixelOffset: new Cesium.Cartesian2(0, 0),\n showBackground: false,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n scale: 1.0,\n distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 80000000),\n scaleByDistance: scaleByDistance\n });\n // labelCollection.add({\n // position: Cesium.Cartesian3.fromDegrees(position.lng, position.lat, 10000),\n // text: position.lng + ' , ' + position.lat,\n // font: '16px Inter, sans-serif',\n // fillColor: Cesium.Color.WHITE,\n // backgroundColor: Cesium.Color.fromCssColorString('#165DFF').withAlpha(0.8),\n // backgroundPadding: new Cesium.Cartesian2(8, 4),\n // pixelOffset: new Cesium.Cartesian2(0, 30),\n // showBackground: true,\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n // scale: 1.0,\n // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 20000000),\n // scaleByDistance: new Cesium.NearFarScalar(\n // 5000000,\n // 1,\n // 20000000,\n // 0\n // )\n // })\n }\n }\n }\n\n // 绘制纬线\n for (var _lat2 = minLat; Math.floor(_lat2 * 1000000000) / 1000000000 <= maxLat; _lat2 += latStep) {\n var _positions = [];\n var _a = [];\n for (var _lng = minLng; _lng <= maxLng; _lng += lngStep / 2) {\n _a.push([_lng, _lat2]);\n _positions.push(Cesium.Cartesian3.fromDegrees(_lng, _lat2, 8848));\n }\n var _geometryInstances = new Cesium.GeometryInstance({\n geometry: new Cesium.PolylineGeometry({\n positions: _positions,\n width: 1,\n vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,\n arcType: Cesium.ArcType.RHUMB\n })\n });\n gridPrimitives.add(new Cesium.Primitive({\n geometryInstances: _geometryInstances,\n appearance: new Cesium.PolylineMaterialAppearance({\n material: Cesium.Material.fromType('Color', {\n color: Cesium.Color.fromCssColorString('#fcfc00')\n })\n })\n }));\n }\n }\n\n /**\r\n * 根据经纬度和比例尺计算地图图幅编号\r\n * @param {number} longitude - 经度(十进制格式)\r\n * @param {number} latitude - 纬度(十进制格式)\r\n * @param {string} scale - 比例尺(可选值:'1:100万', '1:50万', '1:25万', '1:10万', '1:5万', '1:2.5万', '1:1万', '1:5000')\r\n * @returns {string} 对应的图幅编号\r\n */\n function calculateMapSheetNumber(lng, lat, scale) {\n var lngStep; // 经度步长\n var latStep; // 纬度步长\n switch (scale) {\n case '1:100万':\n lngStep = 6;\n latStep = 4;\n break;\n case '1:50万':\n lngStep = 3;\n latStep = 2;\n break;\n case '1:25万':\n lngStep = 1.5;\n latStep = 1;\n break;\n case '1:10万':\n lngStep = 0.5;\n latStep = 1 / 3;\n break;\n case '1:5万':\n lngStep = 0.25;\n latStep = 1 / 6;\n break;\n case '1:2.5万':\n lngStep = 0.125;\n latStep = 1 / 12;\n break;\n case '1:1万':\n lngStep = 0.0625;\n latStep = 1 / 24;\n break;\n case '1:5000':\n lngStep = 0.03125;\n latStep = 1 / 48;\n break;\n // case '1:1000':\n // lngStep = 0.01041667;\n // latStep = 0.00694444;\n // break\n // case '1:2000':\n // lngStep = 0.00520833;\n // latStep = 0.00347222;\n // break\n }\n // 确保纬度在 -88 到 88 度之间(因为 88° 以上采用特殊分幅)\n lat = Math.max(-88, Math.min(88, lat));\n lat = Math.abs(lat); // 取绝对值\n\n var B6 = 'ABCDEFGHIJKLMNOPQRSTUV';\n var B2 = lng;\n var B3 = lat;\n\n // 计算 1:100 万地形图的列号\n var col100W = Math.floor(B2 / 6 + 31);\n // 1:100 万地形图的行号对应的字母(A-V)\n var rowChar = B6.charAt(Math.floor(B3 / 4 + 1) - 1);\n\n // 比例尺代码映射\n var scaleCodeMap = {\n '1:100万': '',\n // 1:100万不需要额外代码\n '1:50万': 'B',\n '1:25万': 'C',\n '1:10万': 'D',\n '1:5万': 'E',\n '1:2.5万': 'F',\n '1:1万': 'G',\n '1:5000': 'H'\n };\n\n // 获取比例尺代码\n var scaleCode = scaleCodeMap[scale];\n if (!scaleCode && scale !== '1:100万') {\n throw new Error('不支持的比例尺,请使用: 1:100万, 1:50万, 1:25万, 1:10万, 1:5万, 1:2.5万, 1:1万, 1:5000');\n }\n\n // 计算在 1:100 万图幅内的行列号(根据不同比例尺)\n var rowIn100W, colIn100W;\n rowIn100W = rowChar + col100W;\n var num1 = Math.floor((Math.ceil(B3 / 4) * 4 - B3) / latStep) + 1;\n var rowNum = (\"000\" + num1).slice(-3);\n var remainder = B2 - Math.floor(B2 / 6) * 6;\n var num2 = Math.floor(remainder / lngStep) + 1;\n var colNum = (\"000\" + num2).slice(-3);\n switch (scale) {\n case '1:100万':\n // 1:100万直接使用行号和列号\n return rowIn100W;\n case '1:50万':\n break;\n case '1:25万':\n break;\n case '1:10万':\n break;\n case '1:5万':\n break;\n case '1:2.5万':\n break;\n case '1:1万':\n break;\n case '1:5000':\n break;\n default:\n throw new Error('不支持的比例尺');\n }\n\n // 生成最终编号\n return rowIn100W + scaleCode + rowNum + colNum;\n }\n\n // 获取当前视角矩形范围(二维模式)\n function getViewExtend() {\n var params = {};\n var extend = viewer.camera.computeViewRectangle();\n if (viewer.scene.mode == 2) {\n //2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换\n var canvas = viewer.scene.canvas;\n var upperLeft = new Cesium.Cartesian2(0, 0); //canvas左上角坐标转2d坐标\n var lowerRight = new Cesium.Cartesian2(canvas.clientWidth, canvas.clientHeight); //canvas右下角坐标转2d坐标\n\n var ellipsoid = viewer.scene.globe.ellipsoid;\n var upperLeft3 = viewer.camera.pickEllipsoid(upperLeft, ellipsoid); //2D转3D世界坐标\n\n var lowerRight3 = viewer.camera.pickEllipsoid(lowerRight, ellipsoid); //2D转3D世界坐标\n\n if (!upperLeft3) {\n var cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, {\n x: 0,\n y: 0,\n z: 6356755\n });\n upperLeft.y = cartesian2.y + 5;\n upperLeft3 = viewer.camera.pickEllipsoid(upperLeft, ellipsoid);\n }\n if (!lowerRight3) {\n var _cartesian = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, {\n x: 0,\n y: 0,\n z: -6356755\n });\n lowerRight.y = _cartesian.y - 5;\n lowerRight3 = viewer.camera.pickEllipsoid(lowerRight, ellipsoid);\n // console.log('lowerRight3', lowerRight, lowerRight3)\n }\n var upperLeftCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(upperLeft3); //3D世界坐标转弧度\n var lowerRightCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(lowerRight3); //3D世界坐标转弧度\n\n if ((lowerRight.y - upperLeft.y) / (lowerRight.x - upperLeft.x) <= 0.49998752339363695) {\n extend = new Cesium.Rectangle(Cesium.Math.toRadians(-180), Cesium.Math.toRadians(-90), Cesium.Math.toRadians(180), Cesium.Math.toRadians(90));\n } else {\n extend = new Cesium.Rectangle(upperLeftCartographic.longitude, lowerRightCartographic.latitude, lowerRightCartographic.longitude, upperLeftCartographic.latitude);\n }\n\n // console.log(\"经度:\" + minx + \"----\" + maxx);\n // console.log(\"纬度:\" + miny + \"----\" + maxy);\n\n return extend;\n } else {\n //3D获取方式\n return extend;\n }\n }\n}\nfunction close(sdk) {\n var viewer = sdk.viewer;\n var gridPrimitives;\n var labelCollection;\n for (var i = 0; i < viewer.scene.primitives._primitives.length; i++) {\n if (viewer.scene.primitives._primitives[i].name === 'SheetIndexGridPrimitives') {\n gridPrimitives = viewer.scene.primitives._primitives[i];\n for (var j = 0; j < gridPrimitives._primitives.length; j++) {\n if (gridPrimitives._primitives[j].name === 'SheetIndexLabelCollection') {\n labelCollection = gridPrimitives._primitives[j];\n break;\n }\n }\n break;\n }\n }\n labelCollection && labelCollection.removeAll();\n gridPrimitives && gridPrimitives.removeAll();\n gridPrimitives && viewer.scene.postRender.removeEventListener(gridPrimitives.postRenderEvent);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NoZWV0SW5kZXgvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL1NoZWV0SW5kZXgvaW5kZXguanM/MTNjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgZ2V0MkRWaWV3IH0gZnJvbSAnLi4vTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGdldFNkayB9IGZyb20gJy4uL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBmbHlUbyB9IGZyb20gJy4uL2dsb2JhbCdcclxuaW1wb3J0IFRvb2xzIGZyb20gJy4uLy4uL1Rvb2xzJ1xyXG5cclxubGV0IHRvb2xzXHJcbmxldCBzdGF0ZSA9IGZhbHNlXHJcbmxldCBzY2FsZSA9ICcxOjEwMOS4hydcclxuXHJcbmZ1bmN0aW9uIFNoZWV0SW5kZXhTdGF0dXNTd2l0Y2goc2RrLCBzID0gZmFsc2UpIHtcclxuICBpZighc2RrKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKCF0b29scykge1xyXG4gICAgdG9vbHMgPSBuZXcgVG9vbHMoKVxyXG4gIH1cclxuICBzdGF0ZSA9IHMgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgaWYgKHN0YXRlKSB7XHJcbiAgICBjaGFuZ2VTY2FsZShzZGssIHNjYWxlKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjbG9zZShzZGspXHJcbiAgfVxyXG4gIGxldCBzZGsyRCA9IGdldDJEVmlldygpXHJcbiAgaWYgKHNkazJEKSB7XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgY2hhbmdlU2NhbGUoc2RrLCBzY2FsZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsb3NlKHNkazJEKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IHNka0QgPSBnZXRTZGsoKS5zZGtEXHJcbiAgaWYoc2RrRCAmJiBzZGsgIT09IHNka0QpIHtcclxuICAgIFNoZWV0SW5kZXhTdGF0dXNTd2l0Y2goc2RrRCwgcylcclxuICB9XHJcblxyXG4gIC8vIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAvLyAgICAgcmVzb2x2ZSgpXHJcbiAgLy8gICB9LCAxMDAwKTtcclxuICAvLyB9KVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY2hhbmdlU2NhbGUoc2RrLCB2KSB7XHJcbiAgc2NhbGUgPSB2XHJcbiAgaWYgKHN0YXRlKSB7XHJcbiAgICBvcGVuKHNkaylcclxuICB9XHJcbiAgbGV0IHNkazJEID0gZ2V0MkRWaWV3KClcclxuICBpZiAoc2RrMkQpIHtcclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICBvcGVuKHNkazJEKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoKVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RhdHVzKCkge1xyXG4gIHJldHVybiBzdGF0ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuKHNkaykge1xyXG4gIGNsb3NlKHNkaylcclxuICBsZXQgY2FydG9ncmFwaGljID0gc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWNcclxuICBsZXQgb3B0aW9ucyA9IHtcclxuICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgIGxuZzogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpLFxyXG4gICAgICBsYXQ6IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpLFxyXG4gICAgICBhbHQ6IGNhcnRvZ3JhcGhpYy5oZWlnaHQsXHJcbiAgICB9LFxyXG4gIH1cclxuICBsZXQgdmlld2VyID0gc2RrLnZpZXdlcjtcclxuICBzd2l0Y2ggKHNjYWxlKSB7XHJcbiAgICBjYXNlICcxOjEwMOS4hyc6XHJcbiAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gMTYwMDAwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6NTDkuIcnOlxyXG4gICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IDUwMDAwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6MjXkuIcnOlxyXG4gICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IDIzMDAwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6MTDkuIcnOlxyXG4gICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IDY4MDAwMFxyXG4gICAgICBicmVha1xyXG4gICAgY2FzZSAnMTo15LiHJzpcclxuICAgICAgb3B0aW9ucy5wb3NpdGlvbi5hbHQgPSAzODUwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6Mi415LiHJzpcclxuICAgICAgb3B0aW9ucy5wb3NpdGlvbi5hbHQgPSAxODAwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6MeS4hyc6XHJcbiAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gOTAwMDBcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJzE6NTAwMCc6XHJcbiAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gNDYwMDBcclxuICAgICAgYnJlYWtcclxuICB9XHJcblxyXG4gIGxldCBncmlkUHJpbWl0aXZlc1xyXG4gIGxldCBsYWJlbENvbGxlY3Rpb25cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXdlci5zY2VuZS5wcmltaXRpdmVzLl9wcmltaXRpdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAodmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuX3ByaW1pdGl2ZXNbaV0ubmFtZSA9PT0gJ1NoZWV0SW5kZXhHcmlkUHJpbWl0aXZlcycpIHtcclxuICAgICAgZ3JpZFByaW1pdGl2ZXMgPSB2aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlc1tpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncmlkUHJpbWl0aXZlcy5fcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChncmlkUHJpbWl0aXZlcy5fcHJpbWl0aXZlc1tqXS5uYW1lID09PSAnU2hlZXRJbmRleExhYmVsQ29sbGVjdGlvbicpIHtcclxuICAgICAgICAgIGxhYmVsQ29sbGVjdGlvbiA9IGdyaWRQcmltaXRpdmVzLl9wcmltaXRpdmVzW2pdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKCFncmlkUHJpbWl0aXZlcykge1xyXG4gICAgZ3JpZFByaW1pdGl2ZXMgPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZUNvbGxlY3Rpb24oKTtcclxuICAgIGdyaWRQcmltaXRpdmVzLm5hbWUgPSAnU2hlZXRJbmRleEdyaWRQcmltaXRpdmVzJztcclxuICAgIHZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChncmlkUHJpbWl0aXZlcyk7XHJcbiAgfVxyXG4gIGlmICghbGFiZWxDb2xsZWN0aW9uKSB7XHJcbiAgICBsYWJlbENvbGxlY3Rpb24gPSBuZXcgQ2VzaXVtLkxhYmVsQ29sbGVjdGlvbigpO1xyXG4gICAgbGFiZWxDb2xsZWN0aW9uLm5hbWUgPSAnU2hlZXRJbmRleExhYmVsQ29sbGVjdGlvbic7XHJcbiAgfVxyXG5cclxuICBsZXQgc3RhdGlvbmFyeUZyYW1lcyA9IDA7XHJcbiAgbGV0IG1heFJlY3RhbmdsZSA9IG51bGw7XHJcbiAgZ3JpZFByaW1pdGl2ZXMucG9zdFJlbmRlckV2ZW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGhlaWdodCA9IHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgc3dpdGNoIChzY2FsZSkge1xyXG4gICAgICBjYXNlICcxOjEwMOS4hyc6XHJcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi5hbHQgPSAxNjAwMDAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6NTDkuIcnOlxyXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gNTAwMDAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6MjXkuIcnOlxyXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gMjMwMDAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6MTDkuIcnOlxyXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24uYWx0ID0gNjgwMDAwXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMTo15LiHJzpcclxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IDM4NTAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6Mi415LiHJzpcclxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IDE4MDAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6MeS4hyc6XHJcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi5hbHQgPSA5MDAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6NTAwMCc6XHJcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi5hbHQgPSA0NjAwMFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICBpZiAoaGVpZ2h0ID4gb3B0aW9ucy5wb3NpdGlvbi5hbHQgKiA1KSB7XHJcbiAgICAgIG1heFJlY3RhbmdsZSA9IG51bGw7XHJcbiAgICAgIGdyaWRQcmltaXRpdmVzLnJlbW92ZUFsbCgpO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBpc0NoYW5nZWQgPSBmYWxzZVxyXG4gICAgbGV0IHJlY3RhbmdsZSA9IGdldFZpZXdFeHRlbmQoKTtcclxuXHJcbiAgICBsZXQgbWluTG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHJlY3RhbmdsZS53ZXN0KVxyXG4gICAgbGV0IG1pbkxhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUuc291dGgpXHJcbiAgICBsZXQgbWF4TG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHJlY3RhbmdsZS5lYXN0KVxyXG4gICAgbGV0IG1heExhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUubm9ydGgpXHJcbiAgICBpZiAobWluTG5nID4gbWF4TG5nKSB7XHJcbiAgICAgIG1heExuZyArPSAzNjBcclxuICAgIH1cclxuICAgIHJlY3RhbmdsZSA9IHsgbWluTG5nLCBtaW5MYXQsIG1heExuZywgbWF4TGF0IH1cclxuICAgIGlmIChtYXhSZWN0YW5nbGUpIHtcclxuICAgICAgaWYgKChtYXhSZWN0YW5nbGUubWluTG5nID4gcmVjdGFuZ2xlLm1pbkxuZyB8fCBtYXhSZWN0YW5nbGUubWluTGF0ID4gcmVjdGFuZ2xlLm1pbkxhdCB8fCBtYXhSZWN0YW5nbGUubWF4TG5nIDwgcmVjdGFuZ2xlLm1heExuZyB8fCBtYXhSZWN0YW5nbGUubWF4TGF0IDwgcmVjdGFuZ2xlLm1heExhdCkgJiYgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHNkay52aWV3ZXIuY2FtZXJhLnBpdGNoKSA8IDApIHtcclxuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb3VudE1hcFNoZWV0KHNjYWxlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0NoYW5nZWQpIHtcclxuICAgICAgc3RhdGlvbmFyeUZyYW1lcysrO1xyXG4gICAgICAvLyDnoa7orqTnm7jmnLrlt7Lnu4/pnZnmraLotrPlpJ/lpJrluKdcclxuICAgICAgaWYgKHN0YXRpb25hcnlGcmFtZXMgPj0gNTApIHtcclxuICAgICAgICBjb3VudE1hcFNoZWV0KHNjYWxlKVxyXG4gICAgICAgIGlzQ2hhbmdlZCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXRpb25hcnlGcmFtZXMgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3B0aW9ucy5jb21wbGV0ZSA9ICgpID0+IHtcclxuICAgIHZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoZ3JpZFByaW1pdGl2ZXMucG9zdFJlbmRlckV2ZW50KTtcclxuICB9XHJcbiAgZmx5VG8oc2RrLCBvcHRpb25zLCAwLjUpXHJcblxyXG4gIC8qKlxyXG4gICog5qC55o2u5q+U5L6L5bC65Yib5bu65Zu+5bmF57q/XHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gc2NhbGUgLSDmr5TkvovlsLrvvIjlj6/pgInlgLzvvJonMToxMDDkuIcnLCAnMTo1MOS4hycsICcxOjI15LiHJywgJzE6MTDkuIcnLCAnMTo15LiHJywgJzE6Mi415LiHJywgJzE6MeS4hycsICcxOjUwMDAn77yJXHJcbiAgKi9cclxuICBmdW5jdGlvbiBjb3VudE1hcFNoZWV0KHNjYWxlKSB7XHJcbiAgICBsYWJlbENvbGxlY3Rpb24ucmVtb3ZlQWxsKCk7XHJcbiAgICBncmlkUHJpbWl0aXZlcy5yZW1vdmVBbGwoKTtcclxuICAgIGxhYmVsQ29sbGVjdGlvbiA9IG5ldyBDZXNpdW0uTGFiZWxDb2xsZWN0aW9uKCk7XHJcbiAgICBsYWJlbENvbGxlY3Rpb24ubmFtZSA9ICdTaGVldEluZGV4TGFiZWxDb2xsZWN0aW9uJztcclxuICAgIGdyaWRQcmltaXRpdmVzLmFkZChsYWJlbENvbGxlY3Rpb24pO1xyXG4gICAgbGV0IHJlY3RhbmdsZSA9IGdldFZpZXdFeHRlbmQoKTtcclxuXHJcbiAgICBsZXQgbG5nU3RlcCAvLyDnu4/luqbmraXplb9cclxuICAgIGxldCBsYXRTdGVwIC8vIOe6rOW6puatpemVv1xyXG4gICAgLy8gbGV0IGxpbWl0TG5nIC8vIOaYvuekuueVjOmZkO+8iOagueaNruWbvuW5hee6v+aVsOmHj+aYvumakO+8iVxyXG4gICAgLy8gbGV0IGxpbWl0TGF0XHJcbiAgICAvLyBNYXRoLmFicyhtYXhMbmctbWluTG5nKS9sbmdTdGVwLCBNYXRoLmFicyhtYXhMYXQtbWluTGF0KS9sYXRTdGVwXHJcbiAgICBsZXQgc2NhbGVCeURpc3RhbmNlXHJcbiAgICBzd2l0Y2ggKHNjYWxlKSB7XHJcbiAgICAgIGNhc2UgJzE6MTAw5LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gNjtcclxuICAgICAgICBsYXRTdGVwID0gNDtcclxuICAgICAgICBzY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICAyMDAwMDAwMCxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICA4MDAwMDAwMCxcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMTo1MOS4hyc6XHJcbiAgICAgICAgbG5nU3RlcCA9IDM7XHJcbiAgICAgICAgbGF0U3RlcCA9IDI7XHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgNTAwMDAwMCxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICAzMDAwMDAwMCxcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMToyNeS4hyc6XHJcbiAgICAgICAgbG5nU3RlcCA9IDEuNTtcclxuICAgICAgICBsYXRTdGVwID0gMTtcclxuICAgICAgICBzY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICAyMzAwMDAwLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIDIwMDAwMDAwLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjEw5LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMC41O1xyXG4gICAgICAgIGxhdFN0ZXAgPSAxIC8gMztcclxuICAgICAgICBzY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICA2ODAwMDAsXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgNTAwMDAwMCxcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMTo15LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMC4yNTtcclxuICAgICAgICBsYXRTdGVwID0gMSAvIDY7XHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgMzg1MDAwLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIDI0MDAwMDAsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6Mi415LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMC4xMjU7XHJcbiAgICAgICAgbGF0U3RlcCA9IDEgLyAxMjtcclxuICAgICAgICBzY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICAxODAwMDAsXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgMTIwMDAwMCxcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMTox5LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMC4wNjI1O1xyXG4gICAgICAgIGxhdFN0ZXAgPSAxIC8gMjQ7XHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgOTAwMDAsXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgNzAwMDAwLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjUwMDAnOlxyXG4gICAgICAgIGxuZ1N0ZXAgPSAwLjAzMTI1O1xyXG4gICAgICAgIGxhdFN0ZXAgPSAxIC8gNDg7XHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgNDYwMDAsXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgMzAwMDAwLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICBicmVha1xyXG4gICAgICAvLyBjYXNlICcxOjEwMDAnOlxyXG4gICAgICAvLyAgICAgbG5nU3RlcCA9IDAuMDEwNDE2Njc7XHJcbiAgICAgIC8vICAgICBsYXRTdGVwID0gMC4wMDY5NDQ0NDtcclxuICAgICAgLy8gICAgIGJyZWFrXHJcbiAgICAgIC8vIGNhc2UgJzE6MjAwMCc6XHJcbiAgICAgIC8vICAgICBsbmdTdGVwID0gMC4wMDUyMDgzMztcclxuICAgICAgLy8gICAgIGxhdFN0ZXAgPSAwLjAwMzQ3MjIyO1xyXG4gICAgICAvLyAgICAgYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWluTG5nID0gTWF0aC5mbG9vcigoMTgwICsgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHJlY3RhbmdsZS53ZXN0KSkgLyBsbmdTdGVwKSAqIGxuZ1N0ZXAgLSAxODA7XHJcbiAgICBsZXQgbWluTGF0ID0gTWF0aC5mbG9vcigoODggKyBDZXNpdW0uTWF0aC50b0RlZ3JlZXMocmVjdGFuZ2xlLnNvdXRoKSkgLyBsYXRTdGVwKSAqIGxhdFN0ZXAgLSA4ODtcclxuICAgIGxldCBtYXhMbmcgPSBNYXRoLmNlaWwoKDE4MCArIENlc2l1bS5NYXRoLnRvRGVncmVlcyhyZWN0YW5nbGUuZWFzdCkpIC8gbG5nU3RlcCkgKiBsbmdTdGVwIC0gMTgwO1xyXG4gICAgbGV0IG1heExhdCA9IE1hdGguY2VpbCgoODggKyBDZXNpdW0uTWF0aC50b0RlZ3JlZXMocmVjdGFuZ2xlLm5vcnRoKSkgLyBsYXRTdGVwKSAqIGxhdFN0ZXAgLSA4ODtcclxuXHJcbiAgICBpZiAobWluTG5nID4gbWF4TG5nKSB7XHJcbiAgICAgIG1heExuZyArPSAzNjBcclxuICAgIH1cclxuXHJcbiAgICBtYXhSZWN0YW5nbGUgPSB7IG1pbkxuZywgbWluTGF0LCBtYXhMbmcsIG1heExhdCB9XHJcbiAgICBpZiAobWluTGF0IDwgLTg4KSB7XHJcbiAgICAgIG1pbkxhdCA9IC04OFxyXG4gICAgfVxyXG4gICAgaWYgKG1heExhdCA+IDg4KSB7XHJcbiAgICAgIG1heExhdCA9IDg4XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCgobWF4UmVjdGFuZ2xlLm1heExuZyAtIG1heFJlY3RhbmdsZS5taW5MbmcpIC8gbG5nU3RlcCkgKiAoKG1heFJlY3RhbmdsZS5tYXhMYXQgLSBtYXhSZWN0YW5nbGUubWluTGF0KSAvIGxhdFN0ZXApID4gNzAwMCkge1xyXG4gICAgICBtYXhSZWN0YW5nbGUgPSBudWxsXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyDnu5jliLbnu4/nur9cclxuICAgIGZvciAobGV0IGxuZyA9IG1pbkxuZzsgbG5nIDw9IG1heExuZzsgbG5nICs9IGxuZ1N0ZXApIHtcclxuICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XHJcbiAgICAgIGxldCBhID0gW11cclxuICAgICAgZm9yIChsZXQgbGF0ID0gbWluTGF0OyBNYXRoLmZsb29yKGxhdCAqIDEwMDAwMDAwMDApIC8gMTAwMDAwMDAwMCA8PSBtYXhMYXQ7IGxhdCArPSAobGF0U3RlcCAvIDIpKSB7XHJcbiAgICAgICAgYS5wdXNoKFtsbmcsIGxhdF0pXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIDg4NDgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF4TGF0ICE9IDg4ICYmIG1heExhdCArIChsYXRTdGVwIC8gMikgPj0gODgpIHtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIDg4LCA4ODQ4KSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZ2VvbWV0cnlJbnN0YW5jZXMgPSBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ2VzaXVtLlBvbHlsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBwb3NpdGlvbnMsXHJcbiAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgIHZlcnRleEZvcm1hdDogQ2VzaXVtLlBlckluc3RhbmNlQ29sb3JBcHBlYXJhbmNlLlZFUlRFWF9GT1JNQVQsXHJcbiAgICAgICAgICBhcmNUeXBlOiBDZXNpdW0uQXJjVHlwZS5SSFVNQixcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGdyaWRQcmltaXRpdmVzLmFkZChuZXcgQ2VzaXVtLlByaW1pdGl2ZSh7XHJcbiAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IGdlb21ldHJ5SW5zdGFuY2VzLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5NYXRlcmlhbC5mcm9tVHlwZSgnQ29sb3InLCB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmNmYzAwJylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSkpO1xyXG5cclxuICAgICAgaWYgKGxuZyA8IG1heExuZykge1xyXG4gICAgICAgIC8vIOiuoeeul+WbvuW5heS4reW/g+WdkOagh1xyXG4gICAgICAgIGZvciAobGV0IGxhdCA9IG1pbkxhdDsgbGF0IDwgbWF4TGF0OyBsYXQgKz0gbGF0U3RlcCkge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IGxuZyArIChsbmdTdGVwIC8gMiksIGxhdDogbGF0ICsgKGxhdFN0ZXAgLyAyKSB9O1xyXG4gICAgICAgICAgaWYgKHBvc2l0aW9uLmxhdCA+IG1heExhdCkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHNoZWV0TnVtYmVyID0gY2FsY3VsYXRlTWFwU2hlZXROdW1iZXIocG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIHNjYWxlKTtcclxuICAgICAgICAgIGxhYmVsQ29sbGVjdGlvbi5hZGQoe1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIDg4NDgpLFxyXG4gICAgICAgICAgICB0ZXh0OiBzaGVldE51bWJlcixcclxuICAgICAgICAgICAgZm9udDogJzE2cHggSW50ZXIsIHNhbnMtc2VyaWYnLFxyXG4gICAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmY2ZjMDAnKSxcclxuICAgICAgICAgICAgLy8gYmFja2dyb3VuZENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjRkZBMTQ1JyksXHJcbiAgICAgICAgICAgIC8vIGJhY2tncm91bmRQYWRkaW5nOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoOCwgNCksXHJcbiAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgMCksXHJcbiAgICAgICAgICAgIHNob3dCYWNrZ3JvdW5kOiBmYWxzZSxcclxuICAgICAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICAgIGhvcml6b250YWxPcmlnaW46IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkNFTlRFUixcclxuICAgICAgICAgICAgc2NhbGU6IDEuMCxcclxuICAgICAgICAgICAgZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uOiBuZXcgQ2VzaXVtLkRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbigwLCA4MDAwMDAwMCksXHJcbiAgICAgICAgICAgIHNjYWxlQnlEaXN0YW5jZTogc2NhbGVCeURpc3RhbmNlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gbGFiZWxDb2xsZWN0aW9uLmFkZCh7XHJcbiAgICAgICAgICAvLyAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0LCAxMDAwMCksXHJcbiAgICAgICAgICAvLyAgICAgdGV4dDogcG9zaXRpb24ubG5nICsgJyAsICcgKyBwb3NpdGlvbi5sYXQsXHJcbiAgICAgICAgICAvLyAgICAgZm9udDogJzE2cHggSW50ZXIsIHNhbnMtc2VyaWYnLFxyXG4gICAgICAgICAgLy8gICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxyXG4gICAgICAgICAgLy8gICAgIGJhY2tncm91bmRDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzE2NURGRicpLndpdGhBbHBoYSgwLjgpLFxyXG4gICAgICAgICAgLy8gICAgIGJhY2tncm91bmRQYWRkaW5nOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoOCwgNCksXHJcbiAgICAgICAgICAvLyAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigwLCAzMCksXHJcbiAgICAgICAgICAvLyAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICAvLyAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICAgICAgLy8gICAgIHNjYWxlOiAxLjAsXHJcbiAgICAgICAgICAvLyAgICAgZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uOiBuZXcgQ2VzaXVtLkRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbigwLCAyMDAwMDAwMCksXHJcbiAgICAgICAgICAvLyAgICAgc2NhbGVCeURpc3RhbmNlOiBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICAvLyAgICAgICAgIDUwMDAwMDAsXHJcbiAgICAgICAgICAvLyAgICAgICAgIDEsXHJcbiAgICAgICAgICAvLyAgICAgICAgIDIwMDAwMDAwLFxyXG4gICAgICAgICAgLy8gICAgICAgICAwXHJcbiAgICAgICAgICAvLyAgICAgKVxyXG4gICAgICAgICAgLy8gfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDnu5jliLbnuqznur9cclxuICAgIGZvciAobGV0IGxhdCA9IG1pbkxhdDsgTWF0aC5mbG9vcihsYXQgKiAxMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAgPD0gbWF4TGF0OyBsYXQgKz0gbGF0U3RlcCkge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgbGV0IGEgPSBbXVxyXG4gICAgICBmb3IgKGxldCBsbmcgPSBtaW5Mbmc7IGxuZyA8PSBtYXhMbmc7IGxuZyArPSAobG5nU3RlcCAvIDIpKSB7XHJcbiAgICAgICAgYS5wdXNoKFtsbmcsIGxhdF0pXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIDg4NDgpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBnZW9tZXRyeUluc3RhbmNlcyA9IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDZXNpdW0uUG9seWxpbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICBwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuICAgICAgICAgIHdpZHRoOiAxLFxyXG4gICAgICAgICAgdmVydGV4Rm9ybWF0OiBDZXNpdW0uUGVySW5zdGFuY2VDb2xvckFwcGVhcmFuY2UuVkVSVEVYX0ZPUk1BVCxcclxuICAgICAgICAgIGFyY1R5cGU6IENlc2l1bS5BcmNUeXBlLlJIVU1CLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZ3JpZFByaW1pdGl2ZXMuYWRkKG5ldyBDZXNpdW0uUHJpbWl0aXZlKHtcclxuICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogZ2VvbWV0cnlJbnN0YW5jZXMsXHJcbiAgICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5Qb2x5bGluZU1hdGVyaWFsQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKCdDb2xvcicsIHtcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmY2ZjMDAnKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiDmoLnmja7nu4/nuqzluqblkozmr5TkvovlsLrorqHnrpflnLDlm77lm77luYXnvJblj7dcclxuICAqIEBwYXJhbSB7bnVtYmVyfSBsb25naXR1ZGUgLSDnu4/luqbvvIjljYHov5vliLbmoLzlvI/vvIlcclxuICAqIEBwYXJhbSB7bnVtYmVyfSBsYXRpdHVkZSAtIOe6rOW6pu+8iOWNgei/m+WItuagvOW8j++8iVxyXG4gICogQHBhcmFtIHtzdHJpbmd9IHNjYWxlIC0g5q+U5L6L5bC677yI5Y+v6YCJ5YC877yaJzE6MTAw5LiHJywgJzE6NTDkuIcnLCAnMToyNeS4hycsICcxOjEw5LiHJywgJzE6NeS4hycsICcxOjIuNeS4hycsICcxOjHkuIcnLCAnMTo1MDAwJ++8iVxyXG4gICogQHJldHVybnMge3N0cmluZ30g5a+55bqU55qE5Zu+5bmF57yW5Y+3XHJcbiAgKi9cclxuICBmdW5jdGlvbiBjYWxjdWxhdGVNYXBTaGVldE51bWJlcihsbmcsIGxhdCwgc2NhbGUpIHtcclxuICAgIGxldCBsbmdTdGVwIC8vIOe7j+W6puatpemVv1xyXG4gICAgbGV0IGxhdFN0ZXAgLy8g57qs5bqm5q2l6ZW/XHJcbiAgICBzd2l0Y2ggKHNjYWxlKSB7XHJcbiAgICAgIGNhc2UgJzE6MTAw5LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gNjtcclxuICAgICAgICBsYXRTdGVwID0gNDtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjUw5LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMztcclxuICAgICAgICBsYXRTdGVwID0gMjtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjI15LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMS41O1xyXG4gICAgICAgIGxhdFN0ZXAgPSAxO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6MTDkuIcnOlxyXG4gICAgICAgIGxuZ1N0ZXAgPSAwLjU7XHJcbiAgICAgICAgbGF0U3RlcCA9IDEgLyAzO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6NeS4hyc6XHJcbiAgICAgICAgbG5nU3RlcCA9IDAuMjU7XHJcbiAgICAgICAgbGF0U3RlcCA9IDEgLyA2O1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzE6Mi415LiHJzpcclxuICAgICAgICBsbmdTdGVwID0gMC4xMjU7XHJcbiAgICAgICAgbGF0U3RlcCA9IDEgLyAxMjtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjHkuIcnOlxyXG4gICAgICAgIGxuZ1N0ZXAgPSAwLjA2MjU7XHJcbiAgICAgICAgbGF0U3RlcCA9IDEgLyAyNDtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxOjUwMDAnOlxyXG4gICAgICAgIGxuZ1N0ZXAgPSAwLjAzMTI1O1xyXG4gICAgICAgIGxhdFN0ZXAgPSAxIC8gNDg7XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgLy8gY2FzZSAnMToxMDAwJzpcclxuICAgICAgLy8gICAgIGxuZ1N0ZXAgPSAwLjAxMDQxNjY3O1xyXG4gICAgICAvLyAgICAgbGF0U3RlcCA9IDAuMDA2OTQ0NDQ7XHJcbiAgICAgIC8vICAgICBicmVha1xyXG4gICAgICAvLyBjYXNlICcxOjIwMDAnOlxyXG4gICAgICAvLyAgICAgbG5nU3RlcCA9IDAuMDA1MjA4MzM7XHJcbiAgICAgIC8vICAgICBsYXRTdGVwID0gMC4wMDM0NzIyMjtcclxuICAgICAgLy8gICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICAvLyDnoa7kv53nuqzluqblnKggLTg4IOWIsCA4OCDluqbkuYvpl7TvvIjlm6DkuLogODjCsCDku6XkuIrph4fnlKjnibnmrorliIbluYXvvIlcclxuICAgIGxhdCA9IE1hdGgubWF4KC04OCwgTWF0aC5taW4oODgsIGxhdCkpO1xyXG4gICAgbGF0ID0gTWF0aC5hYnMobGF0KTsgLy8g5Y+W57ud5a+55YC8XHJcblxyXG4gICAgbGV0IEI2ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVYnXHJcbiAgICBsZXQgQjIgPSBsbmdcclxuICAgIGxldCBCMyA9IGxhdFxyXG5cclxuICAgIC8vIOiuoeeulyAxOjEwMCDkuIflnLDlvaLlm77nmoTliJflj7dcclxuICAgIGNvbnN0IGNvbDEwMFcgPSBNYXRoLmZsb29yKEIyIC8gNiArIDMxKTtcclxuICAgIC8vIDE6MTAwIOS4h+WcsOW9ouWbvueahOihjOWPt+WvueW6lOeahOWtl+avje+8iEEtVu+8iVxyXG4gICAgY29uc3Qgcm93Q2hhciA9IEI2LmNoYXJBdChNYXRoLmZsb29yKEIzIC8gNCArIDEpIC0gMSk7XHJcblxyXG4gICAgLy8g5q+U5L6L5bC65Luj56CB5pig5bCEXHJcbiAgICBjb25zdCBzY2FsZUNvZGVNYXAgPSB7XHJcbiAgICAgICcxOjEwMOS4hyc6ICcnLCAgICAgLy8gMToxMDDkuIfkuI3pnIDopoHpop3lpJbku6PnoIFcclxuICAgICAgJzE6NTDkuIcnOiAnQicsXHJcbiAgICAgICcxOjI15LiHJzogJ0MnLFxyXG4gICAgICAnMToxMOS4hyc6ICdEJyxcclxuICAgICAgJzE6NeS4hyc6ICdFJyxcclxuICAgICAgJzE6Mi415LiHJzogJ0YnLFxyXG4gICAgICAnMTox5LiHJzogJ0cnLFxyXG4gICAgICAnMTo1MDAwJzogJ0gnXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyDojrflj5bmr5TkvovlsLrku6PnoIFcclxuICAgIGNvbnN0IHNjYWxlQ29kZSA9IHNjYWxlQ29kZU1hcFtzY2FsZV07XHJcbiAgICBpZiAoIXNjYWxlQ29kZSAmJiBzY2FsZSAhPT0gJzE6MTAw5LiHJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4jeaUr+aMgeeahOavlOS+i+Wwuu+8jOivt+S9v+eUqDogMToxMDDkuIcsIDE6NTDkuIcsIDE6MjXkuIcsIDE6MTDkuIcsIDE6NeS4hywgMToyLjXkuIcsIDE6MeS4hywgMTo1MDAwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6K6h566X5ZyoIDE6MTAwIOS4h+WbvuW5heWGheeahOihjOWIl+WPt++8iOagueaNruS4jeWQjOavlOS+i+Wwuu+8iVxyXG4gICAgbGV0IHJvd0luMTAwVywgY29sSW4xMDBXO1xyXG4gICAgcm93SW4xMDBXID0gcm93Q2hhciArIGNvbDEwMFc7XHJcblxyXG4gICAgY29uc3QgbnVtMSA9IE1hdGguZmxvb3IoKE1hdGguY2VpbChCMyAvIDQpICogNCAtIEIzKSAvIGxhdFN0ZXApICsgMTtcclxuICAgIGNvbnN0IHJvd051bSA9IChcIjAwMFwiICsgbnVtMSkuc2xpY2UoLTMpO1xyXG4gICAgY29uc3QgcmVtYWluZGVyID0gQjIgLSBNYXRoLmZsb29yKEIyIC8gNikgKiA2O1xyXG4gICAgY29uc3QgbnVtMiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gbG5nU3RlcCkgKyAxO1xyXG4gICAgY29uc3QgY29sTnVtID0gKFwiMDAwXCIgKyBudW0yKS5zbGljZSgtMyk7XHJcblxyXG4gICAgc3dpdGNoIChzY2FsZSkge1xyXG4gICAgICBjYXNlICcxOjEwMOS4hyc6XHJcbiAgICAgICAgLy8gMToxMDDkuIfnm7TmjqXkvb/nlKjooYzlj7flkozliJflj7dcclxuICAgICAgICByZXR1cm4gcm93SW4xMDBXO1xyXG4gICAgICBjYXNlICcxOjUw5LiHJzpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnMToyNeS4hyc6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJzE6MTDkuIcnOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnMTo15LiHJzpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJzE6Mi415LiHJzpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJzE6MeS4hyc6XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICcxOjUwMDAnOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4jeaUr+aMgeeahOavlOS+i+WwuicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOeUn+aIkOacgOe7iOe8luWPt1xyXG4gICAgcmV0dXJuIHJvd0luMTAwVyArIHNjYWxlQ29kZSArIHJvd051bSArIGNvbE51bTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjeinhuinkuefqeW9ouiMg+WbtO+8iOS6jOe7tOaooeW8j++8iVxyXG4gIGZ1bmN0aW9uIGdldFZpZXdFeHRlbmQoKSB7XHJcbiAgICBsZXQgcGFyYW1zID0ge307XHJcbiAgICBsZXQgZXh0ZW5kID0gdmlld2VyLmNhbWVyYS5jb21wdXRlVmlld1JlY3RhbmdsZSgpO1xyXG4gICAgaWYgKHZpZXdlci5zY2VuZS5tb2RlID09IDIpIHtcclxuICAgICAgLy8yROS4i+S8muWPr+iDveaLvuWPluS4jeWIsOWdkOagh++8jGV4dGVuZOi/lOWbnnVuZGVmaW5lZCzmiYDku6XlgZrku6XkuIvovazmjaJcclxuICAgICAgbGV0IGNhbnZhcyA9IHZpZXdlci5zY2VuZS5jYW52YXM7XHJcbiAgICAgIGxldCB1cHBlckxlZnQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgMCk7Ly9jYW52YXPlt6bkuIrop5LlnZDmoIfovawyZOWdkOagh1xyXG4gICAgICBsZXQgbG93ZXJSaWdodCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMihcclxuICAgICAgICBjYW52YXMuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgY2FudmFzLmNsaWVudEhlaWdodFxyXG4gICAgICApOy8vY2FudmFz5Y+z5LiL6KeS5Z2Q5qCH6L2sMmTlnZDmoIdcclxuXHJcbiAgICAgIGxldCBlbGxpcHNvaWQgPSB2aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkO1xyXG4gICAgICBsZXQgdXBwZXJMZWZ0MyA9IHZpZXdlci5jYW1lcmEucGlja0VsbGlwc29pZChcclxuICAgICAgICB1cHBlckxlZnQsXHJcbiAgICAgICAgZWxsaXBzb2lkXHJcbiAgICAgICk7Ly8yROi9rDNE5LiW55WM5Z2Q5qCHXHJcblxyXG4gICAgICBsZXQgbG93ZXJSaWdodDMgPSB2aWV3ZXIuY2FtZXJhLnBpY2tFbGxpcHNvaWQoXHJcbiAgICAgICAgbG93ZXJSaWdodCxcclxuICAgICAgICBlbGxpcHNvaWRcclxuICAgICAgKTsvLzJE6L2sM0TkuJbnlYzlnZDmoIdcclxuXHJcbiAgICAgIGlmICghdXBwZXJMZWZ0Mykge1xyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4yID0gQ2VzaXVtLlNjZW5lVHJhbnNmb3Jtcy53Z3M4NFRvV2luZG93Q29vcmRpbmF0ZXModmlld2VyLnNjZW5lLCB7IHg6IDAsIHk6IDAsIHo6IDYzNTY3NTUgfSk7XHJcbiAgICAgICAgdXBwZXJMZWZ0LnkgPSBjYXJ0ZXNpYW4yLnkgKyA1XHJcbiAgICAgICAgdXBwZXJMZWZ0MyA9IHZpZXdlci5jYW1lcmEucGlja0VsbGlwc29pZChcclxuICAgICAgICAgIHVwcGVyTGVmdCxcclxuICAgICAgICAgIGVsbGlwc29pZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFsb3dlclJpZ2h0Mykge1xyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4yID0gQ2VzaXVtLlNjZW5lVHJhbnNmb3Jtcy53Z3M4NFRvV2luZG93Q29vcmRpbmF0ZXModmlld2VyLnNjZW5lLCB7IHg6IDAsIHk6IDAsIHo6IC02MzU2NzU1IH0pO1xyXG4gICAgICAgIGxvd2VyUmlnaHQueSA9IGNhcnRlc2lhbjIueSAtIDVcclxuICAgICAgICBsb3dlclJpZ2h0MyA9IHZpZXdlci5jYW1lcmEucGlja0VsbGlwc29pZChcclxuICAgICAgICAgIGxvd2VyUmlnaHQsXHJcbiAgICAgICAgICBlbGxpcHNvaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdsb3dlclJpZ2h0MycsIGxvd2VyUmlnaHQsIGxvd2VyUmlnaHQzKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCB1cHBlckxlZnRDYXJ0b2dyYXBoaWMgPSB2aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFxyXG4gICAgICAgIHVwcGVyTGVmdDNcclxuICAgICAgKTsvLzNE5LiW55WM5Z2Q5qCH6L2s5byn5bqmXHJcbiAgICAgIGxldCBsb3dlclJpZ2h0Q2FydG9ncmFwaGljID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhcclxuICAgICAgICBsb3dlclJpZ2h0M1xyXG4gICAgICApOy8vM0TkuJbnlYzlnZDmoIfovazlvKfluqZcclxuXHJcbiAgICAgIGlmICgobG93ZXJSaWdodC55IC0gdXBwZXJMZWZ0LnkpIC8gKGxvd2VyUmlnaHQueCAtIHVwcGVyTGVmdC54KSA8PSAwLjQ5OTk4NzUyMzM5MzYzNjk1KSB7XHJcbiAgICAgICAgZXh0ZW5kID0gbmV3IENlc2l1bS5SZWN0YW5nbGUoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0xODApLCBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwKSwgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDE4MCksIENlc2l1bS5NYXRoLnRvUmFkaWFucyg5MCkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZXh0ZW5kID0gbmV3IENlc2l1bS5SZWN0YW5nbGUodXBwZXJMZWZ0Q2FydG9ncmFwaGljLmxvbmdpdHVkZSwgbG93ZXJSaWdodENhcnRvZ3JhcGhpYy5sYXRpdHVkZSwgbG93ZXJSaWdodENhcnRvZ3JhcGhpYy5sb25naXR1ZGUsIHVwcGVyTGVmdENhcnRvZ3JhcGhpYy5sYXRpdHVkZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwi57uP5bqm77yaXCIgKyBtaW54ICsgXCItLS0tXCIgKyBtYXh4KTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCLnuqzluqbvvJpcIiArIG1pbnkgKyBcIi0tLS1cIiArIG1heHkpO1xyXG5cclxuICAgICAgcmV0dXJuIGV4dGVuZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vM0Tojrflj5bmlrnlvI9cclxuICAgICAgcmV0dXJuIGV4dGVuZDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxufVxyXG5mdW5jdGlvbiBjbG9zZShzZGspIHtcclxuICBsZXQgdmlld2VyID0gc2RrLnZpZXdlcjtcclxuICBsZXQgZ3JpZFByaW1pdGl2ZXNcclxuICBsZXQgbGFiZWxDb2xsZWN0aW9uXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHZpZXdlci5zY2VuZS5wcmltaXRpdmVzLl9wcmltaXRpdmVzW2ldLm5hbWUgPT09ICdTaGVldEluZGV4R3JpZFByaW1pdGl2ZXMnKSB7XHJcbiAgICAgIGdyaWRQcmltaXRpdmVzID0gdmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuX3ByaW1pdGl2ZXNbaV07XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JpZFByaW1pdGl2ZXMuX3ByaW1pdGl2ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoZ3JpZFByaW1pdGl2ZXMuX3ByaW1pdGl2ZXNbal0ubmFtZSA9PT0gJ1NoZWV0SW5kZXhMYWJlbENvbGxlY3Rpb24nKSB7XHJcbiAgICAgICAgICBsYWJlbENvbGxlY3Rpb24gPSBncmlkUHJpbWl0aXZlcy5fcHJpbWl0aXZlc1tqXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxhYmVsQ29sbGVjdGlvbiAmJiAobGFiZWxDb2xsZWN0aW9uLnJlbW92ZUFsbCgpKTtcclxuICBncmlkUHJpbWl0aXZlcyAmJiAoZ3JpZFByaW1pdGl2ZXMucmVtb3ZlQWxsKCkpO1xyXG4gIGdyaWRQcmltaXRpdmVzICYmICh2aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5yZW1vdmVFdmVudExpc3RlbmVyKGdyaWRQcmltaXRpdmVzLnBvc3RSZW5kZXJFdmVudCkpO1xyXG59XHJcblxyXG5leHBvcnQgeyBTaGVldEluZGV4U3RhdHVzU3dpdGNoLCBjaGFuZ2VTY2FsZSwgZ2V0U3RhdHVzIH1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/SheetIndex/index.js\n"); /***/ }), /***/ "./src/Global/Skin/index.js": /*!**********************************!*\ !*** ./src/Global/Skin/index.js ***! \**********************************/ /*! exports provided: default, setSkin */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setSkin\", function() { return setSkin; });\nvar theme = {\n \"yingguangse\": new Map(),\n \"gonganlan\": new Map(),\n \"hong\": new Map()\n};\n// 主色\ntheme.yingguangse.set(\"--color-sdk-base\", \"#00ffff\");\n// 辅色\ntheme.yingguangse.set(\"--color-sdk-auxiliary\", \"#004242\");\ntheme.yingguangse.set(\"--color-sdk-auxiliary-public\", \"#ffffff\");\n// 预警色\ntheme.yingguangse.set(\"--color-sdk-warning-0\", \"#1BF8C3\");\ntheme.yingguangse.set(\"--color-sdk-warning-1\", \"#F16C55\");\ntheme.yingguangse.set(\"--color-sdk-warning-2\", \"#FFA145\");\ntheme.yingguangse.set(\"--color-sdk-warning-3\", \"#FFDF53\");\n// 文本色\ntheme.yingguangse.set(\"--color-sdk-text-head\", \"#FFFFFF\");\ntheme.yingguangse.set(\"--color-sdk-text-head-1\", \"#E6F7FF\");\ntheme.yingguangse.set(\"--color-sdk-text-head-2\", \"#ADF1FF\");\n// 渐变色\ntheme.yingguangse.set(\"--color-sdk-gradual\", \"#00ffff 6.25%, #00ffff 100%\");\ntheme.yingguangse.set(\"--color-sdk-bg-gradual\", \"#00ffff33 0%, #00ffff00 100%\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (theme);\nfunction setSkin(name) {\n document.documentElement.style.setProperty('--color-sdk-base', 'rgba(0, 55, 55, 1)');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NraW4vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL1NraW4vaW5kZXguanM/NTg2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgdGhlbWUgPSB7XHJcbiAgXCJ5aW5nZ3VhbmdzZVwiOiBuZXcgTWFwKCksXHJcbiAgXCJnb25nYW5sYW5cIjogbmV3IE1hcCgpLFxyXG4gIFwiaG9uZ1wiOiBuZXcgTWFwKCksXHJcbn1cclxuLy8g5Li76ImyXHJcbnRoZW1lLnlpbmdndWFuZ3NlLnNldChcIi0tY29sb3Itc2RrLWJhc2VcIiwgXCIjMDBmZmZmXCIpXHJcbi8vIOi+heiJslxyXG50aGVtZS55aW5nZ3VhbmdzZS5zZXQoXCItLWNvbG9yLXNkay1hdXhpbGlhcnlcIiwgXCIjMDA0MjQyXCIpXHJcbnRoZW1lLnlpbmdndWFuZ3NlLnNldChcIi0tY29sb3Itc2RrLWF1eGlsaWFyeS1wdWJsaWNcIiwgXCIjZmZmZmZmXCIpXHJcbi8vIOmihOitpuiJslxyXG50aGVtZS55aW5nZ3VhbmdzZS5zZXQoXCItLWNvbG9yLXNkay13YXJuaW5nLTBcIiwgXCIjMUJGOEMzXCIpXHJcbnRoZW1lLnlpbmdndWFuZ3NlLnNldChcIi0tY29sb3Itc2RrLXdhcm5pbmctMVwiLCBcIiNGMTZDNTVcIilcclxudGhlbWUueWluZ2d1YW5nc2Uuc2V0KFwiLS1jb2xvci1zZGstd2FybmluZy0yXCIsIFwiI0ZGQTE0NVwiKVxyXG50aGVtZS55aW5nZ3VhbmdzZS5zZXQoXCItLWNvbG9yLXNkay13YXJuaW5nLTNcIiwgXCIjRkZERjUzXCIpXHJcbi8vIOaWh+acrOiJslxyXG50aGVtZS55aW5nZ3VhbmdzZS5zZXQoXCItLWNvbG9yLXNkay10ZXh0LWhlYWRcIiwgXCIjRkZGRkZGXCIpXHJcbnRoZW1lLnlpbmdndWFuZ3NlLnNldChcIi0tY29sb3Itc2RrLXRleHQtaGVhZC0xXCIsIFwiI0U2RjdGRlwiKVxyXG50aGVtZS55aW5nZ3VhbmdzZS5zZXQoXCItLWNvbG9yLXNkay10ZXh0LWhlYWQtMlwiLCBcIiNBREYxRkZcIilcclxuLy8g5riQ5Y+Y6ImyXHJcbnRoZW1lLnlpbmdndWFuZ3NlLnNldChcIi0tY29sb3Itc2RrLWdyYWR1YWxcIiwgXCIjMDBmZmZmIDYuMjUlLCAjMDBmZmZmIDEwMCVcIilcclxudGhlbWUueWluZ2d1YW5nc2Uuc2V0KFwiLS1jb2xvci1zZGstYmctZ3JhZHVhbFwiLCBcIiMwMGZmZmYzMyAwJSwgIzAwZmZmZjAwIDEwMCVcIilcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHRoZW1lO1xyXG5cclxuZnVuY3Rpb24gc2V0U2tpbihuYW1lKSB7XHJcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWNvbG9yLXNkay1iYXNlJywgJ3JnYmEoMCwgNTUsIDU1LCAxKScpO1xyXG59XHJcblxyXG5leHBvcnQgeyBzZXRTa2luIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Global/Skin/index.js\n"); /***/ }), /***/ "./src/Global/SplitScreen/ClickCallback/index.js": /*!*******************************************************!*\ !*** ./src/Global/SplitScreen/ClickCallback/index.js ***! \*******************************************************/ /*! exports provided: openLeftClick, closeLeftClick, regLeftClickCallback, unRegLeftClickCallback, openRightClick, closeRightClick, regRightClickCallback, unRegRightClickCallback, openMove, closeMove, regMoveCallback, unregMoveCallback, getLeftClickState, getRightClickState, getMoveState */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openLeftClick\", function() { return openLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeLeftClick\", function() { return closeLeftClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regLeftClickCallback\", function() { return regLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegLeftClickCallback\", function() { return unRegLeftClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openRightClick\", function() { return openRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeRightClick\", function() { return closeRightClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regRightClickCallback\", function() { return regRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unRegRightClickCallback\", function() { return unRegRightClickCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openMove\", function() { return openMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeMove\", function() { return closeMove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"regMoveCallback\", function() { return regMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unregMoveCallback\", function() { return unregMoveCallback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLeftClickState\", function() { return getLeftClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRightClickState\", function() { return getRightClickState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMoveState\", function() { return getMoveState; });\n/**\r\n * @name: click\r\n * @author: Administrator\r\n * @date: 2023-05-28 11:05\r\n * @description:click\r\n * @update: 2023-05-28 11:05\r\n */\nvar leftClickHandler = null;\nvar rightClickHandler = null;\nvar MoveHandler = null;\nvar leftClickCallbackMap = new Map();\nvar rightClickCallbackMap = new Map();\nvar MoveCallbackMap = new Map();\nvar selectedFeature;\nfunction cartesian3Towgs84(cartesian, viewer) {\n var ellipsoid = viewer.scene.globe.ellipsoid;\n var cartesian3 = new Cesium.Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n var cartographic = ellipsoid.cartesianToCartographic(cartesian3);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n var alt = cartographic.height < 0 ? 0 : cartographic.height;\n return {\n lng: lng,\n lat: lat,\n alt: alt\n };\n}\nfunction getcartesian(sdk, movement) {\n if (movement.endPosition) {\n movement.endPosition.y -= 2;\n }\n var position = movement.position || movement.endPosition;\n // 获取世界坐标系地表坐标,考虑地形,不包括模型,倾斜摄影模型表面;\n var cartesian = sdk.viewer.scene.pickPosition(position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n return cartesian;\n}\nfunction openLeftClick(sdk, cb) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n var click = true;\n leftClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n leftClickHandler.setInputAction(function (movement) {\n var cartesian = sdk.viewer.scene.pickPosition(movement.position);\n if (!cartesian) {\n var ray = sdk.viewer.camera.getPickRay(movement.position); //相交的射线\n cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene);\n }\n if (!cartesian) {\n return;\n }\n var pos84 = cartesian3Towgs84(cartesian, sdk.viewer);\n cb && cb(pos84);\n if (click) {\n click = false;\n setTimeout(function () {\n click = true;\n }, 600);\n if (!YJ.Measure.GetMeasureStatus() && cartesian) {\n var flag = false;\n for (var i = leftClickCallbackMap.size - 1; i >= 0; i--) {\n var key = Array.from(leftClickCallbackMap.keys())[i];\n var obj = leftClickCallbackMap.get(key);\n if (obj) {\n if (obj.that) {\n // 是否为多边形\n if (obj.that.type === 'PolygonObject') {\n // 是否可点击y\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var pt = turf.point([pos84.lng, pos84.lat]);\n var polyPos = [];\n for (var _i = 0; _i < obj.that.options.positions.length; _i++) {\n polyPos.push([obj.that.options.positions[_i].lng, obj.that.options.positions[_i].lat]);\n }\n polyPos.push([obj.that.options.positions[0].lng, obj.that.options.positions[0].lat]);\n var poly = turf.polygon([polyPos]);\n var contain = turf.booleanPointInPolygon(pt, poly);\n if (contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 聚集地\n else if (obj.that.type === 'AssembleObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var positions = obj.that.computeAssemble(obj.that.options.positions, true);\n var _pt = turf.point([pos84.lng, pos84.lat]);\n var _polyPos = [];\n for (var _i2 = 0; _i2 < positions.length; _i2 += 2) {\n _polyPos.push([positions[_i2], positions[_i2 + 1]]);\n }\n var _poly = turf.polygon([_polyPos]);\n var _contain = turf.booleanPointInPolygon(_pt, _poly);\n if (_contain) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 单箭头\n else if (obj.that.type === 'AttackArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 3) {\n var _pt2 = turf.point([pos84.lng, pos84.lat]);\n var _positions = obj.that.computeAttackArrow(obj.that.options.positions);\n var _polyPos2 = [];\n for (var m = 0; m < _positions.length; m++) {\n var _pos = cartesian3Towgs84(_positions[m], sdk.viewer);\n _polyPos2.push([_pos.lng, _pos.lat]);\n }\n var _poly2 = turf.polygon([_polyPos2]);\n var _contain2 = turf.booleanPointInPolygon(_pt2, _poly2);\n if (_contain2) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 双箭头\n else if (obj.that.type === 'PincerArrowObject') {\n if (obj.that.picking) {\n if (obj.that.options.positions && obj.that.options.positions.length >= 5) {\n var _pt3 = turf.point([pos84.lng, pos84.lat]);\n var _positions2 = obj.that.computePincerArrow(obj.that.options.positions);\n var _polyPos3 = [];\n for (var _m = 0; _m < _positions2.length; _m++) {\n var _pos2 = cartesian3Towgs84(_positions2[_m], sdk.viewer);\n _polyPos3.push([_pos2.lng, _pos2.lat]);\n }\n var pos84_0 = cartesian3Towgs84(_positions2[0], sdk.viewer);\n _polyPos3.push([pos84_0.lng, pos84_0.lat]);\n var _poly3 = turf.polygon([_polyPos3]);\n var _contain3 = turf.booleanPointInPolygon(_pt3, _poly3);\n if (_contain3) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 圆\n else if (obj.that.type === 'CircleObject') {\n if (obj.that.picking) {\n var _pt4 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius) {\n var center = [obj.that.options.center.lng, obj.that.options.center.lat];\n var radius = obj.that.options.radius / 1000;\n var options = {\n steps: 360,\n units: 'kilometers'\n };\n var circle = turf.circle(center, radius, options);\n var _contain4 = turf.booleanPointInPolygon(_pt4, circle);\n if (_contain4) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n // 扇形\n else if (obj.that.type === 'SectorObject') {\n if (obj.that.picking) {\n var _pt5 = turf.point([pos84.lng, pos84.lat]);\n if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) {\n var _positions3 = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true);\n var _polyPos4 = [];\n for (var _m2 = 0; _m2 < _positions3.length; _m2++) {\n _polyPos4.push([_positions3[_m2].lng, _positions3[_m2].lat]);\n }\n var _poly4 = turf.polygon([_polyPos4]);\n var _contain5 = turf.booleanPointInPolygon(_pt5, _poly4);\n if (_contain5) {\n obj.callback(movement, obj.that.options.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n flag = true;\n break;\n }\n }\n }\n }\n }\n }\n }\n if (!flag) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick) {\n if (pick.id) {\n var entityId;\n // 矢量\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var _obj = leftClickCallbackMap.get(pick.id.parentId);\n if (_obj.that.picking && _obj.that.geojson) {\n for (var _i3 = 0; _i3 < _obj.that.geojson.features.length; _i3++) {\n if (_obj.that.geojson.features[_i3].id === pick.id._id) {\n _obj.callback(movement, _obj.that.geojson.features[_i3].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj.that);\n }\n }\n }\n } else if (typeof pick.id.id == 'string') {\n var array = pick.id.id.split('-');\n array.splice(array.length - 1, 1);\n entityId = array.join('-');\n }\n if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) {\n var _obj2 = leftClickCallbackMap.get(pick.id.properties.id._value);\n if (_obj2.that.picking) {\n _obj2.callback(movement, pick.id.properties.id._value, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj2.that);\n }\n } else if (leftClickCallbackMap.has(pick.id.id)) {\n var _obj3 = leftClickCallbackMap.get(pick.id.id);\n if (_obj3.that.picking) {\n _obj3.callback(movement, pick.id.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj3.that);\n }\n } else if (entityId && leftClickCallbackMap.has(entityId)) {\n var _obj4 = leftClickCallbackMap.get(entityId);\n if (_obj4.that.picking) {\n _obj4.callback(movement, entityId, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj4.that);\n }\n } else if (pick.primitive) {\n if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) {\n var _obj5 = leftClickCallbackMap.get(pick.id);\n _obj5.callback(movement, pick.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj5.that);\n }\n }\n } else {\n if (pick.primitive && pick.primitive.id) {\n if (leftClickCallbackMap.has(pick.primitive.id)) {\n var _obj6 = leftClickCallbackMap.get(pick.primitive.id);\n if (_obj6.that.picking) {\n if (_obj6.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj6.callback(movement, pick.primitive, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n } else {\n _obj6.callback(movement, pick.primitive.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj6.that);\n }\n }\n }\n }\n }\n if (pick.content && (!pick.primitive || !pick.primitive.id)) {\n if (leftClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj7 = leftClickCallbackMap.get(pick.content.tileset.id);\n if (_obj7.that.picking) {\n if (_obj7.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n _obj7.callback(movement, pick.content.tileset, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n } else {\n _obj7.callback(movement, pick.content.tileset.id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), _obj7.that);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // if (click) {\n // click = false\n // setTimeout(() => {\n // click = true\n // }, 300);\n // if (!YJ.Measure.GetMeasureStatus()) {\n\n // }\n // }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n\n // leftClickHandler.setInputAction(function (movement) {\n // const feature = sdk.viewer.scene.pick(movement.endPosition);\n // // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // selectedFeature.color = Cesium.Color.WHITE;\n // }\n // selectedFeature = feature\n // if (feature) {\n // feature.color = Cesium.Color.YELLOW;\n // }\n // }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n // }\n}\nfunction closeLeftClick(sdk) {\n leftClickHandler.destroy(); //关闭事件句柄\n leftClickHandler = null;\n // }\n}\nfunction openRightClick(sdk) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n rightClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n rightClickHandler.setInputAction(function (movement) {\n if (!YJ.Measure.GetMeasureStatus()) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id) {\n var id;\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n var obj = rightClickCallbackMap.get(pick.id.parentId);\n if (obj.that.picking && obj.that.geojson) {\n for (var i = 0; i < obj.that.geojson.features.length; i++) {\n if (obj.that.geojson.features[i].id === pick.id._id) {\n obj.callback(movement, obj.that.geojson.features[i].id, cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that);\n }\n }\n }\n } else {\n if (typeof pick.id === 'string') {\n id = pick.id;\n } else {\n id = pick.id.id;\n }\n if (rightClickCallbackMap.has(id)) {\n var _obj8 = rightClickCallbackMap.get(id);\n if (_obj8.that.picking) {\n var cartesian = getcartesian(sdk, movement);\n if (!cartesian) {\n return;\n }\n _obj8.callback(movement, id, cartesian3Towgs84(cartesian, sdk.viewer), _obj8.that);\n }\n }\n }\n }\n if (pick && pick.content) {\n if (rightClickCallbackMap.has(pick.content.tileset.id)) {\n var _obj9 = rightClickCallbackMap.get(pick.content.tileset.id);\n if (_obj9.that.picking) {\n if (_obj9.that.type === 'bim') {\n if (YJ.Global.getBimPickStatus(sdk)) {\n var _cartesian = getcartesian(sdk, movement);\n if (!_cartesian) {\n return;\n }\n _obj9.callback(movement, pick.getProperty('id'), cartesian3Towgs84(_cartesian, sdk.viewer), _obj9.that);\n }\n } else {\n var _cartesian2 = getcartesian(sdk, movement);\n if (!_cartesian2) {\n return;\n }\n _obj9.callback(movement, pick.content.tileset.id, cartesian3Towgs84(_cartesian2, sdk.viewer), _obj9.that);\n }\n }\n }\n }\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n}\nfunction closeRightClick() {\n if (rightClickHandler) {\n rightClickHandler.destroy(); //关闭事件句柄\n rightClickHandler = null;\n }\n}\nfunction openMove(sdk) {\n MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n MoveHandler.setInputAction(function (movement) {\n var pick = sdk.viewer.scene.pick(movement.endPosition);\n // unselectFeature(selectedFeature);\n // if (selectedFeature) {\n // let color = '#fff'\n // let state = selectedFeature.getProperty('state')\n // switch (state) {\n // case '0':\n // color = '#fff'\n // break;\n // case '1':\n // color = '#f00'\n // break;\n // case '2':\n // color = '#0f0'\n // break;\n // case '3':\n // color = '#00f'\n // break;\n // default:\n // }\n // selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency)\n // }\n // if (pick && pick.id) { }\n // if (pick && pick.content) {\n // if (MoveCallbackMap.has(pick.content.tileset.id)) {\n // let obj = MoveCallbackMap.get(pick.content.tileset.id)\n // if (obj.that.picking) {\n // if (obj.that.type === 'bim') {\n // if (YJ.Global.getBimPickStatus(sdk)) {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // else {\n // selectedFeature = pick\n // pick.color = Cesium.Color.YELLOW;\n // }\n // }\n // else {\n // selectedFeature = null\n // }\n // }\n // }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n}\nfunction closeMove() {\n if (MoveHandler) {\n MoveHandler.destroy(); //关闭事件句柄\n MoveHandler = null;\n }\n}\n\n/*注册左键回调*/\nfunction regLeftClickCallback(id, callback, that) {\n leftClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unRegLeftClickCallback(id) {\n leftClickCallbackMap.delete(id);\n}\n\n/*注册右键回调*/\nfunction regRightClickCallback(id, callback, that) {\n rightClickCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消右键回调*/\nfunction unRegRightClickCallback(id) {\n rightClickCallbackMap.delete(id);\n}\n\n/*注册左键回调*/\nfunction regMoveCallback(id, callback, that) {\n MoveCallbackMap.set(id, {\n callback: callback,\n that: that\n });\n} /*取消左键回调*/\nfunction unregMoveCallback(id) {\n MoveCallbackMap.delete(id);\n}\nfunction getLeftClickState() {\n if (leftClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getRightClickState() {\n if (rightClickHandler) {\n return true;\n } else {\n false;\n }\n}\nfunction getMoveState() {\n if (MoveHandler) {\n return true;\n } else {\n false;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NwbGl0U2NyZWVuL0NsaWNrQ2FsbGJhY2svaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL1NwbGl0U2NyZWVuL0NsaWNrQ2FsbGJhY2svaW5kZXguanM/M2EzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGNsaWNrXHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMDUtMjggMTE6MDVcclxuICogQGRlc2NyaXB0aW9u77yaY2xpY2tcclxuICogQHVwZGF0ZTogMjAyMy0wNS0yOCAxMTowNVxyXG4gKi9cclxubGV0IGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbmxldCByaWdodENsaWNrSGFuZGxlciA9IG51bGxcclxubGV0IE1vdmVIYW5kbGVyID0gbnVsbFxyXG5sZXQgbGVmdENsaWNrQ2FsbGJhY2tNYXAgPSBuZXcgTWFwKClcclxubGV0IHJpZ2h0Q2xpY2tDYWxsYmFja01hcCA9IG5ldyBNYXAoKVxyXG5sZXQgTW92ZUNhbGxiYWNrTWFwID0gbmV3IE1hcCgpXHJcbmxldCBzZWxlY3RlZEZlYXR1cmU7XHJcblxyXG5cclxuZnVuY3Rpb24gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB2aWV3ZXIpIHtcclxuICB2YXIgZWxsaXBzb2lkID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZFxyXG4gIHZhciBjYXJ0ZXNpYW4zID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgY2FydGVzaWFuLngsXHJcbiAgICBjYXJ0ZXNpYW4ueSxcclxuICAgIGNhcnRlc2lhbi56XHJcbiAgKVxyXG4gIHZhciBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoY2FydGVzaWFuMylcclxuICB2YXIgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSlcclxuICB2YXIgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpXHJcbiAgdmFyIGFsdCA9IGNhcnRvZ3JhcGhpYy5oZWlnaHQgPCAwID8gMCA6IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICByZXR1cm4ge1xyXG4gICAgbG5nOiBsbmcsXHJcbiAgICBsYXQ6IGxhdCxcclxuICAgIGFsdDogYWx0LFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpIHtcclxuICBpZiAobW92ZW1lbnQuZW5kUG9zaXRpb24pIHtcclxuICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLT0gMlxyXG4gIH1cclxuICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvbiB8fCBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gIC8vIOiOt+WPluS4lueVjOWdkOagh+ezu+WcsOihqOWdkOagh++8jOiAg+iZkeWcsOW9ou+8jOS4jeWMheaLrOaooeWei++8jOWAvuaWnOaRhOW9seaooeWei+ihqOmdou+8m1xyXG4gIGxldCBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihwb3NpdGlvbilcclxuICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICBjYXJ0ZXNpYW4gPSBzZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCBzZGsudmlld2VyLnNjZW5lKTtcclxuICB9XHJcbiAgcmV0dXJuIGNhcnRlc2lhblxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuTGVmdENsaWNrKHNkaywgY2IpIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCBjbGljayA9IHRydWVcclxuICBsZWZ0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLnNldElucHV0QWN0aW9uKChtb3ZlbWVudCkgPT4ge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgY29uc3QgcmF5ID0gc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShtb3ZlbWVudC5wb3NpdGlvbik7IC8v55u45Lqk55qE5bCE57q/XHJcbiAgICAgIGNhcnRlc2lhbiA9IHNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXksIHNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvczg0ID0gY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCBzZGsudmlld2VyKVxyXG5cclxuICAgIGNiICYmIGNiKHBvczg0KVxyXG5cclxuICAgIGlmIChjbGljaykge1xyXG4gICAgICBjbGljayA9IGZhbHNlXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNsaWNrID0gdHJ1ZVxyXG4gICAgICB9LCA2MDApO1xyXG4gICAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpICYmIGNhcnRlc2lhbikge1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICBmb3IgKGxldCBpID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBsZXQga2V5ID0gQXJyYXkuZnJvbShsZWZ0Q2xpY2tDYWxsYmFja01hcC5rZXlzKCkpW2ldXHJcbiAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KGtleSlcclxuICAgICAgICAgIGlmIChvYmopIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdCkge1xyXG4gICAgICAgICAgICAgIC8vIOaYr+WQpuS4uuWkmui+ueW9olxyXG4gICAgICAgICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnUG9seWdvbk9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIOaYr+WQpuWPr+eCueWHu3lcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDogZrpm4blnLBcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnQXNzZW1ibGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gb2JqLnRoYXQuY29tcHV0ZUFzc2VtYmxlKG9iai50aGF0Lm9wdGlvbnMucG9zaXRpb25zLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV1cclxuICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWNleeureWktFxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdBdHRhY2tBcnJvd09iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucyAmJiBvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IG9iai50aGF0LmNvbXB1dGVBdHRhY2tBcnJvdyhvYmoudGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3M4NCA9IGNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1ttXSwgc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zODQubG5nLCBwb3M4NC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seSA9IHR1cmYucG9seWdvbihbcG9seVBvc10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIHBvbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyDlj4znrq3lpLRcclxuICAgICAgICAgICAgICBlbHNlIGlmIChvYmoudGhhdC50eXBlID09PSAnUGluY2VyQXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMgJiYgb2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID49IDUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jb21wdXRlUGluY2VyQXJyb3cob2JqLnRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbHlQb3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgcG9zaXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zODQgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbbV0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2x5UG9zLnB1c2goW3Bvczg0LmxuZywgcG9zODQubGF0XSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvczg0XzAgPSBjYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgcG9seVBvcy5wdXNoKFtwb3M4NF8wLmxuZywgcG9zODRfMC5sYXRdKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIOWchlxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9iai50aGF0LnR5cGUgPT09ICdDaXJjbGVPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtwb3M4NC5sbmcsIHBvczg0LmxhdF0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIgJiYgb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2VudGVyID0gW29iai50aGF0Lm9wdGlvbnMuY2VudGVyLmxuZywgb2JqLnRoYXQub3B0aW9ucy5jZW50ZXIubGF0XTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaXVzID0gb2JqLnRoYXQub3B0aW9ucy5yYWRpdXMgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0geyBzdGVwczogMzYwLCB1bml0czogJ2tpbG9tZXRlcnMnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmNsZSA9IHR1cmYuY2lyY2xlKGNlbnRlciwgcmFkaXVzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGFpbiA9IHR1cmYuYm9vbGVhblBvaW50SW5Qb2x5Z29uKHB0LCBjaXJjbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoudGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8g5omH5b2iXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ1NlY3Rvck9iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW3Bvczg0LmxuZywgcG9zODQubGF0XSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5vcHRpb25zLmNlbnRlciAmJiBvYmoudGhhdC5vcHRpb25zLnJhZGl1cyAmJiBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUgJiYgb2JqLnRoYXQub3B0aW9ucy5lbmRBbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBvYmoudGhhdC5jYWxTZWN0b3Iob2JqLnRoYXQub3B0aW9ucy5jZW50ZXIsIG9iai50aGF0Lm9wdGlvbnMucmFkaXVzLCBvYmoudGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUsIG9iai50aGF0Lm9wdGlvbnMuZW5kQW5nbGUsIHVuZGVmaW5lZCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9seVBvcyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbHlQb3MucHVzaChbcG9zaXRpb25zW21dLmxuZywgcG9zaXRpb25zW21dLmxhdF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5ID0gdHVyZi5wb2x5Z29uKFtwb2x5UG9zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW4gPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgcG9seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICAgIGNvbnN0IHBpY2sgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pXHJcbiAgICAgICAgICBpZiAocGljaykge1xyXG4gICAgICAgICAgICBpZiAocGljay5pZCkge1xyXG4gICAgICAgICAgICAgIGxldCBlbnRpdHlJZFxyXG4gICAgICAgICAgICAgIC8vIOefoumHj1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gbGVmdENsaWNrQ2FsbGJhY2tNYXAuZ2V0KHBpY2suaWQucGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZyAmJiBvYmoudGhhdC5nZW9qc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmlkID09PSBwaWNrLmlkLl9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwaWNrLmlkLmlkID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBwaWNrLmlkLmlkLnNwbGl0KCctJylcclxuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShhcnJheS5sZW5ndGggLSAxLCAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5SWQgPSBhcnJheS5qb2luKCctJylcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwaWNrLmlkLnByb3BlcnRpZXMgJiYgcGljay5pZC5wcm9wZXJ0aWVzLmlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnByb3BlcnRpZXMuaWQuX3ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQucHJvcGVydGllcy5pZC5fdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmlkLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLmlkKVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0eUlkICYmIGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhlbnRpdHlJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQoZW50aXR5SWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHBpY2sucHJpbWl0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBpY2suaWQgPT0gJ3N0cmluZycgJiYgbGVmdENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5pZClcclxuICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY2suaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWNrLnByaW1pdGl2ZSAmJiBwaWNrLnByaW1pdGl2ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLnByaW1pdGl2ZS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IGxlZnRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLnByaW1pdGl2ZS5pZClcclxuICAgICAgICAgICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChZSi5HbG9iYWwuZ2V0QmltUGlja1N0YXR1cyhzZGspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChnZXRjYXJ0ZXNpYW4oc2RrLCBtb3ZlbWVudCksIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNrLnByaW1pdGl2ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwaWNrLmNvbnRlbnQgJiYgKCFwaWNrLnByaW1pdGl2ZSB8fCAhcGljay5wcmltaXRpdmUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnRDbGlja0NhbGxiYWNrTWFwLmhhcyhwaWNrLmNvbnRlbnQudGlsZXNldC5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSBsZWZ0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGljay5jb250ZW50LnRpbGVzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgIHBpY2suY29udGVudC50aWxlc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuM1Rvd2dzODQoZ2V0Y2FydGVzaWFuKHNkaywgbW92ZW1lbnQpLCBzZGsudmlld2VyKSwgb2JqLnRoYXQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gaWYgKGNsaWNrKSB7XHJcbiAgICAvLyAgIGNsaWNrID0gZmFsc2VcclxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgY2xpY2sgPSB0cnVlXHJcbiAgICAvLyAgIH0sIDMwMCk7XHJcbiAgICAvLyAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuXHJcbiAgLy8gbGVmdENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbihmdW5jdGlvbiAobW92ZW1lbnQpIHtcclxuICAvLyAgIGNvbnN0IGZlYXR1cmUgPSBzZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQuZW5kUG9zaXRpb24pO1xyXG4gIC8vICAgLy8gdW5zZWxlY3RGZWF0dXJlKHNlbGVjdGVkRmVhdHVyZSk7XHJcbiAgLy8gICBpZiAoc2VsZWN0ZWRGZWF0dXJlKSB7XHJcbiAgLy8gICAgIHNlbGVjdGVkRmVhdHVyZS5jb2xvciA9IENlc2l1bS5Db2xvci5XSElURTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmVcclxuICAvLyAgIGlmIChmZWF0dXJlKSB7XHJcbiAgLy8gICAgIGZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gIC8vICAgfVxyXG4gIC8vIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5NT1VTRV9NT1ZFKTtcclxuICAvLyB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZUxlZnRDbGljayhzZGspIHtcclxuICBsZWZ0Q2xpY2tIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gIGxlZnRDbGlja0hhbmRsZXIgPSBudWxsXHJcbiAgLy8gfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGVuUmlnaHRDbGljayhzZGspIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihzZGsudmlld2VyLmNhbnZhcylcclxuICByaWdodENsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgaWYgKHBpY2sgJiYgcGljay5pZCkge1xyXG4gICAgICAgIGxldCBpZFxyXG4gICAgICAgIGlmIChwaWNrLmlkLnR5cGUgJiYgcGljay5pZC50eXBlID09PSAndmVjdG9yJyAmJiBwaWNrLmlkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmlnaHRDbGlja0NhbGxiYWNrTWFwLmdldChwaWNrLmlkLnBhcmVudElkKVxyXG4gICAgICAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcgJiYgb2JqLnRoYXQuZ2VvanNvbikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAob2JqLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9PT0gcGljay5pZC5faWQpIHtcclxuICAgICAgICAgICAgICAgIG9iai5jYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgIG9iai50aGF0Lmdlb2pzb24uZmVhdHVyZXNbaV0uaWQsXHJcbiAgICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KSwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgcGljay5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWQgPSBwaWNrLmlkLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmlnaHRDbGlja0NhbGxiYWNrTWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQoaWQpXHJcbiAgICAgICAgICAgIGlmIChvYmoudGhhdC5waWNraW5nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwaWNrICYmIHBpY2suY29udGVudCkge1xyXG4gICAgICAgIGlmIChyaWdodENsaWNrQ2FsbGJhY2tNYXAuaGFzKHBpY2suY29udGVudC50aWxlc2V0LmlkKSkge1xyXG4gICAgICAgICAgbGV0IG9iaiA9IHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgICAgICBpZiAob2JqLnRoYXQucGlja2luZykge1xyXG4gICAgICAgICAgICBpZiAob2JqLnRoYXQudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgIG1vdmVtZW50LFxyXG4gICAgICAgICAgICAgICAgICBwaWNrLmdldFByb3BlcnR5KCdpZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHNkay52aWV3ZXIpLCBvYmoudGhhdClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNhcnRlc2lhbiA9IGdldGNhcnRlc2lhbihzZGssIG1vdmVtZW50KVxyXG4gICAgICAgICAgICAgIGlmICghY2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqLmNhbGxiYWNrKFxyXG4gICAgICAgICAgICAgICAgbW92ZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBwaWNrLmNvbnRlbnQudGlsZXNldC5pZCxcclxuICAgICAgICAgICAgICAgIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgc2RrLnZpZXdlciksIG9iai50aGF0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZVJpZ2h0Q2xpY2soKSB7XHJcbiAgaWYgKHJpZ2h0Q2xpY2tIYW5kbGVyKSB7XHJcbiAgICByaWdodENsaWNrSGFuZGxlci5kZXN0cm95KCkgLy/lhbPpl63kuovku7blj6Xmn4RcclxuICAgIHJpZ2h0Q2xpY2tIYW5kbGVyID0gbnVsbFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gb3Blbk1vdmUoc2RrKSB7XHJcbiAgTW92ZUhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHNkay52aWV3ZXIuY2FudmFzKVxyXG4gIE1vdmVIYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uIChtb3ZlbWVudCkge1xyXG4gICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5lbmRQb3NpdGlvbik7XHJcbiAgICAvLyB1bnNlbGVjdEZlYXR1cmUoc2VsZWN0ZWRGZWF0dXJlKTtcclxuICAgIC8vIGlmIChzZWxlY3RlZEZlYXR1cmUpIHtcclxuICAgIC8vICAgbGV0IGNvbG9yID0gJyNmZmYnXHJcbiAgICAvLyAgIGxldCBzdGF0ZSA9IHNlbGVjdGVkRmVhdHVyZS5nZXRQcm9wZXJ0eSgnc3RhdGUnKVxyXG4gICAgLy8gICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAvLyAgICAgY2FzZSAnMCc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZmZmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMSc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZjAwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMic6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMGYwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMyc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMDBmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZWxlY3RlZEZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKS53aXRoQWxwaGEoc2VsZWN0ZWRGZWF0dXJlLnRpbGVzZXQudHJhbnNwYXJlbmN5KVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHBpY2sgJiYgcGljay5pZCkgeyB9XHJcbiAgICAvLyBpZiAocGljayAmJiBwaWNrLmNvbnRlbnQpIHtcclxuICAgIC8vICAgaWYgKE1vdmVDYWxsYmFja01hcC5oYXMocGljay5jb250ZW50LnRpbGVzZXQuaWQpKSB7XHJcbiAgICAvLyAgICAgbGV0IG9iaiA9IE1vdmVDYWxsYmFja01hcC5nZXQocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAvLyAgICAgaWYgKG9iai50aGF0LnBpY2tpbmcpIHtcclxuICAgIC8vICAgICAgIGlmIChvYmoudGhhdC50eXBlID09PSAnYmltJykge1xyXG4gICAgLy8gICAgICAgICBpZiAoWUouR2xvYmFsLmdldEJpbVBpY2tTdGF0dXMoc2RrKSkge1xyXG4gICAgLy8gICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IHBpY2tcclxuICAgIC8vICAgICAgICAgICBwaWNrLmNvbG9yID0gQ2VzaXVtLkNvbG9yLllFTExPVztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBudWxsXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBzZWxlY3RlZEZlYXR1cmUgPSBwaWNrXHJcbiAgICAvLyAgICAgICAgIHBpY2suY29sb3IgPSBDZXNpdW0uQ29sb3IuWUVMTE9XO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgIHNlbGVjdGVkRmVhdHVyZSA9IG51bGxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb3NlTW92ZSgpIHtcclxuICBpZiAoTW92ZUhhbmRsZXIpIHtcclxuICAgIE1vdmVIYW5kbGVyLmRlc3Ryb3koKSAvL+WFs+mXreS6i+S7tuWPpeafhFxyXG4gICAgTW92ZUhhbmRsZXIgPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ0xlZnRDbGlja0NhbGxiYWNrKGlkLCBjYWxsYmFjaywgdGhhdCkge1xyXG5cclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5zZXQoaWQsIHsgY2FsbGJhY2ssIHRoYXQgfSlcclxufS8q5Y+W5raI5bem6ZSu5Zue6LCDKi9cclxuZnVuY3Rpb24gdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjayhpZCwpIHtcclxuICBsZWZ0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ1JpZ2h0Q2xpY2tDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICByaWdodENsaWNrQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOWPs+mUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVuUmVnUmlnaHRDbGlja0NhbGxiYWNrKGlkLCkge1xyXG4gIHJpZ2h0Q2xpY2tDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG4vKuazqOWGjOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHJlZ01vdmVDYWxsYmFjayhpZCwgY2FsbGJhY2ssIHRoYXQpIHtcclxuICBNb3ZlQ2FsbGJhY2tNYXAuc2V0KGlkLCB7IGNhbGxiYWNrLCB0aGF0IH0pXHJcbn0vKuWPlua2iOW3pumUruWbnuiwgyovXHJcbmZ1bmN0aW9uIHVucmVnTW92ZUNhbGxiYWNrKGlkLCkge1xyXG4gIE1vdmVDYWxsYmFja01hcC5kZWxldGUoaWQsKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMZWZ0Q2xpY2tTdGF0ZSgpIHtcclxuICBpZiAobGVmdENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmlnaHRDbGlja1N0YXRlKCkge1xyXG4gIGlmIChyaWdodENsaWNrSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TW92ZVN0YXRlKCkge1xyXG4gIGlmIChNb3ZlSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCB7IG9wZW5MZWZ0Q2xpY2ssIGNsb3NlTGVmdENsaWNrLCByZWdMZWZ0Q2xpY2tDYWxsYmFjaywgdW5SZWdMZWZ0Q2xpY2tDYWxsYmFjaywgb3BlblJpZ2h0Q2xpY2ssIGNsb3NlUmlnaHRDbGljaywgcmVnUmlnaHRDbGlja0NhbGxiYWNrLCB1blJlZ1JpZ2h0Q2xpY2tDYWxsYmFjaywgb3Blbk1vdmUsIGNsb3NlTW92ZSwgcmVnTW92ZUNhbGxiYWNrLCB1bnJlZ01vdmVDYWxsYmFjaywgZ2V0TGVmdENsaWNrU3RhdGUsIGdldFJpZ2h0Q2xpY2tTdGF0ZSwgZ2V0TW92ZVN0YXRlIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/SplitScreen/ClickCallback/index.js\n"); /***/ }), /***/ "./src/Global/SplitScreen/index.js": /*!*****************************************!*\ !*** ./src/Global/SplitScreen/index.js ***! \*****************************************/ /*! exports provided: on, off, setSplitDirection, syncSplitData, getState, getActiveId, setActiveId, setActiveViewer, getSdk */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"on\", function() { return on; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"off\", function() { return off; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setSplitDirection\", function() { return setSplitDirection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncSplitData\", function() { return syncSplitData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getState\", function() { return getState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getActiveId\", function() { return getActiveId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setActiveId\", function() { return setActiveId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setActiveViewer\", function() { return setActiveViewer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSdk\", function() { return getSdk; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../global */ \"./src/Global/global.js\");\n/* harmony import */ var _MultiViewportMode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _mouseRightMenu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../mouseRightMenu */ \"./src/Global/mouseRightMenu/index.js\");\n/* harmony import */ var _ClickCallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _ClickCallback__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ClickCallback */ \"./src/Global/SplitScreen/ClickCallback/index.js\");\n/* harmony import */ var _SheetIndex__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../SheetIndex */ \"./src/Global/SheetIndex/index.js\");\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n/**\r\n * 分屏对比\r\n * */\n\n\n\n\n\n\n\n\nvar state = false;\nvar sdkD; // 分屏对象\nvar sdkP; // 主屏对象\nvar activeViewer;\nvar controlViewer;\nvar syncObject = {};\nvar handlers = [];\nvar activeIds;\nvar statusMap = new Map();\n// window.statusMap = statusMap\n// async function init(sdk) {\n// sdkP = sdk\n// activeViewer = 0\n// let tools = new Tools()\n// let sdk2 = await new YJ.YJEarth(sdk.div_id)\n// sdk2.viewer._element.className = 'cesium-viewer 2d'\n// // setTimeout(() => {\n// // let switchCluster = new YJ.Global.switchCluster(sdk2, true)\n// // }, 500);\n// CesiumContainer(sdk2, {\n// compass: false, // 罗盘\n// // legend: false, // 比例尺\n// info: false, // 信息栏\n// frame: false // 刷新率\n// })\n// sdk2.viewer.scene.mode = Cesium.SceneMode.SCENE2D\n// sdkD = await sdk2\n// solveBug()\n// await eventBind(sdk, 0)\n// await eventBind(sdk2, 1)\n// syncObject = { sdks: [sdk, sdk2], tools }\n// await syncData(sdk)\n// sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject)\n\n// sdk.viewer.imageryLayers.layerAdded.addEventListener(syncImageryLayerAdded);\n// sdk.viewer.imageryLayers.layerMoved.addEventListener(syncImageryLayerMoved);\n// sdk.viewer.imageryLayers.layerRemoved.addEventListener(syncImageryLayerRemoved);\n// sdk.viewer.imageryLayers.layerShownOrHidden.addEventListener(syncImageryLayerShownOrHidden);\n// // sdk.viewer.entities.collectionChanged.addEventListener(syncEntities)\n// // sdk.viewer.dataSources.dataSourceAdded.addEventListener(syncDataSources)\n// }\nfunction on(_x) {\n return _on.apply(this, arguments);\n}\nfunction _on() {\n _on = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(sdk) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = true;\n if (sdkD) {} else {\n init(sdk);\n Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_6__[\"off\"])(sdk);\n }\n case 2:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _on.apply(this, arguments);\n}\nfunction off() {\n state = false;\n if (!sdkP) {\n return;\n }\n setSplitDirection(-1, undefined, true);\n var sliderElm = sdkP.viewer._element.getElementsByClassName('YJ-custom-slider')[0];\n var leftElm = sdkP.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n var rightElm = sdkP.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (sliderElm) {\n sdkP.viewer._element.removeChild(sliderElm);\n sdkP.viewer._element.removeChild(leftElm);\n sdkP.viewer._element.removeChild(rightElm);\n }\n sdkP.viewer.scene.preRender.removeEventListener(syncViewer, syncObject);\n sdkP.viewer.imageryLayers.layerAdded.removeEventListener(syncImageryLayerAdded);\n sdkP.viewer.imageryLayers.layerMoved.removeEventListener(syncImageryLayerMoved);\n sdkP.viewer.imageryLayers.layerRemoved.removeEventListener(syncImageryLayerRemoved);\n sdkP.viewer.imageryLayers.layerShownOrHidden.removeEventListener(syncImageryLayerShownOrHidden);\n // sdk.viewer.entities.collectionChanged.removeEventListener(syncEntities)\n // sdk.viewer.dataSources.dataSourceAdded.removeEventListener(syncDataSources)\n\n //primitiveAdded=undefined基元同步设置在add位置\n // sdk.viewer.scene.primitives.primitiveAdded.removeEventListener(syncPrimitivesAdded)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].destroy();\n }\n if (sdkD) {\n var rightBox = sdkP.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].getElementsByClassName('cesium-widget')[1];\n sdkP.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].removeChild(rightBox);\n // sdkD.destroy()\n handlers = [];\n sdkD = null;\n activeViewer = null;\n syncObject = {};\n }\n var leftBox = sdkP.viewer._element.getElementsByClassName('cesium-widget')[0];\n var leftCanvas = leftBox.getElementsByTagName('canvas')[0];\n leftBox.style.width = '100%';\n leftCanvas.style.width = '100%';\n var billboardAttributeBoxs = sdkP.viewer._element.getElementsByClassName('billboard-attribute-box');\n for (var _i = 0; _i < billboardAttributeBoxs.length; _i++) {\n billboardAttributeBoxs[_i].style.display = 'block';\n }\n sdkP = null;\n}\nfunction init(_x2) {\n return _init.apply(this, arguments);\n} // async function syncData(entityId) {\n// if (!sdkP) {\n// return\n// }\n// let entityMapP = sdkP.entityMap\n// let entityMapD = (sdkD && sdkD.entityMap)\n// if (entityId) {\n// let thatD = entityMapD.get(entityId)\n// if (thatD) {\n// let direction = 0\n// if(thatD.show) {\n// direction = \n// }\n// thatD.remove()\n// }\n// setSplitDirection(entityId)\n// }\n// // else {\n// // for (let [key, thatP] of sdkP.entityMap) {\n// // if (!thatP || !thatP.show) {\n// // continue\n// // }\n// // else {\n// // setEvent(key)\n// // }\n// // }\n// // }\n// }\nfunction _init() {\n _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2(sdk) {\n var billboardAttributeBoxs, i, sliderElm, leftElm, rightElm, left, right, _i3, thatP, status, leftBox, leftCanvas, tools, rightBox, rightCanvas, mousemove, changeEntitySplitStatus;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n changeEntitySplitStatus = function _changeEntitySplitSta(v) {\n var value;\n // if (v === undefined || v === null) {\n // if (leftElm.checked && rightElm.checked) {\n // value = 0\n // }\n // else {\n // if (leftElm.checked) {\n // value = -1\n // }\n // if (rightElm.checked) {\n // value = 1\n // }\n // }\n // }\n // else {\n // value = v\n // }\n var _iterator = _createForOfIteratorHelper(statusMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step.value, 2),\n key = _step$value[0],\n _status3 = _step$value[1];\n if (!_status3) {\n value = -1;\n } else if (_status3.P && _status3.D) {\n value = 0;\n } else {\n if (_status3.P) {\n value = -1;\n }\n if (_status3.D) {\n value = 1;\n }\n }\n // else {\n // value = v\n // }\n var entity = sdk.entityMap.get(key);\n // entity && (entity.splitDirection = value)\n entity && setSplitDirection(value, key);\n }\n // if (activeIds && activeIds.length > 0) {\n // for (let i = 0; i < activeIds.length; i++) {\n // let entity = sdk.entityMap.get(activeIds[i])\n // // entity && (entity.splitDirection = value)\n // console.log(entity, activeIds, value)\n // entity && (setSplitDirection(value, entity.options.id))\n // }\n // }\n // else {\n // sdk.entityMap.forEach((item, key) => {\n // // item.splitDirection = value\n // setSplitDirection(value, item.options.id)\n // })\n // }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n };\n mousemove = function _mousemove(a) {\n if (sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0] === a.target || sdk.viewer._element.getElementsByClassName('cesium-widget')[0].getElementsByTagName('canvas')[0] === a.target || sdk.viewer._element.getElementsByClassName('cesium-widget')[1].getElementsByTagName('canvas')[0] === a.target) {\n var offsetX = a.offsetX;\n if (a.offsetX < 60) {\n offsetX = 60;\n }\n if (a.target.width - a.offsetX < 60) {\n offsetX = a.target.width - 60;\n }\n sliderElm.style.left = offsetX / sdk.viewer._element.scrollWidth * 100 + '%';\n leftBox.style.width = offsetX / sdk.viewer._element.scrollWidth * 100 + '%';\n leftCanvas.style.width = 100 / (offsetX / sdk.viewer._element.scrollWidth) + '%';\n rightBox.style.width = (1 - offsetX / sdk.viewer._element.scrollWidth) * 100 + '%';\n rightCanvas.style.width = 100 / (1 - offsetX / sdk.viewer._element.scrollWidth) + '%';\n leftElm.style.left = \"calc(\".concat(offsetX / sdk.viewer._element.scrollWidth * 100, \"% - 50px)\");\n rightElm.style.right = \"calc(\".concat((1 - offsetX / sdk.viewer._element.scrollWidth) * 100, \"% - 50px)\");\n }\n };\n billboardAttributeBoxs = sdk.viewer._element.getElementsByClassName('billboard-attribute-box');\n for (i = 0; i < billboardAttributeBoxs.length; i++) {\n billboardAttributeBoxs[i].style.display = 'none';\n }\n sdk.entityMap.forEach(function (item, key) {\n if (item.type && item.type == 'TrajectoryMotion' && item.viewFollow) {\n item.viewFollow = false;\n }\n });\n sliderElm = sdk.viewer._element.getElementsByClassName('YJ-custom-slider')[0];\n leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (sliderElm) {\n sdk.viewer._element.removeChild(sliderElm);\n sdk.viewer._element.removeChild(leftElm);\n sdk.viewer._element.removeChild(rightElm);\n }\n sliderElm = document.createElement('div');\n sliderElm.className = 'YJ-custom-slider';\n sliderElm.style.position = 'absolute';\n sliderElm.style.left = '50%';\n sliderElm.style.top = '0px';\n leftElm = document.createElement('input');\n leftElm.className = 'YJ-custom-checkbox-left';\n leftElm.type = 'checkbox';\n leftElm.style.position = 'absolute';\n leftElm.style.left = 'calc(50% - 50px)';\n rightElm = document.createElement('input');\n rightElm.className = 'YJ-custom-checkbox-right';\n rightElm.type = 'checkbox';\n rightElm.style.position = 'absolute';\n rightElm.style.right = 'calc(50% - 50px)';\n leftElm.style.display = 'none';\n rightElm.style.display = 'none';\n sdk.viewer._element.appendChild(leftElm);\n sdk.viewer._element.appendChild(rightElm);\n left = 0;\n right = 0;\n if (!activeIds) {\n _context2.next = 43;\n break;\n }\n _i3 = 0;\n case 32:\n if (!(_i3 < activeIds.length)) {\n _context2.next = 43;\n break;\n }\n thatP = sdk.entityMap.get(activeIds[_i3]);\n if (!(!thatP || thatP.type === 'terrain' || !thatP.show || thatP.type === 'TextBox')) {\n _context2.next = 36;\n break;\n }\n return _context2.abrupt(\"continue\", 40);\n case 36:\n leftElm.style.display = 'unset';\n rightElm.style.display = 'unset';\n status = statusMap.get(activeIds[_i3]);\n if (status) {\n if (status.P) {\n left++;\n }\n if (status.D) {\n right++;\n }\n }\n case 40:\n _i3++;\n _context2.next = 32;\n break;\n case 43:\n sdkP = sdk;\n if (!left && !right) {\n left++;\n }\n leftElm.checked = left ? true : false;\n rightElm.checked = right ? true : false;\n leftElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!rightElm.checked) {\n rightElm.checked = true;\n }\n }\n for (var _i4 = 0; _i4 < activeIds.length; _i4++) {\n var _status = statusMap.get(activeIds[_i4]);\n _status = _status || {};\n _status.P = e.target.checked;\n _status.D = rightElm.checked;\n statusMap.set(activeIds[_i4], _status);\n }\n changeEntitySplitStatus();\n });\n rightElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!leftElm.checked) {\n leftElm.checked = true;\n }\n }\n for (var _i5 = 0; _i5 < activeIds.length; _i5++) {\n var _status2 = statusMap.get(activeIds[_i5]);\n _status2 = _status2 || {};\n _status2.P = leftElm.checked;\n _status2.D = e.target.checked;\n statusMap.set(activeIds[_i5], _status2);\n }\n changeEntitySplitStatus();\n });\n sliderElm.addEventListener('mousedown', function () {\n sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].style.cursor = 'e-resize';\n document.body.addEventListener('mousemove', mousemove);\n sliderElm.addEventListener('mouseup', function () {\n sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].style.cursor = 'unset';\n document.body.removeEventListener('mousemove', mousemove);\n });\n });\n sdk.viewer._element.appendChild(sliderElm);\n leftBox = sdk.viewer._element.getElementsByClassName('cesium-widget')[0];\n leftCanvas = leftBox.getElementsByTagName('canvas')[0];\n leftBox.style.width = '50%';\n leftBox.style.left = '0px';\n leftBox.style.overflow = 'hidden';\n leftCanvas.style.width = '200%';\n activeViewer = 0;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n _context2.next = 61;\n return new YJ.YJEarth(sdk.div_id);\n case 61:\n sdkD = _context2.sent;\n if (!Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_8__[\"getLeftClickState\"])()) {\n _context2.next = 65;\n break;\n }\n _context2.next = 65;\n return new _ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"openLeftClick\"](sdkD);\n case 65:\n if (!Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_8__[\"getRightClickState\"])()) {\n _context2.next = 68;\n break;\n }\n _context2.next = 68;\n return new _ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"openRightClick\"](sdkD);\n case 68:\n if (!Object(_ClickCallback__WEBPACK_IMPORTED_MODULE_8__[\"getMoveState\"])()) {\n _context2.next = 71;\n break;\n }\n _context2.next = 71;\n return new _ClickCallback__WEBPACK_IMPORTED_MODULE_9__[\"openMove\"](sdkD);\n case 71:\n if (Object(_mouseRightMenu__WEBPACK_IMPORTED_MODULE_7__[\"getMouseRightMenuStatus\"])(sdk)) {\n Object(_mouseRightMenu__WEBPACK_IMPORTED_MODULE_7__[\"MouseRightMenu\"])(sdkD, true);\n }\n sdkD.viewer._element.style.display = 'none';\n rightBox = document.createElement('div');\n rightBox.className = 'cesium-widget cesium-widget-split';\n rightBox.style.width = '50%';\n rightBox.style.position = 'absolute';\n rightBox.style.right = '0px';\n rightBox.style.overflow = 'hidden';\n rightCanvas = sdkD.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].getElementsByTagName('canvas')[0];\n rightCanvas.style.width = '200%';\n rightCanvas.style.position = 'absolute';\n rightCanvas.style.right = '0px';\n rightBox.appendChild(rightCanvas);\n sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0].appendChild(rightBox);\n document.getElementById(sdk.div_id).removeChild(sdkD.viewer._element);\n _context2.next = 88;\n return eventBind();\n case 88:\n syncObject = {\n sdks: [sdk, sdkD],\n tools: tools\n };\n changeEntitySplitStatus();\n // await setSplitDirection(-1)\n sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject);\n\n // sdk.viewer.imageryLayers.layerAdded.addEventListener(syncImageryLayerAdded);\n sdk.viewer.imageryLayers.layerMoved.addEventListener(syncImageryLayerMoved);\n // sdk.viewer.imageryLayers.layerRemoved.addEventListener(syncImageryLayerRemoved);\n // sdk.viewer.imageryLayers.layerShownOrHidden.addEventListener(syncImageryLayerShownOrHidden);\n\n if (Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"getFlwStatus\"])(sdk)) {\n Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"FlwStatusSwitch\"])(sdkD, true);\n }\n if (Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"getJwwStatus\"])(sdk)) {\n Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"JwwStatusSwitch\"])(sdkD, true);\n }\n if (Object(_SheetIndex__WEBPACK_IMPORTED_MODULE_10__[\"getStatus\"])()) {\n Object(_SheetIndex__WEBPACK_IMPORTED_MODULE_10__[\"SheetIndexStatusSwitch\"])(sdkD, true);\n }\n case 95:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return _init.apply(this, arguments);\n}\nfunction setSplitDirection(_x3, _x4) {\n return _setSplitDirection.apply(this, arguments);\n}\nfunction _setSplitDirection() {\n _setSplitDirection = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee4(v, id) {\n var isoff,\n entityId,\n entityMapP,\n entityMapD,\n thatP,\n _iterator2,\n _step2,\n _step2$value,\n key,\n _thatP,\n setEvent,\n _setEvent,\n _args4 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _setEvent = function _setEvent3() {\n _setEvent = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee3(id, entityId) {\n var status, thatP, thatD, thatPstate, _state, i, _i6, _i7, _i8, _i9, _i10, _i11, _i12, _i13, _i14, _i15, _i16, options, target, _state2, _state3, _i19, _i20, _i21;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n status = {};\n thatP = entityMapP.get(id);\n if (!(!thatP && !thatP.show)) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n thatD = entityMapD && entityMapD.get(id);\n if (!thatD) {\n _context3.next = 42;\n break;\n }\n _context3.t0 = v;\n _context3.next = _context3.t0 === null ? 9 : _context3.t0 === void 0 ? 9 : _context3.t0 === 0 ? 9 : _context3.t0 === '0' ? 9 : _context3.t0 === 1 ? 21 : _context3.t0 === '1' ? 21 : _context3.t0 === -1 ? 32 : _context3.t0 === '-1' ? 32 : 40;\n break;\n case 9:\n status.P = true;\n status.D = true;\n if (thatP.type === 'TrajectoryMotion') {\n thatPstate = function thatPstate(v) {\n thatP.options.state = v;\n cancelAnimationFrame(thatP._requestAnimationFrameEventId);\n if (thatP.editObj) {\n thatP.editObj.destroy();\n thatP.editObj = null;\n }\n if (thatP.TweenAnimate) {\n clearTimeout(thatP.TweenAnimate.timeout);\n if (v) {\n thatP.lineEdit = false;\n if (thatP.TweenAnimate.isPlaying()) {\n thatP.TweenAnimate.timeout = setTimeout(function () {\n thatP.TweenAnimate.resume();\n }, thatP.options.delay);\n } else {\n thatP.TweenAnimate.delay(thatP.delay).start();\n }\n } else {\n var positionCamera = _objectSpread({}, thatP.sdk.viewer.camera._position);\n thatP._requestAnimationFrameEventId = requestAnimationFrame(function fn() {\n if (thatP.firstPersonView) {\n thatP.sdk.viewer.camera.setView({\n destination: _objectSpread({}, positionCamera),\n orientation: {\n heading: thatP.sdk.viewer.camera.heading,\n pitch: thatP.sdk.viewer.camera.pitch,\n roll: thatP.sdk.viewer.camera.roll\n }\n });\n }\n thatP._requestAnimationFrameEventId = requestAnimationFrame(fn);\n });\n thatP.TweenAnimate.pause();\n }\n } else {\n if (v) {\n var positions = thatP.renewLinePositions(thatP.options.line.positions);\n thatP.modelMove(positions);\n }\n }\n };\n if (thatP.entity && thatP.modelShow && !thatP.firstPersonView) {\n thatP.entity.show = true;\n }\n if (thatP.line && thatP.lineShow) {\n thatP.line.show = true;\n }\n if (thatP.realTimeLine && thatP.realTimeRoute) {\n thatP.realTimeLine.show = true;\n }\n if (thatP.TweenAnimate) {\n _state = thatP.state;\n if (_state) {\n thatPstate(false);\n }\n thatD.setMovePositionByDistance(thatP.TweenAnimate._object.distance);\n thatPstate(_state);\n }\n } else if (thatP.type === 'vector') {\n if (thatP.entity) {\n if (entityId) {\n for (i = 0; i < thatP.entity.entities.values.length; i++) {\n if (thatP.entity.entities.values[i].id === entityId) {\n thatP.entity.entities.values[i].show = thatP.entity.entities.values[i]._customShow === false ? false : true;\n }\n }\n } else {\n for (_i6 = 0; _i6 < thatP.entity.entities.values.length; _i6++) {\n thatP.entity.entities.values[_i6].show = thatP.entity.entities.values[_i6]._customShow === false ? false : true;\n }\n }\n }\n } else {\n thatP.entity && (thatP.entity.show = true);\n }\n if (thatP.type === 'PincerArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n thatP.setSpreadProgressByTime(thatP.TweenAnimate._object.distance1 / thatP.TweenAnimate._valuesEnd.distance1 * thatP.spreadTime);\n }\n }\n if (thatP.type === 'AttackArrowObject' || thatP.type === 'StraightArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n thatP.setSpreadProgressByTime(thatP.TweenAnimate._object.distance / thatP.TweenAnimate._valuesEnd.distance * thatP.spreadTime);\n }\n }\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = thatP.textShow;\n thatD.textShow = thatP.textShow;\n }\n if (thatP.label && thatP.labelShow) {\n thatP.labelShow = true;\n }\n if (thatD.label) {\n thatD.label.options.ground = false;\n }\n if (thatD.type === 'vector') {\n if (thatD.entity) {\n if (entityId) {\n for (_i7 = 0; _i7 < thatD.entity.entities.values.length; _i7++) {\n if (thatD.entity.entities.values[_i7].id === entityId) {\n thatD.entity.entities.values[_i7].show = thatP.entity.entities.values[_i7]._customShow === false ? false : true;\n }\n }\n } else {\n for (_i8 = 0; _i8 < thatD.entity.entities.values.length; _i8++) {\n thatD.entity.entities.values[_i8].show = thatP.entity.entities.values[_i8]._customShow === false ? false : true;\n }\n }\n }\n } else {\n thatD.show = true;\n }\n if (thatD.type === 'TrajectoryMotion') {\n thatD.firstPersonView = thatP.firstPersonView;\n }\n if (thatD.type === 'Explosion') {\n thatD.entity.imgIndex = thatP.entity.imgIndex;\n }\n return _context3.abrupt(\"break\", 40);\n case 21:\n status.P = false;\n status.D = true;\n if (thatP.type === 'TrajectoryMotion') {\n thatP.entity && (thatP.entity.show = false);\n thatP.line && (thatP.line.show = false);\n thatP.realTimeLine && (thatP.realTimeLine.show = false);\n } else if (thatP.type === 'vector') {\n if (thatP.entity) {\n if (!entityId) {\n for (_i9 = 0; _i9 < thatP.entity.entities.values.length; _i9++) {\n thatP.entity.entities.values[_i9].show = false;\n }\n } else {\n for (_i10 = 0; _i10 < thatP.entity.entities.values.length; _i10++) {\n if (thatP.entity.entities.values[_i10].id === entityId) {\n thatP.entity.entities.values[_i10].show = false;\n }\n }\n }\n }\n } else {\n thatP.entity && (thatP.entity.show = false);\n }\n if (thatP.type === 'PincerArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n thatP.setSpreadProgressByTime(thatP.TweenAnimate._object.distance1 / thatP.TweenAnimate._valuesEnd.distance1 * thatP.spreadTime);\n }\n }\n if (thatP.type === 'AttackArrowObject' || thatP.type === 'StraightArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n thatP.setSpreadProgressByTime(thatP.TweenAnimate._object.distance / thatP.TweenAnimate._valuesEnd.distance * thatP.spreadTime);\n }\n }\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = false;\n thatD.textShow = thatP.textShow;\n }\n if (thatP.label) {\n thatP.label.entity.show = false;\n }\n if (thatD.label) {\n thatD.label.options.ground = false;\n }\n if (thatD.type === 'vector') {\n if (thatD.entity) {\n if (entityId) {\n for (_i11 = 0; _i11 < thatD.entity.entities.values.length; _i11++) {\n if (thatD.entity.entities.values[_i11].id === entityId) {\n thatD.entity.entities.values[_i11].show = thatP.entity.entities.values[_i11]._customShow === false ? false : true;\n }\n }\n } else {\n for (_i12 = 0; _i12 < thatD.entity.entities.values.length; _i12++) {\n thatD.entity.entities.values[_i12].show = thatP.entity.entities.values[_i12]._customShow === false ? false : true;\n }\n }\n }\n } else {\n thatD.show = true;\n }\n if (thatD.type === 'TrajectoryMotion') {\n thatD.firstPersonView = thatP.firstPersonView;\n }\n return _context3.abrupt(\"break\", 40);\n case 32:\n status.P = true;\n status.D = false;\n if (thatP.type === 'TrajectoryMotion') {\n if (thatP.entity && thatP.modelShow && !thatP.firstPersonView) {\n thatP.entity.show = true;\n }\n if (thatP.line && thatP.lineShow) {\n thatP.line.show = true;\n }\n if (thatP.realTimeLine && thatP.realTimeRoute) {\n thatP.realTimeLine.show = true;\n }\n // if (thatP.TweenAnimate) {\n // let state = thatP.state\n // if (state) {\n // thatP.state = false\n // }\n // thatD.setMovePositionByDistance(thatP.TweenAnimate._object.distance)\n // thatP.state = state\n // }\n } else if (thatP.type === 'vector') {\n if (thatP.entity) {\n if (entityId) {\n for (_i13 = 0; _i13 < thatP.entity.entities.values.length; _i13++) {\n if (thatP.entity.entities.values[_i13].id === entityId) {\n thatP.entity.entities.values[_i13].show = thatP.entity.entities.values[_i13]._customShow === false ? false : true;\n }\n }\n } else {\n for (_i14 = 0; _i14 < thatP.entity.entities.values.length; _i14++) {\n thatP.entity.entities.values[_i14].show = thatP.entity.entities.values[_i14]._customShow === false ? false : true;\n }\n }\n }\n } else {\n thatP.entity && (thatP.entity.show = true);\n }\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = thatP.textShow;\n thatD.textShow = false;\n }\n if (thatP.label && thatP.labelShow) {\n thatP.label.entity.show = true;\n }\n if (thatD.label) {\n thatD.label.options.ground = false;\n }\n if (thatP.type === 'terrain') {\n thatD.show = true;\n } else if (thatD.type === 'vector') {\n if (thatD.entity) {\n if (entityId) {\n for (_i15 = 0; _i15 < thatD.entity.entities.values.length; _i15++) {\n if (thatD.entity.entities.values[_i15].id === entityId) {\n if (thatD.entity.entities.values[_i15].id === entityId) {\n thatD.entity.entities.values[_i15].show = false;\n }\n }\n }\n } else {\n for (_i16 = 0; _i16 < thatD.entity.entities.values.length; _i16++) {\n thatD.entity.entities.values[_i16].show = false;\n }\n }\n }\n } else {\n thatD.show = false;\n }\n return _context3.abrupt(\"break\", 40);\n case 40:\n _context3.next = 120;\n break;\n case 42:\n options = syncObject.tools.deepCopyObj(thatP.options);\n _context3.t1 = v;\n _context3.next = _context3.t1 === null ? 46 : _context3.t1 === void 0 ? 46 : _context3.t1 === 0 ? 46 : _context3.t1 === '0' ? 46 : _context3.t1 === 1 ? 75 : _context3.t1 === '1' ? 75 : _context3.t1 === -1 ? 100 : _context3.t1 === '-1' ? 100 : 120;\n break;\n case 46:\n status.P = true;\n status.D = true;\n options.show = true;\n if (thatP.type === 'layer') {\n options.layer_index = thatP.layer_index;\n }\n _context3.next = 52;\n return new thatP.constructor(sdkD, options);\n case 52:\n target = _context3.sent;\n if (thatP.onClick) {\n target.onClick = thatP.onClick;\n }\n if (thatP.onRightClick) {\n target.onRightClick = thatP.onRightClick;\n }\n if (thatP.onMouseMove) {\n target.onMouseMove = thatP.onMouseMove;\n }\n if (!(thatP.type === 'TrajectoryMotion')) {\n _context3.next = 63;\n break;\n }\n if (thatP.entity && thatP.modelShow && !thatP.firstPersonView) {\n thatP.entity.show = true;\n }\n if (thatP.line && thatP.lineShow) {\n thatP.line.show = true;\n }\n if (thatP.realTimeLine && thatP.realTimeRoute) {\n thatP.realTimeLine.show = true;\n }\n if (thatP.TweenAnimate) {\n _state2 = thatP.state;\n if (_state2) {\n thatP.state = false;\n }\n target.setMovePositionByDistance(thatP.TweenAnimate._object.distance);\n thatP.state = _state2;\n }\n _context3.next = 72;\n break;\n case 63:\n if (!(target.type !== 'glb' && target.on)) {\n _context3.next = 67;\n break;\n }\n if (target.type === 'vector') {\n target.data = thatP.data;\n }\n _context3.next = 67;\n return target.on();\n case 67:\n if (target.type === 'Explosion') {\n target.entity.imgIndex = thatP.entity.imgIndex;\n }\n if (target.type === 'PincerArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n target.setSpreadProgressByTime(thatP.TweenAnimate._object.distance1 / thatP.TweenAnimate._valuesEnd.distance1 * thatP.spreadTime);\n }\n }\n if (target.type === 'AttackArrowObject' || target.type === 'StraightArrowObject') {\n if (thatP.TweenAnimate && !thatP.TweenAnimate._isPaused) {\n target.setSpreadProgressByTime(thatP.TweenAnimate._object.distance / thatP.TweenAnimate._valuesEnd.distance * thatP.spreadTime);\n }\n }\n if (thatP.type === 'vector') {\n target.load(function () {\n if (target.entity) {\n if (entityId) {\n for (var _i17 = 0; _i17 < target.entity.entities.values.length; _i17++) {\n if (target.entity.entities.values[_i17].id === entityId) {\n target.entity.entities.values[_i17].show = thatP.entity.entities.values[_i17]._customShow === false ? false : true;\n }\n }\n } else {\n for (var _i18 = 0; _i18 < target.entity.entities.values.length; _i18++) {\n target.entity.entities.values[_i18].show = thatP.entity.entities.values[_i18]._customShow === false ? false : true;\n }\n }\n }\n });\n }\n thatP.entity && (thatP.entity.show = true);\n case 72:\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = thatP.textShow;\n target.textShow = thatP.textShow;\n }\n if (thatP.label && thatP.labelShow) {\n thatP.label.entity.show = true;\n }\n return _context3.abrupt(\"break\", 120);\n case 75:\n status.P = false;\n status.D = true;\n options.show = true;\n if (thatP.type === 'layer') {\n options.layer_index = thatP.layer_index;\n }\n _context3.next = 81;\n return new thatP.constructor(sdkD, options);\n case 81:\n target = _context3.sent;\n if (thatP.onClick) {\n target.onClick = thatP.onClick;\n }\n if (thatP.onRightClick) {\n target.onRightClick = thatP.onRightClick;\n }\n if (thatP.onMouseMove) {\n target.onMouseMove = thatP.onMouseMove;\n }\n if (!(thatP.type === 'TrajectoryMotion')) {\n _context3.next = 92;\n break;\n }\n if (thatP.entity && thatP.modelShow) {\n thatP.entity.show = false;\n }\n if (thatP.line && thatP.lineShow) {\n thatP.line.show = false;\n }\n if (thatP.realTimeLine && thatP.realTimeRoute) {\n thatP.realTimeLine.show = false;\n }\n if (thatP.TweenAnimate) {\n _state3 = thatP.state;\n if (_state3) {\n thatP.state = false;\n }\n target.setMovePositionByDistance(thatP.TweenAnimate._object.distance);\n thatP.state = _state3;\n }\n _context3.next = 97;\n break;\n case 92:\n if (!(target.type !== 'glb' && target.on)) {\n _context3.next = 96;\n break;\n }\n if (thatP.type === 'vector') {\n target.data = thatP.data;\n if (thatP.entity) {\n for (_i19 = 0; _i19 < thatP.entity.entities.values.length; _i19++) {\n thatP.entity.entities.values[_i19].show = false;\n }\n }\n }\n _context3.next = 96;\n return target.on();\n case 96:\n if (thatP.type === 'vector') {\n if (target.entity) {\n if (entityId) {\n for (_i20 = 0; _i20 < target.entity.entities.values.length; _i20++) {\n if (target.entity.entities.values[_i20].id === entityId) {\n target.entity.entities.values[_i20].show = thatP.entity.entities.values[_i20]._customShow === false ? false : true;\n }\n }\n } else {\n for (_i21 = 0; _i21 < target.entity.entities.values.length; _i21++) {\n target.entity.entities.values[_i21].show = thatP.entity.entities.values[_i21]._customShow === false ? false : true;\n }\n }\n }\n } else {\n thatP.entity && (thatP.entity.show = false);\n }\n case 97:\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = false;\n target.textShow = thatP.textShow;\n }\n if (thatP.label) {\n thatP.label.entity.show = false;\n }\n return _context3.abrupt(\"break\", 120);\n case 100:\n status.P = true;\n status.D = false;\n if (!(thatP.type === 'TrajectoryMotion')) {\n _context3.next = 108;\n break;\n }\n if (thatP.entity && thatP.modelShow && !thatP.firstPersonView) {\n thatP.entity.show = true;\n }\n if (thatP.line && thatP.lineShow) {\n thatP.line.show = true;\n }\n if (thatP.realTimeLine && thatP.realTimeRoute) {\n thatP.realTimeLine.show = true;\n }\n // if (thatP.TweenAnimate) {\n // let state = thatP.state\n // if (state) {\n // thatP.state = false\n // }\n // target.setMovePositionByDistance(thatP.TweenAnimate._object.distance)\n // thatP.state = state\n // }\n _context3.next = 117;\n break;\n case 108:\n thatP.entity && (thatP.entity.show = true);\n if (!(thatP.type === 'terrain')) {\n _context3.next = 117;\n break;\n }\n options.show = true;\n _context3.next = 113;\n return new thatP.constructor(sdkD, options);\n case 113:\n target = _context3.sent;\n if (thatP.onClick) {\n target.onClick = thatP.onClick;\n }\n if (thatP.onRightClick) {\n target.onRightClick = thatP.onRightClick;\n }\n if (thatP.onMouseMove) {\n target.onMouseMove = thatP.onMouseMove;\n }\n case 117:\n if (thatP.type === 'GroundSvg' && thatP.text) {\n thatP.text.show = thatP.textShow;\n target && (target.textShow = false);\n }\n if (thatP.label && thatP.labelShow) {\n thatP.label.entity.show = true;\n }\n return _context3.abrupt(\"break\", 120);\n case 120:\n if (!isoff) {\n statusMap.set(id, status);\n }\n case 121:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return _setEvent.apply(this, arguments);\n };\n setEvent = function _setEvent2(_x6, _x7) {\n return _setEvent.apply(this, arguments);\n };\n isoff = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : false;\n entityId = _args4.length > 3 ? _args4[3] : undefined;\n if (sdkP) {\n _context4.next = 6;\n break;\n }\n return _context4.abrupt(\"return\");\n case 6:\n entityMapP = sdkP.entityMap;\n entityMapD = sdkD && sdkD.entityMap;\n if (!id) {\n _context4.next = 15;\n break;\n }\n thatP = entityMapP.get(id);\n if (!(!thatP || !thatP.show)) {\n _context4.next = 12;\n break;\n }\n return _context4.abrupt(\"return\");\n case 12:\n setEvent(id, entityId);\n _context4.next = 35;\n break;\n case 15:\n _iterator2 = _createForOfIteratorHelper(sdkP.entityMap);\n _context4.prev = 16;\n _iterator2.s();\n case 18:\n if ((_step2 = _iterator2.n()).done) {\n _context4.next = 27;\n break;\n }\n _step2$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step2.value, 2), key = _step2$value[0], _thatP = _step2$value[1];\n if (!(!_thatP || !_thatP.show)) {\n _context4.next = 24;\n break;\n }\n return _context4.abrupt(\"continue\", 25);\n case 24:\n setEvent(key, entityId);\n case 25:\n _context4.next = 18;\n break;\n case 27:\n _context4.next = 32;\n break;\n case 29:\n _context4.prev = 29;\n _context4.t0 = _context4[\"catch\"](16);\n _iterator2.e(_context4.t0);\n case 32:\n _context4.prev = 32;\n _iterator2.f();\n return _context4.finish(32);\n case 35:\n if (!isoff) {\n _context4.next = 37;\n break;\n }\n return _context4.abrupt(\"return\");\n case 37:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, null, [[16, 29, 32, 35]]);\n }));\n return _setSplitDirection.apply(this, arguments);\n}\nfunction syncEntities(entities1, entities2) {\n if (!sdkP) {\n return;\n }\n if (sdkD) {\n if (Array.isArray(entities1) || Array.isArray(entities2)) {\n entities1 = null;\n entities2 = null;\n }\n if (!entities1) {\n entities1 = sdkD.viewer.entities;\n }\n if (!entities2) {\n entities2 = sdkP.viewer.entities;\n }\n var entities2D = entities1;\n var entities3D = entities2;\n for (var i = entities2D.values.length - 1; i >= 0; i--) {\n var flag = false;\n for (var m = entities3D.values.length - 1; m >= 0; m--) {\n if (entities2D.values[i].id === entities3D.values[m].id) {\n flag = true;\n entities2D.values[i] === entities3D.values[m];\n }\n }\n if (!flag) {\n entities2D.remove(entities2D.values[i]);\n }\n }\n for (var _m = entities3D.values.length - 1; _m >= 0; _m--) {\n var _flag = false;\n for (var _i2 = entities2D.values.length - 1; _i2 >= 0; _i2--) {\n if (entities2D.values[_i2].id === entities3D.values[_m].id) {\n _flag = true;\n break;\n }\n }\n if (!_flag) {\n var entity = entities2D.add(entities3D.values[_m]);\n // if (entity.rectangle) {\n // // 设置高度,否则在某些位置无法显示,但色彩会变暗\n // entity.rectangle.height = 0\n // console.log('242342354235',entities3D.values[m])\n // }\n }\n }\n }\n}\nfunction syncDataSources(dataSources, type) {\n if (!sdkP) {\n return;\n }\n if (sdkD) {\n var dataSources2D = sdkD.viewer.dataSources;\n if (dataSources) {\n for (var i = dataSources2D._dataSources.length - 1; i >= 0; i--) {\n if (dataSources2D._dataSources[i].name === dataSources.name) {\n if (type === 'entities') {\n syncEntities(dataSources2D._dataSources[i].entities, dataSources.entities);\n }\n if (type === 'clustering') {\n dataSources2D._dataSources[i].clustering.enabled = dataSources.clustering.enabled;\n }\n }\n }\n }\n // for (let m = dataSources3D._dataSources.length - 1; m >= 0; m--) {\n // let flag = false\n // for (let i = dataSources2D._dataSources.length - 1; i >= 0; i--) {\n // console.log(dataSources2D._dataSources[i].name, dataSources3D._dataSources[m].name)\n // if (dataSources2D._dataSources[i].name === dataSources3D._dataSources[m].name) {\n // flag = true\n // break\n // }\n // }\n // if (!flag) {\n // dataSources2D.add(dataSources3D._dataSources[m])\n // }\n // }\n }\n}\nfunction syncImageryLayerAdded(layer, index) {\n sdkD.viewer.imageryLayers.addImageryProvider(layer.imageryProvider, index);\n}\nfunction syncImageryLayerMoved(layer, newindxe, oldindex) {\n var layerD;\n for (var i = 0; i < sdkD.viewer.imageryLayers._layers.length; i++) {\n if (sdkD.viewer.imageryLayers._layers[i]._id === layer._id) {\n layerD = sdkD.viewer.imageryLayers._layers[i];\n break;\n }\n }\n if (!layerD) {\n return;\n }\n // 移到最底层\n if (newindxe === 0) {\n sdkD.viewer.imageryLayers.lowerToBottom(layerD);\n }\n // 移到最高层\n else if (newindxe === sdkD.viewer.imageryLayers._layers.length - 1) {\n sdkD.viewer.imageryLayers.raiseToTop(layerD);\n } else {\n if (newindxe < oldindex) {\n if (newindxe < sdkD.viewer.imageryLayers._layers.length - 1) {\n sdkD.viewer.imageryLayers.lower(layerD);\n }\n } else {\n sdkD.viewer.imageryLayers.raise(layerD);\n }\n }\n}\nfunction syncImageryLayerRemoved(layer, index) {\n var layerD = sdkD.viewer.imageryLayers._layers[index];\n if (!layerD) {\n return;\n }\n sdkD.viewer.imageryLayers.remove(layerD);\n}\nfunction syncImageryLayerShownOrHidden(layer, index, state) {\n var layerD = sdkD.viewer.imageryLayers._layers[index];\n if (!layerD) {\n return;\n }\n layerD.show = state;\n}\nfunction syncPrimitives(_x5) {\n return _syncPrimitives.apply(this, arguments);\n}\nfunction _syncPrimitives() {\n _syncPrimitives = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee5(primitive) {\n var primitives2D, primitives3D, i, flag, m, _m2, _flag2, _i22;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (sdkP) {\n _context5.next = 2;\n break;\n }\n return _context5.abrupt(\"return\");\n case 2:\n if (sdkD) {\n // await sdkD.viewer.scene.primitives.remove(primitive)\n // await sdkD.viewer.scene.primitives.add(primitive)\n primitives2D = sdkD.viewer.scene.primitives._primitives;\n primitives3D = sdkP.viewer.scene.primitives._primitives; // console.log(primitives2D, primitives3D)\n // setTimeout(() => {\n // sdkD.viewer.scene.primitives._primitives[1] = sdkP.viewer.scene.primitives._primitives[1]\n // }, 2000);\n for (i = primitives2D.length - 1; i >= 1; i--) {\n flag = false;\n for (m = primitives3D.length - 1; m >= 1; m--) {\n if (primitives3D[m].id && primitives2D[m].id && primitives3D[m].id === primitives2D[i].id) {\n flag = true;\n }\n }\n if (!flag) {\n sdkD.viewer.scene.primitives.remove(primitives2D[i]);\n }\n }\n for (_m2 = primitives3D.length - 1; _m2 >= 1; _m2--) {\n _flag2 = false;\n for (_i22 = primitives2D.length - 1; _i22 >= 1; _i22--) {\n if (primitives3D[_m2].id && primitives2D[_m2].id && primitives3D[_m2].id === primitives2D[_i22].id) {\n _flag2 = true;\n primitives2D[_i22].show = primitives3D[_m2].show;\n primitives2D[_i22].startColor = primitives3D[_m2].startColor;\n primitives2D[_i22].endColor = primitives3D[_m2].endColor;\n primitives2D[_i22].minimumSpeed = primitives3D[_m2].minimumSpeed;\n primitives2D[_i22].maximumSpeed = primitives3D[_m2].maximumSpeed;\n primitives2D[_i22].minimumParticleLife = primitives3D[_m2].minimumParticleLife;\n primitives2D[_i22].maximumParticleLife = primitives3D[_m2].maximumParticleLife;\n primitives2D[_i22].startScale = primitives3D[_m2].startScale;\n primitives2D[_i22].endScale = primitives3D[_m2].endScale;\n primitives2D[_i22].emissionRate = primitives3D[_m2].emissionRate;\n primitives2D[_i22].particleSize = primitives3D[_m2].particleSize;\n primitives2D[_i22].modelMatrix = primitives3D[_m2].modelMatrix;\n }\n }\n if (!_flag2) {\n sdkD.viewer.scene.primitives.add(primitives3D[_m2]);\n }\n }\n }\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }));\n return _syncPrimitives.apply(this, arguments);\n}\nfunction eventBind() {\n var handler0 = new Cesium.ScreenSpaceEventHandler(sdkP.viewer._element.getElementsByClassName('cesium-widget')[0]);\n handler0.setInputAction(function () {\n activeViewer = 0;\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n handler0.setInputAction(function () {\n activeViewer = 0;\n }, Cesium.ScreenSpaceEventType.RIGHT_DOWN);\n handler0.setInputAction(function () {\n activeViewer = 0;\n }, Cesium.ScreenSpaceEventType.WHEEL);\n handlers.push(handler0);\n var distanceLegendDiv = document.getElementById('distanceLegendDiv');\n function distanceLegendDivMouseMove(e) {\n activeViewer = 0;\n }\n distanceLegendDiv.addEventListener('mousemove', distanceLegendDivMouseMove);\n handlers.push({\n destroy: function destroy() {\n distanceLegendDiv.removeEventListener('mousemove', distanceLegendDivMouseMove);\n }\n });\n var handler1 = new Cesium.ScreenSpaceEventHandler(sdkP.viewer._element.getElementsByClassName('cesium-widget')[1]);\n handler1.setInputAction(function () {\n activeViewer = 1;\n Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"closeRotateAround\"])(sdkP);\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n handler1.setInputAction(function () {\n activeViewer = 1;\n Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"closeRotateAround\"])(sdkP);\n }, Cesium.ScreenSpaceEventType.RIGHT_DOWN);\n handler1.setInputAction(function () {\n activeViewer = 1;\n Object(_global__WEBPACK_IMPORTED_MODULE_5__[\"closeRotateAround\"])(sdkP);\n }, Cesium.ScreenSpaceEventType.WHEEL);\n handlers.push(handler1);\n}\nfunction syncViewer() {\n var sdk = this.sdks[activeViewer];\n var sdk2;\n if (activeViewer === 0) {\n sdk2 = this.sdks[1];\n } else if (activeViewer === 1) {\n sdk2 = this.sdks[0];\n }\n var destination = sdk.viewer.camera.position;\n // if (this.sdks[0].viewer.trackedEntity) {\n // // console.log(sdk,sdk2)\n // // sdk2.viewer.camera.setView({\n // // orientation: {\n // // heading: sdk.viewer.camera.heading,\n // // pitch: sdk.viewer.camera.pitch,\n // // roll: sdk.viewer.camera.roll\n // // }\n // // })\n // // if(sdk2.viewer.trackedEntity) {\n // // sdk2.viewer.trackedEntity.position = sdk.viewer.trackedEntity.position\n // // }\n // // else {\n // // let trackedEntity = sdk2.viewer.entities.add(sdk.viewer.trackedEntity)\n // // sdk2.viewer.trackedEntity = trackedEntity\n // // }\n // // sdk2.viewer.camera.position = sdk.viewer.camera.position\n // if(!sdk.viewer.trackedEntity) {\n // let id = this.sdks[0].viewer.trackedEntity.id\n // let trackedEntity = sdk2.viewer.entities.getById(id)\n // if(trackedEntity) {\n // trackedEntity.position = this.sdks[0].viewer.trackedEntity.position\n // }\n // else {\n // trackedEntity = sdk2.viewer.entities.add(sdk.viewer.trackedEntity)\n // }\n // sdk.viewer.trackedEntity = trackedEntity\n // }\n // else {\n // sdk.viewer.trackedEntity.position = this.sdks[0].viewer.trackedEntity.position\n // }\n // let distance = Cesium.Cartesian3.distance(sdk.viewer.trackedEntity.position._value, sdk.viewer.camera.positionWC);\n // sdk2.viewer.camera.lookAt(\n // this.sdks[0].viewer.trackedEntity.position._value,\n // new Cesium.HeadingPitchRange(sdk.viewer.camera.heading, sdk.viewer.camera.pitch, distance)\n // )\n // }\n // else {\n // if(this.sdks[1].viewer.trackedEntity) {\n // this.sdks[1].viewer.entities.remove(this.sdks[1].viewer.trackedEntity)\n // this.sdks[1].viewer.trackedEntity = null\n // destination = sdk.viewer.camera.position\n // }\n // sdk2.viewer.camera.setView({\n // destination: destination,\n // orientation: {\n // heading: sdk.viewer.camera.heading,\n // pitch: sdk.viewer.camera.pitch,\n // roll: sdk.viewer.camera.roll\n // }\n // })\n // }\n\n sdk2.viewer.camera.setView({\n destination: destination,\n orientation: {\n heading: sdk.viewer.camera.heading,\n pitch: sdk.viewer.camera.pitch,\n roll: sdk.viewer.camera.roll\n }\n });\n}\nfunction getState() {\n return state;\n}\nfunction getActiveId() {\n return activeIds;\n}\nfunction setActiveId() {\n var ids = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n // console.log('=================================')\n if (Array.isArray(ids)) {\n activeIds = ids;\n } else {\n activeIds = [ids];\n }\n if (!sdkP || !sdkD) {\n return;\n }\n var leftElm = sdkP.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n var rightElm = sdkP.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (!ids || ids.length === 0) {\n if (leftElm && rightElm) {\n leftElm.style.display = 'none';\n rightElm.style.display = 'none';\n }\n } else {\n if (leftElm && rightElm) {\n leftElm.style.display = 'none';\n rightElm.style.display = 'none';\n var left = 0;\n var right = 0;\n for (var i = 0; i < activeIds.length; i++) {\n var status = statusMap.get(activeIds[i]);\n if (!status) {\n status = {\n P: true,\n D: false\n };\n statusMap.set(activeIds[i], status);\n }\n if (status.P) {\n left++;\n }\n if (status.D) {\n right++;\n }\n var thatP = sdkP.entityMap.get(activeIds[i]);\n // let thatD = sdkD.entityMap.get(activeIds[i])\n if (!thatP || thatP.type === 'terrain' || !thatP.show || thatP.type === 'TextBox') {\n continue;\n }\n leftElm.style.display = 'unset';\n rightElm.style.display = 'unset';\n leftElm.checked = false;\n rightElm.checked = false;\n\n // if (thatP) {\n // if (thatP.type === 'TrajectoryMotion') {\n // if (thatP.entity && (thatP.modelShow || thatP.lineShow || thatP.labelShow || thatP.realTimeRoute) && (thatP.entity.show || thatP.line.show || (thatP.label && thatP.label.entity.show) || thatP.realTimeLine.show)) {\n // leftElm.checked = true\n // }\n // }\n // else if (thatP.type === 'vector') {\n // leftElm.checked = status.P\n // }\n // else {\n // if (thatP.entity && thatP.entity.show) {\n // leftElm.checked = true\n // }\n // }\n // }\n // if (thatD) {\n // if (thatP.type === 'TrajectoryMotion') {\n // if (thatD.show && thatD.entity && (thatD.modelShow || thatD.lineShow || thatD.labelShow || thatD.realTimeRoute) && (thatD.entity.show || thatD.line.show || (thatD.label && thatD.label.entity.show) || thatD.realTimeLine.show)) {\n // rightElm.checked = true\n // }\n // }\n // else if (thatP.type === 'vector') {\n // rightElm.checked = status.D\n // }\n // else {\n // if (thatD.show) {\n // rightElm.checked = true\n // }\n // }\n // }\n }\n if (!left && !right) {\n left++;\n }\n leftElm.checked = left ? true : false;\n rightElm.checked = right ? true : false;\n }\n }\n}\nfunction syncSplitData(sdk, id, entityId) {\n if (!sdkP || !sdkD || sdk !== sdkP || !id) {\n return;\n }\n var status = statusMap.get(id);\n var thatP = sdkP.entityMap.get(id);\n var thatD = sdkD.entityMap.get(id);\n if (thatP) {\n var value;\n if (status) {\n if (status.P && status.D) {\n value = 0;\n } else {\n if (status.P) {\n value = -1;\n }\n if (status.D) {\n value = 1;\n }\n }\n } else {\n var leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n var rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (leftElm.style.display === 'none' || rightElm.style.display === 'none') {\n value = -1;\n } else {\n if (leftElm.checked && rightElm.checked) {\n value = 0;\n } else {\n if (leftElm.checked) {\n value = -1;\n }\n if (rightElm.checked) {\n value = 1;\n }\n }\n }\n }\n if (thatD) {\n thatD.options = JSON.parse(JSON.stringify(thatP.options));\n thatD.originalOptions = JSON.parse(JSON.stringify(thatP.options));\n if (thatP.oldData) {\n thatD.oldData = JSON.parse(JSON.stringify(thatP.oldData));\n }\n if (thatD.type === 'TrajectoryMotion') {\n thatD.height = thatD.options.height;\n }\n thatD.reset && thatD.reset();\n if (thatP.show) {\n setSplitDirection(value, id, false, entityId);\n } else {\n thatD.show = false;\n }\n\n // else {\n // thatD.show = false\n // }\n } else {\n var _value = -1;\n // if (thatP.show) {\n // let leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0]\n // let rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0]\n // if (leftElm.checked && rightElm.checked) {\n // value = 0\n // }\n // else {\n // if (leftElm.checked) {\n // value = -1\n // }\n // if (rightElm.checked) {\n // value = 1\n // }\n // }\n // }\n setSplitDirection(_value, id, false, entityId);\n }\n } else {\n thatD && thatD.remove();\n }\n}\nfunction setActiveViewer(v) {\n activeViewer = v;\n}\nfunction getSdk() {\n return {\n sdkP: sdkP,\n sdkD: sdkD\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL1NwbGl0U2NyZWVuL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9TcGxpdFNjcmVlbi9pbmRleC5qcz83MDhkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDliIblsY/lr7nmr5RcclxuICogKi9cclxuaW1wb3J0IFRvb2xzIGZyb20gJy4uLy4uL1Rvb2xzJztcclxuaW1wb3J0IHsgQ2VzaXVtQ29udGFpbmVyLCBjbG9zZVJvdGF0ZUFyb3VuZCB9IGZyb20gJy4uL2dsb2JhbCdcclxuaW1wb3J0IHsgRmx3U3RhdHVzU3dpdGNoLCBKd3dTdGF0dXNTd2l0Y2gsIGdldEZsd1N0YXR1cywgZ2V0Snd3U3RhdHVzIH0gZnJvbSBcIi4uL2dsb2JhbFwiXHJcbmltcG9ydCB7IG9mZiBhcyBvZmZNdWx0aVZpZXdwb3J0TW9kZSB9IGZyb20gJy4uL011bHRpVmlld3BvcnRNb2RlJztcclxuaW1wb3J0IHsgTW91c2VSaWdodE1lbnUsIGdldE1vdXNlUmlnaHRNZW51U3RhdHVzIH0gZnJvbSAnLi4vbW91c2VSaWdodE1lbnUnO1xyXG5pbXBvcnQgeyBnZXRMZWZ0Q2xpY2tTdGF0ZSwgZ2V0UmlnaHRDbGlja1N0YXRlLCBnZXRNb3ZlU3RhdGUgfSBmcm9tICcuLi9DbGlja0NhbGxiYWNrJ1xyXG5pbXBvcnQgeyBvcGVuTGVmdENsaWNrLCBvcGVuUmlnaHRDbGljaywgb3Blbk1vdmUgfSBmcm9tICcuL0NsaWNrQ2FsbGJhY2snXHJcbmltcG9ydCB7IFNoZWV0SW5kZXhTdGF0dXNTd2l0Y2gsIGdldFN0YXR1cyB9IGZyb20gJy4uL1NoZWV0SW5kZXgnXHJcblxyXG5cclxubGV0IHN0YXRlID0gZmFsc2VcclxubGV0IHNka0QgLy8g5YiG5bGP5a+56LGhXHJcbmxldCBzZGtQIC8vIOS4u+Wxj+WvueixoVxyXG5sZXQgYWN0aXZlVmlld2VyXHJcbmxldCBjb250cm9sVmlld2VyXHJcbmxldCBzeW5jT2JqZWN0ID0ge31cclxubGV0IGhhbmRsZXJzID0gW11cclxubGV0IGFjdGl2ZUlkc1xyXG5sZXQgc3RhdHVzTWFwID0gbmV3IE1hcCgpXHJcbi8vIHdpbmRvdy5zdGF0dXNNYXAgPSBzdGF0dXNNYXBcclxuLy8gYXN5bmMgZnVuY3Rpb24gaW5pdChzZGspIHtcclxuLy8gICBzZGtQID0gc2RrXHJcbi8vICAgYWN0aXZlVmlld2VyID0gMFxyXG4vLyAgIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbi8vICAgbGV0IHNkazIgPSBhd2FpdCBuZXcgWUouWUpFYXJ0aChzZGsuZGl2X2lkKVxyXG4vLyAgIHNkazIudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZSA9ICdjZXNpdW0tdmlld2VyIDJkJ1xyXG4vLyAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4vLyAgIC8vICAgbGV0IHN3aXRjaENsdXN0ZXIgPSBuZXcgWUouR2xvYmFsLnN3aXRjaENsdXN0ZXIoc2RrMiwgdHJ1ZSlcclxuLy8gICAvLyB9LCA1MDApO1xyXG4vLyAgIENlc2l1bUNvbnRhaW5lcihzZGsyLCB7XHJcbi8vICAgICBjb21wYXNzOiBmYWxzZSwgLy8g572X55uYXHJcbi8vICAgICAvLyBsZWdlbmQ6IGZhbHNlLCAvLyDmr5TkvovlsLpcclxuLy8gICAgIGluZm86IGZhbHNlLCAvLyDkv6Hmga/moI9cclxuLy8gICAgIGZyYW1lOiBmYWxzZSAvLyDliLfmlrDnjodcclxuLy8gICB9KVxyXG4vLyAgIHNkazIudmlld2VyLnNjZW5lLm1vZGUgPSBDZXNpdW0uU2NlbmVNb2RlLlNDRU5FMkRcclxuLy8gICBzZGtEID0gYXdhaXQgc2RrMlxyXG4vLyAgIHNvbHZlQnVnKClcclxuLy8gICBhd2FpdCBldmVudEJpbmQoc2RrLCAwKVxyXG4vLyAgIGF3YWl0IGV2ZW50QmluZChzZGsyLCAxKVxyXG4vLyAgIHN5bmNPYmplY3QgPSB7IHNka3M6IFtzZGssIHNkazJdLCB0b29scyB9XHJcbi8vICAgYXdhaXQgc3luY0RhdGEoc2RrKVxyXG4vLyAgIHNkay52aWV3ZXIuc2NlbmUucHJlUmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoc3luY1ZpZXdlciwgc3luY09iamVjdClcclxuXHJcbi8vICAgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxheWVyQWRkZWQuYWRkRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyQWRkZWQpO1xyXG4vLyAgIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllck1vdmVkLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllck1vdmVkKTtcclxuLy8gICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJSZW1vdmVkLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllclJlbW92ZWQpO1xyXG4vLyAgIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllclNob3duT3JIaWRkZW4uYWRkRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyU2hvd25PckhpZGRlbik7XHJcbi8vICAgLy8gc2RrLnZpZXdlci5lbnRpdGllcy5jb2xsZWN0aW9uQ2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNFbnRpdGllcylcclxuLy8gICAvLyBzZGsudmlld2VyLmRhdGFTb3VyY2VzLmRhdGFTb3VyY2VBZGRlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNEYXRhU291cmNlcylcclxuLy8gfVxyXG5hc3luYyBmdW5jdGlvbiBvbihzZGspIHtcclxuICBzdGF0ZSA9IHRydWVcclxuICBpZiAoc2RrRCkge1xyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGluaXQoc2RrKVxyXG4gICAgb2ZmTXVsdGlWaWV3cG9ydE1vZGUoc2RrKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gb2ZmKCkge1xyXG4gIHN0YXRlID0gZmFsc2VcclxuICBpZiAoIXNka1ApIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBzZXRTcGxpdERpcmVjdGlvbigtMSwgdW5kZWZpbmVkLCB0cnVlKVxyXG4gIGxldCBzbGlkZXJFbG0gPSBzZGtQLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tc2xpZGVyJylbMF1cclxuICBsZXQgbGVmdEVsbSA9IHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICBsZXQgcmlnaHRFbG0gPSBzZGtQLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnKVswXVxyXG4gIGlmIChzbGlkZXJFbG0pIHtcclxuICAgIHNka1Audmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKHNsaWRlckVsbSlcclxuICAgIHNka1Audmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKGxlZnRFbG0pXHJcbiAgICBzZGtQLnZpZXdlci5fZWxlbWVudC5yZW1vdmVDaGlsZChyaWdodEVsbSlcclxuICB9XHJcbiAgc2RrUC52aWV3ZXIuc2NlbmUucHJlUmVuZGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3luY1ZpZXdlciwgc3luY09iamVjdClcclxuICBzZGtQLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxheWVyQWRkZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyQWRkZWQpO1xyXG4gIHNka1Audmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJNb3ZlZC5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNJbWFnZXJ5TGF5ZXJNb3ZlZCk7XHJcbiAgc2RrUC52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllclJlbW92ZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyUmVtb3ZlZCk7XHJcbiAgc2RrUC52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllclNob3duT3JIaWRkZW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jSW1hZ2VyeUxheWVyU2hvd25PckhpZGRlbik7XHJcbiAgLy8gc2RrLnZpZXdlci5lbnRpdGllcy5jb2xsZWN0aW9uQ2hhbmdlZC5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNFbnRpdGllcylcclxuICAvLyBzZGsudmlld2VyLmRhdGFTb3VyY2VzLmRhdGFTb3VyY2VBZGRlZC5yZW1vdmVFdmVudExpc3RlbmVyKHN5bmNEYXRhU291cmNlcylcclxuXHJcbiAgLy9wcmltaXRpdmVBZGRlZD11bmRlZmluZWTln7rlhYPlkIzmraXorr7nva7lnKhhZGTkvY3nva5cclxuICAvLyBzZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucHJpbWl0aXZlQWRkZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzeW5jUHJpbWl0aXZlc0FkZGVkKVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGhhbmRsZXJzW2ldLmRlc3Ryb3koKVxyXG4gIH1cclxuICBpZiAoc2RrRCkge1xyXG4gICAgbGV0IHJpZ2h0Qm94ID0gc2RrUC52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXZpZXdlci1jZXNpdW1XaWRnZXRDb250YWluZXInKVswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0td2lkZ2V0JylbMV1cclxuICAgIHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS12aWV3ZXItY2VzaXVtV2lkZ2V0Q29udGFpbmVyJylbMF0ucmVtb3ZlQ2hpbGQocmlnaHRCb3gpXHJcbiAgICAvLyBzZGtELmRlc3Ryb3koKVxyXG4gICAgaGFuZGxlcnMgPSBbXVxyXG4gICAgc2RrRCA9IG51bGxcclxuICAgIGFjdGl2ZVZpZXdlciA9IG51bGxcclxuICAgIHN5bmNPYmplY3QgPSB7fVxyXG4gIH1cclxuICBsZXQgbGVmdEJveCA9IHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS13aWRnZXQnKVswXVxyXG4gIGxldCBsZWZ0Q2FudmFzID0gbGVmdEJveC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF1cclxuICBsZWZ0Qm94LnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgbGVmdENhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gIGxldCBiaWxsYm9hcmRBdHRyaWJ1dGVCb3hzID0gc2RrUC52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYmlsbGJvYXJkLWF0dHJpYnV0ZS1ib3gnKVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmlsbGJvYXJkQXR0cmlidXRlQm94cy5sZW5ndGg7IGkrKykge1xyXG4gICAgYmlsbGJvYXJkQXR0cmlidXRlQm94c1tpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gIH1cclxuICBzZGtQID0gbnVsbFxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW5pdChzZGspIHtcclxuICBsZXQgYmlsbGJvYXJkQXR0cmlidXRlQm94cyA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYmlsbGJvYXJkLWF0dHJpYnV0ZS1ib3gnKVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmlsbGJvYXJkQXR0cmlidXRlQm94cy5sZW5ndGg7IGkrKykge1xyXG4gICAgYmlsbGJvYXJkQXR0cmlidXRlQm94c1tpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgfVxyXG5cclxuICBzZGsuZW50aXR5TWFwLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xyXG4gICAgaWYgKGl0ZW0udHlwZSAmJiBpdGVtLnR5cGUgPT0gJ1RyYWplY3RvcnlNb3Rpb24nICYmIGl0ZW0udmlld0ZvbGxvdykge1xyXG4gICAgICBpdGVtLnZpZXdGb2xsb3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgbGV0IHNsaWRlckVsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLXNsaWRlcicpWzBdXHJcbiAgbGV0IGxlZnRFbG0gPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICBsZXQgcmlnaHRFbG0gPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1yaWdodCcpWzBdXHJcbiAgaWYgKHNsaWRlckVsbSkge1xyXG4gICAgc2RrLnZpZXdlci5fZWxlbWVudC5yZW1vdmVDaGlsZChzbGlkZXJFbG0pXHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKGxlZnRFbG0pXHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKHJpZ2h0RWxtKVxyXG4gIH1cclxuICBzbGlkZXJFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBzbGlkZXJFbG0uY2xhc3NOYW1lID0gJ1lKLWN1c3RvbS1zbGlkZXInXHJcbiAgc2xpZGVyRWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gIHNsaWRlckVsbS5zdHlsZS5sZWZ0ID0gJzUwJSdcclxuICBzbGlkZXJFbG0uc3R5bGUudG9wID0gJzBweCdcclxuXHJcbiAgbGVmdEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgbGVmdEVsbS5jbGFzc05hbWUgPSAnWUotY3VzdG9tLWNoZWNrYm94LWxlZnQnXHJcbiAgbGVmdEVsbS50eXBlID0gJ2NoZWNrYm94J1xyXG4gIGxlZnRFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgbGVmdEVsbS5zdHlsZS5sZWZ0ID0gJ2NhbGMoNTAlIC0gNTBweCknXHJcbiAgcmlnaHRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gIHJpZ2h0RWxtLmNsYXNzTmFtZSA9ICdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnXHJcbiAgcmlnaHRFbG0udHlwZSA9ICdjaGVja2JveCdcclxuICByaWdodEVsbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcclxuICByaWdodEVsbS5zdHlsZS5yaWdodCA9ICdjYWxjKDUwJSAtIDUwcHgpJ1xyXG5cclxuICBsZWZ0RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICByaWdodEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcblxyXG4gIHNkay52aWV3ZXIuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobGVmdEVsbSlcclxuICBzZGsudmlld2VyLl9lbGVtZW50LmFwcGVuZENoaWxkKHJpZ2h0RWxtKVxyXG5cclxuICBsZXQgbGVmdCA9IDBcclxuICBsZXQgcmlnaHQgPSAwXHJcbiAgaWYgKGFjdGl2ZUlkcykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVJZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRoYXRQID0gc2RrLmVudGl0eU1hcC5nZXQoYWN0aXZlSWRzW2ldKVxyXG4gICAgICBpZiAoIXRoYXRQIHx8ICh0aGF0UC50eXBlID09PSAndGVycmFpbicgfHwgIXRoYXRQLnNob3cpIHx8IHRoYXRQLnR5cGUgPT09ICdUZXh0Qm94Jykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgbGVmdEVsbS5zdHlsZS5kaXNwbGF5ID0gJ3Vuc2V0J1xyXG4gICAgICByaWdodEVsbS5zdHlsZS5kaXNwbGF5ID0gJ3Vuc2V0J1xyXG4gICAgICBsZXQgc3RhdHVzID0gc3RhdHVzTWFwLmdldChhY3RpdmVJZHNbaV0pXHJcbiAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzLlApIHtcclxuICAgICAgICAgIGxlZnQrK1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhdHVzLkQpIHtcclxuICAgICAgICAgIHJpZ2h0KytcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZGtQID0gc2RrXHJcblxyXG4gIGlmICghbGVmdCAmJiAhcmlnaHQpIHtcclxuICAgIGxlZnQrK1xyXG4gIH1cclxuICBsZWZ0RWxtLmNoZWNrZWQgPSBsZWZ0ID8gdHJ1ZSA6IGZhbHNlXHJcbiAgcmlnaHRFbG0uY2hlY2tlZCA9IHJpZ2h0ID8gdHJ1ZSA6IGZhbHNlXHJcbiAgbGVmdEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgaWYgKCFlLnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIGlmICghcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBzdGF0dXMgPSBzdGF0dXNNYXAuZ2V0KGFjdGl2ZUlkc1tpXSlcclxuICAgICAgc3RhdHVzID0gc3RhdHVzIHx8IHt9XHJcbiAgICAgIHN0YXR1cy5QID0gZS50YXJnZXQuY2hlY2tlZFxyXG4gICAgICBzdGF0dXMuRCA9IHJpZ2h0RWxtLmNoZWNrZWRcclxuICAgICAgc3RhdHVzTWFwLnNldChhY3RpdmVJZHNbaV0sIHN0YXR1cylcclxuICAgIH1cclxuICAgIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKClcclxuICB9KVxyXG4gIHJpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICBpZiAoIWUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgaWYgKCFsZWZ0RWxtLmNoZWNrZWQpIHtcclxuICAgICAgICBsZWZ0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBzdGF0dXMgPSBzdGF0dXNNYXAuZ2V0KGFjdGl2ZUlkc1tpXSlcclxuICAgICAgc3RhdHVzID0gc3RhdHVzIHx8IHt9XHJcbiAgICAgIHN0YXR1cy5QID0gbGVmdEVsbS5jaGVja2VkXHJcbiAgICAgIHN0YXR1cy5EID0gZS50YXJnZXQuY2hlY2tlZFxyXG4gICAgICBzdGF0dXNNYXAuc2V0KGFjdGl2ZUlkc1tpXSwgc3RhdHVzKVxyXG4gICAgfVxyXG4gICAgY2hhbmdlRW50aXR5U3BsaXRTdGF0dXMoKVxyXG4gIH0pXHJcblxyXG4gIHNsaWRlckVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB7XHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS12aWV3ZXItY2VzaXVtV2lkZ2V0Q29udGFpbmVyJylbMF0uc3R5bGUuY3Vyc29yID0gJ2UtcmVzaXplJ1xyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpXHJcbiAgICBzbGlkZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHtcclxuICAgICAgc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0tdmlld2VyLWNlc2l1bVdpZGdldENvbnRhaW5lcicpWzBdLnN0eWxlLmN1cnNvciA9ICd1bnNldCdcclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpXHJcbiAgICB9KVxyXG4gIH0pXHJcblxyXG4gIHNkay52aWV3ZXIuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoc2xpZGVyRWxtKVxyXG5cclxuXHJcbiAgbGV0IGxlZnRCb3ggPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS13aWRnZXQnKVswXVxyXG4gIGxldCBsZWZ0Q2FudmFzID0gbGVmdEJveC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF1cclxuICBsZWZ0Qm94LnN0eWxlLndpZHRoID0gJzUwJSdcclxuICBsZWZ0Qm94LnN0eWxlLmxlZnQgPSAnMHB4J1xyXG4gIGxlZnRCb3guc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xyXG4gIGxlZnRDYW52YXMuc3R5bGUud2lkdGggPSAnMjAwJSdcclxuXHJcbiAgYWN0aXZlVmlld2VyID0gMFxyXG4gIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgc2RrRCA9IGF3YWl0IG5ldyBZSi5ZSkVhcnRoKHNkay5kaXZfaWQpXHJcbiAgaWYgKGdldExlZnRDbGlja1N0YXRlKCkpIHtcclxuICAgIGF3YWl0IG5ldyBvcGVuTGVmdENsaWNrKHNka0QpXHJcbiAgfVxyXG4gIGlmIChnZXRSaWdodENsaWNrU3RhdGUoKSkge1xyXG4gICAgYXdhaXQgbmV3IG9wZW5SaWdodENsaWNrKHNka0QpXHJcbiAgfVxyXG4gIGlmIChnZXRNb3ZlU3RhdGUoKSkge1xyXG4gICAgYXdhaXQgbmV3IG9wZW5Nb3ZlKHNka0QpXHJcbiAgfVxyXG4gIGlmIChnZXRNb3VzZVJpZ2h0TWVudVN0YXR1cyhzZGspKSB7XHJcbiAgICBNb3VzZVJpZ2h0TWVudShzZGtELCB0cnVlKVxyXG4gIH1cclxuICBzZGtELnZpZXdlci5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgbGV0IHJpZ2h0Qm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgcmlnaHRCb3guY2xhc3NOYW1lID0gJ2Nlc2l1bS13aWRnZXQgY2VzaXVtLXdpZGdldC1zcGxpdCdcclxuICByaWdodEJveC5zdHlsZS53aWR0aCA9ICc1MCUnXHJcbiAgcmlnaHRCb3guc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgcmlnaHRCb3guc3R5bGUucmlnaHQgPSAnMHB4J1xyXG4gIHJpZ2h0Qm94LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcclxuICBsZXQgcmlnaHRDYW52YXMgPSBzZGtELnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0tdmlld2VyLWNlc2l1bVdpZGdldENvbnRhaW5lcicpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXVxyXG4gIHJpZ2h0Q2FudmFzLnN0eWxlLndpZHRoID0gJzIwMCUnXHJcbiAgcmlnaHRDYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgcmlnaHRDYW52YXMuc3R5bGUucmlnaHQgPSAnMHB4J1xyXG4gIHJpZ2h0Qm94LmFwcGVuZENoaWxkKHJpZ2h0Q2FudmFzKVxyXG4gIHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXZpZXdlci1jZXNpdW1XaWRnZXRDb250YWluZXInKVswXS5hcHBlbmRDaGlsZChyaWdodEJveClcclxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZGsuZGl2X2lkKS5yZW1vdmVDaGlsZChzZGtELnZpZXdlci5fZWxlbWVudClcclxuXHJcbiAgZnVuY3Rpb24gbW91c2Vtb3ZlKGEpIHtcclxuICAgIGlmIChzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS12aWV3ZXItY2VzaXVtV2lkZ2V0Q29udGFpbmVyJylbMF0gPT09IGEudGFyZ2V0IHx8XHJcbiAgICAgIHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXdpZGdldCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXSA9PT0gYS50YXJnZXQgfHxcclxuICAgICAgc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0td2lkZ2V0JylbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdID09PSBhLnRhcmdldCkge1xyXG4gICAgICBsZXQgb2Zmc2V0WCA9IGEub2Zmc2V0WFxyXG4gICAgICBpZiAoYS5vZmZzZXRYIDwgNjApIHtcclxuICAgICAgICBvZmZzZXRYID0gNjBcclxuICAgICAgfVxyXG4gICAgICBpZiAoKGEudGFyZ2V0LndpZHRoIC0gYS5vZmZzZXRYKSA8IDYwKSB7XHJcbiAgICAgICAgb2Zmc2V0WCA9IGEudGFyZ2V0LndpZHRoIC0gNjBcclxuICAgICAgfVxyXG4gICAgICBzbGlkZXJFbG0uc3R5bGUubGVmdCA9IChvZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCAqIDEwMCkgKyAnJSdcclxuICAgICAgbGVmdEJveC5zdHlsZS53aWR0aCA9IChvZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCkgKiAxMDAgKyAnJSdcclxuICAgICAgbGVmdENhbnZhcy5zdHlsZS53aWR0aCA9IDEwMCAvIChvZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCkgKyAnJSdcclxuICAgICAgcmlnaHRCb3guc3R5bGUud2lkdGggPSAoMSAtIChvZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCkpICogMTAwICsgJyUnXHJcbiAgICAgIHJpZ2h0Q2FudmFzLnN0eWxlLndpZHRoID0gMTAwIC8gKDEgLSAob2Zmc2V0WCAvIHNkay52aWV3ZXIuX2VsZW1lbnQuc2Nyb2xsV2lkdGgpKSArICclJ1xyXG4gICAgICBsZWZ0RWxtLnN0eWxlLmxlZnQgPSBgY2FsYygkeyhvZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCkgKiAxMDB9JSAtIDUwcHgpYFxyXG4gICAgICByaWdodEVsbS5zdHlsZS5yaWdodCA9IGBjYWxjKCR7KDEgLSAob2Zmc2V0WCAvIHNkay52aWV3ZXIuX2VsZW1lbnQuc2Nyb2xsV2lkdGgpKSAqIDEwMH0lIC0gNTBweClgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhd2FpdCBldmVudEJpbmQoKVxyXG4gIHN5bmNPYmplY3QgPSB7IHNka3M6IFtzZGssIHNka0RdLCB0b29scyB9XHJcblxyXG4gIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKClcclxuICAvLyBhd2FpdCBzZXRTcGxpdERpcmVjdGlvbigtMSlcclxuICBzZGsudmlld2VyLnNjZW5lLnByZVJlbmRlci5hZGRFdmVudExpc3RlbmVyKHN5bmNWaWV3ZXIsIHN5bmNPYmplY3QpXHJcblxyXG4gIC8vIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5sYXllckFkZGVkLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllckFkZGVkKTtcclxuICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJNb3ZlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNJbWFnZXJ5TGF5ZXJNb3ZlZCk7XHJcbiAgLy8gc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxheWVyUmVtb3ZlZC5hZGRFdmVudExpc3RlbmVyKHN5bmNJbWFnZXJ5TGF5ZXJSZW1vdmVkKTtcclxuICAvLyBzZGsudmlld2VyLmltYWdlcnlMYXllcnMubGF5ZXJTaG93bk9ySGlkZGVuLmFkZEV2ZW50TGlzdGVuZXIoc3luY0ltYWdlcnlMYXllclNob3duT3JIaWRkZW4pO1xyXG5cclxuICBpZiAoZ2V0Rmx3U3RhdHVzKHNkaykpIHtcclxuICAgIEZsd1N0YXR1c1N3aXRjaChzZGtELCB0cnVlKVxyXG4gIH1cclxuICBpZiAoZ2V0Snd3U3RhdHVzKHNkaykpIHtcclxuICAgIEp3d1N0YXR1c1N3aXRjaChzZGtELCB0cnVlKVxyXG4gIH1cclxuICBpZiAoZ2V0U3RhdHVzKCkpIHtcclxuICAgIFNoZWV0SW5kZXhTdGF0dXNTd2l0Y2goc2RrRCwgdHJ1ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKHYpIHtcclxuICAgIGxldCB2YWx1ZVxyXG4gICAgLy8gaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSB7XHJcbiAgICAvLyAgIGlmIChsZWZ0RWxtLmNoZWNrZWQgJiYgcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgLy8gICAgIHZhbHVlID0gMFxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGVsc2Uge1xyXG4gICAgLy8gICAgIGlmIChsZWZ0RWxtLmNoZWNrZWQpIHtcclxuICAgIC8vICAgICAgIHZhbHVlID0gLTFcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKHJpZ2h0RWxtLmNoZWNrZWQpIHtcclxuICAgIC8vICAgICAgIHZhbHVlID0gMVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHZhbHVlID0gdlxyXG4gICAgLy8gfVxyXG4gICAgZm9yIChsZXQgW2tleSwgc3RhdHVzXSBvZiBzdGF0dXNNYXApIHtcclxuICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICB2YWx1ZSA9IC0xXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoc3RhdHVzLlAgJiYgc3RhdHVzLkQpIHtcclxuICAgICAgICB2YWx1ZSA9IDBcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoc3RhdHVzLlApIHtcclxuICAgICAgICAgIHZhbHVlID0gLTFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXR1cy5EKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IDFcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdmFsdWUgPSB2XHJcbiAgICAgIC8vIH1cclxuICAgICAgbGV0IGVudGl0eSA9IHNkay5lbnRpdHlNYXAuZ2V0KGtleSlcclxuICAgICAgLy8gZW50aXR5ICYmIChlbnRpdHkuc3BsaXREaXJlY3Rpb24gPSB2YWx1ZSlcclxuICAgICAgZW50aXR5ICYmIChzZXRTcGxpdERpcmVjdGlvbih2YWx1ZSwga2V5KSlcclxuICAgIH1cclxuICAgIC8vIGlmIChhY3RpdmVJZHMgJiYgYWN0aXZlSWRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVJZHMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICBsZXQgZW50aXR5ID0gc2RrLmVudGl0eU1hcC5nZXQoYWN0aXZlSWRzW2ldKVxyXG4gICAgLy8gICAgIC8vIGVudGl0eSAmJiAoZW50aXR5LnNwbGl0RGlyZWN0aW9uID0gdmFsdWUpXHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coZW50aXR5LCBhY3RpdmVJZHMsIHZhbHVlKVxyXG4gICAgLy8gICAgIGVudGl0eSAmJiAoc2V0U3BsaXREaXJlY3Rpb24odmFsdWUsIGVudGl0eS5vcHRpb25zLmlkKSlcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHNkay5lbnRpdHlNYXAuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAvLyAgICAgLy8gaXRlbS5zcGxpdERpcmVjdGlvbiA9IHZhbHVlXHJcbiAgICAvLyAgICAgc2V0U3BsaXREaXJlY3Rpb24odmFsdWUsIGl0ZW0ub3B0aW9ucy5pZClcclxuICAgIC8vICAgfSlcclxuICAgIC8vIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIGFzeW5jIGZ1bmN0aW9uIHN5bmNEYXRhKGVudGl0eUlkKSB7XHJcbi8vICAgICBpZiAoIXNka1ApIHtcclxuLy8gICAgICAgcmV0dXJuXHJcbi8vICAgICB9XHJcbi8vICAgICBsZXQgZW50aXR5TWFwUCA9IHNka1AuZW50aXR5TWFwXHJcbi8vICAgICBsZXQgZW50aXR5TWFwRCA9IChzZGtEICYmIHNka0QuZW50aXR5TWFwKVxyXG4vLyAgICAgaWYgKGVudGl0eUlkKSB7XHJcbi8vICAgICAgIGxldCB0aGF0RCA9IGVudGl0eU1hcEQuZ2V0KGVudGl0eUlkKVxyXG4vLyAgICAgICBpZiAodGhhdEQpIHtcclxuLy8gICAgICAgICBsZXQgZGlyZWN0aW9uID0gMFxyXG4vLyAgICAgICAgIGlmKHRoYXRELnNob3cpIHtcclxuLy8gICAgICAgICAgIGRpcmVjdGlvbiA9IFxyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgICB0aGF0RC5yZW1vdmUoKVxyXG4vLyAgICAgICB9XHJcbi8vICAgICAgIHNldFNwbGl0RGlyZWN0aW9uKGVudGl0eUlkKVxyXG4vLyAgICAgfVxyXG4vLyAgICAgLy8gZWxzZSB7XHJcbi8vICAgICAvLyAgIGZvciAobGV0IFtrZXksIHRoYXRQXSBvZiBzZGtQLmVudGl0eU1hcCkge1xyXG4vLyAgICAgLy8gICAgIGlmICghdGhhdFAgfHwgIXRoYXRQLnNob3cpIHtcclxuLy8gICAgIC8vICAgICAgIGNvbnRpbnVlXHJcbi8vICAgICAvLyAgICAgfVxyXG4vLyAgICAgLy8gICAgIGVsc2Uge1xyXG4vLyAgICAgLy8gICAgICAgc2V0RXZlbnQoa2V5KVxyXG4vLyAgICAgLy8gICAgIH1cclxuLy8gICAgIC8vICAgfVxyXG4vLyAgICAgLy8gfVxyXG4vLyAgIH1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHNldFNwbGl0RGlyZWN0aW9uKHYsIGlkLCBpc29mZiA9IGZhbHNlLCBlbnRpdHlJZCkge1xyXG4gIGlmICghc2RrUCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBsZXQgZW50aXR5TWFwUCA9IHNka1AuZW50aXR5TWFwXHJcbiAgbGV0IGVudGl0eU1hcEQgPSAoc2RrRCAmJiBzZGtELmVudGl0eU1hcClcclxuICBpZiAoaWQpIHtcclxuICAgIGxldCB0aGF0UCA9IGVudGl0eU1hcFAuZ2V0KGlkKVxyXG4gICAgaWYgKCF0aGF0UCB8fCAhdGhhdFAuc2hvdykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEV2ZW50KGlkLCBlbnRpdHlJZClcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBmb3IgKGxldCBba2V5LCB0aGF0UF0gb2Ygc2RrUC5lbnRpdHlNYXApIHtcclxuICAgICAgaWYgKCF0aGF0UCB8fCAhdGhhdFAuc2hvdykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2V0RXZlbnQoa2V5LCBlbnRpdHlJZClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZnVuY3Rpb24gc2V0RXZlbnQoaWQsIGVudGl0eUlkKSB7XHJcbiAgICBsZXQgc3RhdHVzID0ge31cclxuICAgIGxldCB0aGF0UCA9IGVudGl0eU1hcFAuZ2V0KGlkKVxyXG4gICAgaWYgKCF0aGF0UCAmJiAhdGhhdFAuc2hvdykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0aGF0RCA9IChlbnRpdHlNYXBEICYmIGVudGl0eU1hcEQuZ2V0KGlkKSlcclxuICAgIGlmICh0aGF0RCkge1xyXG4gICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgY2FzZSB2b2lkIDA6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgc3RhdHVzLlAgPSB0cnVlXHJcbiAgICAgICAgICBzdGF0dXMuRCA9IHRydWVcclxuICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAnVHJhamVjdG9yeU1vdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKHRoYXRQLmVudGl0eSAmJiB0aGF0UC5tb2RlbFNob3cgJiYgIXRoYXRQLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5saW5lICYmIHRoYXRQLmxpbmVTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAubGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5yZWFsVGltZUxpbmUgJiYgdGhhdFAucmVhbFRpbWVSb3V0ZSkge1xyXG4gICAgICAgICAgICAgIHRoYXRQLnJlYWxUaW1lTGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGF0UC5zdGF0ZVxyXG4gICAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhhdFBzdGF0ZShmYWxzZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhhdEQuc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZSh0aGF0UC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSlcclxuICAgICAgICAgICAgICB0aGF0UHN0YXRlKHN0YXRlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiB0aGF0UHN0YXRlKHYpIHtcclxuICAgICAgICAgICAgICB0aGF0UC5vcHRpb25zLnN0YXRlID0gdlxyXG4gICAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoYXRQLl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkKVxyXG4gICAgICAgICAgICAgIGlmICh0aGF0UC5lZGl0T2JqKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0UC5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgICAgdGhhdFAuZWRpdE9iaiA9IG51bGxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoYXRQLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoYXRQLlR3ZWVuQW5pbWF0ZS50aW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdFAubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhhdFAuVHdlZW5BbmltYXRlLmlzUGxheWluZygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFAuVHdlZW5BbmltYXRlLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoYXRQLlR3ZWVuQW5pbWF0ZS5yZXN1bWUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoYXRQLm9wdGlvbnMuZGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRQLlR3ZWVuQW5pbWF0ZS5kZWxheSh0aGF0UC5kZWxheSkuc3RhcnQoKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uQ2FtZXJhID0geyAuLi50aGF0UC5zZGsudmlld2VyLmNhbWVyYS5fcG9zaXRpb24gfVxyXG4gICAgICAgICAgICAgICAgICB0aGF0UC5fcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBmbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdFAuZmlyc3RQZXJzb25WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0UC5zZGsudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb246IHsgLi4ucG9zaXRpb25DYW1lcmEgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nOiB0aGF0UC5zZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiB0aGF0UC5zZGsudmlld2VyLmNhbWVyYS5waXRjaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xsOiB0aGF0UC5zZGsudmlld2VyLmNhbWVyYS5yb2xsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRQLl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB0aGF0UC5Ud2VlbkFuaW1hdGUucGF1c2UoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0UC5yZW5ld0xpbmVQb3NpdGlvbnModGhhdFAub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgICAgdGhhdFAubW9kZWxNb3ZlKHBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoYXRQLnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICBpZiAoZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5pZCA9PT0gZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhhdFAuZW50aXR5ICYmICh0aGF0UC5lbnRpdHkuc2hvdyA9IHRydWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAudHlwZSA9PT0gJ1BpbmNlckFycm93T2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAodGhhdFAuVHdlZW5BbmltYXRlICYmICF0aGF0UC5Ud2VlbkFuaW1hdGUuX2lzUGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAuc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUodGhhdFAuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UxIC8gdGhhdFAuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UxICogdGhhdFAuc3ByZWFkVGltZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdBdHRhY2tBcnJvd09iamVjdCcgfHwgdGhhdFAudHlwZSA9PT0gJ1N0cmFpZ2h0QXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5Ud2VlbkFuaW1hdGUgJiYgIXRoYXRQLlR3ZWVuQW5pbWF0ZS5faXNQYXVzZWQpIHtcclxuICAgICAgICAgICAgICB0aGF0UC5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZSh0aGF0UC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSAvIHRoYXRQLlR3ZWVuQW5pbWF0ZS5fdmFsdWVzRW5kLmRpc3RhbmNlICogdGhhdFAuc3ByZWFkVGltZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdHcm91bmRTdmcnICYmIHRoYXRQLnRleHQpIHtcclxuICAgICAgICAgICAgdGhhdFAudGV4dC5zaG93ID0gdGhhdFAudGV4dFNob3dcclxuICAgICAgICAgICAgdGhhdEQudGV4dFNob3cgPSB0aGF0UC50ZXh0U2hvd1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLmxhYmVsICYmIHRoYXRQLmxhYmVsU2hvdykge1xyXG4gICAgICAgICAgICB0aGF0UC5sYWJlbFNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdEQubGFiZWwpIHtcclxuICAgICAgICAgICAgdGhhdEQubGFiZWwub3B0aW9ucy5ncm91bmQgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRELnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0RC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICBpZiAoZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdEQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhhdEQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5pZCA9PT0gZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRELmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhhdEQuc2hvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0RC50eXBlID09PSAnVHJhamVjdG9yeU1vdGlvbicpIHtcclxuICAgICAgICAgICAgdGhhdEQuZmlyc3RQZXJzb25WaWV3ID0gdGhhdFAuZmlyc3RQZXJzb25WaWV3XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdEQudHlwZSA9PT0gJ0V4cGxvc2lvbicpIHtcclxuICAgICAgICAgICAgdGhhdEQuZW50aXR5LmltZ0luZGV4ID0gdGhhdFAuZW50aXR5LmltZ0luZGV4XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIHN0YXR1cy5QID0gZmFsc2VcclxuICAgICAgICAgIHN0YXR1cy5EID0gdHJ1ZVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdUcmFqZWN0b3J5TW90aW9uJykge1xyXG4gICAgICAgICAgICB0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLmVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgICAgIHRoYXRQLmxpbmUgJiYgKHRoYXRQLmxpbmUuc2hvdyA9IGZhbHNlKVxyXG4gICAgICAgICAgICB0aGF0UC5yZWFsVGltZUxpbmUgJiYgKHRoYXRQLnJlYWxUaW1lTGluZS5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGF0UC50eXBlID09PSAndmVjdG9yJykge1xyXG4gICAgICAgICAgICBpZiAodGhhdFAuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFlbnRpdHlJZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLmlkID09PSBlbnRpdHlJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLmVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAudHlwZSA9PT0gJ1BpbmNlckFycm93T2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAodGhhdFAuVHdlZW5BbmltYXRlICYmICF0aGF0UC5Ud2VlbkFuaW1hdGUuX2lzUGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAuc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUodGhhdFAuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UxIC8gdGhhdFAuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UxICogdGhhdFAuc3ByZWFkVGltZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdBdHRhY2tBcnJvd09iamVjdCcgfHwgdGhhdFAudHlwZSA9PT0gJ1N0cmFpZ2h0QXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5Ud2VlbkFuaW1hdGUgJiYgIXRoYXRQLlR3ZWVuQW5pbWF0ZS5faXNQYXVzZWQpIHtcclxuICAgICAgICAgICAgICB0aGF0UC5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZSh0aGF0UC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSAvIHRoYXRQLlR3ZWVuQW5pbWF0ZS5fdmFsdWVzRW5kLmRpc3RhbmNlICogdGhhdFAuc3ByZWFkVGltZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAnR3JvdW5kU3ZnJyAmJiB0aGF0UC50ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoYXRQLnRleHQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoYXRELnRleHRTaG93ID0gdGhhdFAudGV4dFNob3dcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0UC5sYWJlbCkge1xyXG4gICAgICAgICAgICB0aGF0UC5sYWJlbC5lbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdEQubGFiZWwpIHtcclxuICAgICAgICAgICAgdGhhdEQubGFiZWwub3B0aW9ucy5ncm91bmQgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRELnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0RC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICBpZiAoZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdEQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhhdEQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5pZCA9PT0gZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRELmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoYXRELnNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdEQudHlwZSA9PT0gJ1RyYWplY3RvcnlNb3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoYXRELmZpcnN0UGVyc29uVmlldyA9IHRoYXRQLmZpcnN0UGVyc29uVmlld1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIC0xOlxyXG4gICAgICAgIGNhc2UgJy0xJzpcclxuICAgICAgICAgIHN0YXR1cy5QID0gdHJ1ZVxyXG4gICAgICAgICAgc3RhdHVzLkQgPSBmYWxzZVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdUcmFqZWN0b3J5TW90aW9uJykge1xyXG4gICAgICAgICAgICBpZiAodGhhdFAuZW50aXR5ICYmIHRoYXRQLm1vZGVsU2hvdyAmJiAhdGhhdFAuZmlyc3RQZXJzb25WaWV3KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAuZW50aXR5LnNob3cgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXRQLmxpbmUgJiYgdGhhdFAubGluZVNob3cpIHtcclxuICAgICAgICAgICAgICB0aGF0UC5saW5lLnNob3cgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXRQLnJlYWxUaW1lTGluZSAmJiB0aGF0UC5yZWFsVGltZVJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAucmVhbFRpbWVMaW5lLnNob3cgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgKHRoYXRQLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICAgICAgICAvLyAgIGxldCBzdGF0ZSA9IHRoYXRQLnN0YXRlXHJcbiAgICAgICAgICAgIC8vICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGF0UC5zdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyAgIHRoYXRELnNldE1vdmVQb3NpdGlvbkJ5RGlzdGFuY2UodGhhdFAuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UpXHJcbiAgICAgICAgICAgIC8vICAgdGhhdFAuc3RhdGUgPSBzdGF0ZVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGF0UC50eXBlID09PSAndmVjdG9yJykge1xyXG4gICAgICAgICAgICBpZiAodGhhdFAuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQgPT09IGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5fY3VzdG9tU2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoYXRQLmVudGl0eSAmJiAodGhhdFAuZW50aXR5LnNob3cgPSB0cnVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdHcm91bmRTdmcnICYmIHRoYXRQLnRleHQpIHtcclxuICAgICAgICAgICAgdGhhdFAudGV4dC5zaG93ID0gdGhhdFAudGV4dFNob3dcclxuICAgICAgICAgICAgdGhhdEQudGV4dFNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLmxhYmVsICYmIHRoYXRQLmxhYmVsU2hvdykge1xyXG4gICAgICAgICAgICB0aGF0UC5sYWJlbC5lbnRpdHkuc2hvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0RC5sYWJlbCkge1xyXG4gICAgICAgICAgICB0aGF0RC5sYWJlbC5vcHRpb25zLmdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAudHlwZSA9PT0gJ3RlcnJhaW4nKSB7XHJcbiAgICAgICAgICAgIHRoYXRELnNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGF0RC50eXBlID09PSAndmVjdG9yJykge1xyXG4gICAgICAgICAgICBpZiAodGhhdEQuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXRELmVudGl0eS5lbnRpdGllcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoYXRELmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQgPT09IGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXRELmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQgPT09IGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdEQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0RC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoYXRELnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBvcHRpb25zID0gc3luY09iamVjdC50b29scy5kZWVwQ29weU9iaih0aGF0UC5vcHRpb25zKVxyXG4gICAgICBsZXQgdGFyZ2V0XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICBjYXNlIHZvaWQgMDpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICBzdGF0dXMuUCA9IHRydWVcclxuICAgICAgICAgIHN0YXR1cy5EID0gdHJ1ZVxyXG4gICAgICAgICAgb3B0aW9ucy5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgaWYodGhhdFAudHlwZT09PSdsYXllcicpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5sYXllcl9pbmRleCA9IHRoYXRQLmxheWVyX2luZGV4XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YXJnZXQgPSBhd2FpdCBuZXcgdGhhdFAuY29uc3RydWN0b3Ioc2RrRCwgb3B0aW9ucylcclxuICAgICAgICAgIGlmICh0aGF0UC5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5vbkNsaWNrID0gdGhhdFAub25DbGlja1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLm9uUmlnaHRDbGljaykge1xyXG4gICAgICAgICAgICB0YXJnZXQub25SaWdodENsaWNrID0gdGhhdFAub25SaWdodENsaWNrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAub25Nb3VzZU1vdmUpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm9uTW91c2VNb3ZlID0gdGhhdFAub25Nb3VzZU1vdmVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAnVHJhamVjdG9yeU1vdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKHRoYXRQLmVudGl0eSAmJiB0aGF0UC5tb2RlbFNob3cgJiYgIXRoYXRQLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5saW5lICYmIHRoYXRQLmxpbmVTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAubGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5yZWFsVGltZUxpbmUgJiYgdGhhdFAucmVhbFRpbWVSb3V0ZSkge1xyXG4gICAgICAgICAgICAgIHRoYXRQLnJlYWxUaW1lTGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGF0UC5zdGF0ZVxyXG4gICAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhhdFAuc3RhdGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0YXJnZXQuc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZSh0aGF0UC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSlcclxuICAgICAgICAgICAgICB0aGF0UC5zdGF0ZSA9IHN0YXRlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgIT09ICdnbGInICYmIHRhcmdldC5vbikge1xyXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQudHlwZSA9PT0gJ3ZlY3RvcicpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5kYXRhID0gdGhhdFAuZGF0YVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQub24oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQudHlwZSA9PT0gJ0V4cGxvc2lvbicpIHtcclxuICAgICAgICAgICAgICB0YXJnZXQuZW50aXR5LmltZ0luZGV4ID0gdGhhdFAuZW50aXR5LmltZ0luZGV4XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhcmdldC50eXBlID09PSAnUGluY2VyQXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoYXRQLlR3ZWVuQW5pbWF0ZSAmJiAhdGhhdFAuVHdlZW5BbmltYXRlLl9pc1BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRoYXRQLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlMSAvIHRoYXRQLlR3ZWVuQW5pbWF0ZS5fdmFsdWVzRW5kLmRpc3RhbmNlMSAqIHRoYXRQLnNwcmVhZFRpbWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQudHlwZSA9PT0gJ0F0dGFja0Fycm93T2JqZWN0JyB8fCB0YXJnZXQudHlwZSA9PT0gJ1N0cmFpZ2h0QXJyb3dPYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoYXRQLlR3ZWVuQW5pbWF0ZSAmJiAhdGhhdFAuVHdlZW5BbmltYXRlLl9pc1BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRoYXRQLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlIC8gdGhhdFAuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UgKiB0aGF0UC5zcHJlYWRUaW1lKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgICAgdGFyZ2V0LmxvYWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLmlkID09PSBlbnRpdHlJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5fY3VzdG9tU2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IHRoYXRQLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLmVudGl0eS5zaG93ID0gdHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAnR3JvdW5kU3ZnJyAmJiB0aGF0UC50ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoYXRQLnRleHQuc2hvdyA9IHRoYXRQLnRleHRTaG93XHJcbiAgICAgICAgICAgIHRhcmdldC50ZXh0U2hvdyA9IHRoYXRQLnRleHRTaG93XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAubGFiZWwgJiYgdGhhdFAubGFiZWxTaG93KSB7XHJcbiAgICAgICAgICAgIHRoYXRQLmxhYmVsLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICBzdGF0dXMuUCA9IGZhbHNlXHJcbiAgICAgICAgICBzdGF0dXMuRCA9IHRydWVcclxuICAgICAgICAgIG9wdGlvbnMuc2hvdyA9IHRydWVcclxuICAgICAgICAgIGlmKHRoYXRQLnR5cGU9PT0nbGF5ZXInKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMubGF5ZXJfaW5kZXggPSB0aGF0UC5sYXllcl9pbmRleFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGFyZ2V0ID0gYXdhaXQgbmV3IHRoYXRQLmNvbnN0cnVjdG9yKHNka0QsIG9wdGlvbnMpXHJcbiAgICAgICAgICBpZiAodGhhdFAub25DbGljaykge1xyXG4gICAgICAgICAgICB0YXJnZXQub25DbGljayA9IHRoYXRQLm9uQ2xpY2tcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0UC5vblJpZ2h0Q2xpY2spIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm9uUmlnaHRDbGljayA9IHRoYXRQLm9uUmlnaHRDbGlja1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLm9uTW91c2VNb3ZlKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5vbk1vdXNlTW92ZSA9IHRoYXRQLm9uTW91c2VNb3ZlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdFAudHlwZSA9PT0gJ1RyYWplY3RvcnlNb3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5lbnRpdHkgJiYgdGhhdFAubW9kZWxTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAuZW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5saW5lICYmIHRoYXRQLmxpbmVTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAubGluZS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhhdFAucmVhbFRpbWVMaW5lICYmIHRoYXRQLnJlYWxUaW1lUm91dGUpIHtcclxuICAgICAgICAgICAgICB0aGF0UC5yZWFsVGltZUxpbmUuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXRQLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoYXRQLnN0YXRlXHJcbiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0UC5zdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRhcmdldC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKHRoYXRQLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlKVxyXG4gICAgICAgICAgICAgIHRoYXRQLnN0YXRlID0gc3RhdGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQudHlwZSAhPT0gJ2dsYicgJiYgdGFyZ2V0Lm9uKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuZGF0YSA9IHRoYXRQLmRhdGFcclxuICAgICAgICAgICAgICAgIGlmICh0aGF0UC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQub24oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAndmVjdG9yJykge1xyXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5pZCA9PT0gZW50aXR5SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGF0UC5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0LmVudGl0eS5lbnRpdGllcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gdGhhdFAuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5fY3VzdG9tU2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLmVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhhdFAudHlwZSA9PT0gJ0dyb3VuZFN2ZycgJiYgdGhhdFAudGV4dCkge1xyXG4gICAgICAgICAgICB0aGF0UC50ZXh0LnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgICB0YXJnZXQudGV4dFNob3cgPSB0aGF0UC50ZXh0U2hvd1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIHRoYXRQLmxhYmVsLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICBjYXNlICctMSc6XHJcbiAgICAgICAgICBzdGF0dXMuUCA9IHRydWVcclxuICAgICAgICAgIHN0YXR1cy5EID0gZmFsc2VcclxuICAgICAgICAgIGlmICh0aGF0UC50eXBlID09PSAnVHJhamVjdG9yeU1vdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKHRoYXRQLmVudGl0eSAmJiB0aGF0UC5tb2RlbFNob3cgJiYgIXRoYXRQLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICAgIHRoYXRQLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5saW5lICYmIHRoYXRQLmxpbmVTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhhdFAubGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0UC5yZWFsVGltZUxpbmUgJiYgdGhhdFAucmVhbFRpbWVSb3V0ZSkge1xyXG4gICAgICAgICAgICAgIHRoYXRQLnJlYWxUaW1lTGluZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGF0UC5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgc3RhdGUgPSB0aGF0UC5zdGF0ZVxyXG4gICAgICAgICAgICAvLyAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhhdFAuc3RhdGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gICB0YXJnZXQuc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZSh0aGF0UC5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSlcclxuICAgICAgICAgICAgLy8gICB0aGF0UC5zdGF0ZSA9IHN0YXRlXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLmVudGl0eS5zaG93ID0gdHJ1ZSlcclxuICAgICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICd0ZXJyYWluJykge1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMuc2hvdyA9IHRydWVcclxuICAgICAgICAgICAgICB0YXJnZXQgPSBhd2FpdCBuZXcgdGhhdFAuY29uc3RydWN0b3Ioc2RrRCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICBpZiAodGhhdFAub25DbGljaykge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9uQ2xpY2sgPSB0aGF0UC5vbkNsaWNrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGF0UC5vblJpZ2h0Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5vblJpZ2h0Q2xpY2sgPSB0aGF0UC5vblJpZ2h0Q2xpY2tcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoYXRQLm9uTW91c2VNb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQub25Nb3VzZU1vdmUgPSB0aGF0UC5vbk1vdXNlTW92ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXRQLnR5cGUgPT09ICdHcm91bmRTdmcnICYmIHRoYXRQLnRleHQpIHtcclxuICAgICAgICAgICAgdGhhdFAudGV4dC5zaG93ID0gdGhhdFAudGV4dFNob3dcclxuICAgICAgICAgICAgdGFyZ2V0ICYmICh0YXJnZXQudGV4dFNob3cgPSBmYWxzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0UC5sYWJlbCAmJiB0aGF0UC5sYWJlbFNob3cpIHtcclxuICAgICAgICAgICAgdGhhdFAubGFiZWwuZW50aXR5LnNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc29mZikge1xyXG4gICAgICBzdGF0dXNNYXAuc2V0KGlkLCBzdGF0dXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNvZmYpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICAvLyBsZXQgbGVmdEVsbSA9IHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICAvLyBsZXQgcmlnaHRFbG0gPSBzZGtQLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnKVswXVxyXG4gIC8vIGlmIChsZWZ0RWxtICYmIHJpZ2h0RWxtKSB7XHJcbiAgLy8gICBzd2l0Y2ggKHYpIHtcclxuICAvLyAgICAgY2FzZSBudWxsOlxyXG4gIC8vICAgICBjYXNlIHZvaWQgMDpcclxuICAvLyAgICAgY2FzZSAwOlxyXG4gIC8vICAgICBjYXNlICcwJzpcclxuICAvLyAgICAgICBsZWZ0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgLy8gICAgICAgcmlnaHRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAvLyAgICAgICBicmVha1xyXG4gIC8vICAgICBjYXNlIDE6XHJcbiAgLy8gICAgIGNhc2UgJzEnOlxyXG4gIC8vICAgICAgIGxlZnRFbG0uY2hlY2tlZCA9IGZhbHNlXHJcbiAgLy8gICAgICAgcmlnaHRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAvLyAgICAgICBicmVha1xyXG4gIC8vICAgICBjYXNlIC0xOlxyXG4gIC8vICAgICBjYXNlICctMSc6XHJcbiAgLy8gICAgICAgbGVmdEVsbS5jaGVja2VkID0gdHJ1ZVxyXG4gIC8vICAgICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSBmYWxzZVxyXG4gIC8vICAgICAgIGJyZWFrXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gc3luY0VudGl0aWVzKGVudGl0aWVzMSwgZW50aXRpZXMyKSB7XHJcbiAgaWYgKCFzZGtQKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHNka0QpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVudGl0aWVzMSkgfHwgQXJyYXkuaXNBcnJheShlbnRpdGllczIpKSB7XHJcbiAgICAgIGVudGl0aWVzMSA9IG51bGxcclxuICAgICAgZW50aXRpZXMyID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKCFlbnRpdGllczEpIHtcclxuICAgICAgZW50aXRpZXMxID0gc2RrRC52aWV3ZXIuZW50aXRpZXNcclxuICAgIH1cclxuICAgIGlmICghZW50aXRpZXMyKSB7XHJcbiAgICAgIGVudGl0aWVzMiA9IHNka1Audmlld2VyLmVudGl0aWVzXHJcbiAgICB9XHJcbiAgICBsZXQgZW50aXRpZXMyRCA9IGVudGl0aWVzMVxyXG4gICAgbGV0IGVudGl0aWVzM0QgPSBlbnRpdGllczJcclxuICAgIGZvciAobGV0IGkgPSBlbnRpdGllczJELnZhbHVlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgIGZvciAobGV0IG0gPSBlbnRpdGllczNELnZhbHVlcy5sZW5ndGggLSAxOyBtID49IDA7IG0tLSkge1xyXG4gICAgICAgIGlmIChlbnRpdGllczJELnZhbHVlc1tpXS5pZCA9PT0gZW50aXRpZXMzRC52YWx1ZXNbbV0uaWQpIHtcclxuICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICBlbnRpdGllczJELnZhbHVlc1tpXSA9PT0gZW50aXRpZXMzRC52YWx1ZXNbbV1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgZW50aXRpZXMyRC5yZW1vdmUoZW50aXRpZXMyRC52YWx1ZXNbaV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IG0gPSBlbnRpdGllczNELnZhbHVlcy5sZW5ndGggLSAxOyBtID49IDA7IG0tLSkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgIGZvciAobGV0IGkgPSBlbnRpdGllczJELnZhbHVlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChlbnRpdGllczJELnZhbHVlc1tpXS5pZCA9PT0gZW50aXRpZXMzRC52YWx1ZXNbbV0uaWQpIHtcclxuICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICBsZXQgZW50aXR5ID0gZW50aXRpZXMyRC5hZGQoZW50aXRpZXMzRC52YWx1ZXNbbV0pXHJcbiAgICAgICAgLy8gaWYgKGVudGl0eS5yZWN0YW5nbGUpIHtcclxuICAgICAgICAvLyAgIC8vIOiuvue9rumrmOW6pu+8jOWQpuWImeWcqOafkOS6m+S9jee9ruaXoOazleaYvuekuu+8jOS9huiJsuW9qeS8muWPmOaal1xyXG4gICAgICAgIC8vICAgZW50aXR5LnJlY3RhbmdsZS5oZWlnaHQgPSAwXHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZygnMjQyMzQyMzU0MjM1JyxlbnRpdGllczNELnZhbHVlc1ttXSlcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuZnVuY3Rpb24gc3luY0RhdGFTb3VyY2VzKGRhdGFTb3VyY2VzLCB0eXBlKSB7XHJcbiAgaWYgKCFzZGtQKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHNka0QpIHtcclxuICAgIGxldCBkYXRhU291cmNlczJEID0gc2RrRC52aWV3ZXIuZGF0YVNvdXJjZXNcclxuICAgIGlmIChkYXRhU291cmNlcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gZGF0YVNvdXJjZXMyRC5fZGF0YVNvdXJjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZXMyRC5fZGF0YVNvdXJjZXNbaV0ubmFtZSA9PT0gZGF0YVNvdXJjZXMubmFtZSkge1xyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdlbnRpdGllcycpIHtcclxuICAgICAgICAgICAgc3luY0VudGl0aWVzKGRhdGFTb3VyY2VzMkQuX2RhdGFTb3VyY2VzW2ldLmVudGl0aWVzLCBkYXRhU291cmNlcy5lbnRpdGllcylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnY2x1c3RlcmluZycpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZXMyRC5fZGF0YVNvdXJjZXNbaV0uY2x1c3RlcmluZy5lbmFibGVkID0gZGF0YVNvdXJjZXMuY2x1c3RlcmluZy5lbmFibGVkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBmb3IgKGxldCBtID0gZGF0YVNvdXJjZXMzRC5fZGF0YVNvdXJjZXMubGVuZ3RoIC0gMTsgbSA+PSAwOyBtLS0pIHtcclxuICAgIC8vICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgLy8gICBmb3IgKGxldCBpID0gZGF0YVNvdXJjZXMyRC5fZGF0YVNvdXJjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhkYXRhU291cmNlczJELl9kYXRhU291cmNlc1tpXS5uYW1lLCBkYXRhU291cmNlczNELl9kYXRhU291cmNlc1ttXS5uYW1lKVxyXG4gICAgLy8gICAgIGlmIChkYXRhU291cmNlczJELl9kYXRhU291cmNlc1tpXS5uYW1lID09PSBkYXRhU291cmNlczNELl9kYXRhU291cmNlc1ttXS5uYW1lKSB7XHJcbiAgICAvLyAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgLy8gICAgICAgYnJlYWtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgaWYgKCFmbGFnKSB7XHJcbiAgICAvLyAgICAgZGF0YVNvdXJjZXMyRC5hZGQoZGF0YVNvdXJjZXMzRC5fZGF0YVNvdXJjZXNbbV0pXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcbn1cclxuZnVuY3Rpb24gc3luY0ltYWdlcnlMYXllckFkZGVkKGxheWVyLCBpbmRleCkge1xyXG4gIHNka0Qudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKGxheWVyLmltYWdlcnlQcm92aWRlciwgaW5kZXgpXHJcbn1cclxuZnVuY3Rpb24gc3luY0ltYWdlcnlMYXllck1vdmVkKGxheWVyLCBuZXdpbmR4ZSwgb2xkaW5kZXgpIHtcclxuICBsZXQgbGF5ZXJEXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZGtELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChzZGtELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2lkID09PSBsYXllci5faWQpIHtcclxuICAgICAgbGF5ZXJEID0gc2RrRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldXHJcbiAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICghbGF5ZXJEKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgLy8g56e75Yiw5pyA5bqV5bGCXHJcbiAgaWYgKG5ld2luZHhlID09PSAwKSB7XHJcbiAgICBzZGtELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxvd2VyVG9Cb3R0b20obGF5ZXJEKVxyXG4gIH1cclxuICAvLyDnp7vliLDmnIDpq5jlsYJcclxuICBlbHNlIGlmIChuZXdpbmR4ZSA9PT0gc2RrRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aCAtIDEpIHtcclxuICAgIHNka0Qudmlld2VyLmltYWdlcnlMYXllcnMucmFpc2VUb1RvcChsYXllckQpXHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgaWYgKG5ld2luZHhlIDwgb2xkaW5kZXgpIHtcclxuICAgICAgaWYobmV3aW5keGU8c2RrRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aC0xKSB7XHJcbiAgICAgICAgc2RrRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5sb3dlcihsYXllckQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZGtELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLnJhaXNlKGxheWVyRClcclxuICAgIH1cclxuICB9XHJcbn1cclxuZnVuY3Rpb24gc3luY0ltYWdlcnlMYXllclJlbW92ZWQobGF5ZXIsIGluZGV4KSB7XHJcbiAgbGV0IGxheWVyRCA9IHNka0Qudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpbmRleF1cclxuICBpZiAoIWxheWVyRCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIHNka0Qudmlld2VyLmltYWdlcnlMYXllcnMucmVtb3ZlKGxheWVyRClcclxufVxyXG5mdW5jdGlvbiBzeW5jSW1hZ2VyeUxheWVyU2hvd25PckhpZGRlbihsYXllciwgaW5kZXgsIHN0YXRlKSB7XHJcbiAgbGV0IGxheWVyRCA9IHNka0Qudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpbmRleF1cclxuICBpZiAoIWxheWVyRCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxheWVyRC5zaG93ID0gc3RhdGVcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3luY1ByaW1pdGl2ZXMocHJpbWl0aXZlKSB7XHJcbiAgaWYgKCFzZGtQKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHNka0QpIHtcclxuICAgIC8vIGF3YWl0IHNka0Qudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHByaW1pdGl2ZSlcclxuICAgIC8vIGF3YWl0IHNka0Qudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZSlcclxuICAgIGxldCBwcmltaXRpdmVzMkQgPSBzZGtELnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLl9wcmltaXRpdmVzXHJcbiAgICBsZXQgcHJpbWl0aXZlczNEID0gc2RrUC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlc1xyXG4gICAgLy8gY29uc29sZS5sb2cocHJpbWl0aXZlczJELCBwcmltaXRpdmVzM0QpXHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgc2RrRC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5fcHJpbWl0aXZlc1sxXSA9IHNka1Audmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuX3ByaW1pdGl2ZXNbMV1cclxuICAgIC8vIH0sIDIwMDApO1xyXG4gICAgZm9yIChsZXQgaSA9IHByaW1pdGl2ZXMyRC5sZW5ndGggLSAxOyBpID49IDE7IGktLSkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgIGZvciAobGV0IG0gPSBwcmltaXRpdmVzM0QubGVuZ3RoIC0gMTsgbSA+PSAxOyBtLS0pIHtcclxuICAgICAgICBpZiAocHJpbWl0aXZlczNEW21dLmlkICYmIHByaW1pdGl2ZXMyRFttXS5pZCAmJiAocHJpbWl0aXZlczNEW21dLmlkID09PSBwcmltaXRpdmVzMkRbaV0uaWQpKSB7XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICBzZGtELnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZShwcmltaXRpdmVzMkRbaV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IG0gPSBwcmltaXRpdmVzM0QubGVuZ3RoIC0gMTsgbSA+PSAxOyBtLS0pIHtcclxuICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICBmb3IgKGxldCBpID0gcHJpbWl0aXZlczJELmxlbmd0aCAtIDE7IGkgPj0gMTsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZXMzRFttXS5pZCAmJiBwcmltaXRpdmVzMkRbbV0uaWQgJiYgKHByaW1pdGl2ZXMzRFttXS5pZCA9PT0gcHJpbWl0aXZlczJEW2ldLmlkKSkge1xyXG4gICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5zaG93ID0gcHJpbWl0aXZlczNEW21dLnNob3dcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5zdGFydENvbG9yID0gcHJpbWl0aXZlczNEW21dLnN0YXJ0Q29sb3JcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5lbmRDb2xvciA9IHByaW1pdGl2ZXMzRFttXS5lbmRDb2xvclxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLm1pbmltdW1TcGVlZCA9IHByaW1pdGl2ZXMzRFttXS5taW5pbXVtU3BlZWRcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5tYXhpbXVtU3BlZWQgPSBwcmltaXRpdmVzM0RbbV0ubWF4aW11bVNwZWVkXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0ubWluaW11bVBhcnRpY2xlTGlmZSA9IHByaW1pdGl2ZXMzRFttXS5taW5pbXVtUGFydGljbGVMaWZlXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0ubWF4aW11bVBhcnRpY2xlTGlmZSA9IHByaW1pdGl2ZXMzRFttXS5tYXhpbXVtUGFydGljbGVMaWZlXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0uc3RhcnRTY2FsZSA9IHByaW1pdGl2ZXMzRFttXS5zdGFydFNjYWxlXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0uZW5kU2NhbGUgPSBwcmltaXRpdmVzM0RbbV0uZW5kU2NhbGVcclxuICAgICAgICAgIHByaW1pdGl2ZXMyRFtpXS5lbWlzc2lvblJhdGUgPSBwcmltaXRpdmVzM0RbbV0uZW1pc3Npb25SYXRlXHJcbiAgICAgICAgICBwcmltaXRpdmVzMkRbaV0ucGFydGljbGVTaXplID0gcHJpbWl0aXZlczNEW21dLnBhcnRpY2xlU2l6ZVxyXG4gICAgICAgICAgcHJpbWl0aXZlczJEW2ldLm1vZGVsTWF0cml4ID0gcHJpbWl0aXZlczNEW21dLm1vZGVsTWF0cml4XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgIHNka0Qudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZXMzRFttXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXZlbnRCaW5kKCkge1xyXG4gIGxldCBoYW5kbGVyMCA9IG5ldyBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIoXHJcbiAgICBzZGtQLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0td2lkZ2V0JylbMF1cclxuICApXHJcbiAgaGFuZGxlcjAuc2V0SW5wdXRBY3Rpb24oKCkgPT4ge1xyXG4gICAgYWN0aXZlVmlld2VyID0gMFxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0RPV04pXHJcbiAgaGFuZGxlcjAuc2V0SW5wdXRBY3Rpb24oKCkgPT4ge1xyXG4gICAgYWN0aXZlVmlld2VyID0gMFxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5SSUdIVF9ET1dOKVxyXG4gIGhhbmRsZXIwLnNldElucHV0QWN0aW9uKCgpID0+IHtcclxuICAgIGFjdGl2ZVZpZXdlciA9IDBcclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuV0hFRUwpXHJcbiAgaGFuZGxlcnMucHVzaChoYW5kbGVyMClcclxuXHJcbiAgbGV0IGRpc3RhbmNlTGVnZW5kRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpc3RhbmNlTGVnZW5kRGl2JylcclxuICBmdW5jdGlvbiBkaXN0YW5jZUxlZ2VuZERpdk1vdXNlTW92ZShlKSB7XHJcbiAgICBhY3RpdmVWaWV3ZXIgPSAwXHJcbiAgfVxyXG4gIGRpc3RhbmNlTGVnZW5kRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGRpc3RhbmNlTGVnZW5kRGl2TW91c2VNb3ZlKVxyXG4gIGhhbmRsZXJzLnB1c2goe1xyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICBkaXN0YW5jZUxlZ2VuZERpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkaXN0YW5jZUxlZ2VuZERpdk1vdXNlTW92ZSlcclxuICAgIH1cclxuICB9KVxyXG5cclxuXHJcbiAgbGV0IGhhbmRsZXIxID0gbmV3IENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50SGFuZGxlcihcclxuICAgIHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS13aWRnZXQnKVsxXVxyXG4gIClcclxuICBoYW5kbGVyMS5zZXRJbnB1dEFjdGlvbigoKSA9PiB7XHJcbiAgICBhY3RpdmVWaWV3ZXIgPSAxXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZChzZGtQKVxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0RPV04pXHJcbiAgaGFuZGxlcjEuc2V0SW5wdXRBY3Rpb24oKCkgPT4ge1xyXG4gICAgYWN0aXZlVmlld2VyID0gMVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQoc2RrUClcclxuICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuUklHSFRfRE9XTilcclxuICBoYW5kbGVyMS5zZXRJbnB1dEFjdGlvbigoKSA9PiB7XHJcbiAgICBhY3RpdmVWaWV3ZXIgPSAxXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZChzZGtQKVxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5XSEVFTClcclxuICBoYW5kbGVycy5wdXNoKGhhbmRsZXIxKVxyXG59XHJcblxyXG5mdW5jdGlvbiBzeW5jVmlld2VyKCkge1xyXG4gIGxldCBzZGsgPSB0aGlzLnNka3NbYWN0aXZlVmlld2VyXVxyXG4gIGxldCBzZGsyXHJcbiAgaWYgKGFjdGl2ZVZpZXdlciA9PT0gMCkge1xyXG4gICAgc2RrMiA9IHRoaXMuc2Rrc1sxXVxyXG4gIH1cclxuICBlbHNlIGlmIChhY3RpdmVWaWV3ZXIgPT09IDEpIHtcclxuICAgIHNkazIgPSB0aGlzLnNka3NbMF1cclxuICB9XHJcbiAgbGV0IGRlc3RpbmF0aW9uID0gc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25cclxuICAvLyBpZiAodGhpcy5zZGtzWzBdLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhzZGssc2RrMilcclxuICAvLyAgIC8vIHNkazIudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAvLyAgIC8vICAgb3JpZW50YXRpb246IHtcclxuICAvLyAgIC8vICAgICBoZWFkaW5nOiBzZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gIC8vICAgLy8gICAgIHBpdGNoOiBzZGsudmlld2VyLmNhbWVyYS5waXRjaCxcclxuICAvLyAgIC8vICAgICByb2xsOiBzZGsudmlld2VyLmNhbWVyYS5yb2xsXHJcbiAgLy8gICAvLyAgIH1cclxuICAvLyAgIC8vIH0pXHJcbiAgLy8gICAvLyBpZihzZGsyLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgLy8gICAvLyAgIHNkazIudmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb24gPSBzZGsudmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb25cclxuICAvLyAgIC8vIH1cclxuICAvLyAgIC8vIGVsc2Uge1xyXG4gIC8vICAgLy8gICBsZXQgdHJhY2tlZEVudGl0eSA9IHNkazIudmlld2VyLmVudGl0aWVzLmFkZChzZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgLy8gICAvLyAgIHNkazIudmlld2VyLnRyYWNrZWRFbnRpdHkgPSB0cmFja2VkRW50aXR5XHJcbiAgLy8gICAvLyB9XHJcbiAgLy8gICAvLyBzZGsyLnZpZXdlci5jYW1lcmEucG9zaXRpb24gPSBzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvblxyXG4gIC8vICAgaWYoIXNkay52aWV3ZXIudHJhY2tlZEVudGl0eSkge1xyXG4gIC8vICAgICBsZXQgaWQgPSB0aGlzLnNka3NbMF0udmlld2VyLnRyYWNrZWRFbnRpdHkuaWRcclxuICAvLyAgICAgbGV0IHRyYWNrZWRFbnRpdHkgPSBzZGsyLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKGlkKVxyXG4gIC8vICAgICBpZih0cmFja2VkRW50aXR5KSB7XHJcbiAgLy8gICAgICAgdHJhY2tlZEVudGl0eS5wb3NpdGlvbiA9IHRoaXMuc2Rrc1swXS52aWV3ZXIudHJhY2tlZEVudGl0eS5wb3NpdGlvblxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGVsc2Uge1xyXG4gIC8vICAgICAgIHRyYWNrZWRFbnRpdHkgPSBzZGsyLnZpZXdlci5lbnRpdGllcy5hZGQoc2RrLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IHRyYWNrZWRFbnRpdHlcclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICBzZGsudmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb24gPSB0aGlzLnNka3NbMF0udmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb25cclxuICAvLyAgIH1cclxuICAvLyAgIGxldCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHNkay52aWV3ZXIudHJhY2tlZEVudGl0eS5wb3NpdGlvbi5fdmFsdWUsIHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uV0MpO1xyXG4gIC8vICAgc2RrMi52aWV3ZXIuY2FtZXJhLmxvb2tBdChcclxuICAvLyAgICAgdGhpcy5zZGtzWzBdLnZpZXdlci50cmFja2VkRW50aXR5LnBvc2l0aW9uLl92YWx1ZSxcclxuICAvLyAgICAgbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSYW5nZShzZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLCBzZGsudmlld2VyLmNhbWVyYS5waXRjaCwgZGlzdGFuY2UpXHJcbiAgLy8gICApXHJcbiAgLy8gfVxyXG4gIC8vIGVsc2Uge1xyXG4gIC8vICAgaWYodGhpcy5zZGtzWzFdLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgLy8gICAgIHRoaXMuc2Rrc1sxXS52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuc2Rrc1sxXS52aWV3ZXIudHJhY2tlZEVudGl0eSlcclxuICAvLyAgICAgdGhpcy5zZGtzWzFdLnZpZXdlci50cmFja2VkRW50aXR5ID0gbnVsbFxyXG4gIC8vICAgICBkZXN0aW5hdGlvbiA9IHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uXHJcbiAgLy8gICB9XHJcbiAgLy8gICBzZGsyLnZpZXdlci5jYW1lcmEuc2V0Vmlldyh7XHJcbiAgLy8gICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAvLyAgICAgb3JpZW50YXRpb246IHtcclxuICAvLyAgICAgICBoZWFkaW5nOiBzZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gIC8vICAgICAgIHBpdGNoOiBzZGsudmlld2VyLmNhbWVyYS5waXRjaCxcclxuICAvLyAgICAgICByb2xsOiBzZGsudmlld2VyLmNhbWVyYS5yb2xsXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICBzZGsyLnZpZXdlci5jYW1lcmEuc2V0Vmlldyh7XHJcbiAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICBvcmllbnRhdGlvbjoge1xyXG4gICAgICBoZWFkaW5nOiBzZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICBwaXRjaDogc2RrLnZpZXdlci5jYW1lcmEucGl0Y2gsXHJcbiAgICAgIHJvbGw6IHNkay52aWV3ZXIuY2FtZXJhLnJvbGxcclxuICAgIH1cclxuICB9KVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XHJcbiAgcmV0dXJuIHN0YXRlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2ZUlkKCkge1xyXG4gIHJldHVybiBhY3RpdmVJZHNcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0QWN0aXZlSWQoaWRzID0gW10pIHtcclxuICAvLyBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JylcclxuICBpZiAoQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICBhY3RpdmVJZHMgPSBpZHNcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBhY3RpdmVJZHMgPSBbaWRzXVxyXG4gIH1cclxuICBpZiAoIXNka1AgfHwgIXNka0QpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBsZXQgbGVmdEVsbSA9IHNka1Audmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICBsZXQgcmlnaHRFbG0gPSBzZGtQLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnKVswXVxyXG4gIGlmICghaWRzIHx8IGlkcy5sZW5ndGggPT09IDApIHtcclxuICAgIGlmIChsZWZ0RWxtICYmIHJpZ2h0RWxtKSB7XHJcbiAgICAgIGxlZnRFbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICByaWdodEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgaWYgKGxlZnRFbG0gJiYgcmlnaHRFbG0pIHtcclxuICAgICAgbGVmdEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIHJpZ2h0RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgbGV0IGxlZnQgPSAwXHJcbiAgICAgIGxldCByaWdodCA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVJZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgc3RhdHVzID0gc3RhdHVzTWFwLmdldChhY3RpdmVJZHNbaV0pXHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgIHN0YXR1cyA9IHsgUDogdHJ1ZSwgRDogZmFsc2UgfVxyXG4gICAgICAgICAgc3RhdHVzTWFwLnNldChhY3RpdmVJZHNbaV0sIHN0YXR1cylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXR1cy5QKSB7XHJcbiAgICAgICAgICBsZWZ0KytcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXR1cy5EKSB7XHJcbiAgICAgICAgICByaWdodCsrXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgbGV0IHRoYXRQID0gc2RrUC5lbnRpdHlNYXAuZ2V0KGFjdGl2ZUlkc1tpXSlcclxuICAgICAgICAvLyBsZXQgdGhhdEQgPSBzZGtELmVudGl0eU1hcC5nZXQoYWN0aXZlSWRzW2ldKVxyXG4gICAgICAgIGlmICghdGhhdFAgfHwgKHRoYXRQLnR5cGUgPT09ICd0ZXJyYWluJyB8fCAhdGhhdFAuc2hvdykgfHwgdGhhdFAudHlwZSA9PT0gJ1RleHRCb3gnKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZWZ0RWxtLnN0eWxlLmRpc3BsYXkgPSAndW5zZXQnXHJcbiAgICAgICAgcmlnaHRFbG0uc3R5bGUuZGlzcGxheSA9ICd1bnNldCdcclxuICAgICAgICBsZWZ0RWxtLmNoZWNrZWQgPSBmYWxzZVxyXG4gICAgICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgLy8gaWYgKHRoYXRQKSB7XHJcbiAgICAgICAgLy8gICBpZiAodGhhdFAudHlwZSA9PT0gJ1RyYWplY3RvcnlNb3Rpb24nKSB7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGF0UC5lbnRpdHkgJiYgKHRoYXRQLm1vZGVsU2hvdyB8fCB0aGF0UC5saW5lU2hvdyB8fCB0aGF0UC5sYWJlbFNob3cgfHwgdGhhdFAucmVhbFRpbWVSb3V0ZSkgJiYgKHRoYXRQLmVudGl0eS5zaG93IHx8IHRoYXRQLmxpbmUuc2hvdyB8fCAodGhhdFAubGFiZWwgJiYgdGhhdFAubGFiZWwuZW50aXR5LnNob3cpIHx8IHRoYXRQLnJlYWxUaW1lTGluZS5zaG93KSkge1xyXG4gICAgICAgIC8vICAgICAgIGxlZnRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgZWxzZSBpZiAodGhhdFAudHlwZSA9PT0gJ3ZlY3RvcicpIHtcclxuICAgICAgICAvLyAgICAgbGVmdEVsbS5jaGVja2VkID0gc3RhdHVzLlBcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAgIC8vICAgICBpZiAodGhhdFAuZW50aXR5ICYmIHRoYXRQLmVudGl0eS5zaG93KSB7XHJcbiAgICAgICAgLy8gICAgICAgbGVmdEVsbS5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGlmICh0aGF0RCkge1xyXG4gICAgICAgIC8vICAgaWYgKHRoYXRQLnR5cGUgPT09ICdUcmFqZWN0b3J5TW90aW9uJykge1xyXG4gICAgICAgIC8vICAgICBpZiAodGhhdEQuc2hvdyAmJiB0aGF0RC5lbnRpdHkgJiYgKHRoYXRELm1vZGVsU2hvdyB8fCB0aGF0RC5saW5lU2hvdyB8fCB0aGF0RC5sYWJlbFNob3cgfHwgdGhhdEQucmVhbFRpbWVSb3V0ZSkgJiYgKHRoYXRELmVudGl0eS5zaG93IHx8IHRoYXRELmxpbmUuc2hvdyB8fCAodGhhdEQubGFiZWwgJiYgdGhhdEQubGFiZWwuZW50aXR5LnNob3cpIHx8IHRoYXRELnJlYWxUaW1lTGluZS5zaG93KSkge1xyXG4gICAgICAgIC8vICAgICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGVsc2UgaWYgKHRoYXRQLnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcbiAgICAgICAgLy8gICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSBzdGF0dXMuRFxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGF0RC5zaG93KSB7XHJcbiAgICAgICAgLy8gICAgICAgcmlnaHRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7XHJcbiAgICAgICAgbGVmdCsrXHJcbiAgICAgIH1cclxuICAgICAgbGVmdEVsbS5jaGVja2VkID0gbGVmdCA/IHRydWUgOiBmYWxzZVxyXG4gICAgICByaWdodEVsbS5jaGVja2VkID0gcmlnaHQgPyB0cnVlIDogZmFsc2VcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN5bmNTcGxpdERhdGEoc2RrLCBpZCwgZW50aXR5SWQpIHtcclxuICBpZiAoIXNka1AgfHwgIXNka0QgfHwgc2RrICE9PSBzZGtQIHx8ICFpZCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCBzdGF0dXMgPSBzdGF0dXNNYXAuZ2V0KGlkKVxyXG4gIGxldCB0aGF0UCA9IHNka1AuZW50aXR5TWFwLmdldChpZClcclxuICBsZXQgdGhhdEQgPSBzZGtELmVudGl0eU1hcC5nZXQoaWQpXHJcbiAgaWYgKHRoYXRQKSB7XHJcbiAgICBsZXQgdmFsdWVcclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgaWYgKHN0YXR1cy5QICYmIHN0YXR1cy5EKSB7XHJcbiAgICAgICAgdmFsdWUgPSAwXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5QKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IC0xXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGF0dXMuRCkge1xyXG4gICAgICAgICAgdmFsdWUgPSAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGxlZnRFbG0gPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICAgICAgbGV0IHJpZ2h0RWxtID0gc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnKVswXVxyXG4gICAgICBpZiAobGVmdEVsbS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHwgcmlnaHRFbG0uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgdmFsdWUgPSAtMVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChsZWZ0RWxtLmNoZWNrZWQgJiYgcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgdmFsdWUgPSAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlZnRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IC0xXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IDFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGF0RCkge1xyXG4gICAgICB0aGF0RC5vcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGF0UC5vcHRpb25zKSlcclxuICAgICAgdGhhdEQub3JpZ2luYWxPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGF0UC5vcHRpb25zKSlcclxuICAgICAgaWYgKHRoYXRQLm9sZERhdGEpIHtcclxuICAgICAgICB0aGF0RC5vbGREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGF0UC5vbGREYXRhKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhhdEQudHlwZSA9PT0gJ1RyYWplY3RvcnlNb3Rpb24nKSB7XHJcbiAgICAgICAgdGhhdEQuaGVpZ2h0ID0gdGhhdEQub3B0aW9ucy5oZWlnaHRcclxuICAgICAgfVxyXG4gICAgICB0aGF0RC5yZXNldCAmJiB0aGF0RC5yZXNldCgpXHJcblxyXG5cclxuICAgICAgaWYgKHRoYXRQLnNob3cpIHtcclxuICAgICAgICBzZXRTcGxpdERpcmVjdGlvbih2YWx1ZSwgaWQsIGZhbHNlLCBlbnRpdHlJZClcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGF0RC5zaG93ID0gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhhdEQuc2hvdyA9IGZhbHNlXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgdmFsdWUgPSAtMVxyXG4gICAgICAvLyBpZiAodGhhdFAuc2hvdykge1xyXG4gICAgICAvLyAgIGxldCBsZWZ0RWxtID0gc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtbGVmdCcpWzBdXHJcbiAgICAgIC8vICAgbGV0IHJpZ2h0RWxtID0gc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnKVswXVxyXG4gICAgICAvLyAgIGlmIChsZWZ0RWxtLmNoZWNrZWQgJiYgcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAvLyAgICAgdmFsdWUgPSAwXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAvLyAgICAgaWYgKGxlZnRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAvLyAgICAgICB2YWx1ZSA9IC0xXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICBpZiAocmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAvLyAgICAgICB2YWx1ZSA9IDFcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24odmFsdWUsIGlkLCBmYWxzZSwgZW50aXR5SWQpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgdGhhdEQgJiYgdGhhdEQucmVtb3ZlKClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEFjdGl2ZVZpZXdlcih2KSB7XHJcbiAgYWN0aXZlVmlld2VyID0gdlxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZGsoKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHNka1A6IHNka1AsXHJcbiAgICBzZGtEOiBzZGtEXHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IHsgb24sIG9mZiwgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIGdldFN0YXRlLCBnZXRBY3RpdmVJZCwgc2V0QWN0aXZlSWQsIHNldEFjdGl2ZVZpZXdlciwgZ2V0U2RrIH0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBNlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF2UkE7QUFtTUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFqR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZkE7QUFBQTtBQUFBO0FBQUE7QUFvQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF1QkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlEQTtBQUFBO0FBQUE7QUErQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFtTkE7QUFBQTtBQTlNQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUErQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFFQTtBQXdLQTtBQUFBO0FBbktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUF4Z0JBO0FBQUE7QUFBQTtBQXpCQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUErZ0JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/SplitScreen/index.js\n"); /***/ }), /***/ "./src/Global/cluster/cluster.js": /*!***************************************!*\ !*** ./src/Global/cluster/cluster.js ***! \***************************************/ /*! exports provided: createCluster, addCluster, switchCluster, remove_entity_from_cluster, updateCluster */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createCluster\", function() { return createCluster; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addCluster\", function() { return addCluster; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"switchCluster\", function() { return switchCluster; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"remove_entity_from_cluster\", function() { return remove_entity_from_cluster; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"updateCluster\", function() { return updateCluster; });\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n/*\r\nlet datasource=null\r\nlet dataSourcePromise = null\r\n// let enabled = true\r\nlet dataSourcexg = null\r\nfunction createCluster(viewer) {\r\n datasource = new Cesium.CustomDataSource(\"dataSource1\");\r\n dataSourcePromise = viewer.dataSources.add(datasource);\r\n dataSourcePromise.then((dataSource)=> {\r\n // return;\r\n const pixelRange = 15;\r\n const minimumClusterSize = 3;\r\n const enabled = false;\r\n dataSourcexg = dataSource\r\n\r\n dataSource.clustering.enabled = enabled; //聚合开启\r\n dataSource.clustering.pixelRange = pixelRange; //设置像素范围,以扩展显示边框\r\n dataSource.clustering.minimumClusterSize = minimumClusterSize; //设置最小的聚合点数目,超过此数目才能聚合\r\n\r\n let removeListener;\r\n\r\n //按聚合层级创建对应图标\r\n const pinBuilder = new Cesium.PinBuilder();\r\n // console.log('pinBuilder',pinBuilder);\r\n var pin100 = pinBuilder\r\n .fromText(\"100+\", Cesium.Color.BLUE, 48)\r\n .toDataURL();\r\n var pin50 = pinBuilder\r\n .fromText(\"50+\", Cesium.Color.BLUE, 48)\r\n .toDataURL();\r\n var pin40 = pinBuilder\r\n .fromText(\"40+\", Cesium.Color.RED, 48)\r\n .toDataURL();\r\n var pin30 = pinBuilder\r\n .fromText(\"30+\", Cesium.Color.RED, 48)\r\n .toDataURL();\r\n var pin20 = pinBuilder\r\n .fromText(\"20+\", Cesium.Color.RED, 48)\r\n .toDataURL();\r\n var pin10 = pinBuilder\r\n .fromText(\"10+\", Cesium.Color.RED, 48)\r\n .toDataURL();\r\n // 10以内聚合图标\r\n const singleDigitPins = new Array(8);\r\n for (let i = 0; i < singleDigitPins.length; ++i) {\r\n singleDigitPins[i] = pinBuilder\r\n .fromText(`${i + 2}`, Cesium.Color.VIOLET, 48)\r\n .toDataURL();\r\n }\r\n\r\n\r\n function customStyle() {\r\n if (Cesium.defined(removeListener)) {\r\n removeListener();\r\n removeListener = undefined;\r\n } else {\r\n removeListener = dataSource.clustering.clusterEvent.addEventListener(\r\n function(clusteredEntities, cluster) {\r\n cluster.label.show = false;\r\n cluster.billboard.show = true;\r\n cluster.billboard.id = cluster.label.id;\r\n cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\r\n if (clusteredEntities.length >= 100) {\r\n cluster.billboard.image = pin100;\r\n } else if (clusteredEntities.length >= 50) {\r\n cluster.billboard.image = pin50;\r\n } else if (clusteredEntities.length >= 40) {\r\n cluster.billboard.image = pin40;\r\n } else if (clusteredEntities.length >= 30) {\r\n cluster.billboard.image = pin30;\r\n } else if (clusteredEntities.length >= 20) {\r\n cluster.billboard.image = pin20;\r\n } else if (clusteredEntities.length >= 10) {\r\n cluster.billboard.image = pin10;\r\n } else {\r\n cluster.billboard.image =\r\n singleDigitPins[clusteredEntities.length - 2];\r\n }\r\n }\r\n );\r\n }\r\n\r\n // force a re-cluster with the new styling\r\n const pixelRange = dataSource.clustering.pixelRange;\r\n dataSource.clustering.pixelRange = 0;\r\n dataSource.clustering.pixelRange = pixelRange;\r\n }\r\n\r\n customStyle();\r\n\r\n var viewModel = {\r\n pixelRange: pixelRange,\r\n minimumClusterSize: minimumClusterSize,\r\n };\r\n Cesium.knockout.track(viewModel);\r\n\r\n\r\n function subscribeParameter(name) {\r\n Cesium.knockout\r\n .getObservable(viewModel, name)\r\n .subscribe(function (newValue) {\r\n dataSource.clustering[name] = newValue;\r\n });\r\n }\r\n\r\n subscribeParameter(\"pixelRange\");\r\n subscribeParameter(\"minimumClusterSize\");\r\n });\r\n}\r\n\r\nfunction addCluster(entity) {\r\n datasource.entities.add(entity)\r\n}\r\nfunction remove_entity_from_cluster(entity) {\r\n datasource.entities.remove(entity)\r\n}\r\n\r\nfunction switchCluster(status){\r\n dataSourcexg.clustering.enabled = status\r\n}\r\n\r\n*/\n\n\n\n\n/*创建聚合,只能聚合point ,billboard,label*/\nfunction createCluster(viewer) {\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n var cluster = new Cesium.CustomDataSource(\"sdk-dataSource1\");\n var dataSourcePromise = viewer.dataSources.add(cluster);\n dataSourcePromise.then(function (dataSource) {\n // if (!get2DView()) {\n // dataSource.entities.collectionChanged.addEventListener((entities) => {\n // syncDataSources(dataSource, 'entities')\n // })\n // }\n var pixelRange = 15;\n var minimumClusterSize = 2;\n var enabled = false;\n dataSource.clustering.enabled = enabled;\n dataSource.clustering.pixelRange = pixelRange;\n dataSource.clustering.minimumClusterSize = minimumClusterSize;\n var removeListener;\n var pinBuilder = new Cesium.PinBuilder();\n var pin50 = pinBuilder.fromText(\"50+\", Cesium.Color.RED, 48).toDataURL();\n var pin40 = pinBuilder.fromText(\"40+\", Cesium.Color.ORANGE, 48).toDataURL();\n var pin30 = pinBuilder.fromText(\"30+\", Cesium.Color.YELLOW, 48).toDataURL();\n var pin20 = pinBuilder.fromText(\"20+\", Cesium.Color.GREEN, 48).toDataURL();\n var pin10 = pinBuilder.fromText(\"10+\", Cesium.Color.BLUE, 48).toDataURL();\n var singleDigitPins = new Array(8);\n for (var i = 0; i < singleDigitPins.length; ++i) {\n singleDigitPins[i] = pinBuilder.fromText(\"\" + (i + 2), Cesium.Color.VIOLET, 48).toDataURL();\n }\n function customStyle() {\n if (Cesium.defined(removeListener)) {\n removeListener();\n removeListener = undefined;\n } else {\n removeListener = dataSource.clustering.clusterEvent.addEventListener(function (clusteredEntities, cluster) {\n // cluster.label.show = false;\n // cluster.label.verticalOrigin = false;\n cluster.billboard.show = true;\n cluster.billboard.id = cluster.label.id;\n cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n // 根据聚合数量的多少设置不同层级的图片以及大小\n /*if (clusteredEntities.length >= 50) {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_大红.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 72;\r\n cluster.billboard.height = 72;\r\n } else if (clusteredEntities.length >= 40) {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_大黄.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 56;\r\n cluster.billboard.height = 56;\r\n } else if (clusteredEntities.length >= 30) {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_大蓝.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 48;\r\n cluster.billboard.height = 48;\r\n } else if (clusteredEntities.length >= 20) {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_小红.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 48;\r\n cluster.billboard.height = 48;\r\n } else if (clusteredEntities.length >= 10) {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_小黄.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 48;\r\n cluster.billboard.height = 48;\r\n } else {\r\n cluster.billboard.image = that.combineIconAndLabel(host + '1_小蓝.png', clusteredEntities.length, 64);\r\n cluster.billboard.width = 40;\r\n cluster.billboard.height = 40;\r\n }*/\n\n cluster.billboard.image = tools.getSourceRootPath() + '/img/cluster.png';\n cluster.billboard.disableDepthTestDistance = Object(_Global_global__WEBPACK_IMPORTED_MODULE_1__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n cluster.label.verticalOrigin = Cesium.VerticalOrigin.CENTER;\n cluster.label.font = \"18px Arial,sans-serif\",\n // cluster.label.scale = 0.5\n cluster.label.disableDepthTestDistance = Object(_Global_global__WEBPACK_IMPORTED_MODULE_1__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n cluster.label.style = Cesium.LabelStyle.FILL;\n cluster.label.showBackground = true;\n cluster.label.backgroundColor = Cesium.Color.WHITE.withAlpha(0.0);\n if (clusteredEntities.length >= 1000) {\n cluster.billboard.scale = 1.5;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-28, -46);\n } else if (clusteredEntities.length >= 100) {\n cluster.billboard.scale = 1.25;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-21, -40);\n } else if (clusteredEntities.length >= 50) {\n cluster.billboard.scale = 1.1;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-16, -36);\n } else if (clusteredEntities.length >= 40) {\n cluster.billboard.scale = 1.05;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-16, -34);\n } else if (clusteredEntities.length >= 30) {\n cluster.billboard.scale = 1;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-16, -32);\n } else if (clusteredEntities.length >= 20) {\n cluster.billboard.scale = 0.95;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-16, -30);\n } else if (clusteredEntities.length >= 10) {\n cluster.billboard.scale = 0.9;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-16, -28);\n } else {\n cluster.billboard.scale = 0.8;\n cluster.label.pixelOffset = new Cesium.Cartesian2(-11, -25);\n }\n\n // if (clusteredEntities.length >= 50) {\n // cluster.billboard.image = pin50;\n // } else if (clusteredEntities.length >= 40) {\n // cluster.billboard.image = pin40;\n // } else if (clusteredEntities.length >= 30) {\n // cluster.billboard.image = pin30;\n // } else if (clusteredEntities.length >= 20) {\n // cluster.billboard.image = pin20;\n // } else if (clusteredEntities.length >= 10) {\n // cluster.billboard.image = pin10;\n // } else {\n // cluster.billboard.image =\n // singleDigitPins[clusteredEntities.length - 2];\n // }\n });\n }\n\n // force a re-cluster with the new styling\n var pixelRange = dataSource.clustering.pixelRange;\n dataSource.clustering.pixelRange = 0;\n dataSource.clustering.pixelRange = pixelRange;\n }\n\n // start with custom style\n customStyle();\n var viewModel = {\n pixelRange: pixelRange,\n minimumClusterSize: minimumClusterSize\n };\n Cesium.knockout.track(viewModel);\n function subscribeParameter(name) {\n Cesium.knockout.getObservable(viewModel, name).subscribe(function (newValue) {\n dataSource.clustering[name] = newValue;\n });\n }\n subscribeParameter(\"pixelRange\");\n subscribeParameter(\"minimumClusterSize\");\n // var handler = new Cesium.ScreenSpaceEventHandler(this.sdk.viewer.scene.canvas);\n // handler.setInputAction((movement) => {\n // var pickedLabel = this.sdk.viewer.scene.pick(movement.position);\n //\n // if (Cesium.defined(pickedLabel)) {\n // this.log(pickedLabel)\n // var ids = pickedLabel.id;\n // if (Array.isArray(ids)) {\n // for (var i = 0; i < ids.length; ++i) {\n // ids[i].billboard.color = Cesium.Color.RED;\n // }\n // }\n // }\n // }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n });\n}\n\n/**\r\n * @description 开启/关闭聚合效果\r\n * @method set_cluster_status\r\n * @param [enable=false] {boolean}默认关闭\r\n * @memberOf Tool-3D\r\n * */\nfunction switchCluster(sdk) {\n var enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var viewer = sdk.viewer;\n for (var i = 0; i < viewer.dataSources._dataSources.length; i++) {\n if (viewer.dataSources._dataSources[i].name === \"sdk-dataSource1\") {\n viewer.dataSources._dataSources[i].clustering.enabled = enable;\n // syncDataSources(viewer.dataSources._dataSources[i], 'clustering')\n break;\n }\n }\n}\nfunction addCluster(sdk, entity) {\n var viewer = sdk.viewer;\n if (!viewer) {\n return;\n }\n for (var i = 0; i < viewer.dataSources._dataSources.length; i++) {\n if (viewer.dataSources._dataSources[i].name === \"sdk-dataSource1\") {\n viewer.dataSources._dataSources[i].entities.add(entity);\n break;\n }\n }\n}\nfunction remove_entity_from_cluster(viewer, entity) {\n for (var i = 0; i < viewer.dataSources._dataSources.length; i++) {\n if (viewer.dataSources._dataSources[i].name === \"sdk-dataSource1\") {\n viewer.dataSources._dataSources[i].entities.remove(entity);\n break;\n }\n }\n}\nfunction updateCluster(viewer) {\n if (!viewer) {\n return;\n }\n for (var i = 0; i < viewer.dataSources._dataSources.length; i++) {\n if (viewer.dataSources._dataSources[i].name === \"sdk-dataSource1\") {\n viewer.dataSources._dataSources[i].clustering._cluster();\n break;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2NsdXN0ZXIvY2x1c3Rlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvY2x1c3Rlci9jbHVzdGVyLmpzPzA3YzQiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlxyXG5sZXQgZGF0YXNvdXJjZT1udWxsXHJcbmxldCBkYXRhU291cmNlUHJvbWlzZSA9IG51bGxcclxuLy8gbGV0IGVuYWJsZWQgPSB0cnVlXHJcbmxldCBkYXRhU291cmNleGcgPSBudWxsXHJcbmZ1bmN0aW9uIGNyZWF0ZUNsdXN0ZXIodmlld2VyKSB7XHJcbiAgICBkYXRhc291cmNlID0gbmV3IENlc2l1bS5DdXN0b21EYXRhU291cmNlKFwiZGF0YVNvdXJjZTFcIik7XHJcbiAgICBkYXRhU291cmNlUHJvbWlzZSA9IHZpZXdlci5kYXRhU291cmNlcy5hZGQoZGF0YXNvdXJjZSk7XHJcbiAgICBkYXRhU291cmNlUHJvbWlzZS50aGVuKChkYXRhU291cmNlKT0+IHtcclxuICAgICAgICAvLyByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcGl4ZWxSYW5nZSA9IDE1O1xyXG4gICAgICAgIGNvbnN0IG1pbmltdW1DbHVzdGVyU2l6ZSA9IDM7XHJcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGRhdGFTb3VyY2V4ZyA9IGRhdGFTb3VyY2VcclxuXHJcbiAgICAgICAgZGF0YVNvdXJjZS5jbHVzdGVyaW5nLmVuYWJsZWQgPSBlbmFibGVkOyAvL+iBmuWQiOW8gOWQr1xyXG4gICAgICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlID0gcGl4ZWxSYW5nZTsgLy/orr7nva7lg4/ntKDojIPlm7TvvIzku6XmianlsZXmmL7npLrovrnmoYZcclxuICAgICAgICBkYXRhU291cmNlLmNsdXN0ZXJpbmcubWluaW11bUNsdXN0ZXJTaXplID0gbWluaW11bUNsdXN0ZXJTaXplOyAvL+iuvue9ruacgOWwj+eahOiBmuWQiOeCueaVsOebru+8jOi2hei/h+atpOaVsOebruaJjeiDveiBmuWQiFxyXG5cclxuICAgICAgICBsZXQgcmVtb3ZlTGlzdGVuZXI7XHJcblxyXG4gICAgICAgIC8v5oyJ6IGa5ZCI5bGC57qn5Yib5bu65a+55bqU5Zu+5qCHXHJcbiAgICAgICAgY29uc3QgcGluQnVpbGRlciA9IG5ldyBDZXNpdW0uUGluQnVpbGRlcigpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwaW5CdWlsZGVyJyxwaW5CdWlsZGVyKTtcclxuICAgICAgICB2YXIgcGluMTAwID0gcGluQnVpbGRlclxyXG4gICAgICAgICAgICAuZnJvbVRleHQoXCIxMDArXCIsIENlc2l1bS5Db2xvci5CTFVFLCA0OClcclxuICAgICAgICAgICAgLnRvRGF0YVVSTCgpO1xyXG4gICAgICAgIHZhciBwaW41MCA9IHBpbkJ1aWxkZXJcclxuICAgICAgICAgICAgLmZyb21UZXh0KFwiNTArXCIsIENlc2l1bS5Db2xvci5CTFVFLCA0OClcclxuICAgICAgICAgICAgLnRvRGF0YVVSTCgpO1xyXG4gICAgICAgIHZhciBwaW40MCA9IHBpbkJ1aWxkZXJcclxuICAgICAgICAgICAgLmZyb21UZXh0KFwiNDArXCIsIENlc2l1bS5Db2xvci5SRUQsIDQ4KVxyXG4gICAgICAgICAgICAudG9EYXRhVVJMKCk7XHJcbiAgICAgICAgdmFyIHBpbjMwID0gcGluQnVpbGRlclxyXG4gICAgICAgICAgICAuZnJvbVRleHQoXCIzMCtcIiwgQ2VzaXVtLkNvbG9yLlJFRCwgNDgpXHJcbiAgICAgICAgICAgIC50b0RhdGFVUkwoKTtcclxuICAgICAgICB2YXIgcGluMjAgPSBwaW5CdWlsZGVyXHJcbiAgICAgICAgICAgIC5mcm9tVGV4dChcIjIwK1wiLCBDZXNpdW0uQ29sb3IuUkVELCA0OClcclxuICAgICAgICAgICAgLnRvRGF0YVVSTCgpO1xyXG4gICAgICAgIHZhciBwaW4xMCA9IHBpbkJ1aWxkZXJcclxuICAgICAgICAgICAgLmZyb21UZXh0KFwiMTArXCIsIENlc2l1bS5Db2xvci5SRUQsIDQ4KVxyXG4gICAgICAgICAgICAudG9EYXRhVVJMKCk7XHJcbiAgICAgICAgLy8gMTDku6XlhoXogZrlkIjlm77moIdcclxuICAgICAgICBjb25zdCBzaW5nbGVEaWdpdFBpbnMgPSBuZXcgQXJyYXkoOCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaW5nbGVEaWdpdFBpbnMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgc2luZ2xlRGlnaXRQaW5zW2ldID0gcGluQnVpbGRlclxyXG4gICAgICAgICAgICAgICAgLmZyb21UZXh0KGAke2kgKyAyfWAsIENlc2l1bS5Db2xvci5WSU9MRVQsIDQ4KVxyXG4gICAgICAgICAgICAgICAgLnRvRGF0YVVSTCgpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGN1c3RvbVN0eWxlKCkge1xyXG4gICAgICAgICAgICBpZiAoQ2VzaXVtLmRlZmluZWQocmVtb3ZlTGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lciA9IGRhdGFTb3VyY2UuY2x1c3RlcmluZy5jbHVzdGVyRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihjbHVzdGVyZWRFbnRpdGllcywgY2x1c3Rlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLmxhYmVsLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmlkID0gY2x1c3Rlci5sYWJlbC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQudmVydGljYWxPcmlnaW4gPSBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSBwaW4xMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHBpbjUwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCA+PSA0MCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSBwaW40MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gMzApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID0gcGluMzA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHBpbjIwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCA+PSAxMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSBwaW4xMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEaWdpdFBpbnNbY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBmb3JjZSBhIHJlLWNsdXN0ZXIgd2l0aCB0aGUgbmV3IHN0eWxpbmdcclxuICAgICAgICAgICAgY29uc3QgcGl4ZWxSYW5nZSA9IGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmNsdXN0ZXJpbmcucGl4ZWxSYW5nZSA9IDA7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlID0gcGl4ZWxSYW5nZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICBjdXN0b21TdHlsZSgpO1xyXG5cclxuICAgICAgdmFyIHZpZXdNb2RlbCA9IHtcclxuICAgICAgICBwaXhlbFJhbmdlOiBwaXhlbFJhbmdlLFxyXG4gICAgICAgIG1pbmltdW1DbHVzdGVyU2l6ZTogbWluaW11bUNsdXN0ZXJTaXplLFxyXG4gICAgICB9O1xyXG4gICAgICBDZXNpdW0ua25vY2tvdXQudHJhY2sodmlld01vZGVsKTtcclxuXHJcblxyXG4gICAgICBmdW5jdGlvbiBzdWJzY3JpYmVQYXJhbWV0ZXIobmFtZSkge1xyXG4gICAgICAgIENlc2l1bS5rbm9ja291dFxyXG4gICAgICAgICAgLmdldE9ic2VydmFibGUodmlld01vZGVsLCBuYW1lKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5jbHVzdGVyaW5nW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3Vic2NyaWJlUGFyYW1ldGVyKFwicGl4ZWxSYW5nZVwiKTtcclxuICAgICAgc3Vic2NyaWJlUGFyYW1ldGVyKFwibWluaW11bUNsdXN0ZXJTaXplXCIpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZENsdXN0ZXIoZW50aXR5KSB7XHJcbiAgICBkYXRhc291cmNlLmVudGl0aWVzLmFkZChlbnRpdHkpXHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlX2VudGl0eV9mcm9tX2NsdXN0ZXIoZW50aXR5KSB7XHJcbiAgICBkYXRhc291cmNlLmVudGl0aWVzLnJlbW92ZShlbnRpdHkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN3aXRjaENsdXN0ZXIoc3RhdHVzKXtcclxuICAgIGRhdGFTb3VyY2V4Zy5jbHVzdGVyaW5nLmVuYWJsZWQgPSBzdGF0dXNcclxufVxyXG5cclxuKi9cclxuXHJcbmltcG9ydCBUb29scyBmcm9tICcuLi8uLi9Ub29scydcclxuaW1wb3J0IHtcclxuICBnZXRHcm91bmRDb3ZlclxyXG59IGZyb20gJy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5cclxuLyrliJvlu7rogZrlkIgs5Y+q6IO96IGa5ZCIcG9pbnQg77yMYmlsbGJvYXJk77yMbGFiZWwqL1xyXG5mdW5jdGlvbiBjcmVhdGVDbHVzdGVyKHZpZXdlcikge1xyXG4gIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgbGV0IGNsdXN0ZXIgPSBuZXcgQ2VzaXVtLkN1c3RvbURhdGFTb3VyY2UoXCJzZGstZGF0YVNvdXJjZTFcIilcclxuICBsZXQgZGF0YVNvdXJjZVByb21pc2UgPSB2aWV3ZXIuZGF0YVNvdXJjZXMuYWRkKGNsdXN0ZXIpXHJcbiAgZGF0YVNvdXJjZVByb21pc2UudGhlbihkYXRhU291cmNlID0+IHtcclxuICAgIC8vIGlmICghZ2V0MkRWaWV3KCkpIHtcclxuICAgIC8vICAgZGF0YVNvdXJjZS5lbnRpdGllcy5jb2xsZWN0aW9uQ2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKChlbnRpdGllcykgPT4ge1xyXG4gICAgLy8gICAgIHN5bmNEYXRhU291cmNlcyhkYXRhU291cmNlLCAnZW50aXRpZXMnKVxyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gfVxyXG4gICAgdmFyIHBpeGVsUmFuZ2UgPSAxNTtcclxuICAgIHZhciBtaW5pbXVtQ2x1c3RlclNpemUgPSAyO1xyXG4gICAgdmFyIGVuYWJsZWQgPSBmYWxzZTtcclxuICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5lbmFibGVkID0gZW5hYmxlZDtcclxuICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlID0gcGl4ZWxSYW5nZTtcclxuICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5taW5pbXVtQ2x1c3RlclNpemUgPSBtaW5pbXVtQ2x1c3RlclNpemU7XHJcbiAgICB2YXIgcmVtb3ZlTGlzdGVuZXI7XHJcblxyXG4gICAgdmFyIHBpbkJ1aWxkZXIgPSBuZXcgQ2VzaXVtLlBpbkJ1aWxkZXIoKTtcclxuICAgIHZhciBwaW41MCA9IHBpbkJ1aWxkZXJcclxuICAgICAgLmZyb21UZXh0KFwiNTArXCIsIENlc2l1bS5Db2xvci5SRUQsIDQ4KVxyXG4gICAgICAudG9EYXRhVVJMKCk7XHJcbiAgICB2YXIgcGluNDAgPSBwaW5CdWlsZGVyXHJcbiAgICAgIC5mcm9tVGV4dChcIjQwK1wiLCBDZXNpdW0uQ29sb3IuT1JBTkdFLCA0OClcclxuICAgICAgLnRvRGF0YVVSTCgpO1xyXG4gICAgdmFyIHBpbjMwID0gcGluQnVpbGRlclxyXG4gICAgICAuZnJvbVRleHQoXCIzMCtcIiwgQ2VzaXVtLkNvbG9yLllFTExPVywgNDgpXHJcbiAgICAgIC50b0RhdGFVUkwoKTtcclxuICAgIHZhciBwaW4yMCA9IHBpbkJ1aWxkZXJcclxuICAgICAgLmZyb21UZXh0KFwiMjArXCIsIENlc2l1bS5Db2xvci5HUkVFTiwgNDgpXHJcbiAgICAgIC50b0RhdGFVUkwoKTtcclxuICAgIHZhciBwaW4xMCA9IHBpbkJ1aWxkZXJcclxuICAgICAgLmZyb21UZXh0KFwiMTArXCIsIENlc2l1bS5Db2xvci5CTFVFLCA0OClcclxuICAgICAgLnRvRGF0YVVSTCgpO1xyXG5cclxuICAgIHZhciBzaW5nbGVEaWdpdFBpbnMgPSBuZXcgQXJyYXkoOCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpbmdsZURpZ2l0UGlucy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBzaW5nbGVEaWdpdFBpbnNbaV0gPSBwaW5CdWlsZGVyXHJcbiAgICAgICAgLmZyb21UZXh0KFwiXCIgKyAoaSArIDIpLCBDZXNpdW0uQ29sb3IuVklPTEVULCA0OClcclxuICAgICAgICAudG9EYXRhVVJMKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3VzdG9tU3R5bGUoKSB7XHJcbiAgICAgIGlmIChDZXNpdW0uZGVmaW5lZChyZW1vdmVMaXN0ZW5lcikpIHtcclxuICAgICAgICByZW1vdmVMaXN0ZW5lcigpO1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyID0gZGF0YVNvdXJjZS5jbHVzdGVyaW5nLmNsdXN0ZXJFdmVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgZnVuY3Rpb24gKGNsdXN0ZXJlZEVudGl0aWVzLCBjbHVzdGVyKSB7XHJcbiAgICAgICAgICAgIC8vIGNsdXN0ZXIubGFiZWwuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjbHVzdGVyLmxhYmVsLnZlcnRpY2FsT3JpZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5pZCA9IGNsdXN0ZXIubGFiZWwuaWQ7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLnZlcnRpY2FsT3JpZ2luID1cclxuICAgICAgICAgICAgICBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NO1xyXG4gICAgICAgICAgICAvLyDmoLnmja7ogZrlkIjmlbDph4/nmoTlpJrlsJHorr7nva7kuI3lkIzlsYLnuqfnmoTlm77niYfku6Xlj4rlpKflsI9cclxuICAgICAgICAgICAgLyppZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDUwKSB7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID0gdGhhdC5jb21iaW5lSWNvbkFuZExhYmVsKGhvc3QgKyAnMV/lpKfnuqIucG5nJywgY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoLCA2NCk7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLndpZHRoID0gNzI7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmhlaWdodCA9IDcyO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gNDApIHtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSB0aGF0LmNvbWJpbmVJY29uQW5kTGFiZWwoaG9zdCArICcxX+Wkp+m7hC5wbmcnLCBjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGgsIDY0KTtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQud2lkdGggPSA1NjtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaGVpZ2h0ID0gNTY7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCA+PSAzMCkge1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHRoYXQuY29tYmluZUljb25BbmRMYWJlbChob3N0ICsgJzFf5aSn6JOdLnBuZycsIGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCwgNjQpO1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC53aWR0aCA9IDQ4O1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5oZWlnaHQgPSA0ODtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDIwKSB7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID0gdGhhdC5jb21iaW5lSWNvbkFuZExhYmVsKGhvc3QgKyAnMV/lsI/nuqIucG5nJywgY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoLCA2NCk7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLndpZHRoID0gNDg7XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmhlaWdodCA9IDQ4O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gMTApIHtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSB0aGF0LmNvbWJpbmVJY29uQW5kTGFiZWwoaG9zdCArICcxX+Wwj+m7hC5wbmcnLCBjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGgsIDY0KTtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQud2lkdGggPSA0ODtcclxuICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuaGVpZ2h0ID0gNDg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHRoYXQuY29tYmluZUljb25BbmRMYWJlbChob3N0ICsgJzFf5bCP6JOdLnBuZycsIGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCwgNjQpO1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC53aWR0aCA9IDQwO1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5oZWlnaHQgPSA0MDtcclxuICAgICAgICAgIH0qL1xyXG5cclxuXHJcbiAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID0gdG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2NsdXN0ZXIucG5nJ1xyXG4gICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5kaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2UgPSBnZXRHcm91bmRDb3ZlcigpID8gdW5kZWZpbmVkIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXHJcblxyXG4gICAgICAgICAgICBjbHVzdGVyLmxhYmVsLnZlcnRpY2FsT3JpZ2luID0gQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkNFTlRFUlxyXG4gICAgICAgICAgICBjbHVzdGVyLmxhYmVsLmZvbnQgPSBcIjE4cHggQXJpYWwsc2Fucy1zZXJpZlwiLFxyXG4gICAgICAgICAgICAgIC8vIGNsdXN0ZXIubGFiZWwuc2NhbGUgPSAwLjVcclxuICAgICAgICAgICAgICBjbHVzdGVyLmxhYmVsLmRpc2FibGVEZXB0aFRlc3REaXN0YW5jZSA9IGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICAgICAgY2x1c3Rlci5sYWJlbC5zdHlsZSA9IENlc2l1bS5MYWJlbFN0eWxlLkZJTExcclxuICAgICAgICAgICAgY2x1c3Rlci5sYWJlbC5zaG93QmFja2dyb3VuZCA9IHRydWVcclxuICAgICAgICAgICAgY2x1c3Rlci5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuMClcclxuXHJcbiAgICAgICAgICAgIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gMTAwMCkge1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLnNjYWxlID0gMS41O1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTI4LCAtNDYpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDEwMCkge1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLnNjYWxlID0gMS4yNTtcclxuICAgICAgICAgICAgICBjbHVzdGVyLmxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKC0yMSwgLTQwKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCA+PSA1MCkge1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIuYmlsbGJvYXJkLnNjYWxlID0gMS4xO1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTE2LCAtMzYpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDQwKSB7XHJcbiAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuc2NhbGUgPSAxLjA1O1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTE2LCAtMzQpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDMwKSB7XHJcbiAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuc2NhbGUgPSAxO1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTE2LCAtMzIpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDIwKSB7XHJcbiAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuc2NhbGUgPSAwLjk1O1xyXG4gICAgICAgICAgICAgIGNsdXN0ZXIubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTE2LCAtMzApXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDEwKSB7XHJcbiAgICAgICAgICAgICAgY2x1c3Rlci5iaWxsYm9hcmQuc2NhbGUgPSAwLjk7XHJcbiAgICAgICAgICAgICAgY2x1c3Rlci5sYWJlbC5waXhlbE9mZnNldCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigtMTYsIC0yOClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjbHVzdGVyLmJpbGxib2FyZC5zY2FsZSA9IDAuODtcclxuICAgICAgICAgICAgICBjbHVzdGVyLmxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKC0xMSwgLTI1KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDUwKSB7XHJcbiAgICAgICAgICAgIC8vICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSBwaW41MDtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gNDApIHtcclxuICAgICAgICAgICAgLy8gICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHBpbjQwO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGNsdXN0ZXJlZEVudGl0aWVzLmxlbmd0aCA+PSAzMCkge1xyXG4gICAgICAgICAgICAvLyAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID0gcGluMzA7XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoY2x1c3RlcmVkRW50aXRpZXMubGVuZ3RoID49IDIwKSB7XHJcbiAgICAgICAgICAgIC8vICAgY2x1c3Rlci5iaWxsYm9hcmQuaW1hZ2UgPSBwaW4yMDtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggPj0gMTApIHtcclxuICAgICAgICAgICAgLy8gICBjbHVzdGVyLmJpbGxib2FyZC5pbWFnZSA9IHBpbjEwO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgIGNsdXN0ZXIuYmlsbGJvYXJkLmltYWdlID1cclxuICAgICAgICAgICAgLy8gICAgIHNpbmdsZURpZ2l0UGluc1tjbHVzdGVyZWRFbnRpdGllcy5sZW5ndGggLSAyXTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGZvcmNlIGEgcmUtY2x1c3RlciB3aXRoIHRoZSBuZXcgc3R5bGluZ1xyXG4gICAgICB2YXIgcGl4ZWxSYW5nZSA9IGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlO1xyXG4gICAgICBkYXRhU291cmNlLmNsdXN0ZXJpbmcucGl4ZWxSYW5nZSA9IDA7XHJcbiAgICAgIGRhdGFTb3VyY2UuY2x1c3RlcmluZy5waXhlbFJhbmdlID0gcGl4ZWxSYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzdGFydCB3aXRoIGN1c3RvbSBzdHlsZVxyXG4gICAgY3VzdG9tU3R5bGUoKTtcclxuXHJcbiAgICB2YXIgdmlld01vZGVsID0ge1xyXG4gICAgICBwaXhlbFJhbmdlOiBwaXhlbFJhbmdlLFxyXG4gICAgICBtaW5pbXVtQ2x1c3RlclNpemU6IG1pbmltdW1DbHVzdGVyU2l6ZSxcclxuICAgIH07XHJcbiAgICBDZXNpdW0ua25vY2tvdXQudHJhY2sodmlld01vZGVsKTtcclxuXHJcblxyXG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlUGFyYW1ldGVyKG5hbWUpIHtcclxuICAgICAgQ2VzaXVtLmtub2Nrb3V0XHJcbiAgICAgICAgLmdldE9ic2VydmFibGUodmlld01vZGVsLCBuYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlLmNsdXN0ZXJpbmdbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmVQYXJhbWV0ZXIoXCJwaXhlbFJhbmdlXCIpO1xyXG4gICAgc3Vic2NyaWJlUGFyYW1ldGVyKFwibWluaW11bUNsdXN0ZXJTaXplXCIpO1xyXG4gICAgLy8gdmFyIGhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYW52YXMpO1xyXG4gICAgLy8gaGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgIC8vICAgICB2YXIgcGlja2VkTGFiZWwgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIGlmIChDZXNpdW0uZGVmaW5lZChwaWNrZWRMYWJlbCkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sb2cocGlja2VkTGFiZWwpXHJcbiAgICAvLyAgICAgICAgIHZhciBpZHMgPSBwaWNrZWRMYWJlbC5pZDtcclxuICAgIC8vICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZHNbaV0uYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLlJFRDtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0NMSUNLKTtcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIOW8gOWQry/lhbPpl63ogZrlkIjmlYjmnpxcclxuICogQG1ldGhvZCBzZXRfY2x1c3Rlcl9zdGF0dXNcclxuICogQHBhcmFtIFtlbmFibGU9ZmFsc2VdIHtib29sZWFufem7mOiupOWFs+mXrVxyXG4gKiBAbWVtYmVyT2YgVG9vbC0zRFxyXG4gKiAqL1xyXG5mdW5jdGlvbiBzd2l0Y2hDbHVzdGVyKHNkaywgZW5hYmxlID0gZmFsc2UpIHtcclxuICBsZXQgdmlld2VyID0gc2RrLnZpZXdlclxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld2VyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHZpZXdlci5kYXRhU291cmNlcy5fZGF0YVNvdXJjZXNbaV0ubmFtZSA9PT0gXCJzZGstZGF0YVNvdXJjZTFcIikge1xyXG4gICAgICB2aWV3ZXIuZGF0YVNvdXJjZXMuX2RhdGFTb3VyY2VzW2ldLmNsdXN0ZXJpbmcuZW5hYmxlZCA9IGVuYWJsZVxyXG4gICAgICAvLyBzeW5jRGF0YVNvdXJjZXModmlld2VyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlc1tpXSwgJ2NsdXN0ZXJpbmcnKVxyXG4gICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYWRkQ2x1c3RlcihzZGssIGVudGl0eSkge1xyXG4gIGxldCB2aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgaWYoIXZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld2VyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHZpZXdlci5kYXRhU291cmNlcy5fZGF0YVNvdXJjZXNbaV0ubmFtZSA9PT0gXCJzZGstZGF0YVNvdXJjZTFcIikge1xyXG4gICAgICB2aWV3ZXIuZGF0YVNvdXJjZXMuX2RhdGFTb3VyY2VzW2ldLmVudGl0aWVzLmFkZChlbnRpdHkpXHJcbiAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVfZW50aXR5X2Zyb21fY2x1c3Rlcih2aWV3ZXIsIGVudGl0eSkge1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld2VyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHZpZXdlci5kYXRhU291cmNlcy5fZGF0YVNvdXJjZXNbaV0ubmFtZSA9PT0gXCJzZGstZGF0YVNvdXJjZTFcIikge1xyXG4gICAgICB2aWV3ZXIuZGF0YVNvdXJjZXMuX2RhdGFTb3VyY2VzW2ldLmVudGl0aWVzLnJlbW92ZShlbnRpdHkpXHJcbiAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVDbHVzdGVyKHZpZXdlcikge1xyXG4gIGlmKCF2aWV3ZXIpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXdlci5kYXRhU291cmNlcy5fZGF0YVNvdXJjZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmICh2aWV3ZXIuZGF0YVNvdXJjZXMuX2RhdGFTb3VyY2VzW2ldLm5hbWUgPT09IFwic2RrLWRhdGFTb3VyY2UxXCIpIHtcclxuICAgICAgdmlld2VyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlc1tpXS5jbHVzdGVyaW5nLl9jbHVzdGVyKClcclxuICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgeyBjcmVhdGVDbHVzdGVyLCBhZGRDbHVzdGVyLCBzd2l0Y2hDbHVzdGVyLCByZW1vdmVfZW50aXR5X2Zyb21fY2x1c3RlciwgdXBkYXRlQ2x1c3RlciB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBR0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/cluster/cluster.js\n"); /***/ }), /***/ "./src/Global/efflect/Sunshine/TimeLine.js": /*!*************************************************!*\ !*** ./src/Global/efflect/Sunshine/TimeLine.js ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TimeLine; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar TimeLine = /*#__PURE__*/function () {\n function TimeLine(sdk, speed) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, TimeLine);\n this.sdk = _objectSpread({}, sdk);\n this.progress = document.getElementById('progress');\n this.handle = document.getElementById('handle');\n // this.timeline = document.getElementById('timeline');\n this.timeline = document.getElementsByClassName('timeline-container')[0];\n this.currentTime = document.getElementById('currentTime');\n this.timelineCon = document.getElementsByClassName('timeline-container')[0];\n this.speed = speed;\n this.animationId;\n this.startTime = performance.now();\n this.manualPosition = null;\n this.isDragging = false;\n this.pauseed = false;\n this.time = '';\n this.update = this.update.bind(this);\n TimeLine.init(this);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(TimeLine, [{\n key: \"moveComplay\",\n value: function moveComplay(func) {\n var that = this;\n // that.timeline.addEventListener('mouseup', () => {\n document.addEventListener('mouseup', function () {\n if (that.isDragging) {\n that.isDragging = false;\n if (that.manualPosition !== null) {\n // that.sdk.viewer.clock.shouldAnimate = true\n that.startTime = performance.now() - that.manualPosition * 86400 * 1000 / that.speed;\n that.manualPosition = null;\n that.changeDate && (that.changeDateGrag = true);\n if (!that.pauseed) {\n that.update();\n func(that.time);\n } else {\n that.pausedTime = performance.now(); // 记录暂停时刻\n func(that.currentTime.textContent);\n }\n }\n }\n });\n }\n }, {\n key: \"formatTime\",\n value: function formatTime(seconds) {\n var hrs = Math.floor(seconds / 3600).toString().padStart(2, '0');\n var mins = Math.floor(seconds % 3600 / 60).toString().padStart(2, '0');\n var secs = Math.floor(seconds % 60).toString().padStart(2, '0');\n return \"\".concat(hrs, \":\").concat(mins, \":\").concat(secs);\n }\n }, {\n key: \"update\",\n value: function update() {\n if (this.manualPosition !== null) return;\n if (this.changeDate) {\n //切换日期后让时间从0开始\n this.startTime = performance.now();\n }\n var elapsed = (performance.now() - this.startTime) * this.speed;\n // if (this.elapsed) {\n // elapsed = elapsed + this.elapsed\n // this.elapsed = undefined\n // }\n var totalSeconds = elapsed / 1000; //秒\n var daySeconds = totalSeconds % 86400; //天\n var percentage = daySeconds / 86400;\n this.progress.style.width = \"\".concat(percentage * 100, \"%\");\n this.time = this.formatTime(daySeconds);\n this.currentTime.textContent = this.time;\n if (!this.pauseed) {\n this.animationId && cancelAnimationFrame(this.animationId);\n this.animationId = requestAnimationFrame(this.update);\n }\n }\n }, {\n key: \"setSpeed\",\n value: function setSpeed(v) {\n var now = performance.now();\n if (!this.pauseed) {\n var _this$manualPosition;\n var currentProgress = (_this$manualPosition = this.manualPosition) !== null && _this$manualPosition !== void 0 ? _this$manualPosition : (performance.now() - this.startTime) * this.speed / (86400 * 1000);\n this.speed = v;\n this.startTime = performance.now() - currentProgress * 86400 * 1000 / this.speed;\n } else {\n var _this$manualPosition2;\n var pausedDuration = now - this.pausedTime;\n this.startTime += pausedDuration; // 补偿暂停期间的时间差\n var _currentProgress = (_this$manualPosition2 = this.manualPosition) !== null && _this$manualPosition2 !== void 0 ? _this$manualPosition2 : (now - this.startTime) * this.speed / (86400 * 1000);\n this.speed = v;\n this.startTime = now - _currentProgress * 86400 * 1000 / this.speed;\n this.pausedTime = now; // 记录切换speed暂停时刻\n // this.speed = v;\n }\n this.manualPosition = null;\n\n // this.update();\n }\n }, {\n key: \"updateTime\",\n value: function updateTime() {\n this.manualPosition = null;\n this.startTime = performance.now() - (this.manualPosition || 0) * 86400 * 1000 / this.speed;\n this.pauseed && (this.changeDate = true);\n this.changeDateGrag = undefined;\n this.update();\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.animationId && cancelAnimationFrame(this.animationId);\n this.progress.style.width = '0%';\n this.currentTime.textContent = '00:00:00';\n }\n }], [{\n key: \"init\",\n value: function init(that) {\n for (var i = 0; i <= 24; i++) {\n if (i % 6 === 0) {\n var label = document.createElement('div');\n label.className = 'time-mark';\n label.textContent = \"\".concat(i, \":00\");\n label.style.left = \"\".concat(i / 24 * 100, \"%\");\n document.getElementsByClassName('time-marks')[0].appendChild(label);\n }\n }\n that.startTime = performance.now() - (that.manualPosition || 0) * 86400 * 1000 / that.speed;\n that.timeline.addEventListener('mousedown', function (e) {\n if (e.srcElement.className === 'handle') {\n that.isDragging = true;\n }\n e.preventDefault();\n });\n that.timeline.addEventListener('mousemove', function (e) {\n if (!that.isDragging) return;\n var rect = that.timeline.getBoundingClientRect();\n var pos = (e.clientX - rect.left) / rect.width;\n pos = Math.max(0, Math.min(1, pos));\n that.manualPosition = pos;\n that.progress.style.width = \"\".concat(pos * 100, \"%\");\n var seconds = pos * 86400;\n that.currentTime.textContent = that.formatTime(seconds);\n });\n that.update();\n document.getElementById('timePause').addEventListener('click', function () {\n that.pauseed = !that.pauseed;\n if (that.pauseed) {\n //暂停\n that.pausedTime = performance.now(); // 记录暂停时刻\n document.getElementById('timePause').textContent = '播放';\n that.animationId && cancelAnimationFrame(that.animationId);\n that.sdk.viewer.clock.shouldAnimate = false;\n } else {\n //播放\n var now = performance.now();\n var pausedDuration = now - that.pausedTime;\n document.getElementById('timePause').textContent = '暂停';\n that.manualPosition = null;\n that.startTime += pausedDuration; // 补偿暂停期间的时间差\n\n if (that.changeDate) {\n //切换日期后让时间从0开始\n if (that.changeDateGrag) {\n that.changeDateGrag = undefined;\n } else {\n that.startTime = now;\n }\n that.changeDate = undefined;\n }\n that.sdk.viewer.clock.shouldAnimate = true;\n that.update(); // 重启动画循环\n }\n });\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvVGltZUxpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvVGltZUxpbmUuanM/MDI1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBUaW1lTGluZSB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBzcGVlZCkge1xyXG4gICAgdGhpcy5zZGsgPSB7IC4uLnNkayB9O1xyXG4gICAgdGhpcy5wcm9ncmVzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzcycpO1xyXG4gICAgdGhpcy5oYW5kbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGFuZGxlJyk7XHJcbiAgICAvLyB0aGlzLnRpbWVsaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbWVsaW5lJyk7XHJcbiAgICB0aGlzLnRpbWVsaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGltZWxpbmUtY29udGFpbmVyJylbMF07XHJcbiAgICB0aGlzLmN1cnJlbnRUaW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1cnJlbnRUaW1lJyk7XHJcbiAgICB0aGlzLnRpbWVsaW5lQ29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGltZWxpbmUtY29udGFpbmVyJylbMF07XHJcbiAgICB0aGlzLnNwZWVkID0gc3BlZWQ7XHJcbiAgICB0aGlzLmFuaW1hdGlvbklkO1xyXG4gICAgdGhpcy5zdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgIHRoaXMubWFudWFsUG9zaXRpb24gPSBudWxsO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhdXNlZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudGltZSA9ICcnO1xyXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIFRpbWVMaW5lLmluaXQodGhpcylcclxuICB9XHJcbiAgc3RhdGljIGluaXQodGhhdCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMjQ7IGkrKykge1xyXG4gICAgICBpZiAoaSAlIDYgPT09IDApIHtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICd0aW1lLW1hcmsnO1xyXG4gICAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gYCR7aX06MDBgO1xyXG4gICAgICAgIGxhYmVsLnN0eWxlLmxlZnQgPSBgJHsoaSAvIDI0KSAqIDEwMH0lYDtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0aW1lLW1hcmtzJylbMF0uYXBwZW5kQ2hpbGQobGFiZWwpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoYXQuc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSAoKHRoYXQubWFudWFsUG9zaXRpb24gfHwgMCkgKiA4NjQwMCAqIDEwMDAgLyB0aGF0LnNwZWVkKTtcclxuXHJcbiAgICB0aGF0LnRpbWVsaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiB7XHJcbiAgICAgIGlmIChlLnNyY0VsZW1lbnQuY2xhc3NOYW1lID09PSAnaGFuZGxlJykge1xyXG4gICAgICAgIHRoYXQuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhhdC50aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoYXQuaXNEcmFnZ2luZykgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgcmVjdCA9IHRoYXQudGltZWxpbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBwb3MgPSAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XHJcbiAgICAgIHBvcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHBvcykpO1xyXG5cclxuICAgICAgdGhhdC5tYW51YWxQb3NpdGlvbiA9IHBvcztcclxuICAgICAgdGhhdC5wcm9ncmVzcy5zdHlsZS53aWR0aCA9IGAke3BvcyAqIDEwMH0lYDtcclxuXHJcbiAgICAgIGNvbnN0IHNlY29uZHMgPSBwb3MgKiA4NjQwMDtcclxuICAgICAgdGhhdC5jdXJyZW50VGltZS50ZXh0Q29udGVudCA9IHRoYXQuZm9ybWF0VGltZShzZWNvbmRzKTtcclxuICAgIH0pO1xyXG4gICAgdGhhdC51cGRhdGUoKTtcclxuXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZVBhdXNlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoYXQucGF1c2VlZCA9ICF0aGF0LnBhdXNlZWQ7XHJcbiAgICAgIGlmICh0aGF0LnBhdXNlZWQpIHsvL+aaguWBnFxyXG4gICAgICAgIHRoYXQucGF1c2VkVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOyAvLyDorrDlvZXmmoLlgZzml7bliLtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZVBhdXNlJykudGV4dENvbnRlbnQgPSAn5pKt5pS+JztcclxuICAgICAgICB0aGF0LmFuaW1hdGlvbklkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoYXQuYW5pbWF0aW9uSWQpO1xyXG4gICAgICAgIHRoYXQuc2RrLnZpZXdlci5jbG9jay5zaG91bGRBbmltYXRlID0gZmFsc2VcclxuICAgICAgfSBlbHNlIHsvL+aSreaUvlxyXG4gICAgICAgIGxldCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgICAgIGNvbnN0IHBhdXNlZER1cmF0aW9uID0gbm93IC0gdGhhdC5wYXVzZWRUaW1lO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW1lUGF1c2UnKS50ZXh0Q29udGVudCA9ICfmmoLlgZwnO1xyXG4gICAgICAgIHRoYXQubWFudWFsUG9zaXRpb24gPSBudWxsXHJcbiAgICAgICAgdGhhdC5zdGFydFRpbWUgKz0gcGF1c2VkRHVyYXRpb247IC8vIOihpeWBv+aaguWBnOacn+mXtOeahOaXtumXtOW3rlxyXG5cclxuICAgICAgICBpZiAodGhhdC5jaGFuZ2VEYXRlKSB7Ly/liIfmjaLml6XmnJ/lkI7orqnml7bpl7Tku44w5byA5aeLXHJcbiAgICAgICAgICBpZiAodGhhdC5jaGFuZ2VEYXRlR3JhZykge1xyXG4gICAgICAgICAgICB0aGF0LmNoYW5nZURhdGVHcmFnID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGF0LnN0YXJ0VGltZSA9IG5vd1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC5jaGFuZ2VEYXRlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuc2RrLnZpZXdlci5jbG9jay5zaG91bGRBbmltYXRlID0gdHJ1ZVxyXG4gICAgICAgIHRoYXQudXBkYXRlKCk7IC8vIOmHjeWQr+WKqOeUu+W+queOr1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbW92ZUNvbXBsYXkoZnVuYykge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAvLyB0aGF0LnRpbWVsaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiB7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgICBpZiAodGhhdC5pc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgdGhhdC5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoYXQubWFudWFsUG9zaXRpb24gIT09IG51bGwpIHtcclxuICAgICAgICAgIC8vIHRoYXQuc2RrLnZpZXdlci5jbG9jay5zaG91bGRBbmltYXRlID0gdHJ1ZVxyXG4gICAgICAgICAgdGhhdC5zdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtICh0aGF0Lm1hbnVhbFBvc2l0aW9uICogODY0MDAgKiAxMDAwIC8gdGhhdC5zcGVlZCk7XHJcbiAgICAgICAgICB0aGF0Lm1hbnVhbFBvc2l0aW9uID0gbnVsbDtcclxuICAgICAgICAgIHRoYXQuY2hhbmdlRGF0ZSAmJiAodGhhdC5jaGFuZ2VEYXRlR3JhZyA9IHRydWUpXHJcbiAgICAgICAgICBpZiAoIXRoYXQucGF1c2VlZCkge1xyXG4gICAgICAgICAgICB0aGF0LnVwZGF0ZSgpXHJcbiAgICAgICAgICAgIGZ1bmModGhhdC50aW1lKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhhdC5wYXVzZWRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7IC8vIOiusOW9leaaguWBnOaXtuWIu1xyXG4gICAgICAgICAgICBmdW5jKHRoYXQuY3VycmVudFRpbWUudGV4dENvbnRlbnQpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGZvcm1hdFRpbWUoc2Vjb25kcykge1xyXG4gICAgY29uc3QgaHJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgbWlucyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIHJldHVybiBgJHtocnN9OiR7bWluc306JHtzZWNzfWA7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5tYW51YWxQb3NpdGlvbiAhPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY2hhbmdlRGF0ZSkgey8v5YiH5o2i5pel5pyf5ZCO6K6p5pe26Ze05LuOMOW8gOWni1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICB9XHJcbiAgICBsZXQgZWxhcHNlZCA9IChwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lKSAqIHRoaXMuc3BlZWQ7XHJcbiAgICAvLyBpZiAodGhpcy5lbGFwc2VkKSB7XHJcbiAgICAvLyAgIGVsYXBzZWQgPSBlbGFwc2VkICsgdGhpcy5lbGFwc2VkXHJcbiAgICAvLyAgIHRoaXMuZWxhcHNlZCA9IHVuZGVmaW5lZFxyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gZWxhcHNlZCAvIDEwMDA7Ly/np5JcclxuICAgIGNvbnN0IGRheVNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA4NjQwMDsvL+WkqVxyXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IGRheVNlY29uZHMgLyA4NjQwMDtcclxuXHJcbiAgICB0aGlzLnByb2dyZXNzLnN0eWxlLndpZHRoID0gYCR7cGVyY2VudGFnZSAqIDEwMH0lYDtcclxuICAgIHRoaXMudGltZSA9IHRoaXMuZm9ybWF0VGltZShkYXlTZWNvbmRzKVxyXG4gICAgdGhpcy5jdXJyZW50VGltZS50ZXh0Q29udGVudCA9IHRoaXMudGltZTtcclxuICAgIGlmICghdGhpcy5wYXVzZWVkKSB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uSWQgJiYgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25JZCk7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy51cGRhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRTcGVlZCh2KSB7XHJcbiAgICBsZXQgbm93ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgIGlmICghdGhpcy5wYXVzZWVkKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9ncmVzcyA9IHRoaXMubWFudWFsUG9zaXRpb24gPz9cclxuICAgICAgICAocGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLnN0YXJ0VGltZSkgKiB0aGlzLnNwZWVkIC8gKDg2NDAwICogMTAwMCk7XHJcbiAgICAgIHRoaXMuc3BlZWQgPSB2O1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gKGN1cnJlbnRQcm9ncmVzcyAqIDg2NDAwICogMTAwMCAvIHRoaXMuc3BlZWQpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwYXVzZWREdXJhdGlvbiA9IG5vdyAtIHRoaXMucGF1c2VkVGltZTtcclxuICAgICAgdGhpcy5zdGFydFRpbWUgKz0gcGF1c2VkRHVyYXRpb247IC8vIOihpeWBv+aaguWBnOacn+mXtOeahOaXtumXtOW3rlxyXG4gICAgICBjb25zdCBjdXJyZW50UHJvZ3Jlc3MgPSB0aGlzLm1hbnVhbFBvc2l0aW9uID8/XHJcbiAgICAgICAgKG5vdyAtIHRoaXMuc3RhcnRUaW1lKSAqIHRoaXMuc3BlZWQgLyAoODY0MDAgKiAxMDAwKTtcclxuICAgICAgdGhpcy5zcGVlZCA9IHY7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lID0gbm93IC0gKGN1cnJlbnRQcm9ncmVzcyAqIDg2NDAwICogMTAwMCAvIHRoaXMuc3BlZWQpO1xyXG5cclxuICAgICAgdGhpcy5wYXVzZWRUaW1lID0gbm93OyAvLyDorrDlvZXliIfmjaJzcGVlZOaaguWBnOaXtuWIu1xyXG4gICAgICAvLyB0aGlzLnNwZWVkID0gdjtcclxuICAgIH1cclxuICAgIHRoaXMubWFudWFsUG9zaXRpb24gPSBudWxsO1xyXG5cclxuICAgIC8vIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gIH1cclxuICB1cGRhdGVUaW1lKCkge1xyXG4gICAgdGhpcy5tYW51YWxQb3NpdGlvbiA9IG51bGw7XHJcbiAgICB0aGlzLnN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gKCh0aGlzLm1hbnVhbFBvc2l0aW9uIHx8IDApICogODY0MDAgKiAxMDAwIC8gdGhpcy5zcGVlZCk7XHJcbiAgICB0aGlzLnBhdXNlZWQgJiYgKHRoaXMuY2hhbmdlRGF0ZSA9IHRydWUpXHJcbiAgICB0aGlzLmNoYW5nZURhdGVHcmFnID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uSWQgJiYgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25JZCk7XHJcbiAgICB0aGlzLnByb2dyZXNzLnN0eWxlLndpZHRoID0gJzAlJztcclxuICAgIHRoaXMuY3VycmVudFRpbWUudGV4dENvbnRlbnQgPSAnMDA6MDA6MDAnO1xyXG4gIH1cclxuXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQStEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/efflect/Sunshine/TimeLine.js\n"); /***/ }), /***/ "./src/Global/efflect/Sunshine/_element.js": /*!*************************************************!*\ !*** ./src/Global/efflect/Sunshine/_element.js ***! \*************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u64AD\\u653E\\u500D\\u6570\\n
\\n \\n \\n
\\n
\\n
\\n \\u9634\\u5F71\\u67D4\\u548C\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u9634\\u5F71\\u4F18\\u5316\\n \\n
\\n
\\n \\u65E5\\u671F\\u9009\\u62E9\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
00:00:00
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvX2VsZW1lbnQuanM/YjJhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pKt5pS+5YCN5pWwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwLjAxXCIgbWF4PVwiOTk5OTk5XCIgc3RlcD1cIjEwXCIgQG1vZGVsPVwic3BlZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6Zi05b2x5p+U5ZKM5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiMVwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJkYXJrbmVzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumYtOW9seS8mOWMljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzb2Z0U2hhZG93XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDtcIj7ml6XmnJ/pgInmi6k8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzdW5zaGluZS1kYXRlXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIllZWVktTU0tRERcIiBAbW9kZWw9XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVsaW5lLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmVcIiBpZD1cInRpbWVsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBpZD1cInByb2dyZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhbmRsZVwiIGlkPVwiaGFuZGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnJlbnQtdGltZVwiIGlkPVwiY3VycmVudFRpbWVcIj4wMDowMDowMDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1tYXJrc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInRpbWVQYXVzZVwiPuaaguWBnDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFvREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/efflect/Sunshine/_element.js\n"); /***/ }), /***/ "./src/Global/efflect/Sunshine/eventBinding.js": /*!*****************************************************!*\ !*** ./src/Global/efflect/Sunshine/eventBinding.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar EventBinding = /*#__PURE__*/function () {\n function EventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return EventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return EventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n EventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n this.element = {};\n var _loop = function _loop() {\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var Event = {\n 'input': [],\n 'change': [],\n 'blur': [],\n 'click': []\n };\n var isEvent = false;\n var removeName = [];\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop3 = function _loop3() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.change.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n if (elements[i].type == 'number') {\n Event.input.push(function (e) {\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) && value >= Number(e.target.min)) {\n // that[m.value] = value\n value = value;\n }\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n // if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) {\n // value = Number(e.target.dataset.min)\n // }\n that[m.value] = value;\n }\n }\n });\n Event.blur.push(function (e) {\n var value = e.target.value;\n if (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n that[m.value] = value;\n });\n } else {\n Event.input.push(function (e) {\n that[m.value] = e.target.value;\n });\n }\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n isEvent = true;\n Event.click.push(function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop3();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var _loop2 = function _loop2(key) {\n if (Event[key].length > 0) {\n elements[i].addEventListener(key, function (e) {\n for (var t = 0; t < Event[key].length; t++) {\n Event[key][t](e);\n }\n });\n }\n };\n for (var key in Event) {\n _loop2(key);\n }\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(EventBinding, \"event\", {});\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvZXZlbnRCaW5kaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9lZmZsZWN0L1N1bnNoaW5lL2V2ZW50QmluZGluZy5qcz84MGY5Il0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEV2ZW50QmluZGluZyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB7fVxyXG4gIH1cclxuICBzdGF0aWMgZXZlbnQgPSB7fVxyXG5cclxuICBnZXRFdmVudChuYW1lKSB7XHJcbiAgICByZXR1cm4gRXZlbnRCaW5kaW5nLmV2ZW50W25hbWVdXHJcbiAgfVxyXG5cclxuICBnZXRFdmVudEFsbCgpIHtcclxuICAgIHJldHVybiBFdmVudEJpbmRpbmcuZXZlbnRcclxuICB9XHJcblxyXG4gIHNldEV2ZW50KG5hbWUsIGV2ZW50KSB7XHJcbiAgICBFdmVudEJpbmRpbmcuZXZlbnRbbmFtZV0gPSBldmVudFxyXG4gIH1cclxuXHJcbiAgb24odGhhdCwgZWxlbWVudHMpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgRXZlbnQgPSB7XHJcbiAgICAgICAgJ2lucHV0JzogW10sXHJcbiAgICAgICAgJ2NoYW5nZSc6IFtdLFxyXG4gICAgICAgICdibHVyJzogW10sXHJcbiAgICAgICAgJ2NsaWNrJzogW11cclxuICAgICAgfVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LmNoYW5nZS5wdXNoKChlKSA9PiB7IHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkIH0pXHJcbiAgICAgICAgICAgICAgZWxlbWVudHNbaV0uY2hlY2tlZCA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgRXZlbnQuaW5wdXQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgfHwgZS50YXJnZXQudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCgoIWUudGFyZ2V0Lm1heCkgJiYgKCFlLnRhcmdldC5taW4pKSB8fCAoKHZhbHVlIDw9IE51bWJlcihlLnRhcmdldC5tYXgpKSAmJiB2YWx1ZSA+PSBOdW1iZXIoZS50YXJnZXQubWluKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIEV2ZW50LmJsdXIucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgfHwgKGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZS50YXJnZXQuZGF0YXNldC5udWxsICE9PSAnJyAmJiAhQm9vbGVhbihlLnRhcmdldC5kYXRhc2V0Lm51bGwpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBFdmVudC5pbnB1dC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRbbS52YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRbbS52YWx1ZV0ucHVzaChlbGVtZW50c1tpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LmNsaWNrLnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBFdmVudCkge1xyXG4gICAgICAgICAgaWYgKEV2ZW50W2tleV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKGtleSwgKGUpID0+IHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50W2tleV0ubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIEV2ZW50W2tleV1bdF0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRXZlbnRCaW5kaW5nO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxGQTtBQUFBO0FBQUE7QUFrRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFBQTtBQUFBO0FBU0E7QUFDQTtBQTlHQTtBQUFBO0FBRUE7QUE2R0E7QUFBQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/efflect/Sunshine/eventBinding.js\n"); /***/ }), /***/ "./src/Global/efflect/Sunshine/index.js": /*!**********************************************!*\ !*** ./src/Global/efflect/Sunshine/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Sunshine; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../Obj/Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_element */ \"./src/Global/efflect/Sunshine/_element.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./eventBinding */ \"./src/Global/efflect/Sunshine/eventBinding.js\");\n/* harmony import */ var _MultiViewportMode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _TimeLine__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./TimeLine */ \"./src/Global/efflect/Sunshine/TimeLine.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/**\r\n * @description 水面\r\n */\n\n\n\n\n\n\n\nvar Sunshine = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 光照\r\n * @param options {object} 光照属性\r\n * @param options.time=当前时间 {string} 当前时间\r\n * @param options.speed=1000 {number} 速度倍速\r\n * @param options.darkness=0.3 {number} 阴影不透明度--越大越不透明\r\n * @param options.softShadow=false {boolean} 阴影优化--true/false}\r\n * @param Dialog {object} 弹框对象\r\n * @param Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function Sunshine(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Sunshine);\n this.viewer = sdk.viewer;\n this.options = _objectSpread({}, options);\n this.sdk = _objectSpread({}, sdk);\n this.options.time = options.time || new Date();\n this.options.speed = options.speed || 1000;\n this.options.darkness = options.darkness || 0.4;\n this.options.softShadow = options.softShadow || true;\n this.options.show = options.show === true ? true : false;\n this.Dialog = _Dialog;\n this.timeLine;\n this._EventBinding = new _eventBinding__WEBPACK_IMPORTED_MODULE_7__[\"default\"]();\n this._elms = {};\n Sunshine.start(this);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Sunshine, [{\n key: \"darkness\",\n get: function get() {\n return this.options.darkness;\n },\n set: function set(v) {\n this.options.darkness = v;\n this.viewer.shadowMap.darkness = 1.0 - this.options.darkness;\n this._elms.darkness && this._elms.darkness.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n this.viewer.clock.multiplier = this.options.speed;\n this.timeLine.setSpeed(v);\n }\n }, {\n key: \"softShadow\",\n get: function get() {\n return this.options.softShadow;\n },\n set: function set(v) {\n this.options.softShadow = v;\n this.viewer.shadowMap.softShadows = this.options.softShadow;\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n var _this2 = this;\n var state,\n tools,\n _this,\n contentElm,\n _that,\n jeDateObject,\n printDateElm,\n text,\n all_elm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = _args.length > 0 && _args[0] !== undefined ? _args[0] : false;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_9__[\"default\"]();\n this.originalOptions = tools.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 25;\n break;\n }\n _this = this;\n _context.next = 8;\n return new _Obj_Element_Dialog__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.sdk, this.originalOptions, {\n title: '光照属性',\n left: '180px',\n top: '100px',\n // confirmCallBack: (options) => {\n // this.originalOptions = tools.deepCopyObj(this.options)\n // this._DialogObject.close()\n // this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions)\n // syncData(this.sdk, this.options.id)\n // syncSplitData(this.sdk, this.options.id)\n // this.remove()\n // },\n resetCallBack: function resetCallBack() {\n _this2.reset();\n _this2.Dialog.resetCallBack && _this2.Dialog.resetCallBack();\n },\n // removeCallBack: () => {\n // this.Dialog.removeCallBack && this.Dialog.removeCallBack()\n // },\n closeCallBack: function closeCallBack() {\n _this2.reset();\n _this.remove();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this2.Dialog.closeCallBack && _this2.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this2.show = show;\n _this2.Dialog.showCallBack && _this2.Dialog.showCallBack();\n }\n }, true);\n case 8:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_6__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n\n //时间轴\n _that = this;\n this.timeLine = new _TimeLine__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk, this.options.speed);\n // this.timeLine.setSpeed(1000)\n this.timeLine.moveComplay(function (item) {\n var timeData = _that.time + \" \" + item;\n _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData));\n _that.viewer.scene.requestRender();\n });\n printDateElm = contentElm.getElementsByClassName('sunshine-date')[0];\n jeDateObject = jeDate(printDateElm, {\n format: \"YYYY-MM-DD\",\n isinitVal: true,\n isClear: false,\n donefun: function donefun(obj) {\n this.time = obj.val;\n var now = new Date();\n var timeData = now.setHours(0, 0, 0, 0); // 设置为当天0点\n _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData));\n _that.timeLine.updateTime(timeData);\n }\n });\n if (this.time) {\n jeDateObject.setValue(this.time);\n } else {\n jeDateObject.nowBtn && jeDateObject.nowBtn();\n this.time = jeDateObject.getValue();\n }\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [jeDateObject];\n _context.next = 25;\n break;\n case 25:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.viewer.entities.getById(this.options.id)) {\n return;\n }\n this.time = this.originalOptions.time;\n this.speed = this.originalOptions.speed;\n this.darkness = this.originalOptions.darkness;\n }\n\n /**\r\n * 飞到对应实体\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2() {\n var options,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 删除\r\n */\n )\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee3() {\n var lightCamera;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n this.viewer.scene.globe.enableLighting = false;\n this.viewer.shadows = false;\n this.viewer.clock.multiplier = 1.0;\n this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date());\n this.entity = null;\n this.timeLine.clear();\n this.viewer.shadowMap.cascadesEnabled = false;\n this.viewer.shadowMap.size = 1024;\n this.viewer.shadowMap.numberOfCascades = 3; // 增加级联层数(默认3层)\n lightCamera = this.viewer.shadowMap._lightCamera;\n this.viewer.shadowMap.normalOffset = false; // 避免深度冲突导致的阴影闪烁\n\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n // await this.sdk.removeIncetance(this.options.id)\n _context3.next = 14;\n return Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_8__[\"syncData\"])(this.sdk, this.options.id);\n case 14:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"start\",\n value: function start(that) {\n that.viewer.scene.globe.enableLighting = true;\n that.viewer.shadows = true;\n that.viewer.scene.globe.enableLighting = true;\n that.viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY;\n that.viewer.shadowMap.darkness = 1.0 - that.options.darkness; //阴影透明度--越大越透明\n\n var now = new Date();\n now.setHours(0, 0, 0, 0); // 设置为当天0点\n that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(now);\n that.viewer.clock.multiplier = that.options.speed;\n that.viewer.shadowMap.softShadows = that.options.softShadow;\n that.viewer.shadowMap.cascadesEnabled = true;\n that.viewer.shadowMap.size = 2048;\n that.viewer.shadowMap.numberOfCascades = 4; // 增加级联层数(默认3层)\n that.viewer.shadowMap.maximumDistance = 5000; // 扩大阴影渲染距离\n var lightCamera = that.viewer.shadowMap._lightCamera;\n lightCamera.frustum.near = 0.1; // 缩小近平面距离\n lightCamera.frustum.far = 10000; // 扩大远平面距离\n that.viewer.shadowMap.normalOffset = true; // 避免深度冲突导致的阴影闪烁\n\n that.edit(true);\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL2VmZmxlY3QvU3Vuc2hpbmUvaW5kZXguanM/YjAxYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGRlc2NyaXB0aW9uIOawtOmdolxyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi9PYmovRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuL2V2ZW50QmluZGluZyc7XHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCBUb29scyBmcm9tICcuLi8uLi8uLi9Ub29scydcclxuaW1wb3J0IFRpbWVMaW5lIGZyb20gJy4vVGltZUxpbmUnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uL1NwbGl0U2NyZWVuJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vuc2hpbmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAZGVzY3JpcHRpb24g5YWJ54WnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5YWJ54Wn5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMudGltZT3lvZPliY3ml7bpl7Qge3N0cmluZ30g5b2T5YmN5pe26Ze0XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3BlZWQ9MTAwMCB7bnVtYmVyfSDpgJ/luqblgI3pgJ9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5kYXJrbmVzcz0wLjMge251bWJlcn0g6Zi05b2x5LiN6YCP5piO5bqmLS3otorlpKfotorkuI3pgI/mmI5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zb2Z0U2hhZG93PWZhbHNlIHtib29sZWFufSDpmLTlvbHkvJjljJYtLXRydWUvZmFsc2V9XHJcbiAgICogQHBhcmFtIERpYWxvZyB7b2JqZWN0fSDlvLnmoYblr7nosaFcclxuICAgKiBAcGFyYW0gRGlhbG9nLmNvbmZpcm1DYWxsQmFjayB7ZnVuY3Rpb259IOW8ueahhuehruiupOaXtueahOWbnuiwg1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgdGhpcy52aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgdGhpcy5zZGsgPSB7IC4uLnNkayB9XHJcbiAgICB0aGlzLm9wdGlvbnMudGltZSA9IG9wdGlvbnMudGltZSB8fCBuZXcgRGF0ZSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSBvcHRpb25zLnNwZWVkIHx8IDEwMDBcclxuICAgIHRoaXMub3B0aW9ucy5kYXJrbmVzcyA9IG9wdGlvbnMuZGFya25lc3MgfHwgMC40XHJcbiAgICB0aGlzLm9wdGlvbnMuc29mdFNoYWRvdyA9IG9wdGlvbnMuc29mdFNoYWRvdyB8fCB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IG9wdGlvbnMuc2hvdyA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVxyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLnRpbWVMaW5lXHJcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIFN1bnNoaW5lLnN0YXJ0KHRoaXMpXHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHN0YXJ0KHRoYXQpIHtcclxuICAgIHRoYXQudmlld2VyLnNjZW5lLmdsb2JlLmVuYWJsZUxpZ2h0aW5nID0gdHJ1ZVxyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93cyA9IHRydWVcclxuICAgIHRoYXQudmlld2VyLnNjZW5lLmdsb2JlLmVuYWJsZUxpZ2h0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGF0LnZpZXdlci50ZXJyYWluU2hhZG93cyA9IENlc2l1bS5TaGFkb3dNb2RlLlJFQ0VJVkVfT05MWVxyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93TWFwLmRhcmtuZXNzID0gMS4wIC0gdGhhdC5vcHRpb25zLmRhcmtuZXNzIC8v6Zi05b2x6YCP5piO5bqmLS3otorlpKfotorpgI/mmI5cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbm93LnNldEhvdXJzKDAsIDAsIDAsIDApOyAvLyDorr7nva7kuLrlvZPlpKkw54K5XHJcbiAgICB0aGF0LnZpZXdlci5jbG9jay5jdXJyZW50VGltZSA9IENlc2l1bS5KdWxpYW5EYXRlLmZyb21EYXRlKG5vdyk7XHJcbiAgICB0aGF0LnZpZXdlci5jbG9jay5tdWx0aXBsaWVyID0gdGhhdC5vcHRpb25zLnNwZWVkO1xyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93TWFwLnNvZnRTaGFkb3dzID0gdGhhdC5vcHRpb25zLnNvZnRTaGFkb3c7XHJcbiAgICB0aGF0LnZpZXdlci5zaGFkb3dNYXAuY2FzY2FkZXNFbmFibGVkID0gdHJ1ZVxyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93TWFwLnNpemUgPSAyMDQ4O1xyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93TWFwLm51bWJlck9mQ2FzY2FkZXMgPSA0OyAgIC8vIOWinuWKoOe6p+iBlOWxguaVsO+8iOm7mOiupDPlsYLvvIlcclxuICAgIHRoYXQudmlld2VyLnNoYWRvd01hcC5tYXhpbXVtRGlzdGFuY2UgPSA1MDAwOyAvLyDmianlpKfpmLTlvbHmuLLmn5Pot53nprtcclxuICAgIGNvbnN0IGxpZ2h0Q2FtZXJhID0gdGhhdC52aWV3ZXIuc2hhZG93TWFwLl9saWdodENhbWVyYTtcclxuICAgIGxpZ2h0Q2FtZXJhLmZydXN0dW0ubmVhciA9IDAuMTsgICAgLy8g57yp5bCP6L+R5bmz6Z2i6Led56a7XHJcbiAgICBsaWdodENhbWVyYS5mcnVzdHVtLmZhciA9IDEwMDAwOyAgIC8vIOaJqeWkp+i/nOW5s+mdoui3neemu1xyXG4gICAgdGhhdC52aWV3ZXIuc2hhZG93TWFwLm5vcm1hbE9mZnNldCA9IHRydWU7IC8vIOmBv+WFjea3seW6puWGsueqgeWvvOiHtOeahOmYtOW9semXqueDgVxyXG5cclxuICAgIHRoYXQuZWRpdCh0cnVlKVxyXG4gIH1cclxuICBnZXQgZGFya25lc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRhcmtuZXNzXHJcbiAgfVxyXG4gIHNldCBkYXJrbmVzcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZGFya25lc3MgPSB2XHJcbiAgICB0aGlzLnZpZXdlci5zaGFkb3dNYXAuZGFya25lc3MgPSAxLjAgLSB0aGlzLm9wdGlvbnMuZGFya25lc3NcclxuICAgIHRoaXMuX2VsbXMuZGFya25lc3MgJiZcclxuICAgICAgdGhpcy5fZWxtcy5kYXJrbmVzcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG4gIHNldCBzcGVlZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLnNwZWVkICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuc3BlZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gICAgdGhpcy52aWV3ZXIuY2xvY2subXVsdGlwbGllciA9IHRoaXMub3B0aW9ucy5zcGVlZDtcclxuICAgIHRoaXMudGltZUxpbmUuc2V0U3BlZWQodilcclxuICB9XHJcbiAgZ2V0IHNvZnRTaGFkb3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNvZnRTaGFkb3dcclxuICB9XHJcbiAgc2V0IHNvZnRTaGFkb3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNvZnRTaGFkb3cgPSB2XHJcbiAgICB0aGlzLnZpZXdlci5zaGFkb3dNYXAuc29mdFNoYWRvd3MgPSB0aGlzLm9wdGlvbnMuc29mdFNoYWRvdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRvb2xzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICAvLyBsZXQgZWxtcyA9IHRoaXMuc2RrLnZpZXdlci5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1iYXNlLWRpYWxvZycpXHJcbiAgICAvLyBmb3IgKGxldCBpID0gZWxtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgLy8gICB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChlbG1zW2ldKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9yaWdpbmFsT3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn5YWJ54Wn5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIC8vIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAvLyAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdG9vbHMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAvLyAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgLy8gICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIC8vICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIC8vICAgdGhpcy5yZW1vdmUoKVxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAvLyAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgX3RoaXMucmVtb3ZlKClcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LnN0eWxlID0gbmV3IENlc2l1bS5DZXNpdW0zRFRpbGVTdHlsZSh7XHJcbiAgICAgICAgICAvLyAgIGNvbG9yOiBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LFwiICsgdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSArIFwiKScpXCIsXHJcbiAgICAgICAgICAvLyAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgc3VuLXNoaW5lLXN1cmZhY2UnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuXHJcbiAgICAgIC8v5pe26Ze06L20XHJcbiAgICAgIGxldCBfdGhhdCA9IHRoaXNcclxuICAgICAgdGhpcy50aW1lTGluZSA9IG5ldyBUaW1lTGluZSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLnNwZWVkKVxyXG4gICAgICAvLyB0aGlzLnRpbWVMaW5lLnNldFNwZWVkKDEwMDApXHJcbiAgICAgIHRoaXMudGltZUxpbmUubW92ZUNvbXBsYXkoaXRlbSA9PiB7XHJcbiAgICAgICAgbGV0IHRpbWVEYXRhID0gX3RoYXQudGltZSArIFwiIFwiICsgaXRlbVxyXG4gICAgICAgIF90aGF0LnZpZXdlci5jbG9jay5jdXJyZW50VGltZSA9IENlc2l1bS5KdWxpYW5EYXRlLmZyb21EYXRlKG5ldyBEYXRlKHRpbWVEYXRhKSk7XHJcbiAgICAgICAgX3RoYXQudmlld2VyLnNjZW5lLnJlcXVlc3RSZW5kZXIoKTtcclxuXHJcblxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgamVEYXRlT2JqZWN0XHJcbiAgICAgIGxldCBwcmludERhdGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N1bnNoaW5lLWRhdGUnKVswXVxyXG4gICAgICBsZXQgdGV4dFxyXG5cclxuICAgICAgamVEYXRlT2JqZWN0ID0gamVEYXRlKHByaW50RGF0ZUVsbSwge1xyXG4gICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREXCIsXHJcbiAgICAgICAgaXNpbml0VmFsOiB0cnVlLFxyXG4gICAgICAgIGlzQ2xlYXI6IGZhbHNlLFxyXG4gICAgICAgIGRvbmVmdW46IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICAgIHRoaXMudGltZSA9IG9iai52YWxcclxuXHJcbiAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgbGV0IHRpbWVEYXRhID0gbm93LnNldEhvdXJzKDAsIDAsIDAsIDApOyAvLyDorr7nva7kuLrlvZPlpKkw54K5XHJcbiAgICAgICAgICBfdGhhdC52aWV3ZXIuY2xvY2suY3VycmVudFRpbWUgPSBDZXNpdW0uSnVsaWFuRGF0ZS5mcm9tRGF0ZShuZXcgRGF0ZSh0aW1lRGF0YSkpO1xyXG5cclxuICAgICAgICAgIF90aGF0LnRpbWVMaW5lLnVwZGF0ZVRpbWUodGltZURhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMudGltZSkge1xyXG4gICAgICAgIGplRGF0ZU9iamVjdC5zZXRWYWx1ZSh0aGlzLnRpbWUpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgamVEYXRlT2JqZWN0Lm5vd0J0biAmJiBqZURhdGVPYmplY3Qubm93QnRuKClcclxuICAgICAgICB0aGlzLnRpbWUgPSBqZURhdGVPYmplY3QuZ2V0VmFsdWUoKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtqZURhdGVPYmplY3RdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudGltZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnRpbWVcclxuICAgIHRoaXMuc3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zcGVlZFxyXG4gICAgdGhpcy5kYXJrbmVzcyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmRhcmtuZXNzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDpo57liLDlr7nlupTlrp7kvZNcclxuICAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5Yig6ZmkXHJcbiAgICovXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNjZW5lLmdsb2JlLmVuYWJsZUxpZ2h0aW5nID0gZmFsc2VcclxuICAgIHRoaXMudmlld2VyLnNoYWRvd3MgPSBmYWxzZVxyXG4gICAgdGhpcy52aWV3ZXIuY2xvY2subXVsdGlwbGllciA9IDEuMFxyXG4gICAgdGhpcy52aWV3ZXIuY2xvY2suY3VycmVudFRpbWUgPSBDZXNpdW0uSnVsaWFuRGF0ZS5mcm9tRGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy50aW1lTGluZS5jbGVhcigpXHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2hhZG93TWFwLmNhc2NhZGVzRW5hYmxlZCA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZXdlci5zaGFkb3dNYXAuc2l6ZSA9IDEwMjQ7XHJcbiAgICB0aGlzLnZpZXdlci5zaGFkb3dNYXAubnVtYmVyT2ZDYXNjYWRlcyA9IDM7ICAgLy8g5aKe5Yqg57qn6IGU5bGC5pWw77yI6buY6K6kM+Wxgu+8iVxyXG4gICAgY29uc3QgbGlnaHRDYW1lcmEgPSB0aGlzLnZpZXdlci5zaGFkb3dNYXAuX2xpZ2h0Q2FtZXJhO1xyXG4gICAgdGhpcy52aWV3ZXIuc2hhZG93TWFwLm5vcm1hbE9mZnNldCA9IGZhbHNlOyAvLyDpgb/lhY3mt7HluqblhrLnqoHlr7zoh7TnmoTpmLTlvbHpl6rng4FcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIC8vIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTRCQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBOUJBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBdkdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQTVNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/efflect/Sunshine/index.js\n"); /***/ }), /***/ "./src/Global/efflect/index.js": /*!*************************************!*\ !*** ./src/Global/efflect/index.js ***! \*************************************/ /*! exports provided: rain, snow, fog, nightVision, skyStarry, illumination */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rain\", function() { return rain; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"snow\", function() { return snow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fog\", function() { return fog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nightVision\", function() { return nightVision; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"skyStarry\", function() { return skyStarry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"illumination\", function() { return illumination; });\n/*全局特效*/\n\nvar rainStages = null;\nvar snowStages = null;\nvar fogStages = null;\nvar nightVisionStages = null;\n\n// 雨\nvar FS_Rain = \"uniform sampler2D colorTexture;//\\u8F93\\u5165\\u7684\\u573A\\u666F\\u6E32\\u67D3\\u7167\\u7247\\n varying vec2 v_textureCoordinates;\\n uniform float tiltAngle;\\n uniform float rainSize;\\n uniform float rainWidth;\\n uniform float rainSpeed;\\n\\n float hash(float x){\\n return fract(sin(x*133.3)*13.13);\\n }\\n void main(void){\\n float time = czm_frameNumber / rainSpeed;\\n vec2 resolution = czm_viewport.zw;\\n vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\\n vec3 c=vec3(.6,.7,.8);\\n float a= tiltAngle;\\n float si=sin(a),co=cos(a);\\n uv*=mat2(co,-si,si,co);\\n uv*=length(uv+vec2(0,4.9))*rainSize+1.;\\n float v=1.-sin(hash(floor(uv.x*rainWidth))*2.);\\n float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;\\n c*=v*b; //\\u5C4F\\u5E55\\u4E0A\\u96E8\\u7684\\u989C\\u8272\\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c,1), 0.5); //\\u5C06\\u96E8\\u548C\\u4E09\\u7EF4\\u573A\\u666F\\u878D\\u5408\\n }\";\n\n// 雪\nvar FS_Snow = \"uniform sampler2D colorTexture;\\n varying vec2 v_textureCoordinates;\\n uniform float snowSize;\\n uniform float snowSpeed;\\n \\n float snow(vec2 uv,float scale)\\n {\\n float time = czm_frameNumber / snowSpeed;\\n float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\\n uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\\n uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\\n p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\\n k=smoothstep(0.,k,sin(f.x+f.y)*0.01*snowSize);\\n return k*w;\\n }\\n void main(void){\\n vec2 resolution = czm_viewport.zw;\\n vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\\n vec3 finalColor=vec3(0);\\n //float c=smoothstep(1.,0.3,clamp(uv.y*.3+.8,0.,.75));\\n float c = 0.0;\\n c+=snow(uv,30.)*.0;\\n c+=snow(uv,20.)*.0;\\n c+=snow(uv,15.)*.0;\\n c+=snow(uv,10.);\\n c+=snow(uv,8.);\\n c+=snow(uv,6.);\\n c+=snow(uv,5.);\\n finalColor=(vec3(c));\\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(finalColor,1), 0.5);\\n }\\n \";\n\n// 雾\nvar FS_Fog = \"\\n uniform sampler2D colorTexture;\\n uniform sampler2D depthTexture;\\n uniform float visibility;\\n uniform vec4 fogColor;\\n varying vec2 v_textureCoordinates;\\n void main(void)\\n {\\n vec4 origcolor = texture2D(colorTexture, v_textureCoordinates);\\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n vec4 depthcolor = texture2D(depthTexture, v_textureCoordinates);\\n float f = visibility * (depthcolor.r - 0.3) / 0.2;\\n if (f < 0.0) f = 0.0;\\n else if (f > 1.0) f = 1.0;\\n gl_FragColor = mix(origcolor, fogColor, f);\\n }\\n \";\n\n/*雨天*/\nfunction rain(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n rainStages && sdk.viewer.scene.postProcessStages.remove(rainStages);\n if (status) {\n rainStages = new Cesium.PostProcessStage({\n name: \"rain\",\n fragmentShader: FS_Rain,\n uniforms: {\n tiltAngle: -0.4,\n // 倾斜角度\n rainSize: 0.3,\n // 雨大小\n rainWidth: 40,\n //雨长度\n rainSpeed: 100 //雨速\n }\n });\n sdk.viewer.scene.postProcessStages.add(rainStages);\n }\n}\n\n// 雪\nfunction snow(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n snowStages && sdk.viewer.scene.postProcessStages.remove(snowStages);\n if (status) {\n snowStages = new Cesium.PostProcessStage({\n name: \"snow\",\n fragmentShader: FS_Snow,\n uniforms: {\n snowSize: 2,\n // 大小\n snowSpeed: 60 //速度\n }\n });\n sdk.viewer.scene.postProcessStages.add(snowStages);\n }\n}\n\n// 雾天\nfunction fog(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n fogStages && sdk.viewer.scene.postProcessStages.remove(fogStages);\n if (status) {\n fogStages = new Cesium.PostProcessStage({\n name: \"fog\",\n fragmentShader: FS_Fog,\n uniforms: {\n visibility: 0.2,\n //\n fogColor: Cesium.Color.WHITE\n }\n });\n sdk.viewer.scene.postProcessStages.add(fogStages);\n }\n}\n\n// 夜视\nfunction nightVision(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n nightVisionStages && sdk.viewer.scene.postProcessStages.remove(nightVisionStages);\n if (status) {\n nightVisionStages = Cesium.PostProcessStageLibrary.createNightVisionStage();\n sdk.viewer.scene.postProcessStages.add(nightVisionStages);\n }\n}\n\n// 星空\nfunction skyStarry(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n sdk.viewer.scene.skyAtmosphere.show = !status;\n}\n\n// 光照\nfunction illumination(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n sdk.viewer.shadows = status;\n sdk.viewer._shadows = status;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2VmZmxlY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsL2VmZmxlY3QvaW5kZXguanM/ODU4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKuWFqOWxgOeJueaViCovXHJcblxyXG5sZXQgcmFpblN0YWdlcyA9IG51bGw7XHJcbmxldCBzbm93U3RhZ2VzID0gbnVsbDtcclxubGV0IGZvZ1N0YWdlcyA9IG51bGw7XHJcbmxldCBuaWdodFZpc2lvblN0YWdlcyA9IG51bGw7XHJcblxyXG4vLyDpm6hcclxuY29uc3QgRlNfUmFpbiA9IGB1bmlmb3JtIHNhbXBsZXIyRCBjb2xvclRleHR1cmU7Ly/ovpPlhaXnmoTlnLrmma/muLLmn5PnhafniYdcclxuICB2YXJ5aW5nIHZlYzIgdl90ZXh0dXJlQ29vcmRpbmF0ZXM7XHJcbiAgdW5pZm9ybSBmbG9hdCB0aWx0QW5nbGU7XHJcbiAgdW5pZm9ybSBmbG9hdCByYWluU2l6ZTtcclxuICB1bmlmb3JtIGZsb2F0IHJhaW5XaWR0aDtcclxuICB1bmlmb3JtIGZsb2F0IHJhaW5TcGVlZDtcclxuXHJcbiAgZmxvYXQgaGFzaChmbG9hdCB4KXtcclxuICAgICAgcmV0dXJuIGZyYWN0KHNpbih4KjEzMy4zKSoxMy4xMyk7XHJcbiAgfVxyXG4gIHZvaWQgbWFpbih2b2lkKXtcclxuICAgICAgZmxvYXQgdGltZSA9IGN6bV9mcmFtZU51bWJlciAvIHJhaW5TcGVlZDtcclxuICAgICAgdmVjMiByZXNvbHV0aW9uID0gY3ptX3ZpZXdwb3J0Lnp3O1xyXG4gICAgICB2ZWMyIHV2PShnbF9GcmFnQ29vcmQueHkqMi4tcmVzb2x1dGlvbi54eSkvbWluKHJlc29sdXRpb24ueCxyZXNvbHV0aW9uLnkpO1xyXG4gICAgICB2ZWMzIGM9dmVjMyguNiwuNywuOCk7XHJcbiAgICAgIGZsb2F0IGE9IHRpbHRBbmdsZTtcclxuICAgICAgZmxvYXQgc2k9c2luKGEpLGNvPWNvcyhhKTtcclxuICAgICAgdXYqPW1hdDIoY28sLXNpLHNpLGNvKTtcclxuICAgICAgdXYqPWxlbmd0aCh1dit2ZWMyKDAsNC45KSkqcmFpblNpemUrMS47XHJcbiAgICAgIGZsb2F0IHY9MS4tc2luKGhhc2goZmxvb3IodXYueCpyYWluV2lkdGgpKSoyLik7XHJcbiAgICAgIGZsb2F0IGI9Y2xhbXAoYWJzKHNpbigyMC4qdGltZSp2K3V2LnkqKDUuLygyLit2KSkpKS0uOTUsMC4sMS4pKjIwLjtcclxuICAgICAgYyo9dipiOyAvL+Wxj+W5leS4iumbqOeahOminOiJslxyXG4gICAgICBnbF9GcmFnQ29sb3IgPSBtaXgodGV4dHVyZTJEKGNvbG9yVGV4dHVyZSwgdl90ZXh0dXJlQ29vcmRpbmF0ZXMpLCB2ZWM0KGMsMSksIDAuNSk7IC8v5bCG6Zuo5ZKM5LiJ57u05Zy65pmv6J6N5ZCIXHJcbiAgfWBcclxuXHJcbi8vIOmbqlxyXG5jb25zdCBGU19Tbm93ID0gYHVuaWZvcm0gc2FtcGxlcjJEIGNvbG9yVGV4dHVyZTtcclxuICB2YXJ5aW5nIHZlYzIgdl90ZXh0dXJlQ29vcmRpbmF0ZXM7XHJcbiAgdW5pZm9ybSBmbG9hdCBzbm93U2l6ZTtcclxuICB1bmlmb3JtIGZsb2F0IHNub3dTcGVlZDtcclxuICBcclxuICBmbG9hdCBzbm93KHZlYzIgdXYsZmxvYXQgc2NhbGUpXHJcbiAge1xyXG4gICAgICBmbG9hdCB0aW1lID0gY3ptX2ZyYW1lTnVtYmVyIC8gc25vd1NwZWVkO1xyXG4gICAgICBmbG9hdCB3PXNtb290aHN0ZXAoMS4sMC4sLXV2LnkqKHNjYWxlLzEwLikpO2lmKHc8LjEpcmV0dXJuIDAuO1xyXG4gICAgICB1dis9dGltZS9zY2FsZTt1di55Kz10aW1lKjIuL3NjYWxlO3V2LngrPXNpbih1di55K3RpbWUqLjUpL3NjYWxlO1xyXG4gICAgICB1dio9c2NhbGU7dmVjMiBzPWZsb29yKHV2KSxmPWZyYWN0KHV2KSxwO2Zsb2F0IGs9My4sZDtcclxuICAgICAgcD0uNSsuMzUqc2luKDExLipmcmFjdChzaW4oKHMrcCtzY2FsZSkqbWF0Mig3LDMsNiw1KSkqNS4pKS1mO2Q9bGVuZ3RoKHApO2s9bWluKGQsayk7XHJcbiAgICAgIGs9c21vb3Roc3RlcCgwLixrLHNpbihmLngrZi55KSowLjAxKnNub3dTaXplKTtcclxuICAgICAgcmV0dXJuIGsqdztcclxuICB9XHJcbiAgdm9pZCBtYWluKHZvaWQpe1xyXG4gICAgICB2ZWMyIHJlc29sdXRpb24gPSBjem1fdmlld3BvcnQuenc7XHJcbiAgICAgIHZlYzIgdXY9KGdsX0ZyYWdDb29yZC54eSoyLi1yZXNvbHV0aW9uLnh5KS9taW4ocmVzb2x1dGlvbi54LHJlc29sdXRpb24ueSk7XHJcbiAgICAgIHZlYzMgZmluYWxDb2xvcj12ZWMzKDApO1xyXG4gICAgICAvL2Zsb2F0IGM9c21vb3Roc3RlcCgxLiwwLjMsY2xhbXAodXYueSouMysuOCwwLiwuNzUpKTtcclxuICAgICAgZmxvYXQgYyA9IDAuMDtcclxuICAgICAgYys9c25vdyh1diwzMC4pKi4wO1xyXG4gICAgICBjKz1zbm93KHV2LDIwLikqLjA7XHJcbiAgICAgIGMrPXNub3codXYsMTUuKSouMDtcclxuICAgICAgYys9c25vdyh1diwxMC4pO1xyXG4gICAgICBjKz1zbm93KHV2LDguKTtcclxuICAgICAgYys9c25vdyh1diw2Lik7XHJcbiAgICAgIGMrPXNub3codXYsNS4pO1xyXG4gICAgICBmaW5hbENvbG9yPSh2ZWMzKGMpKTtcclxuICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KHRleHR1cmUyRChjb2xvclRleHR1cmUsIHZfdGV4dHVyZUNvb3JkaW5hdGVzKSwgdmVjNChmaW5hbENvbG9yLDEpLCAwLjUpO1xyXG4gIH1cclxuICBgO1xyXG5cclxuLy8g6Zu+XHJcbmNvbnN0IEZTX0ZvZyA9IGBcclxuICB1bmlmb3JtIHNhbXBsZXIyRCBjb2xvclRleHR1cmU7XHJcbiAgdW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhUZXh0dXJlO1xyXG4gIHVuaWZvcm0gZmxvYXQgdmlzaWJpbGl0eTtcclxuICB1bmlmb3JtIHZlYzQgZm9nQ29sb3I7XHJcbiAgdmFyeWluZyB2ZWMyIHZfdGV4dHVyZUNvb3JkaW5hdGVzO1xyXG4gIHZvaWQgbWFpbih2b2lkKVxyXG4gIHtcclxuICAgIHZlYzQgb3JpZ2NvbG9yID0gdGV4dHVyZTJEKGNvbG9yVGV4dHVyZSwgdl90ZXh0dXJlQ29vcmRpbmF0ZXMpO1xyXG4gICAgZmxvYXQgZGVwdGggPSBjem1fcmVhZERlcHRoKGRlcHRoVGV4dHVyZSwgdl90ZXh0dXJlQ29vcmRpbmF0ZXMpO1xyXG4gICAgdmVjNCBkZXB0aGNvbG9yID0gdGV4dHVyZTJEKGRlcHRoVGV4dHVyZSwgdl90ZXh0dXJlQ29vcmRpbmF0ZXMpO1xyXG4gICAgZmxvYXQgZiA9IHZpc2liaWxpdHkgKiAoZGVwdGhjb2xvci5yIC0gMC4zKSAvIDAuMjtcclxuICAgIGlmIChmIDwgMC4wKSBmID0gMC4wO1xyXG4gICAgZWxzZSBpZiAoZiA+IDEuMCkgZiA9IDEuMDtcclxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChvcmlnY29sb3IsIGZvZ0NvbG9yLCBmKTtcclxuICB9XHJcbiAgYDtcclxuXHJcblxyXG4vKumbqOWkqSovXHJcbmZ1bmN0aW9uIHJhaW4oc2RrLCBzdGF0dXMgPSBmYWxzZSkge1xyXG4gIHJhaW5TdGFnZXMgJiYgc2RrLnZpZXdlci5zY2VuZS5wb3N0UHJvY2Vzc1N0YWdlcy5yZW1vdmUocmFpblN0YWdlcylcclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICByYWluU3RhZ2VzID0gbmV3IENlc2l1bS5Qb3N0UHJvY2Vzc1N0YWdlKHtcclxuICAgICAgbmFtZTogXCJyYWluXCIsXHJcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBGU19SYWluLFxyXG4gICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgIHRpbHRBbmdsZTogLTAuNCwgLy8g5YC+5pac6KeS5bqmXHJcbiAgICAgICAgcmFpblNpemU6IDAuMywgLy8g6Zuo5aSn5bCPXHJcbiAgICAgICAgcmFpbldpZHRoOiA0MCwgLy/pm6jplb/luqZcclxuICAgICAgICByYWluU3BlZWQ6IDEwMCwgLy/pm6jpgJ9cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgc2RrLnZpZXdlci5zY2VuZS5wb3N0UHJvY2Vzc1N0YWdlcy5hZGQocmFpblN0YWdlcyk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyDpm6pcclxuZnVuY3Rpb24gc25vdyhzZGssIHN0YXR1cyA9IGZhbHNlKSB7XHJcbiAgc25vd1N0YWdlcyAmJiBzZGsudmlld2VyLnNjZW5lLnBvc3RQcm9jZXNzU3RhZ2VzLnJlbW92ZShzbm93U3RhZ2VzKVxyXG4gIGlmIChzdGF0dXMpIHtcclxuICAgIHNub3dTdGFnZXMgPSBuZXcgQ2VzaXVtLlBvc3RQcm9jZXNzU3RhZ2Uoe1xyXG4gICAgICBuYW1lOiBcInNub3dcIixcclxuICAgICAgZnJhZ21lbnRTaGFkZXI6IEZTX1Nub3csXHJcbiAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgc25vd1NpemU6IDIsIC8vIOWkp+Wwj1xyXG4gICAgICAgIHNub3dTcGVlZDogNjAsIC8v6YCf5bqmXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHNkay52aWV3ZXIuc2NlbmUucG9zdFByb2Nlc3NTdGFnZXMuYWRkKHNub3dTdGFnZXMpO1xyXG4gIH1cclxufVxyXG5cclxuLy8g6Zu+5aSpXHJcbmZ1bmN0aW9uIGZvZyhzZGssIHN0YXR1cyA9IGZhbHNlKSB7XHJcbiAgZm9nU3RhZ2VzICYmIHNkay52aWV3ZXIuc2NlbmUucG9zdFByb2Nlc3NTdGFnZXMucmVtb3ZlKGZvZ1N0YWdlcylcclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICBmb2dTdGFnZXMgPSBuZXcgQ2VzaXVtLlBvc3RQcm9jZXNzU3RhZ2Uoe1xyXG4gICAgICBuYW1lOiBcImZvZ1wiLFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogRlNfRm9nLFxyXG4gICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgIHZpc2liaWxpdHk6IDAuMiwgLy9cclxuICAgICAgICBmb2dDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBzZGsudmlld2VyLnNjZW5lLnBvc3RQcm9jZXNzU3RhZ2VzLmFkZChmb2dTdGFnZXMpO1xyXG4gIH1cclxufVxyXG5cclxuLy8g5aSc6KeGXHJcbmZ1bmN0aW9uIG5pZ2h0VmlzaW9uKHNkaywgc3RhdHVzID0gZmFsc2UpIHtcclxuICBuaWdodFZpc2lvblN0YWdlcyAmJiBzZGsudmlld2VyLnNjZW5lLnBvc3RQcm9jZXNzU3RhZ2VzLnJlbW92ZShuaWdodFZpc2lvblN0YWdlcylcclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICBuaWdodFZpc2lvblN0YWdlcyA9IENlc2l1bS5Qb3N0UHJvY2Vzc1N0YWdlTGlicmFyeS5jcmVhdGVOaWdodFZpc2lvblN0YWdlKCk7XHJcbiAgICBzZGsudmlld2VyLnNjZW5lLnBvc3RQcm9jZXNzU3RhZ2VzLmFkZChuaWdodFZpc2lvblN0YWdlcyk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyDmmJ/nqbpcclxuZnVuY3Rpb24gc2t5U3RhcnJ5KHNkaywgc3RhdHVzID0gZmFsc2UpIHtcclxuICBzZGsudmlld2VyLnNjZW5lLnNreUF0bW9zcGhlcmUuc2hvdyA9ICFzdGF0dXNcclxufVxyXG5cclxuLy8g5YWJ54WnXHJcbmZ1bmN0aW9uIGlsbHVtaW5hdGlvbihzZGssIHN0YXR1cyA9IGZhbHNlKSB7XHJcbiAgc2RrLnZpZXdlci5zaGFkb3dzID0gc3RhdHVzXHJcbiAgc2RrLnZpZXdlci5fc2hhZG93cyA9IHN0YXR1c1xyXG59XHJcblxyXG5cclxuZXhwb3J0IHsgcmFpbiwgc25vdywgZm9nLCBuaWdodFZpc2lvbiwgc2t5U3RhcnJ5LCBpbGx1bWluYXRpb24gfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3QkE7QUFDQTtBQUNBO0FBZ0NBO0FBQ0E7QUFDQTtBQWtCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/efflect/index.js\n"); /***/ }), /***/ "./src/Global/global.js": /*!******************************!*\ !*** ./src/Global/global.js ***! \******************************/ /*! exports provided: getCurrentView, setDefaultView, flyTo, CameraController, CesiumContainer, setBillboardDefaultUrl, getBillboardDefaultUrl, setGroundCover, getGroundCover, getBimPickStatus, setBimPickStatus, rotateAround, closeRotateAround, closeViewFollow, FlwStatusSwitch, JwwStatusSwitch, getFlwStatus, getJwwStatus, getCoordinateSystem, setCoordinateSystem, cameraChanged, setMaximumRequestsPerServer, setKeyboardEventActive, getTheme, setTheme, getCesiumIndexedDBMaxSize, setCesiumIndexedDBMaxSize, getCesiumManageIndexexDBState, setCesiumManageIndexexDBState, getCesiumIndexedDBCurrentSize, setActiveViewer, enablePerspective */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrentView\", function() { return getCurrentView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setDefaultView\", function() { return setDefaultView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flyTo\", function() { return flyTo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CameraController\", function() { return CameraController; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CesiumContainer\", function() { return CesiumContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setBillboardDefaultUrl\", function() { return setBillboardDefaultUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBillboardDefaultUrl\", function() { return getBillboardDefaultUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setGroundCover\", function() { return setGroundCover; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getGroundCover\", function() { return getGroundCover; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBimPickStatus\", function() { return getBimPickStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setBimPickStatus\", function() { return setBimPickStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rotateAround\", function() { return rotateAround; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeRotateAround\", function() { return closeRotateAround; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closeViewFollow\", function() { return closeViewFollow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlwStatusSwitch\", function() { return FlwStatusSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JwwStatusSwitch\", function() { return JwwStatusSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFlwStatus\", function() { return getFlwStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getJwwStatus\", function() { return getJwwStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCoordinateSystem\", function() { return getCoordinateSystem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setCoordinateSystem\", function() { return setCoordinateSystem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cameraChanged\", function() { return cameraChanged; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setMaximumRequestsPerServer\", function() { return setMaximumRequestsPerServer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setKeyboardEventActive\", function() { return setKeyboardEventActive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCesiumIndexedDBMaxSize\", function() { return getCesiumIndexedDBMaxSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setCesiumIndexedDBMaxSize\", function() { return setCesiumIndexedDBMaxSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCesiumManageIndexexDBState\", function() { return getCesiumManageIndexexDBState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setCesiumManageIndexexDBState\", function() { return setCesiumManageIndexexDBState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCesiumIndexedDBCurrentSize\", function() { return getCesiumIndexedDBCurrentSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setActiveViewer\", function() { return setActiveViewer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enablePerspective\", function() { return enablePerspective; });\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Tools_proj__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Tools/proj */ \"./src/Tools/proj.js\");\n/* harmony import */ var _Obj_Element_theme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Obj/Element/theme */ \"./src/Obj/Element/theme.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getTheme\", function() { return _Obj_Element_theme__WEBPACK_IMPORTED_MODULE_6__[\"getTheme\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTheme\", function() { return _Obj_Element_theme__WEBPACK_IMPORTED_MODULE_6__[\"setTheme\"]; });\n\n/* harmony import */ var _MultiViewportMode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _cluster_cluster__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./cluster/cluster */ \"./src/Global/cluster/cluster.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../on */ \"./src/on/index.js\");\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n/**\r\n * @name: global\r\n * @author: Administrator\r\n * @date: 2023-12-01 14:15\r\n * @description:global\r\n * @update: 2023-12-01 14:15\r\n */\n\n/*获取当前视角*/\n\n\n\n\n\n\n\n\nvar coordinateSystem = 'EPSG:4326';\nvar _cartesian;\nvar GroundCover = false;\nvar bimPickObject = {};\nvar containerObject = {};\nvar rotateAroundObject = {};\nfunction getCurrentView(sdk) {\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n var viewer = sdk.viewer;\n return JSON.parse(JSON.stringify({\n // heading: viewer.camera.heading,\n // pitch: viewer.camera.pitch,\n // roll: viewer.camera.roll,\n position: tools.cartesian3Towgs84(viewer.camera.position, viewer),\n orientation: {\n heading: Cesium.Math.toDegrees(viewer.camera.heading),\n pitch: Cesium.Math.toDegrees(viewer.camera.pitch),\n roll: Cesium.Math.toDegrees(viewer.camera.roll)\n }\n }));\n}\n\n/*设置默认视角*/\nfunction setDefaultView(sdk, options) {\n var viewer = sdk.viewer;\n if (options) {\n viewer.CAMERA_DEFAULT_VIEW_RECTANGLE = {\n destination: options.destination || {},\n orientation: options.orientation || {}\n };\n } else {\n viewer.CAMERA_DEFAULT_VIEW_RECTANGLE = undefined;\n //设置cesium的默认视角\n Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(\n //西边的经度\n 89.5,\n //南边的纬度\n 10.4,\n //东边的经度\n 110.4,\n //北边的维度\n 61.2);\n }\n}\n\n/*定位到指定视角*/\nfunction flyTo(_x, _x2) {\n return _flyTo.apply(this, arguments);\n}\n/*相机锁定*/\nfunction _flyTo() {\n _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee3(sdk, options) {\n var duration,\n tools,\n destination,\n orientation,\n h,\n bbox,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n duration = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : 3;\n tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"](sdk);\n orientation = options.orientation;\n if (!options.position) {\n _context3.next = 13;\n break;\n }\n if (!(options.position.alt !== 0 && !options.position.alt)) {\n _context3.next = 8;\n break;\n }\n _context3.next = 7;\n return tools.getClampToHeight(options.position);\n case 7:\n options.position.alt = _context3.sent;\n case 8:\n h = 0;\n if (!orientation) {\n h = 500;\n }\n destination = Cesium.Cartesian3.fromDegrees(options.position.lng, options.position.lat, options.position.alt + h);\n _context3.next = 15;\n break;\n case 13:\n bbox = tools.cal_envelope(options.positions);\n destination = new Cesium.Rectangle(Cesium.Math.toRadians(bbox[3][0]), Cesium.Math.toRadians(bbox[3][1]), Cesium.Math.toRadians(bbox[1][0]), Cesium.Math.toRadians(bbox[1][1]));\n case 15:\n closeRotateAround(sdk);\n sdk.viewer.camera.flyTo({\n destination: destination,\n duration: duration,\n orientation: orientation,\n complete: options.complete\n });\n case 17:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return _flyTo.apply(this, arguments);\n}\nfunction CameraController(sdk) {\n var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!sdk || !sdk.viewer) {\n return;\n }\n var viewer = sdk.viewer;\n viewer.scene.screenSpaceCameraController.enableRotate = status;\n viewer.scene.screenSpaceCameraController.enableTranslate = status;\n viewer.scene.screenSpaceCameraController.enableZoom = status;\n viewer.scene.screenSpaceCameraController.enableTilt = status;\n viewer.scene.screenSpaceCameraController.enableLook = status;\n}\n\n/*控件显隐*/\nfunction CesiumContainer(sdk, options) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n containerObject[sdk.viewer._element.className] || (containerObject[sdk.viewer._element.className] = {});\n containerObject[sdk.viewer._element.className].event && containerObject[sdk.viewer._element.className].event.destroy();\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"](sdk);\n var element = sdk.viewer._element;\n var proj = sdk.proj;\n var _loop = function _loop() {\n switch (key) {\n case 'compass':\n var compass = element.getElementsByClassName('compass')[0];\n var navigation = element.getElementsByClassName('navigation-controls')[0];\n if (options[key]) {\n compass && (compass.style.display = 'block');\n navigation && (navigation.style.display = 'flex');\n } else {\n compass && (compass.style.display = 'none');\n navigation && (navigation.style.display = 'none');\n }\n break;\n case 'legend':\n var distanceLegend = element.getElementsByClassName('distance-legend')[0];\n if (options[key]) {\n distanceLegend && (distanceLegend.parentNode.style.display = 'block');\n } else {\n distanceLegend && (distanceLegend.parentNode.style.display = 'none');\n }\n break;\n case 'info':\n var infoElm = element.getElementsByClassName('cesium-info')[0];\n if (options[key]) {\n var update = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee() {\n var position, result;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (_cartesian) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n // let pos = sdk.viewer.scene.clampToHeight(_cartesian)\n position = tools.cartesian3Towgs84(_cartesian, sdk.viewer); // position.alt = height\n if (coordinateSystem === 'EPSG:4326') {\n infoElm.innerHTML = \"\\n \\u7ECF\\u5EA6\\uFF1A\".concat(Number(position.lng.toFixed(6)), \"\\xB0 \\n \\u7EAC\\u5EA6\\uFF1A\").concat(Number(position.lat.toFixed(6)), \"\\xB0 \\n \\u6D77\\u62D4\\u9AD8\\u5EA6\\uFF1A\").concat(Number(position.alt.toFixed(2)), \"\\u7C73\\n \");\n } else {\n result = proj.convert([{\n x: position.lng,\n y: position.lat,\n z: position.alt\n }], 'EPSG:4326', coordinateSystem);\n infoElm.innerHTML = \"\\n x\\uFF1A\".concat(Number(result.points[0].x.toFixed(6)), \"\\n y\\uFF1A\").concat(Number(result.points[0].y.toFixed(6)), \"\\n z\\uFF1A\").concat(Number(result.points[0].z.toFixed(6)), \"\\n \");\n }\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function update() {\n return _ref.apply(this, arguments);\n };\n }();\n if (infoElm) {\n update();\n infoElm.style.display = 'block';\n } else {\n infoElm = document.createElement('div');\n infoElm.className = \"cesium-info\";\n infoElm.style.position = 'absolute';\n infoElm.style.bottom = '32px';\n infoElm.style.right = '240px';\n infoElm.style['font-size'] = '14px';\n infoElm.style['background-color'] = 'rgba(47,53,60,.8)';\n infoElm.style.color = '#fff';\n infoElm.style.padding = '4px 10px';\n infoElm.style['border-radius'] = '18px';\n if (coordinateSystem === 'EPSG:4326') {\n infoElm.innerHTML = \"\\n \\u7ECF\\u5EA6\\uFF1A-\\n \\u7EAC\\u5EA6\\uFF1A-\\n \\u6D77\\u62D4\\u9AD8\\u5EA6\\uFF1A-\\n \";\n } else {\n infoElm.innerHTML = \"\\n x\\uFF1A-\\n y\\uFF1A-\\n z\\uFF1A-\\n \";\n }\n sdk.viewer._element.appendChild(infoElm);\n }\n var event = new _Event_index__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdk);\n containerObject[sdk.viewer._element.className].event = event;\n var lastPickTime = 0;\n var timeoutEvent;\n event.mouse_move(function (movement, cartesian) {\n _cartesian = cartesian;\n // const now = Date.now();\n // if (now - lastPickTime < 500) {\n // clearTimeout(timeoutEvent)\n // timeoutEvent = setTimeout(() => {\n // update()\n // }, 500);\n // return\n // }\n // lastPickTime = now;\n update();\n });\n } else {\n infoElm && (infoElm.style.display = 'none');\n }\n break;\n case 'frame':\n if (options[key]) {\n sdk.viewer.scene.debugShowFramesPerSecond = true;\n setTimeout(function () {\n var cesiumWidgetContainerElm = sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0];\n var defaultContainer = cesiumWidgetContainerElm.getElementsByClassName('cesium-performanceDisplay-defaultContainer')[0];\n if (defaultContainer) {\n cesiumWidgetContainerElm.appendChild(defaultContainer);\n }\n }, 50);\n } else {\n sdk.viewer.scene.debugShowFramesPerSecond = false;\n }\n break;\n }\n };\n for (var key in options) {\n _loop();\n }\n // let compass = element.getElementsByClassName('compass')[0]\n // let navigation = element.getElementsByClassName('navigation-controls')[0]\n // let distanceLegend = element.getElementsByClassName('distance-legend')[0]\n // if(status) {\n // compass && (compass.style.display = 'block')\n // navigation && (navigation.style.display = 'block')\n // distanceLegend && (distanceLegend.style.display = 'block')\n // }\n // else {\n // compass && (compass.style.display = 'none')\n // navigation && (navigation.style.display = 'none')\n // distanceLegend && (distanceLegend.style.display = 'none')\n // viewer.cesiumNavigation.distanceLegendViewModel.destroy()\n // }\n}\n\n/*设置广告牌默认图标*/\nfunction setBillboardDefaultUrl(url, name) {\n if (name) {\n name = 'billboard_default_url_' + name;\n } else {\n name = 'billboard_default_url';\n }\n var host = Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getHost\"])();\n if (!url.startsWith(\"http\")) {\n //说明是本地的json,在磁盘中存在的\n if (!url.includes(\":\")) {\n if (host) {\n var o = new URL(url, host);\n url = o.href;\n }\n }\n }\n localStorage.setItem(name, url);\n}\n/*获取广告牌默认图标*/\nfunction getBillboardDefaultUrl(name) {\n if (name) {\n name = 'billboard_default_url_' + name;\n } else {\n name = 'billboard_default_url';\n }\n return localStorage.getItem(name);\n}\n\n/*设置高度参考*/\nfunction setGroundCover(sdk, status) {\n GroundCover = status ? true : false;\n Object(_cluster_cluster__WEBPACK_IMPORTED_MODULE_9__[\"updateCluster\"])(sdk.viewer);\n}\n\n/*获取高度参考*/\nfunction getGroundCover() {\n return GroundCover;\n}\nfunction setBimPickStatus(sdk, status) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n bimPickObject[sdk.viewer._element.className] || (bimPickObject[sdk.viewer._element.className] = {});\n bimPickObject[sdk.viewer._element.className].status = status;\n if (bimPickObject[sdk.viewer._element.className].MoveHandler) {\n bimPickObject[sdk.viewer._element.className].MoveHandler.destroy();\n }\n if (!status) {\n return;\n }\n bimPickObject[sdk.viewer._element.className].MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas);\n bimPickObject[sdk.viewer._element.className].MoveHandler.setInputAction(function (movement) {\n var pick = sdk.viewer.scene.pick(movement.endPosition);\n var selectedId = bimPickObject[sdk.viewer._element.className].selectedId;\n var that = sdk.entityMap.get(bimPickObject[sdk.viewer._element.className].id);\n // if (selectedFeatureId) {\n // let color = '#fff'\n // let state = selectedFeature.getProperty('state')\n // switch (state) {\n // case '0':\n // color = '#fff'\n // break;\n // case '1':\n // color = '#f00'\n // break;\n // case '2':\n // color = '#0f0'\n // break;\n // case '3':\n // color = '#00f'\n // break;\n // default:\n // }\n // selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency)\n // }\n if (that) {\n if (that.features.has(selectedId)) {\n var features = that.features.get(selectedId).features;\n for (var key in features) {\n if (features[key].content._model) {\n var color = features[key].customColor || Cesium.Color.fromCssColorString('#fff');\n features[key].color = Cesium.Color.fromCssColorString(\"rgba(\".concat(Cesium.Color.floatToByte(color.red), \",\").concat(Cesium.Color.floatToByte(color.green), \",\").concat(Cesium.Color.floatToByte(color.blue), \",\").concat(color.alpha * (features[key].customAlpha || features[key].customAlpha === 0 ? features[key].customAlpha : 1), \")\"));\n }\n }\n }\n }\n if (pick && pick.content) {\n var obj = sdk.getIncetance(pick.content.tileset.id);\n if (obj.type === 'bim') {\n if (pick.primitive && pick.primitive.id) {\n var _that = sdk.entityMap.get(pick.primitive.id);\n selectedId = pick.getProperty('id');\n if (_that.features.has(selectedId)) {\n var _features = _that.features.get(selectedId).features;\n for (var _key in _features) {\n if (_features[_key].content._model) {\n _features[_key].color = Cesium.Color.fromCssColorString('#ffeb3b');\n }\n }\n }\n bimPickObject[sdk.viewer._element.className].id = pick.primitive.id;\n bimPickObject[sdk.viewer._element.className].selectedId = selectedId;\n }\n } else {\n pick.primitive.id = null;\n }\n }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n}\nfunction getBimPickStatus(sdk) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n return bimPickObject[sdk.viewer._element.className] ? bimPickObject[sdk.viewer._element.className].status : false;\n}\n\n/* 围绕坐标旋转 */\nfunction rotateAround(sdk, position) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n setActiveViewer(0);\n sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n // 关闭Controller\n sdk.entityMap.forEach(function (item) {\n item.editObj && item.editObj.destroy();\n item.ControllerObject && item.ControllerObject.destroy();\n });\n rotateAroundObject[sdk.viewer._element.className] || (rotateAroundObject[sdk.viewer._element.className] = {});\n rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate);\n rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy();\n if (!position) {\n CameraController(sdk, true);\n return;\n }\n var point = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt);\n var angle = Cesium.Math.toDegrees(sdk.viewer.camera.heading);\n var range = Cesium.Cartesian3.distance(sdk.viewer.camera.position, point);\n CameraController(sdk, false);\n var pitch = sdk.viewer.camera.pitch;\n var degrees = Cesium.Math.toDegrees(pitch);\n if (degrees < -89.99) {\n pitch = Cesium.Math.toRadians(-89.99);\n }\n rotateAroundObject[sdk.viewer._element.className].animate = new TWEEN.Tween({\n angle: angle\n }).to({\n angle: angle - 360\n }, 30000).easing(TWEEN.Easing.Linear.None).repeat(Infinity).onUpdate(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee2(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (sdk.viewer) {\n _context2.next = 3;\n break;\n }\n TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate);\n return _context2.abrupt(\"return\");\n case 3:\n sdk.viewer.camera.lookAt(point, new Cesium.HeadingPitchRange(Cesium.Math.toRadians(r.angle), pitch, range));\n sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }()).start();\n var event = new _Event_index__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sdk);\n rotateAroundObject[sdk.viewer._element.className].event = event;\n event.mouse_left_down(function () {\n rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate);\n rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy();\n CameraController(sdk, true);\n sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n });\n}\n\n/* 关闭围绕坐标旋转 */\nfunction closeRotateAround(sdk) {\n if (!sdk || !sdk.viewer) {\n return;\n }\n if (rotateAroundObject[sdk.viewer._element.className]) {\n rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate);\n rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy();\n CameraController(sdk, true);\n sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n }\n}\nfunction closeViewFollow(sdk) {\n if (sdk && sdk.entityMap) {\n var entityMap = sdk.entityMap;\n var _iterator = _createForOfIteratorHelper(entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2),\n key = _step$value[0],\n value = _step$value[1];\n if (value.type === 'TrajectoryMotion' && value.viewFollow) {\n value.viewFollow = false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n}\n\n/* 方里网状态开关 */\nfunction FlwStatusSwitch(sdk, status) {\n if (!sdk) {\n return;\n }\n var layer;\n var sdkD = Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_8__[\"getSdk\"])().sdkD;\n if (sdkD && sdk !== sdkD) {\n FlwStatusSwitch(sdkD, status);\n }\n for (var i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {\n if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw') {\n layer = sdk.viewer.imageryLayers._layers[i];\n break;\n }\n }\n if (layer) {\n sdk.viewer.imageryLayers.remove(layer);\n }\n if (status) {\n sdk.viewer.imageryLayers.addImageryProvider(new Cesium.TileCoordinatesImageryProviderFlw({\n tileWidth: 128,\n tileHeight: 128\n }));\n }\n}\nfunction getFlwStatus(sdk) {\n var status = false;\n for (var i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {\n if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw') {\n status = true;\n break;\n }\n }\n return status;\n}\n\n/* 经纬网状态开关 */\nfunction JwwStatusSwitch(sdk, status) {\n if (!sdk) {\n return;\n }\n var layer;\n var sdkD = Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_8__[\"getSdk\"])().sdkD;\n if (sdkD && sdk !== sdkD) {\n JwwStatusSwitch(sdkD, status);\n }\n for (var i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {\n if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww') {\n layer = sdk.viewer.imageryLayers._layers[i];\n break;\n }\n }\n if (layer) {\n sdk.viewer.imageryLayers.remove(layer);\n }\n if (status) {\n sdk.viewer.imageryLayers.addImageryProvider(new Cesium.TileCoordinatesImageryProviderJww());\n }\n}\nfunction getJwwStatus(sdk) {\n var status = false;\n for (var i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {\n if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww') {\n status = true;\n break;\n }\n }\n return status;\n}\nfunction splitScreen2(sdk, status) {\n var sliderElm = sdk.viewer._element.getElementsByClassName('YJ-custom-slider')[0];\n var leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n var rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (sliderElm) {\n sdk.viewer._element.removeChild(sliderElm);\n sdk.viewer._element.removeChild(leftElm);\n sdk.viewer._element.removeChild(rightElm);\n }\n if (status) {\n var mousemove = function mousemove(a, b) {\n if (sdk.viewer._element.getElementsByTagName('canvas')[0] === a.target) {\n sliderElm.style.left = a.offsetX / sdk.viewer._element.scrollWidth * 100 + '%';\n sdk.viewer.scene.splitPosition = a.offsetX / sdk.viewer._element.scrollWidth;\n }\n };\n sliderElm = document.createElement('div');\n sliderElm.className = 'YJ-custom-slider';\n sliderElm.style.position = 'absolute';\n sliderElm.style.left = '50%';\n sliderElm.style.top = '0px';\n leftElm = document.createElement('input');\n leftElm.className = 'YJ-custom-checkbox-left';\n leftElm.type = 'checkbox';\n leftElm.style.position = 'absolute';\n leftElm.style.left = 'calc(50% - 50px)';\n rightElm = document.createElement('input');\n rightElm.className = 'YJ-custom-checkbox-right';\n rightElm.type = 'checkbox';\n rightElm.style.position = 'absolute';\n rightElm.style.right = 'calc(50% - 50px)';\n sdk.viewer._element.appendChild(leftElm);\n sdk.viewer._element.appendChild(rightElm);\n leftElm.checked = true;\n leftElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!rightElm.checked) {\n rightElm.checked = true;\n }\n }\n changeEntitySplitStatus();\n });\n rightElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!leftElm.checked) {\n leftElm.checked = true;\n }\n }\n changeEntitySplitStatus();\n });\n sliderElm.addEventListener('mousedown', function () {\n document.body.addEventListener('mousemove', mousemove);\n sliderElm.addEventListener('mouseup', function () {\n document.body.removeEventListener('mousemove', mousemove);\n });\n });\n sdk.viewer._element.appendChild(sliderElm);\n sdk.viewer.scene.splitStatus = status;\n sdk.viewer.scene.splitPosition = 0.5;\n changeEntitySplitStatus();\n } else {\n sdk.viewer.scene.splitPosition = 0;\n changeEntitySplitStatus(0);\n sdk.viewer.scene.splitStatus = status;\n }\n function changeEntitySplitStatus(v) {\n var value;\n if (v === undefined || v === null) {\n if (leftElm.checked && rightElm.checked) {\n value = 0;\n } else {\n if (leftElm.checked) {\n value = -1;\n }\n if (rightElm.checked) {\n value = 1;\n }\n }\n } else {\n value = v;\n }\n sdk.entityMap.forEach(function (item, key) {\n if (sdk.viewer.scene.splitStatus) {\n if (item.entity.billboard) {\n item.entity.billboard.splitDirection = value;\n } else {\n item.entity && (item.entity.splitDirection = value);\n }\n }\n console.log();\n });\n }\n}\nfunction splitScreen(sdk, status) {\n var sliderElm = sdk.viewer._element.getElementsByClassName('YJ-custom-slider')[0];\n var leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0];\n var rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0];\n if (sliderElm) {\n sdk.viewer._element.removeChild(sliderElm);\n sdk.viewer._element.removeChild(leftElm);\n sdk.viewer._element.removeChild(rightElm);\n }\n if (status) {\n var mousemove = function mousemove(a, b) {\n if (sdk.viewer._element.getElementsByTagName('canvas')[0] === a.target) {\n sliderElm.style.left = a.offsetX / sdk.viewer._element.scrollWidth * 100 + '%';\n sdk.viewer.scene.splitPosition = a.offsetX / sdk.viewer._element.scrollWidth;\n }\n };\n sliderElm = document.createElement('div');\n sliderElm.className = 'YJ-custom-slider';\n sliderElm.style.position = 'absolute';\n sliderElm.style.left = '50%';\n sliderElm.style.top = '0px';\n leftElm = document.createElement('input');\n leftElm.className = 'YJ-custom-checkbox-left';\n leftElm.type = 'checkbox';\n leftElm.style.position = 'absolute';\n leftElm.style.left = 'calc(50% - 50px)';\n rightElm = document.createElement('input');\n rightElm.className = 'YJ-custom-checkbox-right';\n rightElm.type = 'checkbox';\n rightElm.style.position = 'absolute';\n rightElm.style.right = 'calc(50% - 50px)';\n sdk.viewer._element.appendChild(leftElm);\n sdk.viewer._element.appendChild(rightElm);\n leftElm.checked = true;\n leftElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!rightElm.checked) {\n rightElm.checked = true;\n }\n }\n changeEntitySplitStatus();\n });\n rightElm.addEventListener('change', function (e) {\n if (!e.target.checked) {\n if (!leftElm.checked) {\n leftElm.checked = true;\n }\n }\n changeEntitySplitStatus();\n });\n sliderElm.addEventListener('mousedown', function () {\n document.body.addEventListener('mousemove', mousemove);\n sliderElm.addEventListener('mouseup', function () {\n document.body.removeEventListener('mousemove', mousemove);\n });\n });\n sdk.viewer._element.appendChild(sliderElm);\n sdk.viewer.scene.splitStatus = status;\n sdk.viewer.scene.splitPosition = 0.5;\n changeEntitySplitStatus();\n } else {\n sdk.viewer.scene.splitPosition = 0;\n changeEntitySplitStatus(0);\n sdk.viewer.scene.splitStatus = status;\n }\n function changeEntitySplitStatus(v) {\n var value;\n if (v === undefined || v === null) {\n if (leftElm.checked && rightElm.checked) {\n value = 0;\n } else {\n if (leftElm.checked) {\n value = -1;\n }\n if (rightElm.checked) {\n value = 1;\n }\n }\n } else {\n value = v;\n }\n sdk.entityMap.forEach(function (item, key) {\n if (sdk.viewer.scene.splitStatus) {\n if (item.entity.billboard) {\n item.entity.billboard.splitDirection = value;\n } else {\n item.entity && (item.entity.splitDirection = value);\n }\n }\n console.log();\n });\n }\n}\nfunction getCoordinateSystem() {\n return coordinateSystem;\n}\nfunction setCoordinateSystem(sdk, epsg) {\n coordinateSystem = epsg || 'EPSG:4326';\n if (!sdk || !sdk.viewer || !sdk.viewer._element) {\n return;\n }\n var infoElm = sdk.viewer._element.getElementsByClassName('cesium-info')[0];\n if (!_cartesian || !infoElm) {\n return;\n }\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n var proj = sdk.proj;\n var position = tools.cartesian3Towgs84(_cartesian, sdk.viewer);\n if (coordinateSystem === 'EPSG:4326') {\n infoElm.innerHTML = \"\\n \\u7ECF\\u5EA6\\uFF1A\".concat(Number(position.lng.toFixed(6)), \"\\xB0 \\n \\u7EAC\\u5EA6\\uFF1A\").concat(Number(position.lat.toFixed(6)), \"\\xB0 \\n \\u6D77\\u62D4\\u9AD8\\u5EA6\\uFF1A\").concat(Number(position.alt.toFixed(2)), \"\\u7C73\\n \");\n } else {\n var result = proj.convert([{\n x: position.lng,\n y: position.lat,\n z: position.alt\n }], 'EPSG:4326', coordinateSystem);\n infoElm.innerHTML = \"\\n x\\uFF1A\".concat(Number(result.points[0].x.toFixed(6)), \"\\n y\\uFF1A\").concat(Number(result.points[0].y.toFixed(6)), \"\\n z\\uFF1A\").concat(Number(result.points[0].z.toFixed(6)), \"\\n \");\n }\n}\nfunction cameraChanged(sdk, cb) {\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n //设置相机变化的监听事件\n var removeChanged = sdk.viewer.camera.changed.addEventListener(function (percentage) {\n cb({\n position: tools.cartesian3Towgs84(sdk.viewer.camera.position, sdk.viewer),\n orientation: {\n heading: sdk.viewer.camera.heading,\n pitch: sdk.viewer.camera.pitch,\n roll: sdk.viewer.camera.roll\n }\n });\n });\n return removeChanged;\n}\nfunction setMaximumRequestsPerServer(v) {\n if (typeof v == 'number') Cesium.RequestScheduler.maximumRequestsPerServer = v;\n}\n\n/* 键盘事件 */\nfunction setKeyboardEventActive(sdk, status) {\n if (!sdk) {\n return;\n }\n if (status) {\n sdk.viewer._disableKeyboardEvent = false;\n } else {\n sdk.viewer._disableKeyboardEvent = true;\n }\n}\nfunction getCesiumIndexedDBMaxSize() {\n var baseUnit = 1024 * 1024 * 1024;\n var size = Number(Number(localStorage.getItem('IndexedDBMaxSize')).toFixed(0));\n if (isNaN(size) || size < baseUnit) {\n size = baseUnit;\n }\n return size;\n}\nfunction setCesiumIndexedDBMaxSize(v) {\n var baseUnit = 1024 * 1024 * 1024;\n var maxSize = Number(Number(v).toFixed(0));\n if (isNaN(maxSize) || maxSize < baseUnit) {\n maxSize = baseUnit;\n }\n Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.SetIndexedDBMaxSize(maxSize);\n localStorage.setItem('IndexedDBMaxSize', maxSize);\n}\nfunction getCesiumManageIndexexDBState() {\n var state = localStorage.getItem('ManageIndexexDBState');\n if (state === 'false') {\n return false;\n }\n return Boolean(state);\n}\nfunction setCesiumManageIndexexDBState(v) {\n if (typeof v === \"boolean\") {\n Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.SetManageIndexexDBState(v);\n localStorage.setItem('ManageIndexexDBState', v);\n } else {\n console.error(\"参数必须为boolean\");\n }\n}\nfunction getCesiumIndexedDBCurrentSize() {\n return Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.GetIndexedDBCurrentSize();\n}\nfunction setActiveViewer(v) {\n Object(_MultiViewportMode__WEBPACK_IMPORTED_MODULE_7__[\"setActiveViewer\"])(v);\n Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_8__[\"setActiveViewer\"])(v);\n}\n\n// 设置地球透明度\nfunction enablePerspective(sdk) {\n var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n if (!alpha && alpha != 0) {\n alpha = 1;\n }\n sdk.viewer.scene.globe.translucency.frontFaceAlpha = alpha;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL2dsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HbG9iYWwvZ2xvYmFsLmpzPzI2ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBnbG9iYWxcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMy0xMi0wMSAxNDoxNVxyXG4gKiBAZGVzY3JpcHRpb27vvJpnbG9iYWxcclxuICogQHVwZGF0ZTogMjAyMy0xMi0wMSAxNDoxNVxyXG4gKi9cclxuXHJcbi8q6I635Y+W5b2T5YmN6KeG6KeSKi9cclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vVG9vbHNcIjtcclxuaW1wb3J0IHsgUHJvaiB9IGZyb20gXCIuLi9Ub29scy9wcm9qXCI7XHJcbmltcG9ydCB7IGdldFRoZW1lLCBzZXRUaGVtZSB9IGZyb20gXCIuLi9PYmovRWxlbWVudC90aGVtZVwiO1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIgYXMgc2V0TXVsdGlWaWV3cG9ydEFjdGl2ZVZpZXdlciB9IGZyb20gJy4vTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciBhcyBzZXRTcGxpdEFjdGl2ZVZpZXdlciwgZ2V0U2RrIH0gZnJvbSAnLi9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgdXBkYXRlQ2x1c3RlciB9IGZyb20gJy4vY2x1c3Rlci9jbHVzdGVyJ1xyXG5pbXBvcnQgeyBnZXRIb3N0IH0gZnJvbSBcIi4uL29uXCI7XHJcblxyXG5sZXQgY29vcmRpbmF0ZVN5c3RlbSA9ICdFUFNHOjQzMjYnXHJcbmxldCBfY2FydGVzaWFuXHJcbmxldCBHcm91bmRDb3ZlciA9IGZhbHNlXHJcbmxldCBiaW1QaWNrT2JqZWN0ID0ge31cclxubGV0IGNvbnRhaW5lck9iamVjdCA9IHt9XHJcbmxldCByb3RhdGVBcm91bmRPYmplY3QgPSB7fVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VmlldyhzZGspIHtcclxuICBsZXQgdG9vbHMgPSBuZXcgVG9vbHMoKVxyXG4gIGxldCB2aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgLy8gaGVhZGluZzogdmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgLy8gcGl0Y2g6IHZpZXdlci5jYW1lcmEucGl0Y2gsXHJcbiAgICAvLyByb2xsOiB2aWV3ZXIuY2FtZXJhLnJvbGwsXHJcbiAgICBwb3NpdGlvbjogdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQodmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgdmlld2VyKSxcclxuICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvRGVncmVlcyh2aWV3ZXIuY2FtZXJhLmhlYWRpbmcpLFxyXG4gICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHZpZXdlci5jYW1lcmEucGl0Y2gpLFxyXG4gICAgICByb2xsOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXModmlld2VyLmNhbWVyYS5yb2xsKVxyXG4gICAgfVxyXG4gIH0pKVxyXG59XHJcblxyXG4vKuiuvue9rum7mOiupOinhuinkiovXHJcbmZ1bmN0aW9uIHNldERlZmF1bHRWaWV3KHNkaywgb3B0aW9ucykge1xyXG4gIGxldCB2aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgaWYgKG9wdGlvbnMpIHtcclxuICAgIHZpZXdlci5DQU1FUkFfREVGQVVMVF9WSUVXX1JFQ1RBTkdMRSA9IHtcclxuICAgICAgZGVzdGluYXRpb246IG9wdGlvbnMuZGVzdGluYXRpb24gfHwge30sXHJcbiAgICAgIG9yaWVudGF0aW9uOiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgdmlld2VyLkNBTUVSQV9ERUZBVUxUX1ZJRVdfUkVDVEFOR0xFID0gdW5kZWZpbmVkXHJcbiAgICAvL+iuvue9rmNlc2l1beeahOm7mOiupOinhuinklxyXG4gICAgQ2VzaXVtLkNhbWVyYS5ERUZBVUxUX1ZJRVdfUkVDVEFOR0xFID0gQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyhcclxuICAgICAgLy/opb/ovrnnmoTnu4/luqZcclxuICAgICAgODkuNSxcclxuICAgICAgLy/ljZfovrnnmoTnuqzluqZcclxuICAgICAgMTAuNCxcclxuICAgICAgLy/kuJzovrnnmoTnu4/luqZcclxuICAgICAgMTEwLjQsXHJcbiAgICAgIC8v5YyX6L6555qE57u05bqmXHJcbiAgICAgIDYxLjJcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbi8q5a6a5L2N5Yiw5oyH5a6a6KeG6KeSKi9cclxuYXN5bmMgZnVuY3Rpb24gZmx5VG8oc2RrLCBvcHRpb25zLCBkdXJhdGlvbiA9IDMpIHtcclxuICBsZXQgdG9vbHMgPSBuZXcgVG9vbHMoc2RrKVxyXG4gIGxldCBkZXN0aW5hdGlvblxyXG4gIGxldCBvcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb25cclxuICBpZiAob3B0aW9ucy5wb3NpdGlvbikge1xyXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24uYWx0ICE9PSAwICYmICFvcHRpb25zLnBvc2l0aW9uLmFsdCkge1xyXG4gICAgICBvcHRpb25zLnBvc2l0aW9uLmFsdCA9IGF3YWl0IHRvb2xzLmdldENsYW1wVG9IZWlnaHQob3B0aW9ucy5wb3NpdGlvbilcclxuICAgIH1cclxuICAgIGxldCBoID0gMFxyXG4gICAgaWYgKCFvcmllbnRhdGlvbikge1xyXG4gICAgICBoID0gNTAwXHJcbiAgICB9XHJcbiAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKG9wdGlvbnMucG9zaXRpb24ubG5nLCBvcHRpb25zLnBvc2l0aW9uLmxhdCwgb3B0aW9ucy5wb3NpdGlvbi5hbHQgKyBoKVxyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGxldCBiYm94ID0gdG9vbHMuY2FsX2VudmVsb3BlKG9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgZGVzdGluYXRpb24gPSBuZXcgQ2VzaXVtLlJlY3RhbmdsZShcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGJib3hbM11bMF0pLFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoYmJveFszXVsxXSksXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhiYm94WzFdWzBdKSxcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGJib3hbMV1bMV0pXHJcbiAgICApXHJcbiAgfVxyXG4gIGNsb3NlUm90YXRlQXJvdW5kKHNkaylcclxuICBzZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7IGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgb3JpZW50YXRpb24sIGNvbXBsZXRlOiBvcHRpb25zLmNvbXBsZXRlLCB9KVxyXG59XHJcblxyXG4vKuebuOacuumUgeWumiovXHJcbmZ1bmN0aW9uIENhbWVyYUNvbnRyb2xsZXIoc2RrLCBzdGF0dXMgPSB0cnVlKSB7XHJcbiAgaWYgKCFzZGsgfHwgIXNkay52aWV3ZXIpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBsZXQgdmlld2VyID0gc2RrLnZpZXdlclxyXG4gIHZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlUm90YXRlID0gc3RhdHVzO1xyXG4gIHZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlVHJhbnNsYXRlID0gc3RhdHVzO1xyXG4gIHZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlWm9vbSA9IHN0YXR1cztcclxuICB2aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVRpbHQgPSBzdGF0dXM7XHJcbiAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVMb29rID0gc3RhdHVzO1xyXG59XHJcblxyXG4vKuaOp+S7tuaYvumakCovXHJcbmZ1bmN0aW9uIENlc2l1bUNvbnRhaW5lcihzZGssIG9wdGlvbnMpIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGNvbnRhaW5lck9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0gfHwgKGNvbnRhaW5lck9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0gPSB7fSlcclxuICBjb250YWluZXJPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmV2ZW50ICYmIGNvbnRhaW5lck9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uZXZlbnQuZGVzdHJveSgpXHJcbiAgbGV0IHRvb2xzID0gbmV3IFRvb2xzKHNkaylcclxuICBsZXQgZWxlbWVudCA9IHNkay52aWV3ZXIuX2VsZW1lbnRcclxuICBsZXQgcHJvaiA9IHNkay5wcm9qXHJcbiAgZm9yIChsZXQga2V5IGluIG9wdGlvbnMpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgJ2NvbXBhc3MnOlxyXG4gICAgICAgIGxldCBjb21wYXNzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb21wYXNzJylbMF1cclxuICAgICAgICBsZXQgbmF2aWdhdGlvbiA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbmF2aWdhdGlvbi1jb250cm9scycpWzBdXHJcbiAgICAgICAgaWYgKG9wdGlvbnNba2V5XSkge1xyXG4gICAgICAgICAgY29tcGFzcyAmJiAoY29tcGFzcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJylcclxuICAgICAgICAgIG5hdmlnYXRpb24gJiYgKG5hdmlnYXRpb24uc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb21wYXNzICYmIChjb21wYXNzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICBuYXZpZ2F0aW9uICYmIChuYXZpZ2F0aW9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsZWdlbmQnOlxyXG4gICAgICAgIGxldCBkaXN0YW5jZUxlZ2VuZCA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZGlzdGFuY2UtbGVnZW5kJylbMF1cclxuICAgICAgICBpZiAob3B0aW9uc1trZXldKSB7XHJcbiAgICAgICAgICBkaXN0YW5jZUxlZ2VuZCAmJiAoZGlzdGFuY2VMZWdlbmQucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkaXN0YW5jZUxlZ2VuZCAmJiAoZGlzdGFuY2VMZWdlbmQucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaW5mbyc6XHJcbiAgICAgICAgbGV0IGluZm9FbG0gPSBlbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nlc2l1bS1pbmZvJylbMF1cclxuICAgICAgICBpZiAob3B0aW9uc1trZXldKSB7XHJcbiAgICAgICAgICBpZiAoaW5mb0VsbSkge1xyXG4gICAgICAgICAgICB1cGRhdGUoKVxyXG4gICAgICAgICAgICBpbmZvRWxtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5mb0VsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICBpbmZvRWxtLmNsYXNzTmFtZSA9IFwiY2VzaXVtLWluZm9cIlxyXG4gICAgICAgICAgICBpbmZvRWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICAgICAgaW5mb0VsbS5zdHlsZS5ib3R0b20gPSAnMzJweCc7XHJcbiAgICAgICAgICAgIGluZm9FbG0uc3R5bGUucmlnaHQgPSAnMjQwcHgnO1xyXG4gICAgICAgICAgICBpbmZvRWxtLnN0eWxlWydmb250LXNpemUnXSA9ICcxNHB4JztcclxuICAgICAgICAgICAgaW5mb0VsbS5zdHlsZVsnYmFja2dyb3VuZC1jb2xvciddID0gJ3JnYmEoNDcsNTMsNjAsLjgpJztcclxuICAgICAgICAgICAgaW5mb0VsbS5zdHlsZS5jb2xvciA9ICcjZmZmJztcclxuICAgICAgICAgICAgaW5mb0VsbS5zdHlsZS5wYWRkaW5nID0gJzRweCAxMHB4JztcclxuICAgICAgICAgICAgaW5mb0VsbS5zdHlsZVsnYm9yZGVyLXJhZGl1cyddID0gJzE4cHgnO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT09ICdFUFNHOjQzMjYnKSB7XHJcbiAgICAgICAgICAgICAgaW5mb0VsbS5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgICAgICA8c3Bhbj7nu4/luqbvvJo8L3NwYW4+PHNwYW4+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPue6rOW6pu+8mjwvc3Bhbj48c3Bhbj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+5rW35ouU6auY5bqm77yaPC9zcGFuPjxzcGFuPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGluZm9FbG0uaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgICAgICAgPHNwYW4+eO+8mjwvc3Bhbj48c3Bhbj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+ee+8mjwvc3Bhbj48c3Bhbj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+eu+8mjwvc3Bhbj48c3Bhbj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgIGBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZGsudmlld2VyLl9lbGVtZW50LmFwcGVuZENoaWxkKGluZm9FbG0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgTW91c2VFdmVudChzZGspXHJcbiAgICAgICAgICBjb250YWluZXJPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmV2ZW50ID0gZXZlbnRcclxuICAgICAgICAgIGxldCBsYXN0UGlja1RpbWUgPSAwO1xyXG4gICAgICAgICAgbGV0IHRpbWVvdXRFdmVudFxyXG4gICAgICAgICAgZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICBfY2FydGVzaWFuID0gY2FydGVzaWFuXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIC8vIGlmIChub3cgLSBsYXN0UGlja1RpbWUgPCA1MDApIHtcclxuICAgICAgICAgICAgLy8gICBjbGVhclRpbWVvdXQodGltZW91dEV2ZW50KVxyXG4gICAgICAgICAgICAvLyAgIHRpbWVvdXRFdmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgdXBkYXRlKClcclxuICAgICAgICAgICAgLy8gICB9LCA1MDApO1xyXG4gICAgICAgICAgICAvLyAgIHJldHVyblxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGxhc3RQaWNrVGltZSA9IG5vdztcclxuICAgICAgICAgICAgdXBkYXRlKClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGUoKSB7XHJcbiAgICAgICAgICAgIGlmICghX2NhcnRlc2lhbikge1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGxldCBwb3MgPSBzZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoX2NhcnRlc2lhbilcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoX2NhcnRlc2lhbiwgc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgLy8gcG9zaXRpb24uYWx0ID0gaGVpZ2h0XHJcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09PSAnRVBTRzo0MzI2Jykge1xyXG4gICAgICAgICAgICAgIGluZm9FbG0uaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj7nu4/luqbvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocG9zaXRpb24ubG5nLnRvRml4ZWQoNikpfcKwIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+57qs5bqm77yaPC9zcGFuPjxzcGFuPiR7TnVtYmVyKHBvc2l0aW9uLmxhdC50b0ZpeGVkKDYpKX3CsCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPua1t+aLlOmrmOW6pu+8mjwvc3Bhbj48c3Bhbj4ke051bWJlcihwb3NpdGlvbi5hbHQudG9GaXhlZCgyKSl957GzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCByZXN1bHQgPSBwcm9qLmNvbnZlcnQoW3sgeDogcG9zaXRpb24ubG5nLCB5OiBwb3NpdGlvbi5sYXQsIHo6IHBvc2l0aW9uLmFsdCB9XSwgJ0VQU0c6NDMyNicsIGNvb3JkaW5hdGVTeXN0ZW0pXHJcbiAgICAgICAgICAgICAgaW5mb0VsbS5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnjvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS54LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPnnvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS55LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPnrvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS56LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIGBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGluZm9FbG0gJiYgKGluZm9FbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJylcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcclxuICAgICAgICBpZiAob3B0aW9uc1trZXldKSB7XHJcbiAgICAgICAgICBzZGsudmlld2VyLnNjZW5lLmRlYnVnU2hvd0ZyYW1lc1BlclNlY29uZCA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNlc2l1bVdpZGdldENvbnRhaW5lckVsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXZpZXdlci1jZXNpdW1XaWRnZXRDb250YWluZXInKVswXVxyXG4gICAgICAgICAgICBsZXQgZGVmYXVsdENvbnRhaW5lciA9IGNlc2l1bVdpZGdldENvbnRhaW5lckVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0tcGVyZm9ybWFuY2VEaXNwbGF5LWRlZmF1bHRDb250YWluZXInKVswXVxyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgIGNlc2l1bVdpZGdldENvbnRhaW5lckVsbS5hcHBlbmRDaGlsZChkZWZhdWx0Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc2RrLnZpZXdlci5zY2VuZS5kZWJ1Z1Nob3dGcmFtZXNQZXJTZWNvbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGxldCBjb21wYXNzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb21wYXNzJylbMF1cclxuICAvLyBsZXQgbmF2aWdhdGlvbiA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbmF2aWdhdGlvbi1jb250cm9scycpWzBdXHJcbiAgLy8gbGV0IGRpc3RhbmNlTGVnZW5kID0gZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkaXN0YW5jZS1sZWdlbmQnKVswXVxyXG4gIC8vIGlmKHN0YXR1cykge1xyXG4gIC8vICAgY29tcGFzcyAmJiAoY29tcGFzcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJylcclxuICAvLyAgIG5hdmlnYXRpb24gJiYgKG5hdmlnYXRpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jaycpXHJcbiAgLy8gICBkaXN0YW5jZUxlZ2VuZCAmJiAoZGlzdGFuY2VMZWdlbmQuc3R5bGUuZGlzcGxheSA9ICdibG9jaycpXHJcbiAgLy8gfVxyXG4gIC8vIGVsc2Uge1xyXG4gIC8vICAgY29tcGFzcyAmJiAoY29tcGFzcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gIC8vICAgbmF2aWdhdGlvbiAmJiAobmF2aWdhdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gIC8vICAgZGlzdGFuY2VMZWdlbmQgJiYgKGRpc3RhbmNlTGVnZW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgLy8gICB2aWV3ZXIuY2VzaXVtTmF2aWdhdGlvbi5kaXN0YW5jZUxlZ2VuZFZpZXdNb2RlbC5kZXN0cm95KClcclxuICAvLyB9XHJcbn1cclxuXHJcbi8q6K6+572u5bm/5ZGK54mM6buY6K6k5Zu+5qCHKi9cclxuZnVuY3Rpb24gc2V0QmlsbGJvYXJkRGVmYXVsdFVybCh1cmwsIG5hbWUpIHtcclxuICBpZiAobmFtZSkge1xyXG4gICAgbmFtZSA9ICdiaWxsYm9hcmRfZGVmYXVsdF91cmxfJyArIG5hbWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBuYW1lID0gJ2JpbGxib2FyZF9kZWZhdWx0X3VybCdcclxuICB9XHJcbiAgbGV0IGhvc3QgPSBnZXRIb3N0KClcclxuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgLy/or7TmmI7mmK/mnKzlnLDnmoRqc29u77yM5Zyo56OB55uY5Lit5a2Y5Zyo55qEXHJcbiAgICBpZiAoIXVybC5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgaWYgKGhvc3QpIHtcclxuICAgICAgICBsZXQgbyA9IG5ldyBVUkwodXJsLCBob3N0KVxyXG4gICAgICAgIHVybCA9IG8uaHJlZlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIHVybCk7XHJcbn1cclxuLyrojrflj5blub/lkYrniYzpu5jorqTlm77moIcqL1xyXG5mdW5jdGlvbiBnZXRCaWxsYm9hcmREZWZhdWx0VXJsKG5hbWUpIHtcclxuICBpZiAobmFtZSkge1xyXG4gICAgbmFtZSA9ICdiaWxsYm9hcmRfZGVmYXVsdF91cmxfJyArIG5hbWVcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBuYW1lID0gJ2JpbGxib2FyZF9kZWZhdWx0X3VybCdcclxuICB9XHJcbiAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xyXG59XHJcblxyXG4vKuiuvue9rumrmOW6puWPguiAgyovXHJcbmZ1bmN0aW9uIHNldEdyb3VuZENvdmVyKHNkaywgc3RhdHVzKSB7XHJcbiAgR3JvdW5kQ292ZXIgPSBzdGF0dXMgPyB0cnVlIDogZmFsc2VcclxuICB1cGRhdGVDbHVzdGVyKHNkay52aWV3ZXIpXHJcbn1cclxuXHJcbi8q6I635Y+W6auY5bqm5Y+C6ICDKi9cclxuZnVuY3Rpb24gZ2V0R3JvdW5kQ292ZXIoKSB7XHJcbiAgcmV0dXJuIEdyb3VuZENvdmVyXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEJpbVBpY2tTdGF0dXMoc2RrLCBzdGF0dXMpIHtcclxuICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGJpbVBpY2tPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdIHx8IChiaW1QaWNrT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXSA9IHt9KVxyXG4gIGJpbVBpY2tPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLnN0YXR1cyA9IHN0YXR1c1xyXG4gIGlmIChiaW1QaWNrT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5Nb3ZlSGFuZGxlcikge1xyXG4gICAgYmltUGlja09iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uTW92ZUhhbmRsZXIuZGVzdHJveSgpXHJcbiAgfVxyXG4gIGlmICghc3RhdHVzKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgYmltUGlja09iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uTW92ZUhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKHNkay52aWV3ZXIuY2FudmFzKVxyXG4gIGJpbVBpY2tPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLk1vdmVIYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uIChtb3ZlbWVudCkge1xyXG4gICAgY29uc3QgcGljayA9IHNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5lbmRQb3NpdGlvbik7XHJcbiAgICBsZXQgc2VsZWN0ZWRJZCA9IGJpbVBpY2tPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLnNlbGVjdGVkSWRcclxuICAgIGxldCB0aGF0ID0gc2RrLmVudGl0eU1hcC5nZXQoYmltUGlja09iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uaWQpXHJcbiAgICAvLyBpZiAoc2VsZWN0ZWRGZWF0dXJlSWQpIHtcclxuICAgIC8vICAgbGV0IGNvbG9yID0gJyNmZmYnXHJcbiAgICAvLyAgIGxldCBzdGF0ZSA9IHNlbGVjdGVkRmVhdHVyZS5nZXRQcm9wZXJ0eSgnc3RhdGUnKVxyXG4gICAgLy8gICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAvLyAgICAgY2FzZSAnMCc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZmZmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMSc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjZjAwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMic6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMGYwJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgY2FzZSAnMyc6XHJcbiAgICAvLyAgICAgICBjb2xvciA9ICcjMDBmJ1xyXG4gICAgLy8gICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZWxlY3RlZEZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKS53aXRoQWxwaGEoc2VsZWN0ZWRGZWF0dXJlLnRpbGVzZXQudHJhbnNwYXJlbmN5KVxyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoYXQpIHtcclxuICAgICAgaWYgKHRoYXQuZmVhdHVyZXMuaGFzKHNlbGVjdGVkSWQpKSB7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gdGhhdC5mZWF0dXJlcy5nZXQoc2VsZWN0ZWRJZCkuZmVhdHVyZXNcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZmVhdHVyZXMpIHtcclxuICAgICAgICAgIGlmIChmZWF0dXJlc1trZXldLmNvbnRlbnQuX21vZGVsKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IGZlYXR1cmVzW2tleV0uY3VzdG9tQ29sb3IgfHwgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmZicpXHJcbiAgICAgICAgICAgIGZlYXR1cmVzW2tleV0uY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLnJlZCl9LCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLmdyZWVuKX0sJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IuYmx1ZSl9LCR7Y29sb3IuYWxwaGEgKiAoKGZlYXR1cmVzW2tleV0uY3VzdG9tQWxwaGEgfHwgZmVhdHVyZXNba2V5XS5jdXN0b21BbHBoYSA9PT0gMCkgPyBmZWF0dXJlc1trZXldLmN1c3RvbUFscGhhIDogMSl9KWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGljayAmJiBwaWNrLmNvbnRlbnQpIHtcclxuICAgICAgbGV0IG9iaiA9IHNkay5nZXRJbmNldGFuY2UocGljay5jb250ZW50LnRpbGVzZXQuaWQpXHJcbiAgICAgIGlmIChvYmoudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgICAgICBpZiAocGljay5wcmltaXRpdmUgJiYgcGljay5wcmltaXRpdmUuaWQpIHtcclxuICAgICAgICAgIGxldCB0aGF0ID0gc2RrLmVudGl0eU1hcC5nZXQocGljay5wcmltaXRpdmUuaWQpXHJcbiAgICAgICAgICBzZWxlY3RlZElkID0gcGljay5nZXRQcm9wZXJ0eSgnaWQnKVxyXG4gICAgICAgICAgaWYgKHRoYXQuZmVhdHVyZXMuaGFzKHNlbGVjdGVkSWQpKSB7XHJcbiAgICAgICAgICAgIGxldCBmZWF0dXJlcyA9IHRoYXQuZmVhdHVyZXMuZ2V0KHNlbGVjdGVkSWQpLmZlYXR1cmVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBmZWF0dXJlcykge1xyXG4gICAgICAgICAgICAgIGlmIChmZWF0dXJlc1trZXldLmNvbnRlbnQuX21vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlc1trZXldLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmZWIzYicpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBiaW1QaWNrT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5pZCA9IHBpY2sucHJpbWl0aXZlLmlkXHJcbiAgICAgICAgICBiaW1QaWNrT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5zZWxlY3RlZElkID0gc2VsZWN0ZWRJZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBwaWNrLnByaW1pdGl2ZS5pZCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5NT1VTRV9NT1ZFKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRCaW1QaWNrU3RhdHVzKHNkaykge1xyXG4gIGlmICghc2RrIHx8ICFzZGsudmlld2VyKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgcmV0dXJuIGJpbVBpY2tPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdID8gYmltUGlja09iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uc3RhdHVzIDogZmFsc2VcclxufVxyXG5cclxuLyog5Zu057uV5Z2Q5qCH5peL6L2sICovXHJcbmZ1bmN0aW9uIHJvdGF0ZUFyb3VuZChzZGssIHBvc2l0aW9uKSB7XHJcbiAgaWYgKCFzZGsgfHwgIXNkay52aWV3ZXIpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICBzZGsudmlld2VyLmNhbWVyYS5sb29rQXRUcmFuc2Zvcm0oQ2VzaXVtLk1hdHJpeDQuSURFTlRJVFkpO1xyXG4gIC8vIOWFs+mXrUNvbnRyb2xsZXJcclxuICBzZGsuZW50aXR5TWFwLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgIGl0ZW0uZWRpdE9iaiAmJiBpdGVtLmVkaXRPYmouZGVzdHJveSgpXHJcbiAgICBpdGVtLkNvbnRyb2xsZXJPYmplY3QgJiYgaXRlbS5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gIH0pXHJcbiAgcm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXSB8fCAocm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXSA9IHt9KVxyXG4gIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uYW5pbWF0ZSAmJiBUV0VFTi5yZW1vdmUocm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5hbmltYXRlKVxyXG4gIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uZXZlbnQgJiYgcm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5ldmVudC5kZXN0cm95KClcclxuICBpZiAoIXBvc2l0aW9uKSB7XHJcbiAgICBDYW1lcmFDb250cm9sbGVyKHNkaywgdHJ1ZSlcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgbGV0IHBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIHBvc2l0aW9uLmFsdClcclxuICBsZXQgYW5nbGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoc2RrLnZpZXdlci5jYW1lcmEuaGVhZGluZylcclxuICBsZXQgcmFuZ2UgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShzZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgcG9pbnQpO1xyXG4gIENhbWVyYUNvbnRyb2xsZXIoc2RrLCBmYWxzZSlcclxuICBsZXQgcGl0Y2ggPSBzZGsudmlld2VyLmNhbWVyYS5waXRjaFxyXG4gIGxldCBkZWdyZWVzID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHBpdGNoKVxyXG4gIGlmIChkZWdyZWVzIDwgLTg5Ljk5KSB7XHJcbiAgICBwaXRjaCA9IENlc2l1bS5NYXRoLnRvUmFkaWFucygtODkuOTkpXHJcbiAgfVxyXG4gIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uYW5pbWF0ZSA9IG5ldyBUV0VFTi5Ud2Vlbih7IGFuZ2xlOiBhbmdsZSB9KS50byh7IGFuZ2xlOiBhbmdsZSAtIDM2MCB9LCAzMDAwMCkuZWFzaW5nKFRXRUVOLkVhc2luZy5MaW5lYXIuTm9uZSkucmVwZWF0KEluZmluaXR5KS5vblVwZGF0ZShhc3luYyAociwgYSkgPT4ge1xyXG4gICAgaWYgKCFzZGsudmlld2VyKSB7XHJcbiAgICAgIFRXRUVOLnJlbW92ZShyb3RhdGVBcm91bmRPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmFuaW1hdGUpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc2RrLnZpZXdlci5jYW1lcmEubG9va0F0KFxyXG4gICAgICBwb2ludCxcclxuICAgICAgbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSYW5nZShDZXNpdW0uTWF0aC50b1JhZGlhbnMoci5hbmdsZSksIHBpdGNoLCByYW5nZSlcclxuICAgIClcclxuXHJcbiAgICBzZGsudmlld2VyLmNhbWVyYS5sb29rQXRUcmFuc2Zvcm0oQ2VzaXVtLk1hdHJpeDQuSURFTlRJVFkpO1xyXG4gIH0pLnN0YXJ0KClcclxuXHJcbiAgbGV0IGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoc2RrKVxyXG4gIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uZXZlbnQgPSBldmVudFxyXG4gIGV2ZW50Lm1vdXNlX2xlZnRfZG93bigoKSA9PiB7XHJcbiAgICByb3RhdGVBcm91bmRPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmFuaW1hdGUgJiYgVFdFRU4ucmVtb3ZlKHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uYW5pbWF0ZSlcclxuICAgIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uZXZlbnQgJiYgcm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5ldmVudC5kZXN0cm95KClcclxuICAgIENhbWVyYUNvbnRyb2xsZXIoc2RrLCB0cnVlKVxyXG4gICAgc2RrLnZpZXdlci5jYW1lcmEubG9va0F0VHJhbnNmb3JtKENlc2l1bS5NYXRyaXg0LklERU5USVRZKTtcclxuICB9KVxyXG59XHJcblxyXG4vKiDlhbPpl63lm7Tnu5XlnZDmoIfml4vovawgKi9cclxuZnVuY3Rpb24gY2xvc2VSb3RhdGVBcm91bmQoc2RrKSB7XHJcbiAgaWYgKCFzZGsgfHwgIXNkay52aWV3ZXIpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBpZiAocm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXSkge1xyXG4gICAgcm90YXRlQXJvdW5kT2JqZWN0W3Nkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lXS5hbmltYXRlICYmIFRXRUVOLnJlbW92ZShyb3RhdGVBcm91bmRPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmFuaW1hdGUpXHJcbiAgICByb3RhdGVBcm91bmRPYmplY3Rbc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWVdLmV2ZW50ICYmIHJvdGF0ZUFyb3VuZE9iamVjdFtzZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZV0uZXZlbnQuZGVzdHJveSgpXHJcbiAgICBDYW1lcmFDb250cm9sbGVyKHNkaywgdHJ1ZSlcclxuICAgIHNkay52aWV3ZXIuY2FtZXJhLmxvb2tBdFRyYW5zZm9ybShDZXNpdW0uTWF0cml4NC5JREVOVElUWSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9zZVZpZXdGb2xsb3coc2RrKSB7XHJcbiAgaWYgKHNkayAmJiBzZGsuZW50aXR5TWFwKSB7XHJcbiAgICBsZXQgZW50aXR5TWFwID0gc2RrLmVudGl0eU1hcFxyXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGVudGl0eU1hcCkge1xyXG4gICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1RyYWplY3RvcnlNb3Rpb24nICYmIHZhbHVlLnZpZXdGb2xsb3cpIHtcclxuICAgICAgICB2YWx1ZS52aWV3Rm9sbG93ID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyog5pa56YeM572R54q25oCB5byA5YWzICovXHJcbmZ1bmN0aW9uIEZsd1N0YXR1c1N3aXRjaChzZGssIHN0YXR1cykge1xyXG4gIGlmICghc2RrKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgbGV0IGxheWVyXHJcbiAgbGV0IHNka0QgPSBnZXRTZGsoKS5zZGtEXHJcbiAgaWYgKHNka0QgJiYgc2RrICE9PSBzZGtEKSB7XHJcbiAgICBGbHdTdGF0dXNTd2l0Y2goc2RrRCwgc3RhdHVzKVxyXG4gIH1cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAoc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlciAmJiBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlICYmIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgPT09ICdmbHcnKSB7XHJcbiAgICAgIGxheWVyID0gc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV1cclxuICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKGxheWVyKSB7XHJcbiAgICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMucmVtb3ZlKGxheWVyKVxyXG4gIH1cclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKG5ldyBDZXNpdW0uVGlsZUNvb3JkaW5hdGVzSW1hZ2VyeVByb3ZpZGVyRmx3KFxyXG4gICAgICB7XHJcbiAgICAgICAgdGlsZVdpZHRoOiAxMjgsXHJcbiAgICAgICAgdGlsZUhlaWdodDogMTI4LFxyXG4gICAgICB9XHJcbiAgICApKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZsd1N0YXR1cyhzZGspIHtcclxuICBsZXQgc3RhdHVzID0gZmFsc2VcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAoc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlciAmJiBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlICYmIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgPT09ICdmbHcnKSB7XHJcbiAgICAgIHN0YXR1cyA9IHRydWVcclxuICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHN0YXR1c1xyXG59XHJcblxyXG4vKiDnu4/nuqznvZHnirbmgIHlvIDlhbMgKi9cclxuZnVuY3Rpb24gSnd3U3RhdHVzU3dpdGNoKHNkaywgc3RhdHVzKSB7XHJcbiAgaWYgKCFzZGspIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBsZXQgbGF5ZXJcclxuICBsZXQgc2RrRCA9IGdldFNkaygpLnNka0RcclxuICBpZiAoc2RrRCAmJiBzZGsgIT09IHNka0QpIHtcclxuICAgIEp3d1N0YXR1c1N3aXRjaChzZGtELCBzdGF0dXMpXHJcbiAgfVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyICYmIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgJiYgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSA9PT0gJ2p3dycpIHtcclxuICAgICAgbGF5ZXIgPSBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXVxyXG4gICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobGF5ZXIpIHtcclxuICAgIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5yZW1vdmUobGF5ZXIpXHJcbiAgfVxyXG4gIGlmIChzdGF0dXMpIHtcclxuICAgIHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5hZGRJbWFnZXJ5UHJvdmlkZXIobmV3IENlc2l1bS5UaWxlQ29vcmRpbmF0ZXNJbWFnZXJ5UHJvdmlkZXJKd3coKSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRKd3dTdGF0dXMoc2RrKSB7XHJcbiAgbGV0IHN0YXR1cyA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIgJiYgc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSAmJiBzZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnand3Jykge1xyXG4gICAgICBzdGF0dXMgPSB0cnVlXHJcbiAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzdGF0dXNcclxufVxyXG5cclxuZnVuY3Rpb24gc3BsaXRTY3JlZW4yKHNkaywgc3RhdHVzKSB7XHJcbiAgbGV0IHNsaWRlckVsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLXNsaWRlcicpWzBdXHJcbiAgbGV0IGxlZnRFbG0gPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1sZWZ0JylbMF1cclxuICBsZXQgcmlnaHRFbG0gPSBzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1jaGVja2JveC1yaWdodCcpWzBdXHJcbiAgaWYgKHNsaWRlckVsbSkge1xyXG4gICAgc2RrLnZpZXdlci5fZWxlbWVudC5yZW1vdmVDaGlsZChzbGlkZXJFbG0pXHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKGxlZnRFbG0pXHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKHJpZ2h0RWxtKVxyXG4gIH1cclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICBzbGlkZXJFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHNsaWRlckVsbS5jbGFzc05hbWUgPSAnWUotY3VzdG9tLXNsaWRlcidcclxuICAgIHNsaWRlckVsbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcclxuICAgIHNsaWRlckVsbS5zdHlsZS5sZWZ0ID0gJzUwJSdcclxuICAgIHNsaWRlckVsbS5zdHlsZS50b3AgPSAnMHB4J1xyXG5cclxuICAgIGxlZnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgbGVmdEVsbS5jbGFzc05hbWUgPSAnWUotY3VzdG9tLWNoZWNrYm94LWxlZnQnXHJcbiAgICBsZWZ0RWxtLnR5cGUgPSAnY2hlY2tib3gnXHJcbiAgICBsZWZ0RWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gICAgbGVmdEVsbS5zdHlsZS5sZWZ0ID0gJ2NhbGMoNTAlIC0gNTBweCknXHJcbiAgICByaWdodEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICByaWdodEVsbS5jbGFzc05hbWUgPSAnWUotY3VzdG9tLWNoZWNrYm94LXJpZ2h0J1xyXG4gICAgcmlnaHRFbG0udHlwZSA9ICdjaGVja2JveCdcclxuICAgIHJpZ2h0RWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gICAgcmlnaHRFbG0uc3R5bGUucmlnaHQgPSAnY2FsYyg1MCUgLSA1MHB4KSdcclxuICAgIHNkay52aWV3ZXIuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobGVmdEVsbSlcclxuICAgIHNkay52aWV3ZXIuX2VsZW1lbnQuYXBwZW5kQ2hpbGQocmlnaHRFbG0pXHJcblxyXG4gICAgbGVmdEVsbS5jaGVja2VkID0gdHJ1ZVxyXG4gICAgbGVmdEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICBpZiAoIWUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXJpZ2h0RWxtLmNoZWNrZWQpIHtcclxuICAgICAgICAgIHJpZ2h0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKClcclxuICAgIH0pXHJcbiAgICByaWdodEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICBpZiAoIWUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIWxlZnRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgbGVmdEVsbS5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjaGFuZ2VFbnRpdHlTcGxpdFN0YXR1cygpXHJcbiAgICB9KVxyXG5cclxuICAgIHNsaWRlckVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKVxyXG4gICAgICBzbGlkZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlbW92ZSlcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICBmdW5jdGlvbiBtb3VzZW1vdmUoYSwgYikge1xyXG4gICAgICBpZiAoc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF0gPT09IGEudGFyZ2V0KSB7XHJcbiAgICAgICAgc2xpZGVyRWxtLnN0eWxlLmxlZnQgPSAoYS5vZmZzZXRYIC8gc2RrLnZpZXdlci5fZWxlbWVudC5zY3JvbGxXaWR0aCAqIDEwMCkgKyAnJSdcclxuICAgICAgICBzZGsudmlld2VyLnNjZW5lLnNwbGl0UG9zaXRpb24gPSBhLm9mZnNldFggLyBzZGsudmlld2VyLl9lbGVtZW50LnNjcm9sbFdpZHRoXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNkay52aWV3ZXIuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoc2xpZGVyRWxtKVxyXG4gICAgc2RrLnZpZXdlci5zY2VuZS5zcGxpdFN0YXR1cyA9IHN0YXR1c1xyXG4gICAgc2RrLnZpZXdlci5zY2VuZS5zcGxpdFBvc2l0aW9uID0gMC41XHJcbiAgICBjaGFuZ2VFbnRpdHlTcGxpdFN0YXR1cygpXHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgc2RrLnZpZXdlci5zY2VuZS5zcGxpdFBvc2l0aW9uID0gMFxyXG4gICAgY2hhbmdlRW50aXR5U3BsaXRTdGF0dXMoMClcclxuICAgIHNkay52aWV3ZXIuc2NlbmUuc3BsaXRTdGF0dXMgPSBzdGF0dXNcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKHYpIHtcclxuICAgIGxldCB2YWx1ZVxyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSB7XHJcbiAgICAgIGlmIChsZWZ0RWxtLmNoZWNrZWQgJiYgcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgIHZhbHVlID0gMFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChsZWZ0RWxtLmNoZWNrZWQpIHtcclxuICAgICAgICAgIHZhbHVlID0gLTFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJpZ2h0RWxtLmNoZWNrZWQpIHtcclxuICAgICAgICAgIHZhbHVlID0gMVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gdlxyXG4gICAgfVxyXG5cclxuICAgIHNkay5lbnRpdHlNYXAuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChzZGsudmlld2VyLnNjZW5lLnNwbGl0U3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICAgICAgaXRlbS5lbnRpdHkuYmlsbGJvYXJkLnNwbGl0RGlyZWN0aW9uID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpdGVtLmVudGl0eSAmJiAoaXRlbS5lbnRpdHkuc3BsaXREaXJlY3Rpb24gPSB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuZnVuY3Rpb24gc3BsaXRTY3JlZW4oc2RrLCBzdGF0dXMpIHtcclxuICBsZXQgc2xpZGVyRWxtID0gc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tc2xpZGVyJylbMF1cclxuICBsZXQgbGVmdEVsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLWNoZWNrYm94LWxlZnQnKVswXVxyXG4gIGxldCByaWdodEVsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLWNoZWNrYm94LXJpZ2h0JylbMF1cclxuICBpZiAoc2xpZGVyRWxtKSB7XHJcbiAgICBzZGsudmlld2VyLl9lbGVtZW50LnJlbW92ZUNoaWxkKHNsaWRlckVsbSlcclxuICAgIHNkay52aWV3ZXIuX2VsZW1lbnQucmVtb3ZlQ2hpbGQobGVmdEVsbSlcclxuICAgIHNkay52aWV3ZXIuX2VsZW1lbnQucmVtb3ZlQ2hpbGQocmlnaHRFbG0pXHJcbiAgfVxyXG4gIGlmIChzdGF0dXMpIHtcclxuICAgIHNsaWRlckVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgc2xpZGVyRWxtLmNsYXNzTmFtZSA9ICdZSi1jdXN0b20tc2xpZGVyJ1xyXG4gICAgc2xpZGVyRWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gICAgc2xpZGVyRWxtLnN0eWxlLmxlZnQgPSAnNTAlJ1xyXG4gICAgc2xpZGVyRWxtLnN0eWxlLnRvcCA9ICcwcHgnXHJcblxyXG4gICAgbGVmdEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICBsZWZ0RWxtLmNsYXNzTmFtZSA9ICdZSi1jdXN0b20tY2hlY2tib3gtbGVmdCdcclxuICAgIGxlZnRFbG0udHlwZSA9ICdjaGVja2JveCdcclxuICAgIGxlZnRFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICBsZWZ0RWxtLnN0eWxlLmxlZnQgPSAnY2FsYyg1MCUgLSA1MHB4KSdcclxuICAgIHJpZ2h0RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIHJpZ2h0RWxtLmNsYXNzTmFtZSA9ICdZSi1jdXN0b20tY2hlY2tib3gtcmlnaHQnXHJcbiAgICByaWdodEVsbS50eXBlID0gJ2NoZWNrYm94J1xyXG4gICAgcmlnaHRFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICByaWdodEVsbS5zdHlsZS5yaWdodCA9ICdjYWxjKDUwJSAtIDUwcHgpJ1xyXG4gICAgc2RrLnZpZXdlci5fZWxlbWVudC5hcHBlbmRDaGlsZChsZWZ0RWxtKVxyXG4gICAgc2RrLnZpZXdlci5fZWxlbWVudC5hcHBlbmRDaGlsZChyaWdodEVsbSlcclxuXHJcbiAgICBsZWZ0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICBsZWZ0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgIGlmICghZS50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmICghcmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgcmlnaHRFbG0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2hhbmdlRW50aXR5U3BsaXRTdGF0dXMoKVxyXG4gICAgfSlcclxuICAgIHJpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgIGlmICghZS50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmICghbGVmdEVsbS5jaGVja2VkKSB7XHJcbiAgICAgICAgICBsZWZ0RWxtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKClcclxuICAgIH0pXHJcblxyXG4gICAgc2xpZGVyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpXHJcbiAgICAgIHNsaWRlckVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZShhLCBiKSB7XHJcbiAgICAgIGlmIChzZGsudmlld2VyLl9lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXSA9PT0gYS50YXJnZXQpIHtcclxuICAgICAgICBzbGlkZXJFbG0uc3R5bGUubGVmdCA9IChhLm9mZnNldFggLyBzZGsudmlld2VyLl9lbGVtZW50LnNjcm9sbFdpZHRoICogMTAwKSArICclJ1xyXG4gICAgICAgIHNkay52aWV3ZXIuc2NlbmUuc3BsaXRQb3NpdGlvbiA9IGEub2Zmc2V0WCAvIHNkay52aWV3ZXIuX2VsZW1lbnQuc2Nyb2xsV2lkdGhcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2RrLnZpZXdlci5fZWxlbWVudC5hcHBlbmRDaGlsZChzbGlkZXJFbG0pXHJcbiAgICBzZGsudmlld2VyLnNjZW5lLnNwbGl0U3RhdHVzID0gc3RhdHVzXHJcbiAgICBzZGsudmlld2VyLnNjZW5lLnNwbGl0UG9zaXRpb24gPSAwLjVcclxuICAgIGNoYW5nZUVudGl0eVNwbGl0U3RhdHVzKClcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBzZGsudmlld2VyLnNjZW5lLnNwbGl0UG9zaXRpb24gPSAwXHJcbiAgICBjaGFuZ2VFbnRpdHlTcGxpdFN0YXR1cygwKVxyXG4gICAgc2RrLnZpZXdlci5zY2VuZS5zcGxpdFN0YXR1cyA9IHN0YXR1c1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hhbmdlRW50aXR5U3BsaXRTdGF0dXModikge1xyXG4gICAgbGV0IHZhbHVlXHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcclxuICAgICAgaWYgKGxlZnRFbG0uY2hlY2tlZCAmJiByaWdodEVsbS5jaGVja2VkKSB7XHJcbiAgICAgICAgdmFsdWUgPSAwXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGxlZnRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgdmFsdWUgPSAtMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmlnaHRFbG0uY2hlY2tlZCkge1xyXG4gICAgICAgICAgdmFsdWUgPSAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFsdWUgPSB2XHJcbiAgICB9XHJcblxyXG4gICAgc2RrLmVudGl0eU1hcC5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcclxuICAgICAgaWYgKHNkay52aWV3ZXIuc2NlbmUuc3BsaXRTdGF0dXMpIHtcclxuICAgICAgICBpZiAoaXRlbS5lbnRpdHkuYmlsbGJvYXJkKSB7XHJcbiAgICAgICAgICBpdGVtLmVudGl0eS5iaWxsYm9hcmQuc3BsaXREaXJlY3Rpb24gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGl0ZW0uZW50aXR5ICYmIChpdGVtLmVudGl0eS5zcGxpdERpcmVjdGlvbiA9IHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZygpXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29vcmRpbmF0ZVN5c3RlbSgpIHtcclxuICByZXR1cm4gY29vcmRpbmF0ZVN5c3RlbVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRDb29yZGluYXRlU3lzdGVtKHNkaywgZXBzZykge1xyXG4gIGNvb3JkaW5hdGVTeXN0ZW0gPSBlcHNnIHx8ICdFUFNHOjQzMjYnXHJcbiAgaWYgKCFzZGsgfHwgIXNkay52aWV3ZXIgfHwgIXNkay52aWV3ZXIuX2VsZW1lbnQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBsZXQgaW5mb0VsbSA9IHNkay52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLWluZm8nKVswXVxyXG4gIGlmICghX2NhcnRlc2lhbiB8fCAhaW5mb0VsbSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgbGV0IHByb2ogPSBzZGsucHJvalxyXG4gIGxldCBwb3NpdGlvbiA9IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KF9jYXJ0ZXNpYW4sIHNkay52aWV3ZXIpXHJcbiAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT09ICdFUFNHOjQzMjYnKSB7XHJcbiAgICBpbmZvRWxtLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgICAgICAgICAgPHNwYW4+57uP5bqm77yaPC9zcGFuPjxzcGFuPiR7TnVtYmVyKHBvc2l0aW9uLmxuZy50b0ZpeGVkKDYpKX3CsCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPue6rOW6pu+8mjwvc3Bhbj48c3Bhbj4ke051bWJlcihwb3NpdGlvbi5sYXQudG9GaXhlZCg2KSl9wrAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj7mtbfmi5Tpq5jluqbvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocG9zaXRpb24uYWx0LnRvRml4ZWQoMikpfeexszwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIGBcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gcHJvai5jb252ZXJ0KFt7IHg6IHBvc2l0aW9uLmxuZywgeTogcG9zaXRpb24ubGF0LCB6OiBwb3NpdGlvbi5hbHQgfV0sICdFUFNHOjQzMjYnLCBjb29yZGluYXRlU3lzdGVtKVxyXG4gICAgaW5mb0VsbS5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnjvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS54LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPnnvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS55LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPnrvvJo8L3NwYW4+PHNwYW4+JHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS56LnRvRml4ZWQoNikpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIGBcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbWVyYUNoYW5nZWQoc2RrLCBjYikge1xyXG4gIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgLy/orr7nva7nm7jmnLrlj5jljJbnmoTnm5HlkKzkuovku7ZcclxuICBsZXQgcmVtb3ZlQ2hhbmdlZCA9IHNkay52aWV3ZXIuY2FtZXJhLmNoYW5nZWQuYWRkRXZlbnRMaXN0ZW5lcihwZXJjZW50YWdlID0+IHtcclxuICAgIGNiKHtcclxuICAgICAgcG9zaXRpb246IHRvb2xzLmNhcnRlc2lhbjNUb3dnczg0KHNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uLCBzZGsudmlld2VyKSxcclxuICAgICAgb3JpZW50YXRpb246IHtcclxuICAgICAgICBoZWFkaW5nOiBzZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICAgIHBpdGNoOiBzZGsudmlld2VyLmNhbWVyYS5waXRjaCxcclxuICAgICAgICByb2xsOiBzZGsudmlld2VyLmNhbWVyYS5yb2xsXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfSlcclxuICByZXR1cm4gcmVtb3ZlQ2hhbmdlZFxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRNYXhpbXVtUmVxdWVzdHNQZXJTZXJ2ZXIodikge1xyXG4gIGlmICh0eXBlb2YgdiA9PSAnbnVtYmVyJylcclxuICAgIENlc2l1bS5SZXF1ZXN0U2NoZWR1bGVyLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlciA9IHZcclxufVxyXG5cclxuLyog6ZSu55uY5LqL5Lu2ICovXHJcbmZ1bmN0aW9uIHNldEtleWJvYXJkRXZlbnRBY3RpdmUoc2RrLCBzdGF0dXMpIHtcclxuICBpZiAoIXNkaykge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGlmIChzdGF0dXMpIHtcclxuICAgIHNkay52aWV3ZXIuX2Rpc2FibGVLZXlib2FyZEV2ZW50ID0gZmFsc2VcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBzZGsudmlld2VyLl9kaXNhYmxlS2V5Ym9hcmRFdmVudCA9IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENlc2l1bUluZGV4ZWREQk1heFNpemUoKSB7XHJcbiAgY29uc3QgYmFzZVVuaXQgPSAxMDI0ICogMTAyNCAqIDEwMjRcclxuICBsZXQgc2l6ZSA9IE51bWJlcihOdW1iZXIobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0luZGV4ZWREQk1heFNpemUnKSkudG9GaXhlZCgwKSlcclxuICBpZiAoaXNOYU4oc2l6ZSkgfHwgc2l6ZSA8IGJhc2VVbml0KSB7XHJcbiAgICBzaXplID0gYmFzZVVuaXRcclxuICB9XHJcbiAgcmV0dXJuIHNpemVcclxufVxyXG5mdW5jdGlvbiBzZXRDZXNpdW1JbmRleGVkREJNYXhTaXplKHYpIHtcclxuICBjb25zdCBiYXNlVW5pdCA9IDEwMjQgKiAxMDI0ICogMTAyNFxyXG4gIGxldCBtYXhTaXplID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDApKVxyXG4gIGlmIChpc05hTihtYXhTaXplKSB8fCBtYXhTaXplIDwgYmFzZVVuaXQpIHtcclxuICAgIG1heFNpemUgPSBiYXNlVW5pdFxyXG4gIH1cclxuICBDZXNpdW0uTWFuYWdlSW5kZXhlZERCICYmIENlc2l1bS5NYW5hZ2VJbmRleGVkREIuU2V0SW5kZXhlZERCTWF4U2l6ZShtYXhTaXplKVxyXG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdJbmRleGVkREJNYXhTaXplJywgbWF4U2l6ZSlcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2VzaXVtTWFuYWdlSW5kZXhleERCU3RhdGUoKSB7XHJcbiAgbGV0IHN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ01hbmFnZUluZGV4ZXhEQlN0YXRlJylcclxuICBpZiAoc3RhdGUgPT09ICdmYWxzZScpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gQm9vbGVhbihzdGF0ZSlcclxufVxyXG5mdW5jdGlvbiBzZXRDZXNpdW1NYW5hZ2VJbmRleGV4REJTdGF0ZSh2KSB7XHJcbiAgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgQ2VzaXVtLk1hbmFnZUluZGV4ZWREQiAmJiBDZXNpdW0uTWFuYWdlSW5kZXhlZERCLlNldE1hbmFnZUluZGV4ZXhEQlN0YXRlKHYpXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTWFuYWdlSW5kZXhleERCU3RhdGUnLCB2KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2VzaXVtSW5kZXhlZERCQ3VycmVudFNpemUoKSB7XHJcbiAgcmV0dXJuIENlc2l1bS5NYW5hZ2VJbmRleGVkREIgJiYgQ2VzaXVtLk1hbmFnZUluZGV4ZWREQi5HZXRJbmRleGVkREJDdXJyZW50U2l6ZSgpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEFjdGl2ZVZpZXdlcih2KSB7XHJcbiAgc2V0TXVsdGlWaWV3cG9ydEFjdGl2ZVZpZXdlcih2KVxyXG4gIHNldFNwbGl0QWN0aXZlVmlld2VyKHYpXHJcbn1cclxuXHJcbi8vIOiuvue9ruWcsOeQg+mAj+aYjuW6plxyXG5mdW5jdGlvbiBlbmFibGVQZXJzcGVjdGl2ZShzZGssIGFscGhhID0gMSkge1xyXG4gIGlmICghYWxwaGEgJiYgYWxwaGEgIT0gMCkge1xyXG4gICAgYWxwaGEgPSAxXHJcbiAgfVxyXG4gIHNkay52aWV3ZXIuc2NlbmUuZ2xvYmUudHJhbnNsdWNlbmN5LmZyb250RmFjZUFscGhhID0gYWxwaGFcclxufVxyXG5cclxuZXhwb3J0IHsgZ2V0Q3VycmVudFZpZXcsIHNldERlZmF1bHRWaWV3LCBmbHlUbywgQ2FtZXJhQ29udHJvbGxlciwgQ2VzaXVtQ29udGFpbmVyLCBzZXRCaWxsYm9hcmREZWZhdWx0VXJsLCBnZXRCaWxsYm9hcmREZWZhdWx0VXJsLCBzZXRHcm91bmRDb3ZlciwgZ2V0R3JvdW5kQ292ZXIsIGdldEJpbVBpY2tTdGF0dXMsIHNldEJpbVBpY2tTdGF0dXMsIHJvdGF0ZUFyb3VuZCwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdywgRmx3U3RhdHVzU3dpdGNoLCBKd3dTdGF0dXNTd2l0Y2gsIGdldEZsd1N0YXR1cywgZ2V0Snd3U3RhdHVzLCBnZXRDb29yZGluYXRlU3lzdGVtLCBzZXRDb29yZGluYXRlU3lzdGVtLCBjYW1lcmFDaGFuZ2VkLCBzZXRNYXhpbXVtUmVxdWVzdHNQZXJTZXJ2ZXIsIHNldEtleWJvYXJkRXZlbnRBY3RpdmUsIGdldFRoZW1lLCBzZXRUaGVtZSwgZ2V0Q2VzaXVtSW5kZXhlZERCTWF4U2l6ZSwgc2V0Q2VzaXVtSW5kZXhlZERCTWF4U2l6ZSwgZ2V0Q2VzaXVtTWFuYWdlSW5kZXhleERCU3RhdGUsIHNldENlc2l1bU1hbmFnZUluZGV4ZXhEQlN0YXRlLCBnZXRDZXNpdW1JbmRleGVkREJDdXJyZW50U2l6ZSwgc2V0QWN0aXZlVmlld2VyLCBlbmFibGVQZXJzcGVjdGl2ZSB9XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQTJCQTtBQUFBO0FBQUE7QUEzQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFrREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdEJBO0FBQUE7QUFBQTtBQWpEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBd0JBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2SEE7QUFBQTtBQUFBO0FBd0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Global/global.js\n"); /***/ }), /***/ "./src/Global/mouseRightMenu/index.js": /*!********************************************!*\ !*** ./src/Global/mouseRightMenu/index.js ***! \********************************************/ /*! exports provided: MouseRightMenu, getMouseRightMenuStatus */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MouseRightMenu\", function() { return MouseRightMenu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMouseRightMenuStatus\", function() { return getMouseRightMenuStatus; });\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _SplitScreen__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* 右键点击菜单 */\n\n\n\n\nvar eventListener = {};\nfunction MouseRightMenu(sdk, status, callBack) {\n if (!sdk || !sdk.div_id) {\n return;\n }\n var sdkD = Object(_SplitScreen__WEBPACK_IMPORTED_MODULE_3__[\"getSdk\"])().sdkD;\n var _element = document.getElementById(sdk.div_id).getElementsByClassName('cesium-viewer')[0];\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n if (!eventListener[sdk.div_id]) {\n eventListener[sdk.div_id] = {};\n }\n if (eventListener[sdk.div_id].mousedown) {\n document.removeEventListener('mousedown', eventListener[sdk.div_id].mousedown);\n }\n if (eventListener[sdk.div_id].click) {\n document.removeEventListener('click', eventListener[sdk.div_id].click);\n }\n if (!eventListener[sdk.div_id].callBack) {\n eventListener[sdk.div_id].callBack = callBack;\n }\n if (sdk !== sdkD) {\n eventListener[sdk.div_id].mouseRightMenuEvent && eventListener[sdk.div_id].mouseRightMenuEvent.destroy();\n }\n var menuElm = document.getElementById('custom-menu');\n if (menuElm) {\n _element.removeChild(menuElm);\n }\n eventListener[sdk.div_id].status = status;\n if (status) {\n eventListener[sdk.div_id].mousedown = function (e) {\n if (e.target.parentNode && e.target.parentNode.id == 'custom-menu' || e.target.parentNode && e.target.parentNode.parentNode && e.target.parentNode.parentNode.id == 'custom-menu') {\n return;\n }\n var menuElm = document.getElementById('custom-menu');\n if (menuElm) {\n _element.removeChild(menuElm);\n }\n };\n document.addEventListener('mousedown', eventListener[sdk.div_id].mousedown);\n eventListener[sdk.div_id].click = function (e) {\n if (e.target.parentNode && e.target.parentNode.id == 'custom-menu' || e.target.parentNode && e.target.parentNode.parentNode && e.target.parentNode.parentNode.id == 'custom-menu') {\n return;\n }\n var menuElm = document.getElementById('custom-menu');\n if (menuElm) {\n _element.removeChild(menuElm);\n }\n };\n document.addEventListener('click', eventListener[sdk.div_id].click);\n eventListener[sdk.div_id].mouseRightMenuEvent = new _Event_index__WEBPACK_IMPORTED_MODULE_0__[\"default\"](sdk);\n eventListener[sdk.div_id].mouseRightMenuEvent.mouse_right(function (movement, cartesian) {\n if (YJ.Measure.GetMeasureStatus() || sdk.viewer.trackedEntity) {\n return;\n }\n var entity = sdk.viewer.entities.getById('svg-control-points_0');\n if (entity && entity.show) {\n return;\n }\n var menuElm = document.getElementById('custom-menu');\n if (menuElm) {\n _element.removeChild(menuElm);\n }\n var entityId = getEntityId(movement);\n var targetId;\n if (Object.prototype.toString.call(entityId) === '[object Object]') {\n targetId = entityId.id;\n entityId = entityId.parentId;\n }\n var addedMenu = '';\n var that = sdk.entityMap.get(entityId);\n if (!that && entityId) {\n var array = entityId.split('-');\n array.splice(array.length - 1, 1);\n entityId = array.join('-');\n that = sdk.entityMap.get(entityId);\n }\n if (that && that.picking) {\n addedMenu = \"\\n \\n \\n \";\n }\n var position = tools.cartesian3Towgs84(cartesian, sdk.viewer);\n menuElm = document.createElement('div');\n menuElm.id = 'custom-menu';\n menuElm.style.position = 'absolute';\n menuElm.style.width = '110px';\n menuElm.style.backgroundColor = '#00000085';\n menuElm.style.color = '#ffffff';\n menuElm.style.padding = '6px 0';\n menuElm.style.boxShadow = '4px 4px 4px 0px rgba(0, 0, 0, 0.8)';\n menuElm.innerHTML = \"\\n \\n \\n \".concat(addedMenu, \"\\n \");\n _element.appendChild(menuElm);\n var left = movement.position.x;\n var top = movement.position.y;\n if (movement.position.x + menuElm.offsetWidth > _element.offsetWidth) {\n left = movement.position.x - menuElm.offsetWidth;\n }\n if (movement.position.y + menuElm.offsetHeight > _element.offsetHeight) {\n top = movement.position.y - menuElm.offsetHeight;\n }\n menuElm.style.left = left + 'px';\n menuElm.style.top = top + 'px';\n menuElm.addEventListener('contextmenu', function (event) {\n event.preventDefault();\n });\n var liElms = menuElm.getElementsByTagName('li');\n var object = {};\n var _loop = function _loop(i) {\n liElms[i].addEventListener('mouseover', function () {\n liElms[i].style.backgroundColor = '#5e5e5e';\n });\n liElms[i].addEventListener('mouseout', function () {\n liElms[i].style.backgroundColor = 'unset';\n });\n liElms[i].addEventListener('click', function () {\n var key = '';\n switch (liElms[i].innerHTML) {\n case '绕鼠标点旋转':\n object.position = position;\n key = 'rotateAround';\n // this.rotateAround(position)\n break;\n case '属性':\n if (targetId) {\n object.id = targetId;\n object.parentId = that.options.id;\n } else {\n object.id = that.options.id;\n }\n key = 'attribute';\n // that.edit(true)\n // this.attribute(entityId)\n break;\n case '文本框':\n object.position = position;\n key = 'textBox';\n break;\n }\n eventListener[sdk.div_id].callBack(key, object);\n _element.removeChild(menuElm);\n });\n };\n for (var i = 0; i < liElms.length; i++) {\n _loop(i);\n }\n });\n }\n function getEntityId(movement) {\n var pick = sdk.viewer.scene.pick(movement.position);\n if (pick) {\n if (pick.id) {\n if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {\n return {\n parentId: pick.id.parentId,\n id: pick.id.id\n };\n } else if (pick.id.id) {\n return pick.id.id;\n } else if (typeof pick.id == 'string') {\n return pick.id;\n }\n } else {\n if (pick.primitive && pick.primitive.id) {\n return pick.primitive.id;\n }\n }\n }\n }\n}\nfunction getMouseRightMenuStatus(sdk) {\n if (!sdk || !sdk.div_id || !eventListener[sdk.div_id]) {\n return;\n } else {\n return eventListener[sdk.div_id].status;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvR2xvYmFsL21vdXNlUmlnaHRNZW51L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0dsb2JhbC9tb3VzZVJpZ2h0TWVudS9pbmRleC5qcz9hODFkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIOWPs+mUrueCueWHu+iPnOWNlSAqL1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IFRvb2xzIGZyb20gJy4uLy4uL1Rvb2xzJ1xyXG5pbXBvcnQgeyByb3RhdGVBcm91bmQgfSBmcm9tICcuLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgeyBnZXRTZGsgfSBmcm9tICcuLi9TcGxpdFNjcmVlbidcclxuXHJcbmxldCBldmVudExpc3RlbmVyID0ge31cclxuXHJcbmZ1bmN0aW9uIE1vdXNlUmlnaHRNZW51KHNkaywgc3RhdHVzLCBjYWxsQmFjaykge1xyXG4gIGlmICghc2RrIHx8ICFzZGsuZGl2X2lkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgbGV0IHNka0QgPSBnZXRTZGsoKS5zZGtEXHJcbiAgbGV0IF9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2RrLmRpdl9pZCkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXZpZXdlcicpWzBdXHJcbiAgbGV0IHRvb2xzID0gbmV3IFRvb2xzKClcclxuICBpZiAoIWV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0pIHtcclxuICAgIGV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0gPSB7fVxyXG4gIH1cclxuICBpZiAoZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5tb3VzZWRvd24pIHtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICdtb3VzZWRvd24nLFxyXG4gICAgICBldmVudExpc3RlbmVyW3Nkay5kaXZfaWRdLm1vdXNlZG93blxyXG4gICAgKVxyXG4gIH1cclxuICBpZiAoZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5jbGljaykge1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudExpc3RlbmVyW3Nkay5kaXZfaWRdLmNsaWNrKVxyXG4gIH1cclxuICBpZiAoIWV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0uY2FsbEJhY2spIHtcclxuICAgIGV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0uY2FsbEJhY2sgPSBjYWxsQmFja1xyXG4gIH1cclxuXHJcbiAgaWYgKHNkayAhPT0gc2RrRCkge1xyXG4gICAgZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5tb3VzZVJpZ2h0TWVudUV2ZW50ICYmXHJcbiAgICAgIGV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0ubW91c2VSaWdodE1lbnVFdmVudC5kZXN0cm95KClcclxuICB9XHJcblxyXG4gIGxldCBtZW51RWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbS1tZW51JylcclxuICBpZiAobWVudUVsbSkge1xyXG4gICAgX2VsZW1lbnQucmVtb3ZlQ2hpbGQobWVudUVsbSlcclxuICB9XHJcbiAgZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5zdGF0dXMgPSBzdGF0dXNcclxuICBpZiAoc3RhdHVzKSB7XHJcbiAgICBldmVudExpc3RlbmVyW3Nkay5kaXZfaWRdLm1vdXNlZG93biA9IGUgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGUudGFyZ2V0LnBhcmVudE5vZGUgJiYgZS50YXJnZXQucGFyZW50Tm9kZS5pZCA9PSAnY3VzdG9tLW1lbnUnKSB8fFxyXG4gICAgICAgIChlLnRhcmdldC5wYXJlbnROb2RlICYmXHJcbiAgICAgICAgICBlLnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcclxuICAgICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCA9PSAnY3VzdG9tLW1lbnUnKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgbWVudUVsbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b20tbWVudScpXHJcbiAgICAgIGlmIChtZW51RWxtKSB7XHJcbiAgICAgICAgX2VsZW1lbnQucmVtb3ZlQ2hpbGQobWVudUVsbSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5tb3VzZWRvd24pXHJcbiAgICBldmVudExpc3RlbmVyW3Nkay5kaXZfaWRdLmNsaWNrID0gZSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZS50YXJnZXQucGFyZW50Tm9kZSAmJiBlLnRhcmdldC5wYXJlbnROb2RlLmlkID09ICdjdXN0b20tbWVudScpIHx8XHJcbiAgICAgICAgKGUudGFyZ2V0LnBhcmVudE5vZGUgJiZcclxuICAgICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxyXG4gICAgICAgICAgZS50YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkID09ICdjdXN0b20tbWVudScpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBtZW51RWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbS1tZW51JylcclxuICAgICAgaWYgKG1lbnVFbG0pIHtcclxuICAgICAgICBfZWxlbWVudC5yZW1vdmVDaGlsZChtZW51RWxtKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0uY2xpY2spXHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5tb3VzZVJpZ2h0TWVudUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoc2RrKVxyXG4gICAgZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5tb3VzZVJpZ2h0TWVudUV2ZW50Lm1vdXNlX3JpZ2h0KFxyXG4gICAgICAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCBzZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZW50aXR5ID0gc2RrLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKCdzdmctY29udHJvbC1wb2ludHNfMCcpXHJcbiAgICAgICAgaWYgKGVudGl0eSAmJiBlbnRpdHkuc2hvdykge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBtZW51RWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbS1tZW51JylcclxuICAgICAgICBpZiAobWVudUVsbSkge1xyXG4gICAgICAgICAgX2VsZW1lbnQucmVtb3ZlQ2hpbGQobWVudUVsbSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGVudGl0eUlkID0gZ2V0RW50aXR5SWQobW92ZW1lbnQpXHJcbiAgICAgICAgbGV0IHRhcmdldElkXHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbnRpdHlJZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XHJcbiAgICAgICAgICB0YXJnZXRJZCA9IGVudGl0eUlkLmlkXHJcbiAgICAgICAgICBlbnRpdHlJZCA9IGVudGl0eUlkLnBhcmVudElkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhZGRlZE1lbnUgPSAnJ1xyXG4gICAgICAgIGxldCB0aGF0ID0gc2RrLmVudGl0eU1hcC5nZXQoZW50aXR5SWQpXHJcbiAgICAgICAgaWYgKCF0aGF0ICYmIGVudGl0eUlkKSB7XHJcbiAgICAgICAgICBsZXQgYXJyYXkgPSBlbnRpdHlJZC5zcGxpdCgnLScpXHJcbiAgICAgICAgICBhcnJheS5zcGxpY2UoYXJyYXkubGVuZ3RoIC0gMSwgMSlcclxuICAgICAgICAgIGVudGl0eUlkID0gYXJyYXkuam9pbignLScpXHJcbiAgICAgICAgICB0aGF0ID0gc2RrLmVudGl0eU1hcC5nZXQoZW50aXR5SWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhhdCAmJiB0aGF0LnBpY2tpbmcpIHtcclxuICAgICAgICAgIGFkZGVkTWVudSA9IGBcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO2JvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO21hcmdpbjogNXB4O1wiPjwvc3Bhbj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJhZGRlZFwiIHN0eWxlPVwibGlzdC1zdHlsZTogbm9uZTtwYWRkaW5nOiAwO21hcmdpbjogMDtmb250LXNpemU6IDEycHg7XCI+XHJcbiAgICAgICAgICA8bGkgc3R5bGU9XCJwYWRkaW5nOiAzcHggMTBweDtjdXJzb3I6IHBvaW50ZXI7XCI+5bGe5oCnPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIGBcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdG9vbHMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCBzZGsudmlld2VyKVxyXG4gICAgICAgIG1lbnVFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIG1lbnVFbG0uaWQgPSAnY3VzdG9tLW1lbnUnXHJcbiAgICAgICAgbWVudUVsbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcclxuICAgICAgICBtZW51RWxtLnN0eWxlLndpZHRoID0gJzExMHB4J1xyXG4gICAgICAgIG1lbnVFbG0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyMwMDAwMDA4NSdcclxuICAgICAgICBtZW51RWxtLnN0eWxlLmNvbG9yID0gJyNmZmZmZmYnXHJcbiAgICAgICAgbWVudUVsbS5zdHlsZS5wYWRkaW5nID0gJzZweCAwJ1xyXG4gICAgICAgIG1lbnVFbG0uc3R5bGUuYm94U2hhZG93ID0gJzRweCA0cHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuOCknXHJcbiAgICAgICAgbWVudUVsbS5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgPHVsIGNsYXNzPVwiYmFzZVwiIHN0eWxlPVwibGlzdC1zdHlsZTogbm9uZTtwYWRkaW5nOiAwO21hcmdpbjogMDtmb250LXNpemU6IDEycHg7XCI+XHJcbiAgICAgICAgICA8bGkgc3R5bGU9XCJwYWRkaW5nOiAzcHggMTBweDtjdXJzb3I6IHBvaW50ZXI7XCI+57uV6byg5qCH54K55peL6L2sPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImJhc2VcIiBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmU7cGFkZGluZzogMDttYXJnaW46IDA7Zm9udC1zaXplOiAxMnB4O1wiPlxyXG4gICAgICAgICAgPGxpIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHg7Y3Vyc29yOiBwb2ludGVyO1wiPuaWh+acrOahhjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICAke2FkZGVkTWVudX1cclxuICAgICAgYFxyXG4gICAgICAgIF9lbGVtZW50LmFwcGVuZENoaWxkKG1lbnVFbG0pXHJcbiAgICAgICAgbGV0IGxlZnQgPSBtb3ZlbWVudC5wb3NpdGlvbi54XHJcbiAgICAgICAgbGV0IHRvcCA9IG1vdmVtZW50LnBvc2l0aW9uLnlcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbi54ICsgbWVudUVsbS5vZmZzZXRXaWR0aCA+XHJcbiAgICAgICAgICBfZWxlbWVudC5vZmZzZXRXaWR0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGVmdCA9IG1vdmVtZW50LnBvc2l0aW9uLnggLSBtZW51RWxtLm9mZnNldFdpZHRoXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnkgKyBtZW51RWxtLm9mZnNldEhlaWdodCA+XHJcbiAgICAgICAgICBfZWxlbWVudC5vZmZzZXRIZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvcCA9IG1vdmVtZW50LnBvc2l0aW9uLnkgLSBtZW51RWxtLm9mZnNldEhlaWdodFxyXG4gICAgICAgIH1cclxuICAgICAgICBtZW51RWxtLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4J1xyXG4gICAgICAgIG1lbnVFbG0uc3R5bGUudG9wID0gdG9wICsgJ3B4J1xyXG5cclxuICAgICAgICBtZW51RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgbGlFbG1zID0gbWVudUVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVxyXG4gICAgICAgIGxldCBvYmplY3QgPSB7fVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlFbG1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsaUVsbXNbaV0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsaUVsbXNbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM1ZTVlNWUnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGlFbG1zW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsaUVsbXNbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3Vuc2V0J1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxpRWxtc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGtleSA9ICcnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobGlFbG1zW2ldLmlubmVySFRNTCkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+e7lem8oOagh+eCueaXi+i9rCc6XHJcbiAgICAgICAgICAgICAgICBvYmplY3QucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICAgICAgICAgICAga2V5ID0gJ3JvdGF0ZUFyb3VuZCdcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMucm90YXRlQXJvdW5kKHBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICflsZ7mgKcnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldElkKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9iamVjdC5pZCA9IHRhcmdldElkXHJcbiAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJlbnRJZCA9IHRoYXQub3B0aW9ucy5pZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9iamVjdC5pZCA9IHRoYXQub3B0aW9ucy5pZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAga2V5ID0gJ2F0dHJpYnV0ZSdcclxuICAgICAgICAgICAgICAgIC8vIHRoYXQuZWRpdCh0cnVlKVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5hdHRyaWJ1dGUoZW50aXR5SWQpXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+aWh+acrOahhic6XHJcbiAgICAgICAgICAgICAgICBvYmplY3QucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICAgICAgICAgICAga2V5ID0gJ3RleHRCb3gnXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50TGlzdGVuZXJbc2RrLmRpdl9pZF0uY2FsbEJhY2soa2V5LCBvYmplY3QpXHJcbiAgICAgICAgICAgIF9lbGVtZW50LnJlbW92ZUNoaWxkKG1lbnVFbG0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RW50aXR5SWQobW92ZW1lbnQpIHtcclxuICAgIGxldCBwaWNrID0gc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgaWYgKHBpY2spIHtcclxuICAgICAgaWYgKHBpY2suaWQpIHtcclxuICAgICAgICBpZiAocGljay5pZC50eXBlICYmIHBpY2suaWQudHlwZSA9PT0gJ3ZlY3RvcicgJiYgcGljay5pZC5wYXJlbnRJZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcGFyZW50SWQ6IHBpY2suaWQucGFyZW50SWQsXHJcbiAgICAgICAgICAgIGlkOiBwaWNrLmlkLmlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBpY2suaWQuaWQpIHtcclxuICAgICAgICAgIHJldHVybiBwaWNrLmlkLmlkXHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGljay5pZCA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgcmV0dXJuIHBpY2suaWRcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHBpY2sucHJpbWl0aXZlICYmIHBpY2sucHJpbWl0aXZlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGljay5wcmltaXRpdmUuaWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1vdXNlUmlnaHRNZW51U3RhdHVzKHNkaykge1xyXG4gIGlmICghc2RrIHx8ICFzZGsuZGl2X2lkIHx8ICFldmVudExpc3RlbmVyW3Nkay5kaXZfaWRdKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICByZXR1cm4gZXZlbnRMaXN0ZW5lcltzZGsuZGl2X2lkXS5zdGF0dXNcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IE1vdXNlUmlnaHRNZW51LCBnZXRNb3VzZVJpZ2h0TWVudVN0YXR1cyB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5DQTtBQUFBO0FBQUE7QUFvQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Global/mouseRightMenu/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureAngle/index.js": /*!*******************************************!*\ !*** ./src/Measure/MeasureAngle/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-12-29 10:11\r\n * @description:index\r\n * @update: 2023-12-29 10:11\r\n */\n\nvar MeasureAngle = /*#__PURE__*/function (_Measure) {\n function MeasureAngle(sdk) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MeasureAngle);\n _this = _callSuper(this, MeasureAngle, [sdk, {\n text: \"左键开始,右键取消\"\n }]);\n _this.cachePositions = [];\n _this.positions = [];\n _this.arcPositions = [];\n _this.line_id = \"\";\n _this.label_id = \"\";\n _this.arc_id = \"\";\n _this.bearing = 0;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(MeasureAngle, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MeasureAngle, [{\n key: \"createPolyline\",\n value: function createPolyline() {\n var that = this;\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n clampToGround: true,\n width: 5,\n material: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureAngle, \"end\", this, 3)([]);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this2 = this;\n _superPropGet(MeasureAngle, \"destroy\", this, 3)([]);\n var arr = [this.line_id, this.label_id, this.arc_id];\n arr.forEach(function (id) {\n if (id) _this2.remove_entity(id);\n });\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n this.end();\n this.destroy();\n }\n }, {\n key: \"caculateAngle\",\n value: function caculateAngle() {\n var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var p1 = this.cartesian3Towgs84(points[0], this.viewer);\n var p2 = this.cartesian3Towgs84(points[1], this.viewer);\n var p3 = this.cartesian3Towgs84(points[2], this.viewer);\n var point1 = turf.point([p1.lng, p1.lat]);\n var point2 = turf.point([p2.lng, p2.lat]);\n var point3 = turf.point([p3.lng, p3.lat]);\n var options = {\n units: 'kilometers'\n };\n var distance1 = turf.rhumbDistance(point1, point2, options);\n var distance2 = turf.rhumbDistance(point3, point2, options);\n var distance = distance1;\n if (distance1 > distance2) {\n distance = distance2;\n }\n var bearing1 = turf.rhumbBearing(point1, point2);\n var bearing2 = turf.rhumbBearing(point3, point2);\n var bearing = Math.abs((bearing1 - bearing2 + 360) % 360);\n if (bearing > 180) {\n this.bearing = 360 - bearing;\n } else {\n this.bearing = bearing;\n }\n this.bearing = this.bearing.toFixed(2);\n var b1 = bearing1 - 180;\n var b2 = bearing2 - 180;\n var arc = turf.lineArc(point2, distance / 3, b2, b1);\n if (bearing > 180) {\n arc = turf.lineArc(point2, distance / 3, b1, b2);\n }\n var arcPos = [];\n for (var i = 0; i < arc.geometry.coordinates.length; i++) {\n arcPos.push(Cesium.Cartesian3.fromDegrees(arc.geometry.coordinates[i][0], arc.geometry.coordinates[i][1]));\n }\n this.arcPositions = arcPos;\n\n // if (bearing1 > 0 && bearing2 > 0) {\n // this.bearing = Math.abs(bearing1 - bearing2).toFixed(1)\n // } else if (bearing1 < 0 && bearing2 < 0) {\n // this.bearing = Math.abs(bearing1 - bearing2).toFixed(1)\n // } else if (bearing1 > 0 && bearing2 < 0) {\n // this.bearing = Math.abs(360 - Math.abs(bearing2) - bearing1).toFixed(1)\n // } else {\n // this.bearing = Math.abs(360 - Math.abs(bearing1) - bearing2).toFixed(1)\n // }\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this3 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureAngle, \"start\", this, 3)([]);\n var leftEvent = function leftEvent(movement, car) {\n if (_this3.ids.length === 0) {\n //需要创建一个线\n _this3.line_id = _this3.createPolyline();\n }\n _this3.ids.push(_this3.create_point(car));\n _this3.tip.setPosition(car, movement.position.x, movement.position.y);\n _this3.cachePositions.push(car);\n if (_this3.cachePositions.length) {\n _this3.positions = _this3.cachePositions.concat(car);\n }\n if (_this3.ids.length === 2) {\n _this3.label_id = Cesium.createGuid();\n _this3.arc_id = Cesium.createGuid();\n var p = _this3.cartesian3Towgs84(car, _this3.viewer);\n _this3.sampleHeightMostDetailed([p]).then(function (res) {\n var arc = _this3.viewer.entities.add({\n id: _this3.arc_id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return _this3.arcPositions;\n }, false),\n clampToGround: true,\n width: 5,\n material: new Cesium.Color.fromCssColorString(_this3.options.color || _this3.defaultColor),\n zIndex: 99999999\n }\n });\n var label = _this3.viewer.entities.add({\n id: _this3.label_id,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, (res[0].height || 0) + 0.1),\n label: {\n text: new Cesium.CallbackProperty(function () {\n return \"夹角:\" + _this3.bearing + \"°\";\n }, false),\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n }\n });\n });\n }\n if (_this3.ids.length === 3) {\n _this3.caculateAngle([_this3.positions[0], _this3.positions[1], _this3.positions[2]]);\n //需要停止绘制\n _this3.end();\n }\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this3.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n if (_this3.cachePositions.length) {\n _this3.positions = _this3.cachePositions.concat(car);\n }\n if (_this3.positions.length > 2) {\n //需要开始计算夹角\n _this3.caculateAngle([_this3.positions[0], _this3.positions[1], _this3.positions[2]]);\n }\n });\n this.event.mouse_right(function (movement, car) {\n _this3.cancel();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.cancel();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureAngle);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlQW5nbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTWVhc3VyZS9NZWFzdXJlQW5nbGUvaW5kZXguanM/NGFlZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMTItMjkgMTA6MTFcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMy0xMi0yOSAxMDoxMVxyXG4gKi9cclxuaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL2luZGV4XCI7XHJcblxyXG5jbGFzcyBNZWFzdXJlQW5nbGUgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICBjb25zdHJ1Y3RvcihzZGspIHtcclxuICAgIHN1cGVyKHNkaywgeyB0ZXh0OiBcIuW3pumUruW8gOWni++8jOWPs+mUruWPlua2iFwiIH0pO1xyXG4gICAgdGhpcy5jYWNoZVBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmFyY1Bvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmxpbmVfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmxhYmVsX2lkID0gXCJcIlxyXG4gICAgdGhpcy5hcmNfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmJlYXJpbmcgPSAwXHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb2x5bGluZSgpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQsXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25zXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IDUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvciB8fCB0aGF0LmRlZmF1bHRDb2xvciksXHJcbiAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgc3VwZXIuZGVzdHJveSgpO1xyXG4gICAgbGV0IGFyciA9IFt0aGlzLmxpbmVfaWQsIHRoaXMubGFiZWxfaWQsIHRoaXMuYXJjX2lkXVxyXG4gICAgYXJyLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICBpZiAoaWQpXHJcbiAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KGlkKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuZW5kKClcclxuICAgIHRoaXMuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuICBjYWN1bGF0ZUFuZ2xlKHBvaW50cyA9IFtdKSB7XHJcbiAgICBsZXQgcDEgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvaW50c1swXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgcDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvaW50c1sxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgcDMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvaW50c1syXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgcG9pbnQxID0gdHVyZi5wb2ludChbcDEubG5nLCBwMS5sYXRdKTtcclxuICAgIGxldCBwb2ludDIgPSB0dXJmLnBvaW50KFtwMi5sbmcsIHAyLmxhdF0pO1xyXG4gICAgbGV0IHBvaW50MyA9IHR1cmYucG9pbnQoW3AzLmxuZywgcDMubGF0XSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9IHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9O1xyXG4gICAgbGV0IGRpc3RhbmNlMSA9IHR1cmYucmh1bWJEaXN0YW5jZShwb2ludDEsIHBvaW50Miwgb3B0aW9ucyk7XHJcbiAgICBsZXQgZGlzdGFuY2UyID0gdHVyZi5yaHVtYkRpc3RhbmNlKHBvaW50MywgcG9pbnQyLCBvcHRpb25zKTtcclxuICAgIGxldCBkaXN0YW5jZSA9IGRpc3RhbmNlMVxyXG4gICAgaWYgKGRpc3RhbmNlMSA+IGRpc3RhbmNlMikge1xyXG4gICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlMlxyXG4gICAgfVxyXG5cclxuICAgIGxldCBiZWFyaW5nMSA9IHR1cmYucmh1bWJCZWFyaW5nKHBvaW50MSwgcG9pbnQyKVxyXG4gICAgbGV0IGJlYXJpbmcyID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQzLCBwb2ludDIpXHJcblxyXG4gICAgbGV0IGJlYXJpbmcgPSBNYXRoLmFicygoKGJlYXJpbmcxIC0gYmVhcmluZzIpICsgMzYwKSAlIDM2MClcclxuICAgIGlmIChiZWFyaW5nID4gMTgwKSB7XHJcbiAgICAgIHRoaXMuYmVhcmluZyA9IDM2MCAtIGJlYXJpbmdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmVhcmluZyA9IGJlYXJpbmdcclxuICAgIH1cclxuICAgIHRoaXMuYmVhcmluZyA9IHRoaXMuYmVhcmluZy50b0ZpeGVkKDIpXHJcblxyXG4gICAgbGV0IGIxID0gKGJlYXJpbmcxIC0gMTgwKVxyXG4gICAgbGV0IGIyID0gKGJlYXJpbmcyIC0gMTgwKVxyXG4gICAgbGV0IGFyYyA9IHR1cmYubGluZUFyYyhwb2ludDIsIChkaXN0YW5jZSAvIDMpLCBiMiwgYjEpO1xyXG4gICAgaWYgKGJlYXJpbmcgPiAxODApIHtcclxuICAgICAgYXJjID0gdHVyZi5saW5lQXJjKHBvaW50MiwgKGRpc3RhbmNlIC8gMyksIGIxLCBiMik7XHJcbiAgICB9XHJcbiAgICBsZXQgYXJjUG9zID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJjLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGFyY1Bvcy5wdXNoKENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGFyYy5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVswXSwgYXJjLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldWzFdKSlcclxuICAgIH1cclxuICAgIHRoaXMuYXJjUG9zaXRpb25zID0gYXJjUG9zXHJcblxyXG4gICAgLy8gaWYgKGJlYXJpbmcxID4gMCAmJiBiZWFyaW5nMiA+IDApIHtcclxuICAgIC8vICAgdGhpcy5iZWFyaW5nID0gTWF0aC5hYnMoYmVhcmluZzEgLSBiZWFyaW5nMikudG9GaXhlZCgxKVxyXG4gICAgLy8gfSBlbHNlIGlmIChiZWFyaW5nMSA8IDAgJiYgYmVhcmluZzIgPCAwKSB7XHJcbiAgICAvLyAgIHRoaXMuYmVhcmluZyA9IE1hdGguYWJzKGJlYXJpbmcxIC0gYmVhcmluZzIpLnRvRml4ZWQoMSlcclxuICAgIC8vIH0gZWxzZSBpZiAoYmVhcmluZzEgPiAwICYmIGJlYXJpbmcyIDwgMCkge1xyXG4gICAgLy8gICB0aGlzLmJlYXJpbmcgPSBNYXRoLmFicygzNjAgLSBNYXRoLmFicyhiZWFyaW5nMikgLSBiZWFyaW5nMSkudG9GaXhlZCgxKVxyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5iZWFyaW5nID0gTWF0aC5hYnMoMzYwIC0gTWF0aC5hYnMoYmVhcmluZzEpIC0gYmVhcmluZzIpLnRvRml4ZWQoMSlcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKTtcclxuXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIC8v6ZyA6KaB5Yib5bu65LiA5Liq57q/XHJcbiAgICAgICAgICB0aGlzLmxpbmVfaWQgPSB0aGlzLmNyZWF0ZVBvbHlsaW5lKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FyKSlcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihjYXIsIG1vdmVtZW50LnBvc2l0aW9uLngsIG1vdmVtZW50LnBvc2l0aW9uLnkpXHJcbiAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsX2lkID0gQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgICAgICAgdGhpcy5hcmNfaWQgPSBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FyLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMuc2FtcGxlSGVpZ2h0TW9zdERldGFpbGVkKFtwXSkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhcmMgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmFyY19pZCxcclxuICAgICAgICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcmNQb3NpdGlvbnNcclxuICAgICAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3IpLFxyXG4gICAgICAgICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgbGV0IGxhYmVsID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBpZDogdGhpcy5sYWJlbF9pZCxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocC5sbmcsIHAubGF0LCAocmVzWzBdLmhlaWdodCB8fCAwKSArIDAuMSksXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIuWkueinku+8mlwiICsgdGhpcy5iZWFyaW5nICsgXCLCsFwiXHJcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICBmb250OiAnMjBweCBNaWNyb3NvZnQgWWFIZWknLFxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZjFlNjA1JyksXHJcbiAgICAgICAgICAgICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICAgICAgICAgIC8v5qCH5rOo55qE6YGu5oyh6Led56a76K6+572u5Li6MTAw5YiZ6KeG6KeS5LiO5qCH5rOo55qE6Led56a75aSn5LqOMTAw57Gz5pe25Lya5pyJ6YGu5oyhXHJcbiAgICAgICAgICAgICAgICAvLyBkaXN0YW5jZURpc3BsYXlDb25kaXRpb246IHRoaXMuZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uLFxyXG4gICAgICAgICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsT3JpZ2luOiBDZXNpdW0uSG9yaXpvbnRhbE9yaWdpbi5DRU5URVIsXHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmNhY3VsYXRlQW5nbGUoW3RoaXMucG9zaXRpb25zWzBdLCB0aGlzLnBvc2l0aW9uc1sxXSwgdGhpcy5wb3NpdGlvbnNbMl1dKVxyXG4gICAgICAgICAgLy/pnIDopoHlgZzmraLnu5jliLZcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgLy/pnIDopoHlvIDlp4vorqHnrpflpLnop5JcclxuICAgICAgICAgIHRoaXMuY2FjdWxhdGVBbmdsZShbdGhpcy5wb3NpdGlvbnNbMF0sIHRoaXMucG9zaXRpb25zWzFdLCB0aGlzLnBvc2l0aW9uc1syXV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVhc3VyZUFuZ2xlXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/MeasureAngle/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureAzimuth/index.js": /*!*********************************************!*\ !*** ./src/Measure/MeasureAzimuth/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\nvar MeasureAzimuth = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 方位角测量\r\n * */\n function MeasureAzimuth(sdk) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureAzimuth);\n _this = _callSuper(this, MeasureAzimuth, [sdk, {\n text: \"左键开始,右键取消\"\n }]);\n _this.cachePositions = [];\n _this.positions = [];\n _this.arcPositions = [];\n _this.line_id = \"\";\n _this.label_id = \"\";\n _this.arc_id = \"\";\n _this.bearing = 0;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureAzimuth, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureAzimuth, [{\n key: \"createPolyline\",\n value: function createPolyline() {\n var that = this;\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n clampToGround: true,\n width: 5,\n material: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureAzimuth, \"end\", this, 3)([]);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this2 = this;\n _superPropGet(MeasureAzimuth, \"destroy\", this, 3)([]);\n var arr = [this.line_id, this.label_id, this.arc_id];\n arr.forEach(function (id) {\n if (id) _this2.remove_entity(id);\n });\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n this.end();\n this.destroy();\n }\n }, {\n key: \"caculateAngle\",\n value: function caculateAngle() {\n var line1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var line2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var c = this.cartesian3Towgs84(line2[1], this.viewer);\n var p2 = this.cartesian3Towgs84(line2[0], this.viewer);\n var center = turf.point([c.lng, c.lat]);\n var point2 = turf.point([p2.lng, p2.lat]);\n var bearing = this.rhumbBearing(p2, c);\n this.bearing = (180 + bearing).toFixed(2);\n var distance = turf.rhumbDistance(center, point2, {\n units: 'kilometers'\n });\n var arc = turf.lineArc(center, distance / 3, 0, this.bearing);\n var arcPos = [];\n for (var i = 0; i < arc.geometry.coordinates.length; i++) {\n arcPos.push(Cesium.Cartesian3.fromDegrees(arc.geometry.coordinates[i][0], arc.geometry.coordinates[i][1]));\n }\n this.arcPositions = arcPos;\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this3 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureAzimuth, \"start\", this, 3)([]);\n var leftEvent = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(movement, car) {\n var _Cesium$Cartesian, p, pc, from, to, options, distance, bearing, destination, _p, res, arc, label;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (_this3.ids.length === 0) {\n //需要创建一个线\n _this3.line_id = _this3.createPolyline();\n }\n _this3.tip.setPosition(car, movement.position.x, movement.position.y);\n if (_this3.cachePositions.length) {\n _this3.positions = _this3.cachePositions.concat(car);\n p = _this3.cartesian3Towgs84(car, _this3.viewer);\n pc = _this3.cartesian3Towgs84(_this3.positions[1], _this3.viewer);\n from = turf.point([pc.lng, pc.lat]);\n to = turf.point([p.lng, p.lat]);\n options = {\n units: 'kilometers'\n };\n distance = turf.rhumbDistance(from, to, options);\n bearing = 0;\n destination = turf.destination(from, distance, bearing, options);\n _this3.positions[0] = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(destination.geometry.coordinates));\n }\n _this3.cachePositions.push(car);\n _this3.cachePositions.push(car);\n if (_this3.positions.length > 2) {\n //需要开始计算夹角\n _this3.caculateAngle([_this3.positions[0], _this3.positions[1]], [_this3.positions[2], _this3.positions[1]]);\n }\n if (!(_this3.ids.length >= 2)) {\n _context.next = 9;\n break;\n }\n //需要停止绘制\n _this3.end();\n return _context.abrupt(\"return\");\n case 9:\n _this3.ids.push(_this3.create_point(car));\n _this3.ids.push(_this3.create_point(car));\n if (!(_this3.ids.length === 2)) {\n _context.next = 20;\n break;\n }\n _this3.label_id = Cesium.createGuid();\n _this3.arc_id = Cesium.createGuid();\n _p = _this3.cartesian3Towgs84(car, _this3.viewer);\n _context.next = 17;\n return _this3.sampleHeightMostDetailed([_p]);\n case 17:\n res = _context.sent;\n arc = _this3.viewer.entities.add({\n id: _this3.arc_id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return _this3.arcPositions;\n }, false),\n clampToGround: true,\n width: 5,\n material: new Cesium.Color.fromCssColorString(_this3.options.color || _this3.defaultColor),\n zIndex: 99999999\n }\n });\n label = _this3.viewer.entities.add({\n id: _this3.label_id,\n position: Cesium.Cartesian3.fromDegrees(_p.lng, _p.lat, (res[0].height || 0) + 0.1),\n label: {\n text: new Cesium.CallbackProperty(function () {\n return \"方位夹角:\" + _this3.bearing + \"°\";\n }, false),\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n }\n }); //需要创建夹角的显示效果\n case 20:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function leftEvent(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this3.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n if (_this3.cachePositions.length) {\n var _Cesium$Cartesian2;\n _this3.positions = _this3.cachePositions.concat(car);\n var p = _this3.cartesian3Towgs84(car, _this3.viewer);\n var pc = _this3.cartesian3Towgs84(_this3.positions[1], _this3.viewer);\n var from = turf.point([pc.lng, pc.lat]);\n var to = turf.point([p.lng, p.lat]);\n var options = {\n units: 'kilometers'\n };\n var distance = turf.rhumbDistance(from, to, options);\n var bearing = 0;\n var destination = turf.destination(from, distance, bearing, options);\n _this3.positions[0] = (_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(destination.geometry.coordinates));\n }\n if (_this3.positions.length > 2) {\n //需要开始计算夹角\n _this3.caculateAngle([_this3.positions[0], _this3.positions[1]], [_this3.positions[2], _this3.positions[1]]);\n }\n });\n this.event.mouse_right(function (movement, car) {\n _this3.cancel();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.cancel();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureAzimuth);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlQXppbXV0aC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NZWFzdXJlL01lYXN1cmVBemltdXRoL2luZGV4LmpzPzM0ZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL2luZGV4XCI7XHJcblxyXG5jbGFzcyBNZWFzdXJlQXppbXV0aCBleHRlbmRzIE1lYXN1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQGRlc2NyaXB0aW9uIOaWueS9jeinkua1i+mHj1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrKSB7XHJcbiAgICBzdXBlcihzZGssIHsgdGV4dDogXCLlt6bplK7lvIDlp4vvvIzlj7PplK7lj5bmtohcIiB9KTtcclxuICAgIHRoaXMuY2FjaGVQb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5hcmNQb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5saW5lX2lkID0gXCJcIlxyXG4gICAgdGhpcy5sYWJlbF9pZCA9IFwiXCJcclxuICAgIHRoaXMuYXJjX2lkID0gXCJcIlxyXG4gICAgdGhpcy5iZWFyaW5nID0gMFxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUG9seWxpbmUoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgIHRoYXQudmlld2VyLmVudGl0aWVzLmFkZChuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgIGlkLFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGF0LnBvc2l0aW9uc1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiA1LFxyXG4gICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IgfHwgdGhhdC5kZWZhdWx0Q29sb3IpLFxyXG4gICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIGVuZCgpIHtcclxuICAgIHN1cGVyLmVuZCgpO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHN1cGVyLmRlc3Ryb3koKTtcclxuICAgIGxldCBhcnIgPSBbdGhpcy5saW5lX2lkLCB0aGlzLmxhYmVsX2lkLCB0aGlzLmFyY19pZF1cclxuICAgIGFyci5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgaWYgKGlkKVxyXG4gICAgICAgIHRoaXMucmVtb3ZlX2VudGl0eShpZClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmVuZCgpXHJcbiAgICB0aGlzLmRlc3Ryb3koKVxyXG4gIH1cclxuXHJcbiAgY2FjdWxhdGVBbmdsZShsaW5lMSA9IFtdLCBsaW5lMiA9IFtdKSB7XHJcbiAgICBsZXQgYyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQobGluZTJbMV0sIHRoaXMudmlld2VyKVxyXG4gICAgbGV0IHAyID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChsaW5lMlswXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgY2VudGVyID0gdHVyZi5wb2ludChbYy5sbmcsIGMubGF0XSlcclxuICAgIGxldCBwb2ludDIgPSB0dXJmLnBvaW50KFtwMi5sbmcsIHAyLmxhdF0pXHJcbiAgICBsZXQgYmVhcmluZyA9IHRoaXMucmh1bWJCZWFyaW5nKHAyLCBjKVxyXG4gICAgdGhpcy5iZWFyaW5nID0gKDE4MCArIGJlYXJpbmcpLnRvRml4ZWQoMilcclxuICAgIFxyXG4gICAgbGV0IGRpc3RhbmNlID0gdHVyZi5yaHVtYkRpc3RhbmNlKGNlbnRlciwgcG9pbnQyLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICBsZXQgYXJjID0gdHVyZi5saW5lQXJjKGNlbnRlciwgKGRpc3RhbmNlLzMpLCAwLCB0aGlzLmJlYXJpbmcpO1xyXG4gICAgbGV0IGFyY1BvcyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyYy5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBhcmNQb3MucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhhcmMuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bMF0sIGFyYy5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVsxXSkpXHJcbiAgICB9XHJcbiAgICB0aGlzLmFyY1Bvc2l0aW9ucyA9IGFyY1Bvc1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBzdXBlci5zdGFydCgpO1xyXG5cclxuICAgICAgbGV0IGxlZnRFdmVudCA9IGFzeW5jIChtb3ZlbWVudCwgY2FyKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgLy/pnIDopoHliJvlu7rkuIDkuKrnur9cclxuICAgICAgICAgIHRoaXMubGluZV9pZCA9IHRoaXMuY3JlYXRlUG9seWxpbmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihjYXIsIG1vdmVtZW50LnBvc2l0aW9uLngsIG1vdmVtZW50LnBvc2l0aW9uLnkpXHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KGNhcilcclxuICAgICAgICAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXIsIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHBjID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGlzLnBvc2l0aW9uc1sxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgZnJvbSA9IHR1cmYucG9pbnQoW3BjLmxuZywgcGMubGF0XSk7XHJcbiAgICAgICAgICBsZXQgdG8gPSB0dXJmLnBvaW50KFtwLmxuZywgcC5sYXRdKTtcclxuICAgICAgICAgIGxldCBvcHRpb25zID0geyB1bml0czogJ2tpbG9tZXRlcnMnIH07XHJcbiAgICAgICAgICBsZXQgZGlzdGFuY2UgPSB0dXJmLnJodW1iRGlzdGFuY2UoZnJvbSwgdG8sIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgIGxldCBiZWFyaW5nID0gMDtcclxuICAgICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IHR1cmYuZGVzdGluYXRpb24oZnJvbSwgZGlzdGFuY2UsIGJlYXJpbmcsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbMF0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5kZXN0aW5hdGlvbi5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICB0aGlzLmNhY2hlUG9zaXRpb25zLnB1c2goY2FyKVxyXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9ucy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAvL+mcgOimgeW8gOWni+iuoeeul+WkueinklxyXG4gICAgICAgICAgdGhpcy5jYWN1bGF0ZUFuZ2xlKFxyXG4gICAgICAgICAgICBbdGhpcy5wb3NpdGlvbnNbMF0sIHRoaXMucG9zaXRpb25zWzFdXSxcclxuICAgICAgICAgICAgW3RoaXMucG9zaXRpb25zWzJdLCB0aGlzLnBvc2l0aW9uc1sxXV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgLy/pnIDopoHlgZzmraLnu5jliLZcclxuICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pZHMucHVzaCh0aGlzLmNyZWF0ZV9wb2ludChjYXIpKVxyXG4gICAgICAgIHRoaXMuaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoY2FyKSlcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsX2lkID0gQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgICAgICAgdGhpcy5hcmNfaWQgPSBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FyLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnNhbXBsZUhlaWdodE1vc3REZXRhaWxlZChbcF0pXHJcblxyXG4gICAgICAgICAgbGV0IGFyYyA9IHRoaXMudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmFyY19pZCxcclxuICAgICAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcmNQb3NpdGlvbnNcclxuICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogNSxcclxuICAgICAgICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yIHx8IHRoaXMuZGVmYXVsdENvbG9yKSxcclxuICAgICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgbGV0IGxhYmVsID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMubGFiZWxfaWQsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwLmxuZywgcC5sYXQsIChyZXNbMF0uaGVpZ2h0IHx8IDApICsgMC4xKSxcclxuICAgICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgICB0ZXh0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi5pa55L2N5aS56KeS77yaXCIgKyB0aGlzLmJlYXJpbmcgKyBcIsKwXCJcclxuICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgZm9udDogJzIwcHggTWljcm9zb2Z0IFlhSGVpJyxcclxuICAgICAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmMWU2MDUnKSxcclxuICAgICAgICAgICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICAgICAgICAvL+agh+azqOeahOmBruaMoei3neemu+iuvue9ruS4ujEwMOWImeinhuinkuS4juagh+azqOeahOi3neemu+Wkp+S6jjEwMOexs+aXtuS8muaciemBruaMoVxyXG4gICAgICAgICAgICAgIC8vIGRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbjogdGhpcy5kaXN0YW5jZURpc3BsYXlDb25kaXRpb24sXHJcbiAgICAgICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy/pnIDopoHliJvlu7rlpLnop5LnmoTmmL7npLrmlYjmnpxcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgcGMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMucG9zaXRpb25zWzFdLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIGxldCBmcm9tID0gdHVyZi5wb2ludChbcGMubG5nLCBwYy5sYXRdKTtcclxuICAgICAgICAgIGxldCB0byA9IHR1cmYucG9pbnQoW3AubG5nLCBwLmxhdF0pO1xyXG4gICAgICAgICAgbGV0IG9wdGlvbnMgPSB7IHVuaXRzOiAna2lsb21ldGVycycgfTtcclxuICAgICAgICAgIGxldCBkaXN0YW5jZSA9IHR1cmYucmh1bWJEaXN0YW5jZShmcm9tLCB0bywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgbGV0IGJlYXJpbmcgPSAwO1xyXG4gICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gdHVyZi5kZXN0aW5hdGlvbihmcm9tLCBkaXN0YW5jZSwgYmVhcmluZywgb3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1swXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKC4uLmRlc3RpbmF0aW9uLmdlb21ldHJ5LmNvb3JkaW5hdGVzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgLy/pnIDopoHlvIDlp4vorqHnrpflpLnop5JcclxuICAgICAgICAgIHRoaXMuY2FjdWxhdGVBbmdsZShcclxuICAgICAgICAgICAgW3RoaXMucG9zaXRpb25zWzBdLCB0aGlzLnBvc2l0aW9uc1sxXV0sXHJcbiAgICAgICAgICAgIFt0aGlzLnBvc2l0aW9uc1syXSwgdGhpcy5wb3NpdGlvbnNbMV1dKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FuY2VsKClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWwoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVBemltdXRoXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBNUVBO0FBQUE7QUFBQTtBQTZFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Measure/MeasureAzimuth/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureDistance/index.js": /*!**********************************************!*\ !*** ./src/Measure/MeasureDistance/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-11 10:31\r\n * @description:index\r\n * @update: 2022-07-11 10:31\r\n */\n\n\nvar MeasureDistance = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 距离测量\r\n * */\n function MeasureDistance(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureDistance);\n _this = _callSuper(this, MeasureDistance, [sdk, options]);\n _this.options.color = _this.options.color || \"#00ffff\";\n _this.start_id = \"\";\n _this.end_id = \"\";\n _this.polyline_id = \"\";\n _this.clampPositions = [];\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureDistance, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureDistance, [{\n key: \"clampToGroundMeasure\",\n value: function () {\n var _clampToGroundMeasure = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(meters, cb) {\n var _this2 = this;\n var positions, res, coordinates, total, _iterator, _step, item, index, r;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n positions = [];\n this.ids.forEach(function (id, index) {\n var p = _this2.viewer.entities.getById(id).position.getValue();\n positions.push(_this2.cartesian3Towgs84(p, _this2.viewer));\n });\n res = this.chunkLine(positions, meters);\n coordinates = [];\n res.forEach(function (Feature, index) {\n if (index === 0) {\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Feature.geometry.coordinates);\n } else {\n coordinates.push(Feature.geometry.coordinates[1]);\n }\n });\n total = coordinates.length;\n _iterator = _createForOfIteratorHelper(coordinates);\n _context.prev = 7;\n _iterator.s();\n case 9:\n if ((_step = _iterator.n()).done) {\n _context.next = 18;\n break;\n }\n item = _step.value;\n index = coordinates.indexOf(item);\n _context.next = 14;\n return this.getHeight({\n lng: item[0],\n lat: item[1],\n alt: 0\n }, index, total);\n case 14:\n r = _context.sent;\n cb(null, r);\n case 16:\n _context.next = 9;\n break;\n case 18:\n _context.next = 23;\n break;\n case 20:\n _context.prev = 20;\n _context.t0 = _context[\"catch\"](7);\n _iterator.e(_context.t0);\n case 23:\n _context.prev = 23;\n _iterator.f();\n return _context.finish(23);\n case 26:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[7, 20, 23, 26]]);\n }));\n function clampToGroundMeasure(_x, _x2) {\n return _clampToGroundMeasure.apply(this, arguments);\n }\n return clampToGroundMeasure;\n }()\n }, {\n key: \"computeDisByTowPoint\",\n value: function () {\n var _computeDisByTowPoint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(p1, p2) {\n var _this3 = this;\n var d, meters, createLabel, start;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n d = this.computeDistance2([p1, p2]);\n meters = 10;\n createLabel = function createLabel(distance) {\n if (_this3._isDestroy) {\n return;\n }\n var label = _this3.getLabel(\"贴地距离:\" + Number(distance).toFixed(2) + \"米\");\n label.pixelOffset = new Cesium.Cartesian2(0, -32);\n _this3.ids.push(MeasureDistance.create_point(Cesium.Cartesian3.fromDegrees(p2.lng, p2.lat, p2.alt), {\n label: label\n }, _this3));\n };\n start = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(meters) {\n var res, coordinates, arr, _iterator2, _step2, item, index, r, total_length, l;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n res = _this3.chunkLine([p1, p2], meters);\n coordinates = [];\n res.forEach(function (Feature, index) {\n if (index === 0) {\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Feature.geometry.coordinates);\n } else {\n coordinates.push(Feature.geometry.coordinates[1]);\n }\n });\n arr = [];\n _iterator2 = _createForOfIteratorHelper(coordinates);\n _context2.prev = 5;\n _iterator2.s();\n case 7:\n if ((_step2 = _iterator2.n()).done) {\n _context2.next = 16;\n break;\n }\n item = _step2.value;\n index = coordinates.indexOf(item);\n _context2.next = 12;\n return _this3.sampleHeight({\n lng: item[0],\n lat: item[1],\n alt: 0\n }, index);\n case 12:\n r = _context2.sent;\n arr.push(r);\n case 14:\n _context2.next = 7;\n break;\n case 16:\n _context2.next = 21;\n break;\n case 18:\n _context2.prev = 18;\n _context2.t0 = _context2[\"catch\"](5);\n _iterator2.e(_context2.t0);\n case 21:\n _context2.prev = 21;\n _iterator2.f();\n return _context2.finish(21);\n case 24:\n total_length = 0;\n l = arr.length - 1;\n arr.forEach(function (item, index) {\n if (index !== l) {\n var d1 = _this3.computeDistance2([item.position, arr[index + 1].position]);\n var d2 = Math.abs(item.position.alt - arr[index + 1].position.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n total_length += d3;\n }\n });\n createLabel(total_length);\n case 28:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[5, 18, 21, 24]]);\n }));\n return function start(_x5) {\n return _ref.apply(this, arguments);\n };\n }(); //暂时固定取20个点\n if (!(d > 2)) {\n _context3.next = 10;\n break;\n }\n //大于20m时,固定取20个点\n meters = d / 20;\n _context3.next = 8;\n return start(meters);\n case 8:\n _context3.next = 17;\n break;\n case 10:\n if (!(d < 1)) {\n _context3.next = 14;\n break;\n }\n //不计算\n createLabel(d);\n _context3.next = 17;\n break;\n case 14:\n //小于20m的时候\n meters = 1;\n _context3.next = 17;\n return start(meters);\n case 17:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function computeDisByTowPoint(_x3, _x4) {\n return _computeDisByTowPoint.apply(this, arguments);\n }\n return computeDisByTowPoint;\n }()\n }, {\n key: \"sampleHeight\",\n value: function () {\n var _sampleHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4(p1, index) {\n var height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return this.getClampToHeight(p1, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.sdk.viewer.entities.values));\n case 2:\n height = _context4.sent;\n p1.alt = height;\n return _context4.abrupt(\"return\", {\n position: p1,\n index: index\n });\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function sampleHeight(_x6, _x7) {\n return _sampleHeight.apply(this, arguments);\n }\n return sampleHeight;\n }()\n }, {\n key: \"getHeight\",\n value: function () {\n var _getHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5(p1, index, total) {\n var p2, total_length;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return this.sampleHeightMostDetailed([p1]);\n case 2:\n p2 = _context5.sent;\n p1.alt = p2[0].height;\n this.clampPositions.push({\n position: p1,\n index: index\n });\n if (!(total === this.clampPositions.length)) {\n _context5.next = 8;\n break;\n }\n total_length = this.startCompute();\n return _context5.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length,\n total_length: total_length\n });\n case 8:\n return _context5.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length\n });\n case 9:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function getHeight(_x8, _x9, _x10) {\n return _getHeight.apply(this, arguments);\n }\n return getHeight;\n }()\n }, {\n key: \"startCompute\",\n value: function startCompute() {\n var _this4 = this;\n this.clampPositions.sort(function (a, b) {\n return a.index < b.index;\n });\n var total_length = 0;\n var l = this.clampPositions.length - 1;\n this.clampPositions.forEach(function (item, index) {\n if (index !== l) {\n var d1 = _this4.computeDistance2([item.position, _this4.clampPositions[index + 1].position]);\n var d2 = Math.abs(item.position.alt - _this4.clampPositions[index + 1].position.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n total_length += d3;\n }\n });\n return Number(total_length.toFixed(2));\n }\n }, {\n key: \"getLabel\",\n value: function getLabel(text) {\n return {\n text: text || '',\n //标注文字描述\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n\n // disableDepthTestDistance: this.disableDepthTestDistance,\n };\n }\n\n /**\r\n * 开始测量\r\n */\n }, {\n key: \"start\",\n value: function start() {\n var _this5 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureDistance, \"start\", this, 3)([]);\n this.positions = [];\n this.cachePositions = [];\n var leftEvent = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(movement, car) {\n var cur_point, pre_p, startPoint;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n if (_this5.ids.length === 0) {\n _this5.polyline_id = MeasureDistance.createPolyline(_this5);\n _this5.start_id = MeasureDistance.create_point(car, {\n image: \"start1.png\",\n width: 30,\n height: 38,\n label: _this5.getLabel(\"\")\n }, _this5);\n //创建起点\n }\n _this5.tip.setPosition(car, movement.position.x, movement.position.y);\n _this5.positions = _this5.cachePositions.concat(car);\n if (!(_this5.ids.length !== 0)) {\n _context6.next = 11;\n break;\n }\n cur_point = _this5.cartesian3Towgs84(car, _this5.viewer);\n pre_p = _this5.cartesian3Towgs84(_this5.cachePositions[_this5.cachePositions.length - 1], _this5.viewer);\n _this5.cachePositions.push(car);\n _context6.next = 9;\n return _this5.computeDisByTowPoint(pre_p, cur_point);\n case 9:\n _context6.next = 15;\n break;\n case 11:\n _this5.cachePositions.push(car);\n _this5.ids.push(MeasureDistance.create_point(car, {}, _this5));\n startPoint = _this5.viewer.entities.getById(_this5.ids[0]);\n if (startPoint) {\n startPoint.billboard.show = false;\n }\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6);\n }));\n return function leftEvent(_x11, _x12) {\n return _ref2.apply(this, arguments);\n };\n }();\n var rightEvent = function rightEvent(movement, car) {\n if (_this5.cachePositions.length) {\n _this5.positions = _this5.cachePositions;\n _this5.end_id = MeasureDistance.create_point(_this5.cachePositions[_this5.cachePositions.length - 1], {\n image: \"end1.png\",\n width: 30,\n height: 38\n }, _this5);\n var endPoint = _this5.viewer.entities.getById(_this5.ids[_this5.ids.length - 1]);\n if (endPoint) {\n endPoint.billboard.show = false;\n }\n }\n if (_this5.cachePositions.length < 2) {\n _this5.destroy();\n YJ.Measure.Measures.pop(); //弹出测量实体\n }\n _this5.end();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this5.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n _this5.positions = _this5.cachePositions.concat(car);\n // if (this.cachePositions.length) {\n // let cur_point = this.cartesian3Towgs84(car, this.viewer)\n // let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)\n // let cur_len = this.computeDistance2([cur_point, pre_p])\n // let text = \"当前投影距离:\" + cur_len + \" 米\"\n // // this.tip.set_text(text)\n // }\n });\n this.event.mouse_right(rightEvent);\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this5.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this6 = this;\n [this.polyline_id, this.end_id, this.start_id].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.ids)).forEach(function (id) {\n _this6.remove_entity(id);\n });\n _superPropGet(MeasureDistance, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n // YJ.Measure.SetMeasureStatus(false)\n // this.tip.destroy()\n // this.event.destroy()\n _superPropGet(MeasureDistance, \"end\", this, 3)([]);\n // this.setPickStatus(this.pickStatus.pick)\n }\n }], [{\n key: \"createPolyline\",\n value: function createPolyline(that) {\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n clampToGround: true,\n width: 3,\n material: new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n dashLength: 20 //短划线长度\n }),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }, {\n key: \"create_point\",\n value: function create_point(cartesian, _ref3, that) {\n var label = _ref3.label,\n _ref3$image = _ref3.image,\n image = _ref3$image === void 0 ? \"point.png\" : _ref3$image,\n width = _ref3.width,\n height = _ref3.height;\n var id = that.randomString();\n var p = that.cartesian3Towgs84(cartesian, that.viewer);\n if (label) {\n label.pixelOffset = new Cesium.Cartesian2(0, -(height || 32));\n }\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n label: label,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/' + image,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: width,\n height: height\n }\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureDistance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlRGlzdGFuY2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTWVhc3VyZS9NZWFzdXJlRGlzdGFuY2UvaW5kZXguanM/OGFlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDctMTEgMTA6MzFcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMi0wNy0xMSAxMDozMVxyXG4gKi9cclxuXHJcbmltcG9ydCBNZWFzdXJlIGZyb20gXCIuLi9pbmRleFwiXHJcblxyXG5jbGFzcyBNZWFzdXJlRGlzdGFuY2UgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDot53nprvmtYvph49cclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IgfHwgXCIjMDBmZmZmXCJcclxuICAgIHRoaXMuc3RhcnRfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmVuZF9pZCA9IFwiXCJcclxuICAgIHRoaXMucG9seWxpbmVfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zID0gW11cclxuICB9XHJcblxyXG4gIGFzeW5jIGNsYW1wVG9Hcm91bmRNZWFzdXJlKG1ldGVycywgY2IpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5pZHMuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBwID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZChpZCkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHAsIHRoaXMudmlld2VyKSlcclxuICAgIH0pXHJcbiAgICBsZXQgcmVzID0gdGhpcy5jaHVua0xpbmUocG9zaXRpb25zLCBtZXRlcnMpXHJcbiAgICBsZXQgY29vcmRpbmF0ZXMgPSBbXVxyXG4gICAgcmVzLmZvckVhY2goKEZlYXR1cmUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIGNvb3JkaW5hdGVzID0gWy4uLkZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29vcmRpbmF0ZXMucHVzaChGZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgbGV0IHRvdGFsID0gY29vcmRpbmF0ZXMubGVuZ3RoXHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY29vcmRpbmF0ZXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgbGV0IHIgPSBhd2FpdCB0aGlzLmdldEhlaWdodCh7bG5nOiBpdGVtWzBdLCBsYXQ6IGl0ZW1bMV0sIGFsdDogMH0sIGluZGV4LCB0b3RhbCwpXHJcbiAgICAgIGNiKG51bGwsIHIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb21wdXRlRGlzQnlUb3dQb2ludChwMSwgcDIpIHtcclxuICAgIGxldCBkID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtwMSwgcDJdKVxyXG4gICAgbGV0IG1ldGVycyA9IDEwXHJcbiAgICBsZXQgY3JlYXRlTGFiZWwgPSAoZGlzdGFuY2UpID0+IHtcclxuICAgICAgaWYodGhpcy5faXNEZXN0cm95KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGxhYmVsID0gdGhpcy5nZXRMYWJlbChcIui0tOWcsOi3neemu++8mlwiICsgTnVtYmVyKGRpc3RhbmNlKS50b0ZpeGVkKDIpICsgXCLnsbNcIilcclxuICAgICAgbGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgMCwgLSgzMilcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVEaXN0YW5jZS5jcmVhdGVfcG9pbnQoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocDIubG5nLCBwMi5sYXQsIHAyLmFsdCksIHtsYWJlbDogbGFiZWx9LCB0aGlzKSlcclxuICAgIH1cclxuICAgIGxldCBzdGFydCA9IGFzeW5jIChtZXRlcnMpID0+IHtcclxuICAgICAgbGV0IHJlcyA9IHRoaXMuY2h1bmtMaW5lKFtwMSwgcDJdLCBtZXRlcnMpXHJcbiAgICAgIGxldCBjb29yZGluYXRlcyA9IFtdXHJcbiAgICAgIHJlcy5mb3JFYWNoKChGZWF0dXJlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgY29vcmRpbmF0ZXMgPSBbLi4uRmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc11cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29vcmRpbmF0ZXMucHVzaChGZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgbGV0IGFyciA9IFtdXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb29yZGluYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29vcmRpbmF0ZXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICBsZXQgciA9IGF3YWl0IHRoaXMuc2FtcGxlSGVpZ2h0KHtsbmc6IGl0ZW1bMF0sIGxhdDogaXRlbVsxXSwgYWx0OiAwfSwgaW5kZXgpXHJcbiAgICAgICAgYXJyLnB1c2gocilcclxuICAgICAgfVxyXG4gICAgICBsZXQgdG90YWxfbGVuZ3RoID0gMFxyXG4gICAgICBsZXQgbCA9IGFyci5sZW5ndGggLSAxXHJcbiAgICAgIGFyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gbCkge1xyXG4gICAgICAgICAgbGV0IGQxID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtpdGVtLnBvc2l0aW9uLCBhcnJbaW5kZXggKyAxXS5wb3NpdGlvbl0pXHJcbiAgICAgICAgICBsZXQgZDIgPSBNYXRoLmFicyhpdGVtLnBvc2l0aW9uLmFsdCAtIGFycltpbmRleCArIDFdLnBvc2l0aW9uLmFsdClcclxuICAgICAgICAgIGxldCBkMyA9IE1hdGguc3FydChkMSAqIGQxICsgZDIgKiBkMilcclxuICAgICAgICAgIHRvdGFsX2xlbmd0aCArPSBkM1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgY3JlYXRlTGFiZWwodG90YWxfbGVuZ3RoKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL+aaguaXtuWbuuWumuWPljIw5Liq54K5XHJcbiAgICBpZiAoZCA+IDIpIHsvL+Wkp+S6jjIwbeaXtu+8jOWbuuWumuWPljIw5Liq54K5XHJcbiAgICAgIG1ldGVycyA9IGQgLyAyMFxyXG4gICAgICBhd2FpdCBzdGFydChtZXRlcnMpXHJcbiAgICB9IGVsc2UgaWYgKGQgPCAxKSB7XHJcbiAgICAgIC8v5LiN6K6h566XXHJcbiAgICAgIGNyZWF0ZUxhYmVsKGQpXHJcbiAgICB9IGVsc2Ugey8v5bCP5LqOMjBt55qE5pe25YCZXHJcbiAgICAgIG1ldGVycyA9IDFcclxuICAgICAgYXdhaXQgc3RhcnQobWV0ZXJzKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhc3luYyBzYW1wbGVIZWlnaHQocDEsIGluZGV4KSB7XHJcbiAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHAxLCBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc10pXHJcbiAgICBwMS5hbHQgPSBoZWlnaHRcclxuICAgIHJldHVybiB7cG9zaXRpb246IHAxLCBpbmRleH1cclxuICB9XHJcblxyXG5cclxuICBhc3luYyBnZXRIZWlnaHQocDEsIGluZGV4LCB0b3RhbCkge1xyXG4gICAgbGV0IHAyID0gYXdhaXQgdGhpcy5zYW1wbGVIZWlnaHRNb3N0RGV0YWlsZWQoW3AxXSlcclxuICAgIHAxLmFsdCA9IHAyWzBdLmhlaWdodFxyXG4gICAgdGhpcy5jbGFtcFBvc2l0aW9ucy5wdXNoKHtwb3NpdGlvbjogcDEsIGluZGV4fSlcclxuICAgIGlmICh0b3RhbCA9PT0gdGhpcy5jbGFtcFBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHRvdGFsX2xlbmd0aCA9IHRoaXMuc3RhcnRDb21wdXRlKClcclxuICAgICAgcmV0dXJuIHt0b3RhbCwgY3VycmVudDogdGhpcy5jbGFtcFBvc2l0aW9ucy5sZW5ndGgsIHRvdGFsX2xlbmd0aH1cclxuICAgIH1cclxuICAgIHJldHVybiB7dG90YWwsIGN1cnJlbnQ6IHRoaXMuY2xhbXBQb3NpdGlvbnMubGVuZ3RoLH1cclxuICB9XHJcblxyXG4gIHN0YXJ0Q29tcHV0ZSgpIHtcclxuICAgIHRoaXMuY2xhbXBQb3NpdGlvbnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICByZXR1cm4gYS5pbmRleCA8IGIuaW5kZXhcclxuICAgIH0pXHJcbiAgICBsZXQgdG90YWxfbGVuZ3RoID0gMFxyXG4gICAgbGV0IGwgPSB0aGlzLmNsYW1wUG9zaXRpb25zLmxlbmd0aCAtIDFcclxuICAgIHRoaXMuY2xhbXBQb3NpdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGluZGV4ICE9PSBsKSB7XHJcbiAgICAgICAgbGV0IGQxID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtpdGVtLnBvc2l0aW9uLCB0aGlzLmNsYW1wUG9zaXRpb25zW2luZGV4ICsgMV0ucG9zaXRpb25dKVxyXG4gICAgICAgIGxldCBkMiA9IE1hdGguYWJzKGl0ZW0ucG9zaXRpb24uYWx0IC0gdGhpcy5jbGFtcFBvc2l0aW9uc1tpbmRleCArIDFdLnBvc2l0aW9uLmFsdClcclxuICAgICAgICBsZXQgZDMgPSBNYXRoLnNxcnQoZDEgKiBkMSArIGQyICogZDIpXHJcbiAgICAgICAgdG90YWxfbGVuZ3RoICs9IGQzXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gTnVtYmVyKHRvdGFsX2xlbmd0aC50b0ZpeGVkKDIpKVxyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBjcmVhdGVQb2x5bGluZSh0aGF0KSB7XHJcbiAgICBsZXQgaWQgPSB0aGF0LnJhbmRvbVN0cmluZygpXHJcbiAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQobmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICBpZCxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnNcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogMyxcclxuICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgIGNvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IgfHwgdGhhdC5kZWZhdWx0Q29sb3IpLFxyXG4gICAgICAgICAgZGFzaExlbmd0aDogMjAsIC8v55+t5YiS57q/6ZW/5bqmXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHtcclxuICAgIGxhYmVsLCBpbWFnZSA9IFwicG9pbnQucG5nXCIsXHJcbiAgICB3aWR0aCxcclxuICAgIGhlaWdodFxyXG4gIH0sIHRoYXQpIHtcclxuICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgIGxldCBwID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQudmlld2VyKVxyXG4gICAgaWYgKGxhYmVsKSB7XHJcbiAgICAgIGxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgIDAsIC0oaGVpZ2h0IHx8IDMyKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAubG5nLCBwLmxhdCwgcC5hbHQpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nLycgKyBpbWFnZSxcclxuICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgZ2V0TGFiZWwodGV4dCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGV4dDogdGV4dCB8fCAnJyxcclxuICAgICAgLy/moIfms6jmloflrZfmj4/ov7BcclxuICAgICAgZm9udDogJzIwcHggTWljcm9zb2Z0IFlhSGVpJyxcclxuICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZjFlNjA1JyksXHJcbiAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAvL+agh+azqOeahOmBruaMoei3neemu+iuvue9ruS4ujEwMOWImeinhuinkuS4juagh+azqOeahOi3neemu+Wkp+S6jjEwMOexs+aXtuS8muaciemBruaMoVxyXG4gICAgICAvLyBkaXN0YW5jZURpc3BsYXlDb25kaXRpb246IHRoaXMuZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uLFxyXG4gICAgICBzY2FsZTogMSxcclxuICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcblxyXG4gICAgICAvLyBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IHRoaXMuZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5byA5aeL5rWL6YePXHJcbiAgICovXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIHN1cGVyLnN0YXJ0KClcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLmNhY2hlUG9zaXRpb25zID0gW11cclxuXHJcblxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gYXN5bmMgKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbHlsaW5lX2lkID0gKE1lYXN1cmVEaXN0YW5jZS5jcmVhdGVQb2x5bGluZSh0aGlzKSlcclxuICAgICAgICAgIHRoaXMuc3RhcnRfaWQgPSBNZWFzdXJlRGlzdGFuY2UuY3JlYXRlX3BvaW50KGNhciwge1xyXG4gICAgICAgICAgICBpbWFnZTogXCJzdGFydDEucG5nXCIsIHdpZHRoOiAzMCwgaGVpZ2h0OiAzOCwgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXCJcIilcclxuICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgICAvL+WIm+W7uui1t+eCuVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oY2FyLCBtb3ZlbWVudC5wb3NpdGlvbi54LCBtb3ZlbWVudC5wb3NpdGlvbi55KVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICBsZXQgY3VyX3BvaW50ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXIsIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHByZV9wID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGlzLmNhY2hlUG9zaXRpb25zW3RoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoIC0gMV0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcHV0ZURpc0J5VG93UG9pbnQocHJlX3AsIGN1cl9wb2ludClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICAgIHRoaXMuaWRzLnB1c2goTWVhc3VyZURpc3RhbmNlLmNyZWF0ZV9wb2ludChjYXIsIHt9LCB0aGlzKSlcclxuICAgICAgICAgIGxldCBzdGFydFBvaW50ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLmlkc1swXSlcclxuICAgICAgICAgIGlmKHN0YXJ0UG9pbnQpIHtcclxuICAgICAgICAgICAgc3RhcnRQb2ludC5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByaWdodEV2ZW50ID0gKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9uc1xyXG4gICAgICAgICAgdGhpcy5lbmRfaWQgPSBNZWFzdXJlRGlzdGFuY2UuY3JlYXRlX3BvaW50KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwge1xyXG4gICAgICAgICAgICBpbWFnZTogXCJlbmQxLnBuZ1wiLFxyXG4gICAgICAgICAgICB3aWR0aDogMzAsXHJcbiAgICAgICAgICAgIGhlaWdodDogMzgsXHJcbiAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgICAgbGV0IGVuZFBvaW50ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLmlkc1t0aGlzLmlkcy5sZW5ndGgtMV0pXHJcbiAgICAgICAgICBpZihlbmRQb2ludCkge1xyXG4gICAgICAgICAgICBlbmRQb2ludC5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLk1lYXN1cmVzLnBvcCgpLy/lvLnlh7rmtYvph4/lrp7kvZNcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KGNhcilcclxuICAgICAgICAvLyBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIGxldCBjdXJfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgLy8gICBsZXQgcHJlX3AgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgLy8gICBsZXQgY3VyX2xlbiA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbY3VyX3BvaW50LCBwcmVfcF0pXHJcbiAgICAgICAgLy8gICBsZXQgdGV4dCA9IFwi5b2T5YmN5oqV5b2x6Led56a777yaXCIgKyBjdXJfbGVuICsgXCIg57GzXCJcclxuICAgICAgICAvLyAgIC8vIHRoaXMudGlwLnNldF90ZXh0KHRleHQpXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHJpZ2h0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTmtYvph49cclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgW3RoaXMucG9seWxpbmVfaWQsIHRoaXMuZW5kX2lkLCB0aGlzLnN0YXJ0X2lkLCAuLi50aGlzLmlkc10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlX2VudGl0eShpZClcclxuICAgIH0pXHJcbiAgICBzdXBlci5kZXN0cm95KClcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiDnu5PmnZ/mtYvph49cclxuICAgKi9cclxuICBlbmQoKSB7XHJcbiAgICAvLyBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAvLyB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIC8vIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICBzdXBlci5lbmQoKVxyXG4gICAgLy8gdGhpcy5zZXRQaWNrU3RhdHVzKHRoaXMucGlja1N0YXR1cy5waWNrKVxyXG5cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVEaXN0YW5jZVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXRCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBM0JBO0FBQUE7QUFBQTtBQThCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBdkRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF6QkE7QUFBQTtBQUFBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQWxMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUhBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBdUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/MeasureDistance/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureHeight/index.js": /*!********************************************!*\ !*** ./src/Measure/MeasureHeight/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-22 17:15\r\n * @description:index\r\n * @update: 2022-07-22 17:15\r\n */\n\nvar MeasureHeight = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 高度测量\r\n * */\n function MeasureHeight(sdk) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MeasureHeight);\n return _callSuper(this, MeasureHeight, [sdk, {\n text: \"左键开始,右键取消\"\n }]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(MeasureHeight, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MeasureHeight, [{\n key: \"start\",\n value:\n /**\r\n * 开始测量\r\n */\n function start() {\n var _this = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureHeight, \"start\", this, 3)([]);\n this.positions = [];\n this.position = new Cesium.Cartesian3();\n this.height = 0;\n this.text = \"\";\n this.circleRadius = 0;\n var count = 0;\n this.firstpoint = null;\n var leftEvent = function leftEvent(movement, cartesian) {\n if (_this.firstpoint === null) {\n _this.positions.push(cartesian);\n _this.firstpoint = _this.cartesian3Towgs84(cartesian, _this.viewer);\n _this.ids.push(MeasureHeight.create_polygon(_this));\n _this.ids.push(MeasureHeight.create_point(_this, cartesian));\n }\n count++;\n _this.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n if (count === 2) {\n if (_this.firstpoint) {\n var cur_point = _this.cartesian3Towgs84(cartesian, _this.viewer);\n _this.positions[1] = Cesium.Cartesian3.fromDegrees(_this.firstpoint.lng, _this.firstpoint.lat, cur_point.alt);\n _this.positions[2] = cartesian;\n _this.position = _this.positions[1];\n _this.circleRadius = _this.computeDistance2([_this.firstpoint, cur_point]);\n _this.height = Number((cur_point.alt - _this.firstpoint.alt).toFixed(2));\n _this.text = \"相对高度:\" + _this.height + \" 米\";\n _this.tip.set_text(\"左键完成,右键取消;半径:\" + _this.circleRadius + \" 米\");\n }\n _this.ids.push(MeasureHeight.create_point(_this, cartesian, {\n label: {\n text: \"半径:\" + _this.circleRadius + \" 米\"\n }\n }));\n _this.end();\n }\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, cartesian) {\n _this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n if (_this.firstpoint) {\n var cur_point = _this.cartesian3Towgs84(cartesian, _this.viewer);\n _this.positions[1] = Cesium.Cartesian3.fromDegrees(_this.firstpoint.lng, _this.firstpoint.lat, cur_point.alt);\n _this.positions[2] = cartesian;\n _this.position = _this.positions[1];\n _this.circleRadius = _this.computeDistance2([_this.firstpoint, cur_point]);\n _this.height = Number((cur_point.alt - _this.firstpoint.alt).toFixed(2));\n _this.text = \"相对高度:\" + _this.height + \" 米\";\n _this.tip.set_text(\"左键完成,右键取消;半径:\" + _this.circleRadius + \" 米\");\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this.end();\n _this.destroy();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this.end();\n _this.destroy();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureHeight, \"end\", this, 3)([]);\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n _superPropGet(MeasureHeight, \"destroy\", this, 3)([]);\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var id = that.randomString();\n var a = that.viewer.entities.add(new Cesium.Entity({\n id: id,\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n },\n position: new Cesium.CallbackProperty(function () {\n return that.position;\n }, false),\n label: {\n text: new Cesium.CallbackProperty(function () {\n return that.text;\n }, false),\n scale: 1,\n // fillColor: Cesium.Color.RED,\n font: 'normal 20px MicroSoft YaHei',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n pixelOffset: new Cesium.Cartesian2(0, -15),\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function (e) {\n return that.positions;\n }, false),\n width: 2,\n material: Cesium.Color.YELLOW,\n zIndex: 99999999\n },\n ellipse: {\n height: new Cesium.CallbackProperty(function () {\n return that.height + that.firstpoint.alt;\n }, false),\n semiMinorAxis: new Cesium.CallbackProperty(function (e) {\n return that.circleRadius;\n }, false),\n semiMajorAxis: new Cesium.CallbackProperty(function (e) {\n return that.circleRadius;\n }, false),\n material: new Cesium.Color.fromCssColorString(that.defaultColor)\n }\n }));\n return id;\n }\n }, {\n key: \"create_point\",\n value: function create_point(that, cartesian) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var id = that.randomString();\n var p = that.cartesian3Towgs84(cartesian, that.viewer);\n var params = {\n id: id,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n };\n if (option.label) {\n params.label = {\n text: option.label.text,\n scale: 1,\n // fillColor: Cesium.Color.fromCssColorString(\"#06eee5\"),\n font: 'normal 20px MicroSoft YaHei',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n pixelOffset: new Cesium.Cartesian2(0, -15)\n };\n }\n that.viewer.entities.add(new Cesium.Entity(params));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureHeight);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlSGVpZ2h0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL01lYXN1cmUvTWVhc3VyZUhlaWdodC9pbmRleC5qcz82YjJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogaW5kZXhcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMi0wNy0yMiAxNzoxNVxyXG4gKiBAZGVzY3JpcHRpb27vvJppbmRleFxyXG4gKiBAdXBkYXRlOiAyMDIyLTA3LTIyIDE3OjE1XHJcbiAqL1xyXG5pbXBvcnQgTWVhc3VyZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuXHJcbmNsYXNzIE1lYXN1cmVIZWlnaHQgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDpq5jluqbmtYvph49cclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaykge1xyXG4gICAgc3VwZXIoc2RrLCB7dGV4dDogXCLlt6bplK7lvIDlp4vvvIzlj7PplK7lj5bmtohcIn0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2x5Z29uKHRoYXQpIHtcclxuICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgIGxldCBhID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQsXHJcbiAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcblxyXG4gICAgICB9LFxyXG4gICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvblxyXG4gICAgICB9LCBmYWxzZSksXHJcbiAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgdGV4dDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGF0LnRleHRcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgLy8gZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuUkVELFxyXG4gICAgICAgIGZvbnQ6ICdub3JtYWwgMjBweCBNaWNyb1NvZnQgWWFIZWknLFxyXG4gICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgLTE1KSxcclxuICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnM7XHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuWUVMTE9XLFxyXG4gICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgfSxcclxuICAgICAgZWxsaXBzZToge1xyXG4gICAgICAgIGhlaWdodDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGF0LmhlaWdodCArIHRoYXQuZmlyc3Rwb2ludC5hbHQ7XHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHNlbWlNaW5vckF4aXM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShlID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGF0LmNpcmNsZVJhZGl1cztcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgc2VtaU1ham9yQXhpczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGUgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQuY2lyY2xlUmFkaXVzO1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5kZWZhdWx0Q29sb3IpXHJcblxyXG4gICAgICB9LFxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVfcG9pbnQodGhhdCwgY2FydGVzaWFuLCBvcHRpb24gPSB7fSkge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgbGV0IHAgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC52aWV3ZXIpXHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBpZDogaWQsXHJcbiAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwLmxuZywgcC5sYXQsIHAuYWx0KSxcclxuICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbi5sYWJlbCkge1xyXG4gICAgICBwYXJhbXMubGFiZWwgPSB7XHJcbiAgICAgICAgdGV4dDogb3B0aW9uLmxhYmVsLnRleHQsXHJcbiAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgLy8gZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKFwiIzA2ZWVlNVwiKSxcclxuICAgICAgICBmb250OiAnbm9ybWFsIDIwcHggTWljcm9Tb2Z0IFlhSGVpJyxcclxuICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC0xNSksXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoYXQudmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkocGFyYW1zKVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlvIDlp4vmtYvph49cclxuICAgKi9cclxuICBzdGFydCgpIHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICB0aGlzLmhlaWdodCA9IDBcclxuICAgICAgdGhpcy50ZXh0ID0gXCJcIlxyXG4gICAgICB0aGlzLmNpcmNsZVJhZGl1cyA9IDBcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgdGhpcy5maXJzdHBvaW50ID0gbnVsbFxyXG5cclxuICAgICAgbGV0IGxlZnRFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3Rwb2ludCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB0aGlzLmZpcnN0cG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVIZWlnaHQuY3JlYXRlX3BvbHlnb24odGhpcykpXHJcbiAgICAgICAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVIZWlnaHQuY3JlYXRlX3BvaW50KHRoaXMsIGNhcnRlc2lhbikpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvdW50KytcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihjYXJ0ZXNpYW4sIG1vdmVtZW50LnBvc2l0aW9uLngsIG1vdmVtZW50LnBvc2l0aW9uLnkpXHJcbiAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maXJzdHBvaW50KSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zWzFdID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5maXJzdHBvaW50LmxuZywgdGhpcy5maXJzdHBvaW50LmxhdCwgY3VyX3BvaW50LmFsdClcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbMl0gPSBjYXJ0ZXNpYW5cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICAgICAgICAgIHRoaXMuY2lyY2xlUmFkaXVzID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFt0aGlzLmZpcnN0cG9pbnQsIGN1cl9wb2ludF0pXHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTnVtYmVyKChjdXJfcG9pbnQuYWx0IC0gdGhpcy5maXJzdHBvaW50LmFsdCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgdGhpcy50ZXh0ID0gXCLnm7jlr7npq5jluqbvvJpcIiArIHRoaXMuaGVpZ2h0ICsgXCIg57GzXCJcclxuICAgICAgICAgICAgdGhpcy50aXAuc2V0X3RleHQoXCLlt6bplK7lrozmiJDvvIzlj7PplK7lj5bmtojvvJvljYrlvoTvvJpcIiArIHRoaXMuY2lyY2xlUmFkaXVzICsgXCIg57GzXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVIZWlnaHQuY3JlYXRlX3BvaW50KHRoaXMsIGNhcnRlc2lhbiwge2xhYmVsOiB7dGV4dDogXCLljYrlvoTvvJpcIiArIHRoaXMuY2lyY2xlUmFkaXVzICsgXCIg57GzXCJ9fSkpXHJcbiAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhcnRlc2lhbiwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICBpZiAodGhpcy5maXJzdHBvaW50KSB7XHJcbiAgICAgICAgICBsZXQgY3VyX3BvaW50ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbMV0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmZpcnN0cG9pbnQubG5nLCB0aGlzLmZpcnN0cG9pbnQubGF0LCBjdXJfcG9pbnQuYWx0KVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbMl0gPSBjYXJ0ZXNpYW5cclxuICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uc1sxXVxyXG4gICAgICAgICAgdGhpcy5jaXJjbGVSYWRpdXMgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW3RoaXMuZmlyc3Rwb2ludCwgY3VyX3BvaW50XSlcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTnVtYmVyKChjdXJfcG9pbnQuYWx0IC0gdGhpcy5maXJzdHBvaW50LmFsdCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgIHRoaXMudGV4dCA9IFwi55u45a+56auY5bqm77yaXCIgKyB0aGlzLmhlaWdodCArIFwiIOexs1wiXHJcbiAgICAgICAgICB0aGlzLnRpcC5zZXRfdGV4dChcIuW3pumUruWujOaIkO+8jOWPs+mUruWPlua2iO+8m+WNiuW+hO+8mlwiICsgdGhpcy5jaXJjbGVSYWRpdXMgKyBcIiDnsbNcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgdGhpcy5kZXN0cm95KClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog57uT5p2f5rWL6YePXHJcbiAgICovXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOa1i+mHj1xyXG4gICAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBzdXBlci5kZXN0cm95KClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVIZWlnaHRcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9GQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFpR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Measure/MeasureHeight/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureLocation/index.js": /*!**********************************************!*\ !*** ./src/Measure/MeasureLocation/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n/* harmony import */ var _Tools_proj__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Tools/proj */ \"./src/Tools/proj.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-22 16:13\r\n * @description:index\r\n * @update: 2022-07-22 16:13\r\n */\n\n\n\nvar MeasureLocation = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 坐标测量\r\n * */\n function MeasureLocation(sdk) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, MeasureLocation);\n _this = _callSuper(this, MeasureLocation, [sdk, {\n text: \"\"\n }]);\n _this.defaultColor = \"#f11515\";\n _this.locationID = _this.randomString();\n _this.position = new Cesium.Cartesian3();\n _this.text = \"\";\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(MeasureLocation, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(MeasureLocation, [{\n key: \"start\",\n value:\n /**\r\n * 开始测量\r\n */\n function start() {\n var _this2 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureLocation, \"start\", this, 3)([]);\n this.cache_id = MeasureLocation.create_point(this);\n MeasureLocation.createLocation(this);\n var leftEvent = function leftEvent(movement, cartesian) {\n _this2.position = cartesian;\n var entity = _this2.viewer.entities.getById(_this2.locationID);\n if (entity) {\n entity.show = true;\n }\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n var coordinateSystem = Object(_Global_global__WEBPACK_IMPORTED_MODULE_9__[\"getCoordinateSystem\"])();\n if (coordinateSystem === 'EPSG:4326') {\n _this2.text = \"\\u7ECF\\u5EA6\\uFF1A\".concat(Number(p.lng.toFixed(8)), \"\\n\\u7EAC\\u5EA6\\uFF1A\").concat(Number(p.lat.toFixed(8)), \"\\n\\u6D77\\u62D4\\uFF1A\").concat(Number(p.alt.toFixed(2)));\n } else {\n var result = _this2.convert([{\n x: p.lng,\n y: p.lat,\n z: p.alt\n }], 'EPSG:4326', coordinateSystem);\n _this2.text = \"x\\uFF1A\".concat(Number(result.points[0].x.toFixed(8)), \"\\ny\\uFF1A\").concat(Number(result.points[0].y.toFixed(8)), \"\\nz\\uFF1A\").concat(Number(result.points[0].z.toFixed(2)));\n }\n _this2.end();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_right(function (movement, cartesian) {\n _this2.destroy();\n _this2.end();\n });\n this.event.mouse_move(function (movement, cartesian) {\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n var entity = _this2.viewer.entities.getById(_this2.locationID);\n if (entity) {\n entity.show = true;\n }\n _this2.position = cartesian;\n var p = _this2.cartesian3Towgs84(cartesian, _this2.viewer);\n var coordinateSystem = Object(_Global_global__WEBPACK_IMPORTED_MODULE_9__[\"getCoordinateSystem\"])();\n if (coordinateSystem === 'EPSG:4326') {\n _this2.text = \"\\u7ECF\\u5EA6\\uFF1A\".concat(Number(p.lng.toFixed(8)), \"\\n\\u7EAC\\u5EA6\\uFF1A\").concat(Number(p.lat.toFixed(8)), \"\\n\\u6D77\\u62D4\\uFF1A\").concat(Number(p.alt.toFixed(2)));\n } else {\n var result = _this2.convert([{\n x: p.lng,\n y: p.lat,\n z: p.alt\n }], 'EPSG:4326', coordinateSystem);\n _this2.text = \"x\\uFF1A\".concat(Number(result.points[0].x.toFixed(8)), \"\\ny\\uFF1A\").concat(Number(result.points[0].y.toFixed(8)), \"\\nz\\uFF1A\").concat(Number(result.points[0].z.toFixed(2)));\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this2.destroy();\n _this2.end();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.remove_entity(this.locationID);\n this.remove_entity(this.cache_id);\n _superPropGet(MeasureLocation, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureLocation, \"end\", this, 3)([]);\n }\n }], [{\n key: \"createLocation\",\n value: function createLocation(that) {\n that.viewer.entities.add(new Cesium.Entity({\n id: that.locationID,\n show: false,\n position: new Cesium.CallbackProperty(function () {\n return that.position;\n }, false),\n label: {\n text: new Cesium.CallbackProperty(function () {\n return that.text;\n }, false),\n //标注文字描述\n font: '22px Microsoft YaHei',\n fillColor: new Cesium.Color.fromCssColorString(that.defaultColor),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n // scale: this.options.label.scale,\n horizontalOrigin: Cesium.HorizontalOrigin.LEFT,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n pixelOffset: new Cesium.Cartesian2(-100, -50)\n // disableDepthTestDistance: this.disableDepthTestDistance,\n },\n billboard: {\n image: that.getSourceRootPath() + \"/img/location.png\",\n color: Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.99)\"),\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // scaleByDistance: new Cesium.NearFarScalar(\n // 2000,\n // 1,\n // 1000000,\n // 0\n // ),\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n width: 48,\n height: 48\n }\n }));\n }\n }, {\n key: \"create_point\",\n value: function create_point(that) {\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n position: new Cesium.CallbackProperty(function () {\n return that.position;\n }, false),\n billboard: _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({\n image: that.getSourceRootPath() + '/img/point.png',\n color: Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.99)\"),\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n }, \"color\", Cesium.Color.WHITE.withAlpha(0.99))\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureLocation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlTG9jYXRpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTWVhc3VyZS9NZWFzdXJlTG9jYXRpb24vaW5kZXguanM/Nzk3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDctMjIgMTY6MTNcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMi0wNy0yMiAxNjoxM1xyXG4gKi9cclxuaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IFByb2ogfSBmcm9tIFwiLi4vLi4vVG9vbHMvcHJvalwiO1xyXG5pbXBvcnQgeyBnZXRDb29yZGluYXRlU3lzdGVtIH0gZnJvbSBcIi4uLy4uL0dsb2JhbC9nbG9iYWxcIjtcclxuXHJcbmNsYXNzIE1lYXN1cmVMb2NhdGlvbiBleHRlbmRzIE1lYXN1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQGRlc2NyaXB0aW9uIOWdkOagh+a1i+mHj1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrKSB7XHJcbiAgICBzdXBlcihzZGssIHt0ZXh0OiBcIlwifSk7XHJcbiAgICB0aGlzLmRlZmF1bHRDb2xvciA9IFwiI2YxMTUxNVwiXHJcbiAgICB0aGlzLmxvY2F0aW9uSUQgPSB0aGlzLnJhbmRvbVN0cmluZygpXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgIHRoaXMudGV4dCA9IFwiXCJcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVMb2NhdGlvbih0aGF0KSB7XHJcbiAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQobmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICBpZDogdGhhdC5sb2NhdGlvbklELFxyXG4gICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25cclxuICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICBsYWJlbDoge1xyXG4gICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC50ZXh0XHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIC8v5qCH5rOo5paH5a2X5o+P6L+wXHJcbiAgICAgICAgZm9udDogJzIycHggTWljcm9zb2Z0IFlhSGVpJyxcclxuXHJcbiAgICAgICAgZmlsbENvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0LmRlZmF1bHRDb2xvciksXHJcbiAgICAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkUsXHJcbiAgICAgICAgLy/moIfms6jnmoTpga7mjKHot53nprvorr7nva7kuLoxMDDliJnop4bop5LkuI7moIfms6jnmoTot53nprvlpKfkuo4xMDDnsbPml7bkvJrmnInpga7mjKFcclxuICAgICAgICAvLyBkaXN0YW5jZURpc3BsYXlDb25kaXRpb246IHRoaXMuZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uLFxyXG4gICAgICAgIC8vIHNjYWxlOiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGUsXHJcbiAgICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uTEVGVCxcclxuICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuXHJcbiAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMihcclxuICAgICAgICAgIC0xMDAsXHJcbiAgICAgICAgICAtNTBcclxuICAgICAgICApLFxyXG4gICAgICAgIC8vIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogdGhpcy5kaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyBcIi9pbWcvbG9jYXRpb24ucG5nXCIsXHJcbiAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMC45OSlgKSxcclxuICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAvLyBzY2FsZUJ5RGlzdGFuY2U6IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcihcclxuICAgICAgICAvLyAgIDIwMDAsXHJcbiAgICAgICAgLy8gICAxLFxyXG4gICAgICAgIC8vICAgMTAwMDAwMCxcclxuICAgICAgICAvLyAgIDBcclxuICAgICAgICAvLyApLFxyXG4gICAgICAgIHNjYWxlOiAxLFxyXG4gICAgICAgIGhvcml6b250YWxPcmlnaW46IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkNFTlRFUixcclxuICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICB3aWR0aDogNDgsXHJcbiAgICAgICAgaGVpZ2h0OiA0OFxyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVfcG9pbnQodGhhdCkge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25cclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOTkpYCksXHJcbiAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW8gOWni+a1i+mHj1xyXG4gICAqL1xyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIHRoaXMuY2FjaGVfaWQgPSBNZWFzdXJlTG9jYXRpb24uY3JlYXRlX3BvaW50KHRoaXMpXHJcbiAgICAgIE1lYXN1cmVMb2NhdGlvbi5jcmVhdGVMb2NhdGlvbih0aGlzKVxyXG5cclxuICAgICAgbGV0IGxlZnRFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IGNhcnRlc2lhblxyXG4gICAgICAgIGxldCBlbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMubG9jYXRpb25JRClcclxuICAgICAgICBpZihlbnRpdHkpIHtcclxuICAgICAgICAgIGVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZVN5c3RlbSA9IGdldENvb3JkaW5hdGVTeXN0ZW0oKVxyXG4gICAgICAgIGlmKGNvb3JkaW5hdGVTeXN0ZW09PT0nRVBTRzo0MzI2Jykge1xyXG4gICAgICAgICAgdGhpcy50ZXh0ID0gYOe7j+W6pu+8miR7TnVtYmVyKHAubG5nLnRvRml4ZWQoOCkpfVxcbue6rOW6pu+8miR7TnVtYmVyKHAubGF0LnRvRml4ZWQoOCkpfVxcbua1t+aLlO+8miR7TnVtYmVyKHAuYWx0LnRvRml4ZWQoMikpfWBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb252ZXJ0KFt7eDogcC5sbmcsIHk6IHAubGF0LCB6OiBwLmFsdH1dLCAnRVBTRzo0MzI2JywgY29vcmRpbmF0ZVN5c3RlbSlcclxuICAgICAgICAgIHRoaXMudGV4dCA9IGB477yaJHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS54LnRvRml4ZWQoOCkpfVxcbnnvvJoke051bWJlcihyZXN1bHQucG9pbnRzWzBdLnkudG9GaXhlZCg4KSl9XFxueu+8miR7TnVtYmVyKHJlc3VsdC5wb2ludHNbMF0uei50b0ZpeGVkKDIpKX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQobGVmdEV2ZW50KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KClcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhcnRlc2lhbiwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLmxvY2F0aW9uSUQpXHJcbiAgICAgICAgaWYoZW50aXR5KSB7XHJcbiAgICAgICAgICBlbnRpdHkuc2hvdyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IGNhcnRlc2lhblxyXG4gICAgICAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgIGxldCBjb29yZGluYXRlU3lzdGVtID0gZ2V0Q29vcmRpbmF0ZVN5c3RlbSgpXHJcbiAgICAgICAgaWYoY29vcmRpbmF0ZVN5c3RlbT09PSdFUFNHOjQzMjYnKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHQgPSBg57uP5bqm77yaJHtOdW1iZXIocC5sbmcudG9GaXhlZCg4KSl9XFxu57qs5bqm77yaJHtOdW1iZXIocC5sYXQudG9GaXhlZCg4KSl9XFxu5rW35ouU77yaJHtOdW1iZXIocC5hbHQudG9GaXhlZCgyKSl9YFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmNvbnZlcnQoW3t4OiBwLmxuZywgeTogcC5sYXQsIHo6IHAuYWx0fV0sICdFUFNHOjQzMjYnLCBjb29yZGluYXRlU3lzdGVtKVxyXG4gICAgICAgICAgdGhpcy50ZXh0ID0gYHjvvJoke051bWJlcihyZXN1bHQucG9pbnRzWzBdLngudG9GaXhlZCg4KSl9XFxuee+8miR7TnVtYmVyKHJlc3VsdC5wb2ludHNbMF0ueS50b0ZpeGVkKDgpKX1cXG5677yaJHtOdW1iZXIocmVzdWx0LnBvaW50c1swXS56LnRvRml4ZWQoMikpfWBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk5rWL6YePXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVtb3ZlX2VudGl0eSh0aGlzLmxvY2F0aW9uSUQpXHJcbiAgICB0aGlzLnJlbW92ZV9lbnRpdHkodGhpcy5jYWNoZV9pZClcclxuICAgIHN1cGVyLmRlc3Ryb3koKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog57uT5p2f5rWL6YePXHJcbiAgICovXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVMb2NhdGlvblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0VBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUEwRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Measure/MeasureLocation/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureProjectionDistance/index.js": /*!********************************************************!*\ !*** ./src/Measure/MeasureProjectionDistance/index.js ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-11 10:31\r\n * @description:index\r\n * @update: 2022-07-11 10:31\r\n */\n\n\nvar MeasureProjectionDistance = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 投影距离测量\r\n * */\n function MeasureProjectionDistance(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureProjectionDistance);\n _this = _callSuper(this, MeasureProjectionDistance, [sdk, options]);\n _this.options.color = _this.options.color || \"#00ffff\";\n _this.start_id = \"\";\n _this.end_id = \"\";\n _this.polyline_id = \"\";\n _this.clampPositions = [];\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureProjectionDistance, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureProjectionDistance, [{\n key: \"clampToGroundMeasure\",\n value: function () {\n var _clampToGroundMeasure = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(meters, cb) {\n var _this2 = this;\n var positions, res, coordinates, total, _iterator, _step, item, index, r;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n positions = [];\n this.ids.forEach(function (id, index) {\n var p = _this2.viewer.entities.getById(id).position.getValue();\n positions.push(_this2.cartesian3Towgs84(p, _this2.viewer));\n });\n res = this.chunkLine(positions, meters);\n coordinates = [];\n res.forEach(function (Feature, index) {\n if (index === 0) {\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Feature.geometry.coordinates);\n } else {\n coordinates.push(Feature.geometry.coordinates[1]);\n }\n });\n total = coordinates.length;\n _iterator = _createForOfIteratorHelper(coordinates);\n _context.prev = 7;\n _iterator.s();\n case 9:\n if ((_step = _iterator.n()).done) {\n _context.next = 18;\n break;\n }\n item = _step.value;\n index = coordinates.indexOf(item);\n _context.next = 14;\n return this.getHeight({\n lng: item[0],\n lat: item[1],\n alt: 0\n }, index, total);\n case 14:\n r = _context.sent;\n cb(null, r);\n case 16:\n _context.next = 9;\n break;\n case 18:\n _context.next = 23;\n break;\n case 20:\n _context.prev = 20;\n _context.t0 = _context[\"catch\"](7);\n _iterator.e(_context.t0);\n case 23:\n _context.prev = 23;\n _iterator.f();\n return _context.finish(23);\n case 26:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[7, 20, 23, 26]]);\n }));\n function clampToGroundMeasure(_x, _x2) {\n return _clampToGroundMeasure.apply(this, arguments);\n }\n return clampToGroundMeasure;\n }()\n }, {\n key: \"sampleHeight\",\n value: function () {\n var _sampleHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(p1, index) {\n var p2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.sampleHeightMostDetailed([p1]);\n case 2:\n p2 = _context2.sent;\n p1.alt = p2[0].height;\n return _context2.abrupt(\"return\", {\n position: p1,\n index: index\n });\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function sampleHeight(_x3, _x4) {\n return _sampleHeight.apply(this, arguments);\n }\n return sampleHeight;\n }()\n }, {\n key: \"getHeight\",\n value: function () {\n var _getHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(p1, index, total) {\n var p2, total_length;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return this.sampleHeightMostDetailed([p1]);\n case 2:\n p2 = _context3.sent;\n p1.alt = p2[0].height;\n this.clampPositions.push({\n position: p1,\n index: index\n });\n if (!(total === this.clampPositions.length)) {\n _context3.next = 8;\n break;\n }\n total_length = this.startCompute();\n return _context3.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length,\n total_length: total_length\n });\n case 8:\n return _context3.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length\n });\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function getHeight(_x5, _x6, _x7) {\n return _getHeight.apply(this, arguments);\n }\n return getHeight;\n }()\n }, {\n key: \"startCompute\",\n value: function startCompute() {\n var _this3 = this;\n this.clampPositions.sort(function (a, b) {\n return a.index < b.index;\n });\n var total_length = 0;\n var l = this.clampPositions.length - 1;\n this.clampPositions.forEach(function (item, index) {\n if (index !== l) {\n var d1 = _this3.computeDistance2([item.position, _this3.clampPositions[index + 1].position]);\n var d2 = Math.abs(item.position.alt - _this3.clampPositions[index + 1].position.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n total_length += d3;\n }\n });\n return Number(total_length.toFixed(2));\n }\n }, {\n key: \"getLabel\",\n value: function getLabel(text) {\n return {\n text: text || '',\n //标注文字描述\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n\n // disableDepthTestDistance: this.disableDepthTestDistance,\n };\n }\n\n /**\r\n * 开始测量\r\n */\n }, {\n key: \"start\",\n value: function start() {\n var _this4 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureProjectionDistance, \"start\", this, 3)([]);\n this.positions = [];\n this.cachePositions = [];\n var leftEvent = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4(movement, car) {\n var cur_point, pre_p, cur_len, text, startPoint;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (_this4.ids.length === 0) {\n _this4.polyline_id = MeasureProjectionDistance.createPolyline(_this4);\n _this4.start_id = MeasureProjectionDistance.create_point(car, {\n image: \"start1.png\",\n width: 30,\n height: 38,\n label: _this4.getLabel(\"\")\n }, _this4);\n //创建起点\n }\n _this4.positions = _this4.cachePositions.concat(car);\n _this4.tip.setPosition(car, movement.position.x, movement.position.y);\n if (_this4.ids.length !== 0) {\n cur_point = _this4.cartesian3Towgs84(car, _this4.viewer);\n pre_p = _this4.cartesian3Towgs84(_this4.cachePositions[_this4.cachePositions.length - 1], _this4.viewer);\n cur_len = _this4.computeDistance2([cur_point, pre_p]);\n text = \"投影距离:\" + cur_len + \" 米\";\n _this4.ids.push(MeasureProjectionDistance.create_point(car, {\n label: _this4.getLabel(text)\n }, _this4));\n _this4.cachePositions.push(car);\n } else {\n _this4.cachePositions.push(car);\n _this4.ids.push(MeasureProjectionDistance.create_point(car, {\n show: false\n }, _this4));\n startPoint = _this4.viewer.entities.getById(_this4.ids[0]);\n if (startPoint) {\n startPoint.billboard.show = false;\n }\n }\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n return function leftEvent(_x8, _x9) {\n return _ref.apply(this, arguments);\n };\n }();\n var rightEvent = function rightEvent(movement, car) {\n if (_this4.cachePositions.length) {\n _this4.positions = _this4.cachePositions;\n _this4.end_id = MeasureProjectionDistance.create_point(_this4.cachePositions[_this4.cachePositions.length - 1], {\n image: \"end1.png\",\n width: 30,\n height: 38\n }, _this4);\n var endPoint = _this4.viewer.entities.getById(_this4.ids[_this4.ids.length - 1]);\n if (endPoint) {\n endPoint.billboard.show = false;\n }\n }\n if (_this4.cachePositions.length < 2) {\n _this4.destroy();\n YJ.Measure.Measures.pop(); //弹出测量实体\n }\n _this4.end();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this4.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n _this4.positions = _this4.cachePositions.concat(car);\n if (_this4.cachePositions.length) {\n var cur_point = _this4.cartesian3Towgs84(car, _this4.viewer);\n var pre_p = _this4.cartesian3Towgs84(_this4.cachePositions[_this4.cachePositions.length - 1], _this4.viewer);\n var cur_len = _this4.computeDistance2([cur_point, pre_p]);\n var text = \"当前投影距离:\" + cur_len + \" 米\";\n _this4.tip.set_text(text);\n }\n });\n this.event.mouse_right(rightEvent);\n this.event.mouse_right_keyboard_ctrl(function (movement, car) {\n if (_this4.cachePositions.length) {\n _this4.cachePositions.pop();\n _this4.remove_entity(_this4.ids.pop());\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this4.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this5 = this;\n [this.polyline_id, this.end_id, this.start_id].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.ids)).forEach(function (id) {\n _this5.remove_entity(id);\n });\n _superPropGet(MeasureProjectionDistance, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n // YJ.Measure.SetMeasureStatus(false)\n // this.tip.destroy()\n // this.event.destroy()\n _superPropGet(MeasureProjectionDistance, \"end\", this, 3)([]);\n // this.setPickStatus(this.pickStatus.pick)\n }\n }], [{\n key: \"createPolyline\",\n value: function createPolyline(that) {\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n clampToGround: true,\n width: 3,\n material: new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n dashLength: 20 //短划线长度\n })\n },\n zIndex: 99999999\n }));\n return id;\n }\n }, {\n key: \"create_point\",\n value: function create_point(cartesian, _ref2, that) {\n var label = _ref2.label,\n _ref2$image = _ref2.image,\n image = _ref2$image === void 0 ? \"point.png\" : _ref2$image,\n width = _ref2.width,\n height = _ref2.height;\n var id = that.randomString();\n var p = that.cartesian3Towgs84(cartesian, that.viewer);\n if (label) {\n label.pixelOffset = new Cesium.Cartesian2(0, -(height || 32));\n }\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n label: label,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/' + image,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: width,\n height: height\n }\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureProjectionDistance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlUHJvamVjdGlvbkRpc3RhbmNlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL01lYXN1cmUvTWVhc3VyZVByb2plY3Rpb25EaXN0YW5jZS9pbmRleC5qcz84M2EwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogaW5kZXhcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMi0wNy0xMSAxMDozMVxyXG4gKiBAZGVzY3JpcHRpb27vvJppbmRleFxyXG4gKiBAdXBkYXRlOiAyMDIyLTA3LTExIDEwOjMxXHJcbiAqL1xyXG5cclxuaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL2luZGV4XCJcclxuXHJcbmNsYXNzIE1lYXN1cmVQcm9qZWN0aW9uRGlzdGFuY2UgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDmipXlvbHot53nprvmtYvph49cclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IgfHwgXCIjMDBmZmZmXCJcclxuICAgIHRoaXMuc3RhcnRfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmVuZF9pZCA9IFwiXCJcclxuICAgIHRoaXMucG9seWxpbmVfaWQgPSBcIlwiXHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zID0gW11cclxuICB9XHJcblxyXG4gIGFzeW5jIGNsYW1wVG9Hcm91bmRNZWFzdXJlKG1ldGVycywgY2IpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5pZHMuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBwID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZChpZCkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHAsIHRoaXMudmlld2VyKSlcclxuICAgIH0pXHJcbiAgICBsZXQgcmVzID0gdGhpcy5jaHVua0xpbmUocG9zaXRpb25zLCBtZXRlcnMpXHJcbiAgICBsZXQgY29vcmRpbmF0ZXMgPSBbXVxyXG4gICAgcmVzLmZvckVhY2goKEZlYXR1cmUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIGNvb3JkaW5hdGVzID0gWy4uLkZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29vcmRpbmF0ZXMucHVzaChGZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgbGV0IHRvdGFsID0gY29vcmRpbmF0ZXMubGVuZ3RoXHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY29vcmRpbmF0ZXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgbGV0IHIgPSBhd2FpdCB0aGlzLmdldEhlaWdodCh7bG5nOiBpdGVtWzBdLCBsYXQ6IGl0ZW1bMV0sIGFsdDogMH0sIGluZGV4LCB0b3RhbCwpXHJcbiAgICAgIGNiKG51bGwsIHIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYW1wbGVIZWlnaHQocDEsIGluZGV4KSB7XHJcbiAgICBsZXQgcDIgPSBhd2FpdCB0aGlzLnNhbXBsZUhlaWdodE1vc3REZXRhaWxlZChbcDFdKVxyXG4gICAgcDEuYWx0ID0gcDJbMF0uaGVpZ2h0XHJcbiAgICByZXR1cm4ge3Bvc2l0aW9uOiBwMSwgaW5kZXh9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgZ2V0SGVpZ2h0KHAxLCBpbmRleCwgdG90YWwpIHtcclxuICAgIGxldCBwMiA9IGF3YWl0IHRoaXMuc2FtcGxlSGVpZ2h0TW9zdERldGFpbGVkKFtwMV0pXHJcbiAgICBwMS5hbHQgPSBwMlswXS5oZWlnaHRcclxuICAgIHRoaXMuY2xhbXBQb3NpdGlvbnMucHVzaCh7cG9zaXRpb246IHAxLCBpbmRleH0pXHJcbiAgICBpZiAodG90YWwgPT09IHRoaXMuY2xhbXBQb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCB0b3RhbF9sZW5ndGggPSB0aGlzLnN0YXJ0Q29tcHV0ZSgpXHJcbiAgICAgIHJldHVybiB7dG90YWwsIGN1cnJlbnQ6IHRoaXMuY2xhbXBQb3NpdGlvbnMubGVuZ3RoLCB0b3RhbF9sZW5ndGh9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3RvdGFsLCBjdXJyZW50OiB0aGlzLmNsYW1wUG9zaXRpb25zLmxlbmd0aCx9XHJcbiAgfVxyXG5cclxuICBzdGFydENvbXB1dGUoKSB7XHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgcmV0dXJuIGEuaW5kZXggPCBiLmluZGV4XHJcbiAgICB9KVxyXG4gICAgbGV0IHRvdGFsX2xlbmd0aCA9IDBcclxuICAgIGxldCBsID0gdGhpcy5jbGFtcFBvc2l0aW9ucy5sZW5ndGggLSAxXHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gbCkge1xyXG4gICAgICAgIGxldCBkMSA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbaXRlbS5wb3NpdGlvbiwgdGhpcy5jbGFtcFBvc2l0aW9uc1tpbmRleCArIDFdLnBvc2l0aW9uXSlcclxuICAgICAgICBsZXQgZDIgPSBNYXRoLmFicyhpdGVtLnBvc2l0aW9uLmFsdCAtIHRoaXMuY2xhbXBQb3NpdGlvbnNbaW5kZXggKyAxXS5wb3NpdGlvbi5hbHQpXHJcbiAgICAgICAgbGV0IGQzID0gTWF0aC5zcXJ0KGQxICogZDEgKyBkMiAqIGQyKVxyXG4gICAgICAgIHRvdGFsX2xlbmd0aCArPSBkM1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIE51bWJlcih0b3RhbF9sZW5ndGgudG9GaXhlZCgyKSlcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgY3JlYXRlUG9seWxpbmUodGhhdCkge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQsXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25zXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IDMsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBjb2xvcjogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5vcHRpb25zLmNvbG9yIHx8IHRoYXQuZGVmYXVsdENvbG9yKSxcclxuICAgICAgICAgIGRhc2hMZW5ndGg6IDIwLCAvL+efreWIkue6v+mVv+W6plxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9LFxyXG4gICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICB9KSlcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2ludChjYXJ0ZXNpYW4sIHtcclxuICAgIGxhYmVsLCBpbWFnZSA9IFwicG9pbnQucG5nXCIsXHJcbiAgICB3aWR0aCxcclxuICAgIGhlaWdodFxyXG4gIH0sIHRoYXQpIHtcclxuICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgIGxldCBwID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQudmlld2VyKVxyXG4gICAgaWYgKGxhYmVsKSB7XHJcbiAgICAgIGxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgIDAsIC0oaGVpZ2h0IHx8IDMyKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAubG5nLCBwLmxhdCwgcC5hbHQpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nLycgKyBpbWFnZSxcclxuICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgZ2V0TGFiZWwodGV4dCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGV4dDogdGV4dCB8fCAnJyxcclxuICAgICAgLy/moIfms6jmloflrZfmj4/ov7BcclxuICAgICAgZm9udDogJzIwcHggTWljcm9zb2Z0IFlhSGVpJyxcclxuICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZjFlNjA1JyksXHJcbiAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAvL+agh+azqOeahOmBruaMoei3neemu+iuvue9ruS4ujEwMOWImeinhuinkuS4juagh+azqOeahOi3neemu+Wkp+S6jjEwMOexs+aXtuS8muaciemBruaMoVxyXG4gICAgICAvLyBkaXN0YW5jZURpc3BsYXlDb25kaXRpb246IHRoaXMuZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uLFxyXG4gICAgICBzY2FsZTogMSxcclxuICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcblxyXG4gICAgICAvLyBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IHRoaXMuZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5byA5aeL5rWL6YePXHJcbiAgICovXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIHN1cGVyLnN0YXJ0KClcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLmNhY2hlUG9zaXRpb25zID0gW11cclxuXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSBhc3luYyAobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucG9seWxpbmVfaWQgPSAoTWVhc3VyZVByb2plY3Rpb25EaXN0YW5jZS5jcmVhdGVQb2x5bGluZSh0aGlzKSlcclxuICAgICAgICAgIHRoaXMuc3RhcnRfaWQgPSBNZWFzdXJlUHJvamVjdGlvbkRpc3RhbmNlLmNyZWF0ZV9wb2ludChjYXIsIHtcclxuICAgICAgICAgICAgaW1hZ2U6IFwic3RhcnQxLnBuZ1wiLCB3aWR0aDogMzAsIGhlaWdodDogMzgsIGxhYmVsOiB0aGlzLmdldExhYmVsKFwiXCIpXHJcbiAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgICAgLy/liJvlu7rotbfngrlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQucG9zaXRpb24ueCwgbW92ZW1lbnQucG9zaXRpb24ueSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWRzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgbGV0IGN1cl9wb2ludCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FyLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIGxldCBwcmVfcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5jYWNoZVBvc2l0aW9uc1t0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCAtIDFdLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIGxldCBjdXJfbGVuID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtjdXJfcG9pbnQsIHByZV9wXSlcclxuICAgICAgICAgIGxldCB0ZXh0ID0gXCLmipXlvbHot53nprvvvJpcIiArIGN1cl9sZW4gKyBcIiDnsbNcIlxyXG4gICAgICAgICAgdGhpcy5pZHMucHVzaChNZWFzdXJlUHJvamVjdGlvbkRpc3RhbmNlLmNyZWF0ZV9wb2ludChjYXIsIHtsYWJlbDogdGhpcy5nZXRMYWJlbCh0ZXh0KX0sIHRoaXMpKVxyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICAgIHRoaXMuaWRzLnB1c2goTWVhc3VyZVByb2plY3Rpb25EaXN0YW5jZS5jcmVhdGVfcG9pbnQoY2FyLCB7c2hvdzogZmFsc2V9LCB0aGlzKSlcclxuICAgICAgICAgIGxldCBzdGFydFBvaW50ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLmlkc1swXSlcclxuICAgICAgICAgIGlmKHN0YXJ0UG9pbnQpIHtcclxuICAgICAgICAgICAgc3RhcnRQb2ludC5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmlnaHRFdmVudCA9IChtb3ZlbWVudCwgY2FyKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnNcclxuICAgICAgICAgIHRoaXMuZW5kX2lkID0gTWVhc3VyZVByb2plY3Rpb25EaXN0YW5jZS5jcmVhdGVfcG9pbnQodGhpcy5jYWNoZVBvc2l0aW9uc1t0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCAtIDFdLCB7XHJcbiAgICAgICAgICAgIGltYWdlOiBcImVuZDEucG5nXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiAzMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAzOCxcclxuICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgICBsZXQgZW5kUG9pbnQgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMuaWRzW3RoaXMuaWRzLmxlbmd0aC0xXSlcclxuICAgICAgICAgIGlmKGVuZFBvaW50KSB7XHJcbiAgICAgICAgICAgIGVuZFBvaW50LmJpbGxib2FyZC5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcclxuICAgICAgICAgIFlKLk1lYXN1cmUuTWVhc3VyZXMucG9wKCkvL+W8ueWHuua1i+mHj+WunuS9k1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KGNhcilcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBjdXJfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgcHJlX3AgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgY3VyX2xlbiA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbY3VyX3BvaW50LCBwcmVfcF0pXHJcbiAgICAgICAgICBsZXQgdGV4dCA9IFwi5b2T5YmN5oqV5b2x6Led56a777yaXCIgKyBjdXJfbGVuICsgXCIg57GzXCJcclxuICAgICAgICAgIHRoaXMudGlwLnNldF90ZXh0KHRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMuaWRzLnBvcCgpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICByaWdodEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk5rWL6YePXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIFt0aGlzLnBvbHlsaW5lX2lkLCB0aGlzLmVuZF9pZCwgdGhpcy5zdGFydF9pZCwgLi4udGhpcy5pZHNdLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZV9lbnRpdHkoaWQpXHJcbiAgICB9KVxyXG4gICAgc3VwZXIuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICog57uT5p2f5rWL6YePXHJcbiAgICovXHJcbiAgZW5kKCkge1xyXG4gICAgLy8gWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgLy8gdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAvLyB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgc3VwZXIuZW5kKClcclxuICAgIC8vIHRoaXMuc2V0UGlja1N0YXR1cyh0aGlzLnBpY2tTdGF0dXMucGljaylcclxuXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZWFzdXJlUHJvamVjdGlvbkRpc3RhbmNlXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUE1QkE7QUFBQTtBQUFBO0FBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQTFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUhBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBK0lBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/MeasureProjectionDistance/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureSlopeDistance/index.js": /*!***************************************************!*\ !*** ./src/Measure/MeasureSlopeDistance/index.js ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Event */ \"./src/Event/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-11 10:31\r\n * @description:index\r\n * @update: 2022-07-11 10:31\r\n */\n\n\n\nvar MeasureSlopeDistance = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 坡度测量\r\n * */\n function MeasureSlopeDistance(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureSlopeDistance);\n _this = _callSuper(this, MeasureSlopeDistance, [sdk, options]);\n _this.options.color = _this.options.color || \"#00ffff\";\n _this.start_id = \"\";\n _this.end_id = \"\";\n _this.polyline_id = \"\";\n _this.clampPositions = [];\n _this.event = new _Event__WEBPACK_IMPORTED_MODULE_10__[\"default\"](sdk);\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureSlopeDistance, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureSlopeDistance, [{\n key: \"clampToGroundMeasure\",\n value: function () {\n var _clampToGroundMeasure = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(meters, cb) {\n var _this2 = this;\n var positions, res, coordinates, total, _iterator, _step, item, index, r;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n positions = [];\n this.ids.forEach(function (id, index) {\n var p = _this2.viewer.entities.getById(id).position.getValue();\n positions.push(_this2.cartesian3Towgs84(p, _this2.viewer));\n });\n res = this.chunkLine(positions, meters);\n coordinates = [];\n res.forEach(function (Feature, index) {\n if (index === 0) {\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Feature.geometry.coordinates);\n } else {\n coordinates.push(Feature.geometry.coordinates[1]);\n }\n });\n total = coordinates.length;\n _iterator = _createForOfIteratorHelper(coordinates);\n _context.prev = 7;\n _iterator.s();\n case 9:\n if ((_step = _iterator.n()).done) {\n _context.next = 18;\n break;\n }\n item = _step.value;\n index = coordinates.indexOf(item);\n _context.next = 14;\n return this.getHeight({\n lng: item[0],\n lat: item[1],\n alt: 0\n }, index, total);\n case 14:\n r = _context.sent;\n cb(null, r);\n case 16:\n _context.next = 9;\n break;\n case 18:\n _context.next = 23;\n break;\n case 20:\n _context.prev = 20;\n _context.t0 = _context[\"catch\"](7);\n _iterator.e(_context.t0);\n case 23:\n _context.prev = 23;\n _iterator.f();\n return _context.finish(23);\n case 26:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[7, 20, 23, 26]]);\n }));\n function clampToGroundMeasure(_x, _x2) {\n return _clampToGroundMeasure.apply(this, arguments);\n }\n return clampToGroundMeasure;\n }()\n }, {\n key: \"sampleHeight\",\n value: function () {\n var _sampleHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(p1, index) {\n var p2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.sampleHeightMostDetailed([p1]);\n case 2:\n p2 = _context2.sent;\n p1.alt = p2[0].height;\n return _context2.abrupt(\"return\", {\n position: p1,\n index: index\n });\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function sampleHeight(_x3, _x4) {\n return _sampleHeight.apply(this, arguments);\n }\n return sampleHeight;\n }()\n }, {\n key: \"getHeight\",\n value: function () {\n var _getHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(p1, index, total) {\n var p2, total_length;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return this.sampleHeightMostDetailed([p1]);\n case 2:\n p2 = _context3.sent;\n p1.alt = p2[0].height;\n this.clampPositions.push({\n position: p1,\n index: index\n });\n if (!(total === this.clampPositions.length)) {\n _context3.next = 8;\n break;\n }\n total_length = this.startCompute();\n return _context3.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length,\n total_length: total_length\n });\n case 8:\n return _context3.abrupt(\"return\", {\n total: total,\n current: this.clampPositions.length\n });\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function getHeight(_x5, _x6, _x7) {\n return _getHeight.apply(this, arguments);\n }\n return getHeight;\n }()\n }, {\n key: \"startCompute\",\n value: function startCompute() {\n var _this3 = this;\n this.clampPositions.sort(function (a, b) {\n return a.index < b.index;\n });\n var total_length = 0;\n var l = this.clampPositions.length - 1;\n this.clampPositions.forEach(function (item, index) {\n if (index !== l) {\n var d1 = _this3.computeDistance2([item.position, _this3.clampPositions[index + 1].position]);\n var d2 = Math.abs(item.position.alt - _this3.clampPositions[index + 1].position.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n total_length += d3;\n }\n });\n return Number(total_length.toFixed(2));\n }\n }, {\n key: \"getLabel\",\n value: function getLabel(text) {\n return {\n text: text || '',\n //标注文字描述\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n\n // disableDepthTestDistance: this.disableDepthTestDistance,\n };\n }\n\n /**\r\n * 开始测量\r\n */\n }, {\n key: \"start\",\n value: function start() {\n var _this4 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureSlopeDistance, \"start\", this, 3)([]);\n this.positions = [];\n this.cachePositions = [];\n var leftEvent = function leftEvent(movement, car) {\n if (_this4.ids.length === 0) {\n _this4.polyline_id = MeasureSlopeDistance.createPolyline(_this4);\n _this4.start_id = MeasureSlopeDistance.create_point(car, {\n image: \"start1.png\",\n width: 30,\n height: 38,\n label: _this4.getLabel(\"\")\n }, _this4);\n //创建起点\n }\n _this4.tip.setPosition(car, movement.position.x, movement.position.y);\n _this4.positions = _this4.cachePositions.concat(car);\n if (_this4.ids.length !== 0) {\n var cur_point = _this4.cartesian3Towgs84(car, _this4.viewer);\n var pre_p = _this4.cartesian3Towgs84(_this4.cachePositions[_this4.cachePositions.length - 1], _this4.viewer);\n if (cur_point.lng !== pre_p.lng || cur_point.lat !== pre_p.lat || cur_point.alt !== pre_p.alt) {\n _this4.cachePositions.push(car);\n //计算坡度\n _this4.computeAngle(pre_p, cur_point);\n }\n } else {\n _this4.cachePositions.push(car);\n _this4.ids.push(MeasureSlopeDistance.create_point(car, {}, _this4));\n var startPoint = _this4.viewer.entities.getById(_this4.ids[0]);\n if (startPoint) {\n startPoint.billboard.show = false;\n }\n }\n };\n var rightEvent = function rightEvent(movement, car) {\n if (_this4.ids.length !== 0) {\n // let cur_point = this.cartesian3Towgs84(car, this.viewer)\n // let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)\n // if (cur_point.lng !== pre_p.lng || cur_point.lat !== pre_p.lat || cur_point.alt !== pre_p.alt) {\n // this.cachePositions.push(car)\n // //计算坡度\n // this.computeAngle(pre_p, cur_point)\n // }\n } else {\n // this.cachePositions.push(car)\n _this4.ids.push(MeasureSlopeDistance.create_point(car, {}, _this4));\n }\n if (_this4.cachePositions.length) {\n _this4.positions = _this4.cachePositions;\n _this4.end_id = MeasureSlopeDistance.create_point(_this4.cachePositions[_this4.cachePositions.length - 1], {\n image: \"end1.png\",\n width: 30,\n height: 38\n }, _this4);\n var endPoint = _this4.viewer.entities.getById(_this4.ids[_this4.ids.length - 1]);\n if (endPoint) {\n endPoint.billboard.show = false;\n }\n }\n if (_this4.cachePositions.length < 2) {\n _this4.destroy();\n YJ.Measure.Measures.pop(); //弹出测量实体\n }\n _this4.end();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n movement.endPosition.y += 2;\n var position = movement.endPosition;\n var cartesian = _this4.viewer.scene.pickPosition(position);\n if (!cartesian) {\n var ray = _this4.viewer.camera.getPickRay(position); //相交的射线\n cartesian = _this4.viewer.scene.globe.pick(ray, _this4.viewer.scene);\n }\n _this4.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n _this4.positions = _this4.cachePositions.concat(cartesian);\n if (_this4.cachePositions.length) {\n var cur_point = _this4.cartesian3Towgs84(cartesian, _this4.viewer);\n var pre_p = _this4.cartesian3Towgs84(_this4.cachePositions[_this4.cachePositions.length - 1], _this4.viewer);\n var d1 = _this4.computeDistance2([pre_p, cur_point]);\n var d2 = Math.abs(pre_p.alt - cur_point.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n var cosAlpha = d1 / d3;\n var acos = Math.acos(cosAlpha);\n var angle = _this4.radiansToDegrees(acos);\n var label = \"坡度:\" + angle.toFixed(2) + \"°\";\n _this4.tip.set_text(label);\n }\n });\n this.event.mouse_right(rightEvent);\n this.event.mouse_right_keyboard_ctrl(function (movement, car) {\n if (_this4.cachePositions.length) {\n _this4.cachePositions.pop();\n _this4.remove_entity(_this4.ids.pop());\n }\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this4.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n }, {\n key: \"computeAngle\",\n value: function computeAngle(start, end) {\n var d1 = this.computeDistance2([start, end]);\n var d2 = Math.abs(start.alt - end.alt);\n var d3 = Math.sqrt(d1 * d1 + d2 * d2);\n var cosAlpha = d1 / d3;\n var acos = Math.acos(cosAlpha);\n var angle = this.radiansToDegrees(acos);\n var label = this.getLabel(\"坡度:\" + angle.toFixed(2) + \"°\");\n label.pixelOffset = new Cesium.Cartesian2(0, -32);\n this.ids.push(MeasureSlopeDistance.create_point(Cesium.Cartesian3.fromDegrees(end.lng, end.lat, end.alt), {\n label: label\n }, this));\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this5 = this;\n [this.polyline_id, this.end_id, this.start_id].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.ids)).forEach(function (id) {\n _this5.remove_entity(id);\n });\n _superPropGet(MeasureSlopeDistance, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n // YJ.Measure.SetMeasureStatus(false)\n // this.tip.destroy()\n // this.event.destroy()\n _superPropGet(MeasureSlopeDistance, \"end\", this, 3)([]);\n // this.setPickStatus(this.pickStatus.pick)\n }\n }], [{\n key: \"createPolyline\",\n value: function createPolyline(that) {\n var id = that.randomString();\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n clampToGround: true,\n width: 3,\n material: new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n dashLength: 20 //短划线长度\n }),\n zIndex: 99999999\n }\n }));\n return id;\n }\n }, {\n key: \"create_point\",\n value: function create_point(cartesian, _ref, that) {\n var label = _ref.label,\n _ref$image = _ref.image,\n image = _ref$image === void 0 ? \"point.png\" : _ref$image,\n width = _ref.width,\n height = _ref.height;\n var id = that.randomString();\n var p = that.cartesian3Towgs84(cartesian, that.viewer);\n if (label) {\n label.pixelOffset = new Cesium.Cartesian2(0, -(height || 32));\n }\n that.viewer.entities.add(new Cesium.Entity({\n id: id,\n label: label,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/' + image,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: width,\n height: height\n }\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureSlopeDistance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlU2xvcGVEaXN0YW5jZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NZWFzdXJlL01lYXN1cmVTbG9wZURpc3RhbmNlL2luZGV4LmpzPzUzN2UiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA3LTExIDEwOjMxXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjItMDctMTEgMTA6MzFcclxuICovXHJcblxyXG5pbXBvcnQgTWVhc3VyZSBmcm9tIFwiLi4vaW5kZXhcIlxyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tIFwiLi4vLi4vRXZlbnRcIjtcclxuXHJcbmNsYXNzIE1lYXN1cmVTbG9wZURpc3RhbmNlIGV4dGVuZHMgTWVhc3VyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiBAZGVzY3JpcHRpb24g5Z2h5bqm5rWL6YePXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yIHx8IFwiIzAwZmZmZlwiXHJcbiAgICB0aGlzLnN0YXJ0X2lkID0gXCJcIlxyXG4gICAgdGhpcy5lbmRfaWQgPSBcIlwiXHJcbiAgICB0aGlzLnBvbHlsaW5lX2lkID0gXCJcIlxyXG4gICAgdGhpcy5jbGFtcFBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoc2RrKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2xhbXBUb0dyb3VuZE1lYXN1cmUobWV0ZXJzLCBjYikge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmlkcy5mb3JFYWNoKChpZCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IHAgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKGlkKS5wb3NpdGlvbi5nZXRWYWx1ZSgpXHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocCwgdGhpcy52aWV3ZXIpKVxyXG4gICAgfSlcclxuICAgIGxldCByZXMgPSB0aGlzLmNodW5rTGluZShwb3NpdGlvbnMsIG1ldGVycylcclxuICAgIGxldCBjb29yZGluYXRlcyA9IFtdXHJcbiAgICByZXMuZm9yRWFjaCgoRmVhdHVyZSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgY29vcmRpbmF0ZXMgPSBbLi4uRmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc11cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb29yZGluYXRlcy5wdXNoKEZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBsZXQgdG90YWwgPSBjb29yZGluYXRlcy5sZW5ndGhcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29vcmRpbmF0ZXMpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb29yZGluYXRlcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICBsZXQgciA9IGF3YWl0IHRoaXMuZ2V0SGVpZ2h0KHsgbG5nOiBpdGVtWzBdLCBsYXQ6IGl0ZW1bMV0sIGFsdDogMCB9LCBpbmRleCwgdG90YWwsKVxyXG4gICAgICBjYihudWxsLCByKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2FtcGxlSGVpZ2h0KHAxLCBpbmRleCkge1xyXG4gICAgbGV0IHAyID0gYXdhaXQgdGhpcy5zYW1wbGVIZWlnaHRNb3N0RGV0YWlsZWQoW3AxXSlcclxuICAgIHAxLmFsdCA9IHAyWzBdLmhlaWdodFxyXG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHAxLCBpbmRleCB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgZ2V0SGVpZ2h0KHAxLCBpbmRleCwgdG90YWwpIHtcclxuICAgIGxldCBwMiA9IGF3YWl0IHRoaXMuc2FtcGxlSGVpZ2h0TW9zdERldGFpbGVkKFtwMV0pXHJcbiAgICBwMS5hbHQgPSBwMlswXS5oZWlnaHRcclxuICAgIHRoaXMuY2xhbXBQb3NpdGlvbnMucHVzaCh7IHBvc2l0aW9uOiBwMSwgaW5kZXggfSlcclxuICAgIGlmICh0b3RhbCA9PT0gdGhpcy5jbGFtcFBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHRvdGFsX2xlbmd0aCA9IHRoaXMuc3RhcnRDb21wdXRlKClcclxuICAgICAgcmV0dXJuIHsgdG90YWwsIGN1cnJlbnQ6IHRoaXMuY2xhbXBQb3NpdGlvbnMubGVuZ3RoLCB0b3RhbF9sZW5ndGggfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgdG90YWwsIGN1cnJlbnQ6IHRoaXMuY2xhbXBQb3NpdGlvbnMubGVuZ3RoLCB9XHJcbiAgfVxyXG5cclxuICBzdGFydENvbXB1dGUoKSB7XHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgcmV0dXJuIGEuaW5kZXggPCBiLmluZGV4XHJcbiAgICB9KVxyXG4gICAgbGV0IHRvdGFsX2xlbmd0aCA9IDBcclxuICAgIGxldCBsID0gdGhpcy5jbGFtcFBvc2l0aW9ucy5sZW5ndGggLSAxXHJcbiAgICB0aGlzLmNsYW1wUG9zaXRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gbCkge1xyXG4gICAgICAgIGxldCBkMSA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihbaXRlbS5wb3NpdGlvbiwgdGhpcy5jbGFtcFBvc2l0aW9uc1tpbmRleCArIDFdLnBvc2l0aW9uXSlcclxuICAgICAgICBsZXQgZDIgPSBNYXRoLmFicyhpdGVtLnBvc2l0aW9uLmFsdCAtIHRoaXMuY2xhbXBQb3NpdGlvbnNbaW5kZXggKyAxXS5wb3NpdGlvbi5hbHQpXHJcbiAgICAgICAgbGV0IGQzID0gTWF0aC5zcXJ0KGQxICogZDEgKyBkMiAqIGQyKVxyXG4gICAgICAgIHRvdGFsX2xlbmd0aCArPSBkM1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIE51bWJlcih0b3RhbF9sZW5ndGgudG9GaXhlZCgyKSlcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgY3JlYXRlUG9seWxpbmUodGhhdCkge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG4gICAgdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQsXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQucG9zaXRpb25zXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IDMsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBjb2xvcjogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5vcHRpb25zLmNvbG9yIHx8IHRoYXQuZGVmYXVsdENvbG9yKSxcclxuICAgICAgICAgIGRhc2hMZW5ndGg6IDIwLCAvL+efreWIkue6v+mVv+W6plxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVfcG9pbnQoY2FydGVzaWFuLCB7XHJcbiAgICBsYWJlbCwgaW1hZ2UgPSBcInBvaW50LnBuZ1wiLFxyXG4gICAgd2lkdGgsXHJcbiAgICBoZWlnaHRcclxuICB9LCB0aGF0KSB7XHJcbiAgICBsZXQgaWQgPSB0aGF0LnJhbmRvbVN0cmluZygpXHJcbiAgICBsZXQgcCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnZpZXdlcilcclxuICAgIGlmIChsYWJlbCkge1xyXG4gICAgICBsYWJlbC5waXhlbE9mZnNldCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMihcclxuICAgICAgICAwLCAtKGhlaWdodCB8fCAzMilcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIGxhYmVsLFxyXG4gICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwLmxuZywgcC5sYXQsIHAuYWx0KSxcclxuICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy8nICsgaW1hZ2UsXHJcbiAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIGdldExhYmVsKHRleHQpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRleHQ6IHRleHQgfHwgJycsXHJcbiAgICAgIC8v5qCH5rOo5paH5a2X5o+P6L+wXHJcbiAgICAgIGZvbnQ6ICcyMHB4IE1pY3Jvc29mdCBZYUhlaScsXHJcbiAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2YxZTYwNScpLFxyXG4gICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgLy/moIfms6jnmoTpga7mjKHot53nprvorr7nva7kuLoxMDDliJnop4bop5LkuI7moIfms6jnmoTot53nprvlpKfkuo4xMDDnsbPml7bkvJrmnInpga7mjKFcclxuICAgICAgLy8gZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uOiB0aGlzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbixcclxuICAgICAgc2NhbGU6IDEsXHJcbiAgICAgIGhvcml6b250YWxPcmlnaW46IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkNFTlRFUixcclxuICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG5cclxuICAgICAgLy8gZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiB0aGlzLmRpc2FibGVEZXB0aFRlc3REaXN0YW5jZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW8gOWni+a1i+mHj1xyXG4gICAqL1xyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucyA9IFtdXHJcblxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbHlsaW5lX2lkID0gKE1lYXN1cmVTbG9wZURpc3RhbmNlLmNyZWF0ZVBvbHlsaW5lKHRoaXMpKVxyXG4gICAgICAgICAgdGhpcy5zdGFydF9pZCA9IE1lYXN1cmVTbG9wZURpc3RhbmNlLmNyZWF0ZV9wb2ludChjYXIsIHtcclxuICAgICAgICAgICAgaW1hZ2U6IFwic3RhcnQxLnBuZ1wiLCB3aWR0aDogMzAsIGhlaWdodDogMzgsIGxhYmVsOiB0aGlzLmdldExhYmVsKFwiXCIpXHJcbiAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgICAgLy/liJvlu7rotbfngrlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oY2FyLCBtb3ZlbWVudC5wb3NpdGlvbi54LCBtb3ZlbWVudC5wb3NpdGlvbi55KVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgIGxldCBjdXJfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgcHJlX3AgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBpZiAoY3VyX3BvaW50LmxuZyAhPT0gcHJlX3AubG5nIHx8IGN1cl9wb2ludC5sYXQgIT09IHByZV9wLmxhdCB8fCBjdXJfcG9pbnQuYWx0ICE9PSBwcmVfcC5hbHQpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICAgICAgLy/orqHnrpflnaHluqZcclxuICAgICAgICAgICAgdGhpcy5jb21wdXRlQW5nbGUocHJlX3AsIGN1cl9wb2ludClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wdXNoKGNhcilcclxuICAgICAgICAgIHRoaXMuaWRzLnB1c2goTWVhc3VyZVNsb3BlRGlzdGFuY2UuY3JlYXRlX3BvaW50KGNhciwge30sIHRoaXMpKVxyXG4gICAgICAgICAgbGV0IHN0YXJ0UG9pbnQgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMuaWRzWzBdKVxyXG4gICAgICAgICAgaWYoc3RhcnRQb2ludCkge1xyXG4gICAgICAgICAgICBzdGFydFBvaW50LmJpbGxib2FyZC5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGxldCByaWdodEV2ZW50ID0gKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAvLyBsZXQgY3VyX3BvaW50ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXIsIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgLy8gbGV0IHByZV9wID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGlzLmNhY2hlUG9zaXRpb25zW3RoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoIC0gMV0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgLy8gaWYgKGN1cl9wb2ludC5sbmcgIT09IHByZV9wLmxuZyB8fCBjdXJfcG9pbnQubGF0ICE9PSBwcmVfcC5sYXQgfHwgY3VyX3BvaW50LmFsdCAhPT0gcHJlX3AuYWx0KSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY2FjaGVQb3NpdGlvbnMucHVzaChjYXIpXHJcbiAgICAgICAgICAvLyAgIC8v6K6h566X5Z2h5bqmXHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29tcHV0ZUFuZ2xlKHByZV9wLCBjdXJfcG9pbnQpXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHRoaXMuY2FjaGVQb3NpdGlvbnMucHVzaChjYXIpXHJcbiAgICAgICAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVTbG9wZURpc3RhbmNlLmNyZWF0ZV9wb2ludChjYXIsIHt9LCB0aGlzKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVQb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnNcclxuICAgICAgICAgIHRoaXMuZW5kX2lkID0gTWVhc3VyZVNsb3BlRGlzdGFuY2UuY3JlYXRlX3BvaW50KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwge1xyXG4gICAgICAgICAgICBpbWFnZTogXCJlbmQxLnBuZ1wiLFxyXG4gICAgICAgICAgICB3aWR0aDogMzAsXHJcbiAgICAgICAgICAgIGhlaWdodDogMzgsXHJcbiAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgICAgbGV0IGVuZFBvaW50ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLmlkc1t0aGlzLmlkcy5sZW5ndGgtMV0pXHJcbiAgICAgICAgICBpZihlbmRQb2ludCkge1xyXG4gICAgICAgICAgICBlbmRQb2ludC5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLk1lYXN1cmVzLnBvcCgpLy/lvLnlh7rmtYvph4/lrp7kvZNcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQobGVmdEV2ZW50KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55ICs9IDJcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLnZpZXdlci5zY2VuZS5waWNrUG9zaXRpb24ocG9zaXRpb24pXHJcbiAgICAgICAgaWYgKCFjYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgIGNvbnN0IHJheSA9IHRoaXMudmlld2VyLmNhbWVyYS5nZXRQaWNrUmF5KHBvc2l0aW9uKTsgLy/nm7jkuqTnmoTlsITnur9cclxuICAgICAgICAgIGNhcnRlc2lhbiA9IHRoaXMudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB0aGlzLnZpZXdlci5zY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKGNhciwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KGNhcnRlc2lhbilcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBjdXJfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgcHJlX3AgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuY2FjaGVQb3NpdGlvbnNbdGhpcy5jYWNoZVBvc2l0aW9ucy5sZW5ndGggLSAxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgZDEgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW3ByZV9wLCBjdXJfcG9pbnRdKVxyXG4gICAgICAgICAgbGV0IGQyID0gTWF0aC5hYnMocHJlX3AuYWx0IC0gY3VyX3BvaW50LmFsdClcclxuICAgICAgICAgIGxldCBkMyA9IE1hdGguc3FydChkMSAqIGQxICsgZDIgKiBkMilcclxuICAgICAgICAgIGxldCBjb3NBbHBoYSA9IGQxIC8gZDNcclxuICAgICAgICAgIGxldCBhY29zID0gTWF0aC5hY29zKGNvc0FscGhhKVxyXG4gICAgICAgICAgbGV0IGFuZ2xlID0gdGhpcy5yYWRpYW5zVG9EZWdyZWVzKGFjb3MpXHJcbiAgICAgICAgICBsZXQgbGFiZWwgPSBcIuWdoeW6pu+8mlwiICsgYW5nbGUudG9GaXhlZCgyKSArIFwiwrBcIlxyXG4gICAgICAgICAgdGhpcy50aXAuc2V0X3RleHQobGFiZWwpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlUG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgdGhpcy5yZW1vdmVfZW50aXR5KHRoaXMuaWRzLnBvcCgpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgcmlnaHRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXB1dGVBbmdsZShzdGFydCwgZW5kKSB7XHJcbiAgICBsZXQgZDEgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW3N0YXJ0LCBlbmRdKVxyXG4gICAgbGV0IGQyID0gTWF0aC5hYnMoc3RhcnQuYWx0IC0gZW5kLmFsdClcclxuICAgIGxldCBkMyA9IE1hdGguc3FydChkMSAqIGQxICsgZDIgKiBkMilcclxuICAgIGxldCBjb3NBbHBoYSA9IGQxIC8gZDNcclxuICAgIGxldCBhY29zID0gTWF0aC5hY29zKGNvc0FscGhhKVxyXG4gICAgbGV0IGFuZ2xlID0gdGhpcy5yYWRpYW5zVG9EZWdyZWVzKGFjb3MpXHJcbiAgICBsZXQgbGFiZWwgPSB0aGlzLmdldExhYmVsKFwi5Z2h5bqm77yaXCIgKyBhbmdsZS50b0ZpeGVkKDIpICsgXCLCsFwiKVxyXG4gICAgbGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgIDAsIC0oMzIpXHJcbiAgICApXHJcbiAgICB0aGlzLmlkcy5wdXNoKE1lYXN1cmVTbG9wZURpc3RhbmNlLmNyZWF0ZV9wb2ludChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhlbmQubG5nLCBlbmQubGF0LCBlbmQuYWx0KSwge2xhYmVsOiBsYWJlbH0sIHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk5rWL6YePXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIFt0aGlzLnBvbHlsaW5lX2lkLCB0aGlzLmVuZF9pZCwgdGhpcy5zdGFydF9pZCwgLi4udGhpcy5pZHNdLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZV9lbnRpdHkoaWQpXHJcbiAgICB9KVxyXG4gICAgc3VwZXIuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICog57uT5p2f5rWL6YePXHJcbiAgICovXHJcbiAgZW5kKCkge1xyXG4gICAgLy8gWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgLy8gdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAvLyB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgc3VwZXIuZW5kKClcclxuICAgIC8vIHRoaXMuc2V0UGlja1N0YXR1cyh0aGlzLnBpY2tTdGF0dXMucGljaylcclxuXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZWFzdXJlU2xvcGVEaXN0YW5jZVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQWhPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUhBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBcUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/MeasureSlopeDistance/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureTdArea/index.js": /*!********************************************!*\ !*** ./src/Measure/MeasureTdArea/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n/**@extends Measure*/\nvar MeasureTdArea = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 贴地面积测量\r\n * */\n function MeasureTdArea(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureTdArea);\n _this = _callSuper(this, MeasureTdArea, [sdk, options]);\n _this.options.lineColor = '#ffdf53';\n _this.polygon_id = \"\";\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureTdArea, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureTdArea, [{\n key: \"start\",\n value:\n /**\r\n * 开始测量\r\n */\n function start() {\n var _this2 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureTdArea, \"start\", this, 3)([]);\n this.ids = [];\n this.positions = [];\n this.text = \"\";\n this.center = new Cesium.Cartesian3();\n this.cachePositions = [];\n var height = 0;\n var text;\n var leftEvent = function leftEvent(movement, car) {\n if (_this2.ids.length === 0) {\n _this2.polygon_id = MeasureTdArea.create_polygon(_this2);\n }\n _this2.cachePositions.push(_objectSpread({}, car));\n _this2.ids.push(_this2.create_point(_objectSpread({}, car), false));\n var po = _this2.cartesian3Towgs84(_objectSpread({}, car), _this2.viewer);\n if (po.alt > height) {\n height = po.alt;\n }\n _this2.positions = _this2.cachePositions.concat(_objectSpread({}, car));\n _this2.tip.setPosition(_objectSpread({}, car), movement.position.x, movement.position.y);\n };\n var rightEvent = function rightEvent(movement, car) {\n _this2.positions = _this2.cachePositions;\n if (_this2.positions.length > 2) {\n var arr = [];\n _this2.positions.forEach(function (item) {\n var p = _this2.cartesian3Towgs84(item, _this2.viewer);\n arr.push({\n lng: p.lng,\n lat: p.lat\n });\n });\n setTimeout(function () {\n var center = _this2.computeCenter(arr);\n var area = _this2.computeSignedArea(_this2.viewer, arr);\n _this2.center = new Cesium.Cartesian3.fromDegrees(center.lng, center.lat, height);\n _this2.text = \"贴地面积:\" + area + \" ㎡\";\n }, 0);\n } else {\n var error = '面积计算至少需要三个坐标!';\n console.warn(error);\n window.ELEMENT && window.ELEMENT.Message({\n message: error,\n type: 'warning',\n duration: 1500\n });\n _this2.destroy();\n }\n _this2.end();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this2.tip.setPosition(_objectSpread({}, car), movement.endPosition.x, movement.endPosition.y);\n _this2.positions = _this2.cachePositions.concat(_objectSpread({}, car));\n });\n this.event.mouse_right(rightEvent);\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this3 = this;\n [this.polygon_id].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.ids)).forEach(function (id) {\n _this3.remove_entity(id);\n });\n _superPropGet(MeasureTdArea, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureTdArea, \"end\", this, 3)([]);\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var id = that.randomString();\n var scaleByDistance = new Cesium.NearFarScalar(2000, 1, 100000, 0);\n var e = that.viewer.entities.add(new Cesium.Entity({\n id: id,\n label: {\n text: new Cesium.CallbackProperty(function () {\n return that.text;\n }, false),\n //标注文字描述\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#ffffff'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // scaleByDistance,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM\n },\n position: new Cesium.CallbackProperty(function () {\n return that.center;\n }, false),\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(that.positions);\n }, false),\n material: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n zIndex: 99999999\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n if (that.positions.length) return that.positions.concat(that.positions[0]);\n return that.positions;\n }, false),\n width: 2,\n material: new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString(that.options.lineColor || that.defaultColor),\n dashLength: 20 //短划线长度\n }),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureTdArea);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlVGRBcmVhL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL01lYXN1cmUvTWVhc3VyZVRkQXJlYS9pbmRleC5qcz80NDRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNZWFzdXJlIGZyb20gXCIuLi9pbmRleFwiXHJcblxyXG4vKipAZXh0ZW5kcyBNZWFzdXJlKi9cclxuY2xhc3MgTWVhc3VyZVRkQXJlYSBleHRlbmRzIE1lYXN1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQGRlc2NyaXB0aW9uIOi0tOWcsOmdouenr+a1i+mHj1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZUNvbG9yID0gJyNmZmRmNTMnXHJcbiAgICB0aGlzLnBvbHlnb25faWQgPSBcIlwiXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlX3BvbHlnb24odGhhdCkge1xyXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxyXG5cclxuICAgIGxldCBzY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoMjAwMCwgMSwgMTAwMDAwLCAwKVxyXG5cclxuICAgIGxldCBlID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICB0ZXh0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhhdC50ZXh0XHJcbiAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAvL+agh+azqOaWh+Wtl+aPj+i/sFxyXG4gICAgICAgICAgZm9udDogJzIwcHggTWljcm9zb2Z0IFlhSGVpJyxcclxuICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmZmZmZicpLFxyXG4gICAgICAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkUsXHJcbiAgICAgICAgICAvL+agh+azqOeahOmBruaMoei3neemu+iuvue9ruS4ujEwMOWImeinhuinkuS4juagh+azqOeahOi3neemu+Wkp+S6jjEwMOexs+aXtuS8muaciemBruaMoVxyXG4gICAgICAgICAgLy8gZGlzdGFuY2VEaXNwbGF5Q29uZGl0aW9uOiB0aGlzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbixcclxuXHJcbiAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuXHJcbiAgICAgICAgICAvLyBzY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICAgIGhvcml6b250YWxPcmlnaW46IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkNFTlRFUixcclxuICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC5jZW50ZXJcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgICAgY2xhc3NpZmljYXRpb25UeXBlOiBDZXNpdW0uQ2xhc3NpZmljYXRpb25UeXBlLkJPVEgsXHJcbiAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zKVxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvciB8fCB0aGF0LmRlZmF1bHRDb2xvciksXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhhdC5wb3NpdGlvbnMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGF0LnBvc2l0aW9ucy5jb25jYXQodGhhdC5wb3NpdGlvbnNbMF0pXHJcbiAgICAgICAgICAgIHJldHVybiB0aGF0LnBvc2l0aW9uc1xyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5saW5lQ29sb3IgfHwgdGhhdC5kZWZhdWx0Q29sb3IpLFxyXG4gICAgICAgICAgICBkYXNoTGVuZ3RoOiAyMCwgLy/nn63liJLnur/plb/luqZcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICByZXR1cm4gaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW8gOWni+a1i+mHj1xyXG4gICAqL1xyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIHRoaXMuaWRzID0gW11cclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLnRleHQgPSBcIlwiXHJcbiAgICAgIHRoaXMuY2VudGVyID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICAgIGxldCB0ZXh0XHJcblxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbHlnb25faWQgPSBNZWFzdXJlVGRBcmVhLmNyZWF0ZV9wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGVQb3NpdGlvbnMucHVzaCh7IC4uLmNhciB9KVxyXG4gICAgICAgIHRoaXMuaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoeyAuLi5jYXIgfSwgZmFsc2UpKVxyXG4gICAgICAgIGxldCBwbyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoeyAuLi5jYXIgfSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgaWYgKHBvLmFsdCA+IGhlaWdodCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gcG8uYWx0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KHsgLi4uY2FyIH0pXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oeyAuLi5jYXIgfSwgbW92ZW1lbnQucG9zaXRpb24ueCwgbW92ZW1lbnQucG9zaXRpb24ueSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmlnaHRFdmVudCA9IChtb3ZlbWVudCwgY2FyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLmNhY2hlUG9zaXRpb25zXHJcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSBbXVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGl0ZW0sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICBhcnIucHVzaCh7IGxuZzogcC5sbmcsIGxhdDogcC5sYXQgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNlbnRlciA9IHRoaXMuY29tcHV0ZUNlbnRlcihhcnIpXHJcbiAgICAgICAgICAgIGxldCBhcmVhID0gdGhpcy5jb21wdXRlU2lnbmVkQXJlYSh0aGlzLnZpZXdlciwgYXJyKVxyXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjZW50ZXIubG5nLCBjZW50ZXIubGF0LCBoZWlnaHQpXHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IFwi6LS05Zyw6Z2i56ev77yaXCIgKyBhcmVhICsgXCIg446hXCJcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCBlcnJvciA9ICfpnaLnp6/orqHnrpfoh7PlsJHpnIDopoHkuInkuKrlnZDmoIfvvIEnXHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpXHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKHsgLi4uY2FyIH0sIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkpXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLmNhY2hlUG9zaXRpb25zLmNvbmNhdCh7IC4uLmNhciB9KVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgcmlnaHRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOa1i+mHj1xyXG4gICAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBbdGhpcy5wb2x5Z29uX2lkLCAuLi50aGlzLmlkc10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlX2VudGl0eShpZClcclxuICAgIH0pXHJcbiAgICBzdXBlci5kZXN0cm95KClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOe7k+adn+a1i+mHj1xyXG4gICAqL1xyXG4gIGVuZCgpIHtcclxuICAgIHN1cGVyLmVuZCgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZWFzdXJlVGRBcmVhXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF6SkE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQXVHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Measure/MeasureTdArea/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureTriangle/index.js": /*!**********************************************!*\ !*** ./src/Measure/MeasureTriangle/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-21 15:22\r\n * @description:index\r\n * @update: 2022-07-21 15:22\r\n */\n\nvar MeasureTriangle = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 三角测量\r\n * */\n function MeasureTriangle(sdk) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MeasureTriangle);\n return _callSuper(this, MeasureTriangle, [sdk]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(MeasureTriangle, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MeasureTriangle, [{\n key: \"cal_center\",\n value: function cal_center(positions) {\n var p1 = this.cartesian3Towgs84(positions[0], this.viewer);\n var p2 = this.cartesian3Towgs84(positions[1], this.viewer);\n var center = this.computeCenter([p1, p2]);\n return Cesium.Cartesian3.fromDegrees(center.lng, center.lat, (p1.alt + p2.alt) / 2);\n }\n }, {\n key: \"cal_distance\",\n value: function cal_distance(positions) {\n var p1 = this.cartesian3Towgs84(positions[0], this.viewer);\n var p2 = this.cartesian3Towgs84(positions[1], this.viewer);\n var dis = this.computeDistance2([p1, p2]);\n p1.alt = p1.alt.toFixed(2);\n p2.alt = p2.alt.toFixed(2);\n if (p1.alt === p2.alt) {\n //水平边\n return dis;\n } else if (Number(dis) === 0.00) {\n //竖直边\n return Math.abs(p1.alt - p2.alt).toFixed(2);\n } else {\n //斜边\n return Math.sqrt(dis * dis + Math.pow(Math.abs(p1.alt - p2.alt).toFixed(2), 2)).toFixed(2);\n }\n }\n }, {\n key: \"createPolyline\",\n value: function createPolyline(id) {\n var _this = this;\n var obj = this.id_map.get(id);\n this.viewer.entities.add(new Cesium.Entity({\n id: id,\n position: new Cesium.CallbackProperty(function () {\n if (obj.positions.length === 2) return _this.cal_center(obj.positions);else return Cesium.Cartesian3();\n }, false),\n label: {\n text: new Cesium.CallbackProperty(function () {\n if (obj.positions.length === 2) return _this.cal_distance(obj.positions) + \"米\";else return \"0米\";\n }, false),\n scale: 1,\n fillColor: Cesium.Color.RED,\n font: 'normal 20px MicroSoft YaHei',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n pixelOffset: new Cesium.Cartesian2(0, -10),\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return obj.positions;\n }, false),\n width: 2,\n material: Cesium.Color.YELLOW,\n zIndex: 99999999\n }\n }));\n this.ids.push(id);\n }\n }, {\n key: \"create_angle_label\",\n value: function create_angle_label(positions1, positions2, id, type) {\n var _this2 = this;\n var entity = new Cesium.Entity({\n id: id,\n position: new Cesium.CallbackProperty(function () {\n if (positions1.length === 2) return _this2.cal_point(positions1, positions2);else return Cesium.Cartesian3();\n }),\n label: {\n text: new Cesium.CallbackProperty(function () {\n if (positions1.length === 2) return _this2.cal_angle(positions1, positions2, type) + \"°\";else return \"0°\";\n }, false),\n scale: 1,\n fillColor: Cesium.Color.RED,\n font: 'normal 20px MicroSoft YaHei',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n pixelOffset: new Cesium.Cartesian2(15, -10)\n }\n });\n this.viewer.entities.add(entity);\n }\n }, {\n key: \"cal_point\",\n value: function cal_point(positions1, positions2) {\n for (var i = 0; i < positions1.length; i++) {\n for (var j = 0; j < positions2.length; j++) {\n if (positions1[i].x === positions2[j].x && positions1[i].y === positions2[j].y && positions1[i].z === positions2[j].z) {\n return positions1[i];\n }\n }\n }\n }\n }, {\n key: \"cal_angle\",\n value: function cal_angle(id1, id2, type) {\n if (type === 1) {\n //水平&竖直\n return 90;\n } else if (type === 2 || type === 3) {\n //水平&斜边 竖直&斜边\n var positions1 = this.id_map.get(id1).positions;\n var positions2 = this.id_map.get(id2).positions;\n var p1 = this.cartesian3Towgs84(positions1[0], this.viewer);\n var p2 = this.cartesian3Towgs84(positions1[1], this.viewer);\n var shuiping = this.computeDistance2([p2, p1]);\n var p3 = this.cartesian3Towgs84(positions2[0], this.viewer);\n var p4 = this.cartesian3Towgs84(positions2[1], this.viewer);\n var d = this.computeDistance2([p3, p4]);\n var h = Math.abs(p3.alt - p4.alt);\n var x = Math.sqrt(Math.pow(h, 2) + Math.pow(d, 2));\n if (shuiping == 0.00) {\n shuiping = Math.abs(p2.alt - p1.alt);\n }\n return (Math.acos(shuiping / x) * 180 / Math.PI).toFixed(2);\n }\n }\n\n /**\r\n * 开始测量\r\n */\n }, {\n key: \"start\",\n value: function start() {\n var _this3 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureTriangle, \"start\", this, 3)([]);\n this.positions = [];\n this.cachePositions = [];\n var shuiping_line_id = this.randomString(); //水平线\n var shuizhi_line_id = this.randomString(); //竖直边\n var xiebian_line_id = this.randomString(); //斜边\n\n var angle1 = this.randomString(); //角度1\n var angle2 = this.randomString(); //角度2\n var angle3 = this.randomString(); //角度3\n\n var xiebian_line_positions = []; //斜边\n\n this.id_map = new Map();\n var first_point = {};\n this.id_map.set(xiebian_line_id, {\n positions: []\n });\n this.id_map.set(shuiping_line_id, {\n positions: []\n });\n this.id_map.set(shuizhi_line_id, {\n positions: []\n });\n var leftEvent = function leftEvent(movement, car) {\n xiebian_line_positions.push(car);\n if (_this3.ids.length === 0) {\n //创建三角形\n first_point = _this3.cartesian3Towgs84(car, _this3.viewer);\n _this3.createPolyline(shuiping_line_id);\n _this3.createPolyline(shuizhi_line_id);\n _this3.createPolyline(xiebian_line_id);\n\n // this.cal_angle(shuiping_line_id, shuizhi_line_id, 1)\n // this.cal_angle(shuiping_line_id, xiebian_line_id, 2)\n // this.cal_angle(shuizhi_line_id, xiebian_line_id, 3)\n\n // this.ids.push(shuiping_line_id)\n // this.ids.push(shuizhi_line_id)\n // this.ids.push(xiebian_line_id)\n }\n _this3.ids.push(_this3.create_point(car));\n _this3.tip.setPosition(car, movement.position.x, movement.position.y);\n // // 隐藏斜边文字\n // let xiebian = this.id_map.get(xiebian_line_id)\n // let xbEntity = this.viewer.entities.getById(xiebian_line_id)\n // if(xbEntity) {\n // xbEntity.label.show = false\n // }\n if (xiebian_line_positions.length) {\n // xiebian.positions = xiebian_line_positions.concat(car)\n var p = _this3.cartesian3Towgs84(car, _this3.viewer);\n var shuzhi = _this3.id_map.get(shuizhi_line_id);\n var shuiping = _this3.id_map.get(shuiping_line_id);\n if (p.alt < first_point.alt) {\n shuzhi.positions[0] = car;\n shuzhi.positions[1] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt);\n shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt);\n shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt);\n } else {\n shuzhi.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt);\n shuzhi.positions[1] = car;\n shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt);\n shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt);\n }\n // shuizhi.positions = shuizhi_positions\n }\n if (xiebian_line_positions.length === 2) {\n _this3.end();\n }\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this3.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y);\n var xiebian = _this3.id_map.get(xiebian_line_id);\n if (xiebian_line_positions.length) {\n xiebian.positions = xiebian_line_positions.concat(car);\n var p = _this3.cartesian3Towgs84(car, _this3.viewer);\n var shuzhi = _this3.id_map.get(shuizhi_line_id);\n var shuiping = _this3.id_map.get(shuiping_line_id);\n if (p.alt < first_point.alt) {\n shuzhi.positions[0] = car;\n shuzhi.positions[1] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt);\n shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(p.lng, p.lat, first_point.alt);\n shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt);\n } else {\n shuzhi.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt);\n shuzhi.positions[1] = car;\n shuiping.positions[0] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, p.alt);\n shuiping.positions[1] = Cesium.Cartesian3.fromDegrees(first_point.lng, first_point.lat, first_point.alt);\n }\n // shuizhi.positions = shuizhi_positions\n }\n });\n this.event.mouse_right(function (movement, car) {\n _this3.end();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.end();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureTriangle, \"end\", this, 3)([]);\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n _superPropGet(MeasureTriangle, \"destroy\", this, 3)([]);\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureTriangle);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlVHJpYW5nbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTWVhc3VyZS9NZWFzdXJlVHJpYW5nbGUvaW5kZXguanM/OWVmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDctMjEgMTU6MjJcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMi0wNy0yMSAxNToyMlxyXG4gKi9cclxuaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL2luZGV4XCI7XHJcblxyXG5jbGFzcyBNZWFzdXJlVHJpYW5nbGUgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDkuInop5LmtYvph49cclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaykge1xyXG4gICAgc3VwZXIoc2RrKTtcclxuICB9XHJcblxyXG4gIGNhbF9jZW50ZXIocG9zaXRpb25zKSB7XHJcbiAgICBsZXQgcDEgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgcDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1sxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgY2VudGVyID0gdGhpcy5jb21wdXRlQ2VudGVyKFtwMSwgcDJdKTtcclxuICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjZW50ZXIubG5nLCBjZW50ZXIubGF0LCAocDEuYWx0ICsgcDIuYWx0KSAvIDIpXHJcbiAgfVxyXG5cclxuICBjYWxfZGlzdGFuY2UocG9zaXRpb25zKSB7XHJcbiAgICBsZXQgcDEgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgcDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1sxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICBsZXQgZGlzID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtwMSwgcDJdKVxyXG4gICAgcDEuYWx0ID0gcDEuYWx0LnRvRml4ZWQoMilcclxuICAgIHAyLmFsdCA9IHAyLmFsdC50b0ZpeGVkKDIpXHJcbiAgICBpZiAocDEuYWx0ID09PSBwMi5hbHQpIHsvL+awtOW5s+i+uVxyXG4gICAgICByZXR1cm4gZGlzXHJcbiAgICB9IGVsc2UgaWYgKE51bWJlcihkaXMpID09PSAwLjAwKSB7Ly/nq5bnm7TovrlcclxuICAgICAgcmV0dXJuIE1hdGguYWJzKHAxLmFsdCAtIHAyLmFsdCkudG9GaXhlZCgyKVxyXG4gICAgfSBlbHNlIHsvL+aWnOi+uVxyXG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KGRpcyAqIGRpcyArIE1hdGgucG93KE1hdGguYWJzKHAxLmFsdCAtIHAyLmFsdCkudG9GaXhlZCgyKSwgMikpLnRvRml4ZWQoMilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVBvbHlsaW5lKGlkKSB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5pZF9tYXAuZ2V0KGlkKVxyXG5cclxuICAgIHRoaXMudmlld2VyLmVudGl0aWVzLmFkZChuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgIGlkLFxyXG4gICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICBpZiAob2JqLnBvc2l0aW9ucy5sZW5ndGggPT09IDIpXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxfY2VudGVyKG9iai5wb3NpdGlvbnMpXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICBsYWJlbDoge1xyXG4gICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAob2JqLnBvc2l0aW9ucy5sZW5ndGggPT09IDIpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbF9kaXN0YW5jZShvYmoucG9zaXRpb25zKSArIFwi57GzXCJcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIFwiMOexs1wiXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHNjYWxlOiAxLFxyXG4gICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLlJFRCxcclxuICAgICAgICBmb250OiAnbm9ybWFsIDIwcHggTWljcm9Tb2Z0IFlhSGVpJyxcclxuICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC0xMCksXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcblxyXG4gICAgICB9LFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBvYmoucG9zaXRpb25zXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuWUVMTE9XLFxyXG4gICAgICAgIHpJbmRleDogOTk5OTk5OTlcclxuICAgICAgfVxyXG4gICAgfSkpXHJcblxyXG4gICAgdGhpcy5pZHMucHVzaChpZClcclxuICB9XHJcblxyXG4gIGNyZWF0ZV9hbmdsZV9sYWJlbChwb3NpdGlvbnMxLCBwb3NpdGlvbnMyLCBpZCwgdHlwZSkge1xyXG4gICAgbGV0IGVudGl0eSA9IG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQsXHJcbiAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwb3NpdGlvbnMxLmxlbmd0aCA9PT0gMilcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNhbF9wb2ludChwb3NpdGlvbnMxLCBwb3NpdGlvbnMyKVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgIH0pLFxyXG4gICAgICBsYWJlbDoge1xyXG4gICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocG9zaXRpb25zMS5sZW5ndGggPT09IDIpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbF9hbmdsZShwb3NpdGlvbnMxLCBwb3NpdGlvbnMyLCB0eXBlKSArIFwiwrBcIlxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gXCIwwrBcIlxyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5SRUQsXHJcbiAgICAgICAgZm9udDogJ25vcm1hbCAyMHB4IE1pY3JvU29mdCBZYUhlaScsXHJcbiAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkUsXHJcbiAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxNSwgLTEwKSxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMudmlld2VyLmVudGl0aWVzLmFkZChlbnRpdHkpXHJcblxyXG4gIH1cclxuXHJcbiAgY2FsX3BvaW50KHBvc2l0aW9uczEsIHBvc2l0aW9uczIpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBvc2l0aW9uczIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAocG9zaXRpb25zMVtpXS54ID09PSBwb3NpdGlvbnMyW2pdLnggJiZcclxuICAgICAgICAgIHBvc2l0aW9uczFbaV0ueSA9PT0gcG9zaXRpb25zMltqXS55ICYmXHJcbiAgICAgICAgICBwb3NpdGlvbnMxW2ldLnogPT09IHBvc2l0aW9uczJbal0uelxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHBvc2l0aW9uczFbaV1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbF9hbmdsZShpZDEsIGlkMiwgdHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09IDEpIHsvL+awtOW5sybnq5bnm7RcclxuICAgICAgcmV0dXJuIDkwXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDIgfHwgdHlwZSA9PT0gMykgey8v5rC05bmzJuaWnOi+uSAg56uW55u0JuaWnOi+uVxyXG4gICAgICBsZXQgcG9zaXRpb25zMSA9IHRoaXMuaWRfbWFwLmdldChpZDEpLnBvc2l0aW9uc1xyXG4gICAgICBsZXQgcG9zaXRpb25zMiA9IHRoaXMuaWRfbWFwLmdldChpZDIpLnBvc2l0aW9uc1xyXG4gICAgICBsZXQgcDEgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uczFbMF0sIHRoaXMudmlld2VyKVxyXG4gICAgICBsZXQgcDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uczFbMV0sIHRoaXMudmlld2VyKVxyXG4gICAgICBsZXQgc2h1aXBpbmcgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoW3AyLCBwMV0pXHJcbiAgICAgIGxldCBwMyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zMlswXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgIGxldCBwNCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zMlsxXSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgIGxldCBkID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFtwMywgcDRdKVxyXG4gICAgICBsZXQgaCA9IE1hdGguYWJzKHAzLmFsdCAtIHA0LmFsdClcclxuICAgICAgbGV0IHggPSBNYXRoLnNxcnQoTWF0aC5wb3coaCwgMikgKyBNYXRoLnBvdyhkLCAyKSlcclxuICAgICAgaWYgKHNodWlwaW5nID09IDAuMDApIHtcclxuICAgICAgICBzaHVpcGluZyA9IE1hdGguYWJzKHAyLmFsdCAtIHAxLmFsdClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKE1hdGguYWNvcyhzaHVpcGluZyAvIHgpICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCgyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5byA5aeL5rWL6YePXHJcbiAgICovXHJcbiAgc3RhcnQoKSB7XHJcblxyXG4gICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBzdXBlci5zdGFydCgpXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5jYWNoZVBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCBzaHVpcGluZ19saW5lX2lkID0gdGhpcy5yYW5kb21TdHJpbmcoKTsvL+awtOW5s+e6v1xyXG4gICAgICBsZXQgc2h1aXpoaV9saW5lX2lkID0gdGhpcy5yYW5kb21TdHJpbmcoKTsvL+erluebtOi+uVxyXG4gICAgICBsZXQgeGllYmlhbl9saW5lX2lkID0gdGhpcy5yYW5kb21TdHJpbmcoKTsvL+aWnOi+uVxyXG5cclxuICAgICAgbGV0IGFuZ2xlMSA9IHRoaXMucmFuZG9tU3RyaW5nKCk7Ly/op5LluqYxXHJcbiAgICAgIGxldCBhbmdsZTIgPSB0aGlzLnJhbmRvbVN0cmluZygpOy8v6KeS5bqmMlxyXG4gICAgICBsZXQgYW5nbGUzID0gdGhpcy5yYW5kb21TdHJpbmcoKTsvL+inkuW6pjNcclxuXHJcblxyXG4gICAgICBsZXQgeGllYmlhbl9saW5lX3Bvc2l0aW9ucyA9IFtdOy8v5pac6L65XHJcblxyXG4gICAgICB0aGlzLmlkX21hcCA9IG5ldyBNYXAoKVxyXG4gICAgICBsZXQgZmlyc3RfcG9pbnQgPSB7fVxyXG4gICAgICB0aGlzLmlkX21hcC5zZXQoeGllYmlhbl9saW5lX2lkLCB7cG9zaXRpb25zOiBbXX0pXHJcbiAgICAgIHRoaXMuaWRfbWFwLnNldChzaHVpcGluZ19saW5lX2lkLCB7cG9zaXRpb25zOiBbXX0pXHJcbiAgICAgIHRoaXMuaWRfbWFwLnNldChzaHVpemhpX2xpbmVfaWQsIHtwb3NpdGlvbnM6IFtdfSlcclxuXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHhpZWJpYW5fbGluZV9wb3NpdGlvbnMucHVzaChjYXIpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHsvL+WIm+W7uuS4ieinkuW9olxyXG4gICAgICAgICAgZmlyc3RfcG9pbnQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZVBvbHlsaW5lKHNodWlwaW5nX2xpbmVfaWQsKVxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVQb2x5bGluZShzaHVpemhpX2xpbmVfaWQsKVxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVQb2x5bGluZSh4aWViaWFuX2xpbmVfaWQsKVxyXG5cclxuICAgICAgICAgIC8vIHRoaXMuY2FsX2FuZ2xlKHNodWlwaW5nX2xpbmVfaWQsIHNodWl6aGlfbGluZV9pZCwgMSlcclxuICAgICAgICAgIC8vIHRoaXMuY2FsX2FuZ2xlKHNodWlwaW5nX2xpbmVfaWQsIHhpZWJpYW5fbGluZV9pZCwgMilcclxuICAgICAgICAgIC8vIHRoaXMuY2FsX2FuZ2xlKHNodWl6aGlfbGluZV9pZCwgeGllYmlhbl9saW5lX2lkLCAzKVxyXG5cclxuICAgICAgICAgIC8vIHRoaXMuaWRzLnB1c2goc2h1aXBpbmdfbGluZV9pZClcclxuICAgICAgICAgIC8vIHRoaXMuaWRzLnB1c2goc2h1aXpoaV9saW5lX2lkKVxyXG4gICAgICAgICAgLy8gdGhpcy5pZHMucHVzaCh4aWViaWFuX2xpbmVfaWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlkcy5wdXNoKHRoaXMuY3JlYXRlX3BvaW50KGNhcikpXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oY2FyLCBtb3ZlbWVudC5wb3NpdGlvbi54LCBtb3ZlbWVudC5wb3NpdGlvbi55KVxyXG4gICAgICAgIC8vIC8vIOmakOiXj+aWnOi+ueaWh+Wtl1xyXG4gICAgICAgIC8vIGxldCB4aWViaWFuID0gdGhpcy5pZF9tYXAuZ2V0KHhpZWJpYW5fbGluZV9pZClcclxuICAgICAgICAvLyBsZXQgeGJFbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHhpZWJpYW5fbGluZV9pZClcclxuICAgICAgICAvLyBpZih4YkVudGl0eSkge1xyXG4gICAgICAgIC8vICAgeGJFbnRpdHkubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmICh4aWViaWFuX2xpbmVfcG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8geGllYmlhbi5wb3NpdGlvbnMgPSB4aWViaWFuX2xpbmVfcG9zaXRpb25zLmNvbmNhdChjYXIpXHJcbiAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FyLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgIGxldCBzaHV6aGkgPSB0aGlzLmlkX21hcC5nZXQoc2h1aXpoaV9saW5lX2lkKVxyXG4gICAgICAgICAgbGV0IHNodWlwaW5nID0gdGhpcy5pZF9tYXAuZ2V0KHNodWlwaW5nX2xpbmVfaWQpXHJcbiAgICAgICAgICBpZiAocC5hbHQgPCBmaXJzdF9wb2ludC5hbHQpIHtcclxuICAgICAgICAgICAgc2h1emhpLnBvc2l0aW9uc1swXSA9IGNhclxyXG4gICAgICAgICAgICBzaHV6aGkucG9zaXRpb25zWzFdID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocC5sbmcsIHAubGF0LCBmaXJzdF9wb2ludC5hbHQpXHJcbiAgICAgICAgICAgIHNodWlwaW5nLnBvc2l0aW9uc1swXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAubG5nLCBwLmxhdCwgZmlyc3RfcG9pbnQuYWx0KVxyXG4gICAgICAgICAgICBzaHVpcGluZy5wb3NpdGlvbnNbMV0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhmaXJzdF9wb2ludC5sbmcsIGZpcnN0X3BvaW50LmxhdCwgZmlyc3RfcG9pbnQuYWx0KVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNodXpoaS5wb3NpdGlvbnNbMF0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhmaXJzdF9wb2ludC5sbmcsIGZpcnN0X3BvaW50LmxhdCwgcC5hbHQpXHJcbiAgICAgICAgICAgIHNodXpoaS5wb3NpdGlvbnNbMV0gPSBjYXJcclxuXHJcbiAgICAgICAgICAgIHNodWlwaW5nLnBvc2l0aW9uc1swXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGZpcnN0X3BvaW50LmxuZywgZmlyc3RfcG9pbnQubGF0LCBwLmFsdClcclxuICAgICAgICAgICAgc2h1aXBpbmcucG9zaXRpb25zWzFdID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoZmlyc3RfcG9pbnQubG5nLCBmaXJzdF9wb2ludC5sYXQsIGZpcnN0X3BvaW50LmFsdClcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBzaHVpemhpLnBvc2l0aW9ucyA9IHNodWl6aGlfcG9zaXRpb25zXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh4aWViaWFuX2xpbmVfcG9zaXRpb25zLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQobGVmdEV2ZW50KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihjYXIsIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkpXHJcbiAgICAgICAgbGV0IHhpZWJpYW4gPSB0aGlzLmlkX21hcC5nZXQoeGllYmlhbl9saW5lX2lkKVxyXG5cclxuICAgICAgICBpZiAoeGllYmlhbl9saW5lX3Bvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIHhpZWJpYW4ucG9zaXRpb25zID0geGllYmlhbl9saW5lX3Bvc2l0aW9ucy5jb25jYXQoY2FyKVxyXG4gICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgc2h1emhpID0gdGhpcy5pZF9tYXAuZ2V0KHNodWl6aGlfbGluZV9pZClcclxuICAgICAgICAgIGxldCBzaHVpcGluZyA9IHRoaXMuaWRfbWFwLmdldChzaHVpcGluZ19saW5lX2lkKVxyXG4gICAgICAgICAgaWYgKHAuYWx0IDwgZmlyc3RfcG9pbnQuYWx0KSB7XHJcbiAgICAgICAgICAgIHNodXpoaS5wb3NpdGlvbnNbMF0gPSBjYXJcclxuICAgICAgICAgICAgc2h1emhpLnBvc2l0aW9uc1sxXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAubG5nLCBwLmxhdCwgZmlyc3RfcG9pbnQuYWx0KVxyXG4gICAgICAgICAgICBzaHVpcGluZy5wb3NpdGlvbnNbMF0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwLmxuZywgcC5sYXQsIGZpcnN0X3BvaW50LmFsdClcclxuICAgICAgICAgICAgc2h1aXBpbmcucG9zaXRpb25zWzFdID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoZmlyc3RfcG9pbnQubG5nLCBmaXJzdF9wb2ludC5sYXQsIGZpcnN0X3BvaW50LmFsdClcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaHV6aGkucG9zaXRpb25zWzBdID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoZmlyc3RfcG9pbnQubG5nLCBmaXJzdF9wb2ludC5sYXQsIHAuYWx0KVxyXG4gICAgICAgICAgICBzaHV6aGkucG9zaXRpb25zWzFdID0gY2FyXHJcblxyXG4gICAgICAgICAgICBzaHVpcGluZy5wb3NpdGlvbnNbMF0gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhmaXJzdF9wb2ludC5sbmcsIGZpcnN0X3BvaW50LmxhdCwgcC5hbHQpXHJcbiAgICAgICAgICAgIHNodWlwaW5nLnBvc2l0aW9uc1sxXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGZpcnN0X3BvaW50LmxuZywgZmlyc3RfcG9pbnQubGF0LCBmaXJzdF9wb2ludC5hbHQpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gc2h1aXpoaS5wb3NpdGlvbnMgPSBzaHVpemhpX3Bvc2l0aW9uc1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog57uT5p2f5rWL6YePXHJcbiAgICovXHJcbiAgZW5kKCkge1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTmtYvph49cclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgc3VwZXIuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVhc3VyZVRyaWFuZ2xlXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/MeasureTriangle/index.js\n"); /***/ }), /***/ "./src/Measure/MeasureTyArea/index.js": /*!********************************************!*\ !*** ./src/Measure/MeasureTyArea/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Measure/index.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-07-11 17:28\r\n * @description:index\r\n * @update: 2022-07-11 17:28\r\n */\n\n\n/**@extends Measure*/\nvar MeasureTyArea = /*#__PURE__*/function (_Measure) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 投影面积测量\r\n * */\n function MeasureTyArea(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, MeasureTyArea);\n _this = _callSuper(this, MeasureTyArea, [sdk, options]);\n _this.options.lineColor = '#ffdf53';\n _this.polygon_id = \"\";\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(MeasureTyArea, _Measure);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(MeasureTyArea, [{\n key: \"start\",\n value:\n /**\r\n * 开始测量\r\n */\n function start() {\n var _this2 = this;\n if (!YJ.Measure.GetMeasureStatus()) {\n _superPropGet(MeasureTyArea, \"start\", this, 3)([]);\n this.ids = [];\n this.positions = [];\n this.text = \"\";\n this.center = new Cesium.Cartesian3();\n this.cachePositions = [];\n var height = 0;\n var lastArea = 0;\n var lastcneter;\n var leftEvent = function leftEvent(movement, car) {\n if (_this2.ids.length === 0) {\n _this2.polygon_id = MeasureTyArea.create_polygon(_this2);\n }\n _this2.cachePositions.push(_objectSpread({}, car));\n _this2.ids.push(_this2.create_point(_objectSpread({}, car), false));\n var po = _this2.cartesian3Towgs84(_objectSpread({}, car), _this2.viewer);\n if (po.alt > height) {\n height = po.alt;\n }\n _this2.positions = _this2.cachePositions.concat(_objectSpread({}, car));\n _this2.tip.setPosition(_objectSpread({}, car), movement.position.x, movement.position.y);\n if (_this2.positions.length > 2) {\n var arr = [];\n _this2.positions.forEach(function (item) {\n var p = _this2.cartesian3Towgs84(item, _this2.viewer);\n arr.push({\n lng: p.lng,\n lat: p.lat\n });\n });\n var center = _this2.computeCenter(arr);\n var area = _this2.computeArea(arr);\n lastArea = area;\n _this2.center = new Cesium.Cartesian3.fromDegrees(center.lng, center.lat, height);\n lastcneter = _this2.center;\n _this2.text = \"投影面积:\" + area + \" ㎡\";\n }\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_move(function (movement, car) {\n _this2.tip.setPosition(_objectSpread({}, car), movement.endPosition.x, movement.endPosition.y);\n _this2.positions = _this2.cachePositions.concat(_objectSpread({}, car));\n if (_this2.positions.length > 2) {\n var arr = [];\n _this2.positions.forEach(function (item) {\n var p = _this2.cartesian3Towgs84(item, _this2.viewer);\n arr.push({\n lng: p.lng,\n lat: p.lat\n });\n });\n var center = _this2.computeCenter(arr);\n var area = _this2.computeArea(arr);\n _this2.center = new Cesium.Cartesian3.fromDegrees(center.lng, center.lat, height);\n _this2.text = \"投影面积:\" + area + \" ㎡\";\n }\n });\n this.event.mouse_right(function (movement, car) {\n _this2.positions = _this2.cachePositions;\n _this2.center = lastcneter;\n if (_this2.positions.length < 3) {\n _this2.text = \"\";\n var error = '面积计算至少需要三个坐标!';\n console.warn(error);\n window.ELEMENT && window.ELEMENT.Message({\n message: error,\n type: 'warning',\n duration: 1500\n });\n _this2.destroy();\n } else {\n _this2.text = \"投影面积:\" + lastArea + \" ㎡\";\n }\n _this2.end();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this2.positions = _this2.cachePositions;\n _this2.end();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n }\n\n /**\r\n * 清除测量\r\n */\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this3 = this;\n [this.polygon_id].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.ids)).forEach(function (id) {\n _this3.remove_entity(id);\n });\n _superPropGet(MeasureTyArea, \"destroy\", this, 3)([]);\n }\n\n /**\r\n * 结束测量\r\n */\n }, {\n key: \"end\",\n value: function end() {\n _superPropGet(MeasureTyArea, \"end\", this, 3)([]);\n }\n }], [{\n key: \"create_polygon\",\n value: function create_polygon(that) {\n var id = that.randomString();\n var scaleByDistance = new Cesium.NearFarScalar(2000, 1, 100000, 0);\n var e = that.viewer.entities.add(new Cesium.Entity({\n id: id,\n label: {\n text: new Cesium.CallbackProperty(function () {\n return that.text;\n }, false),\n //标注文字描述\n font: '20px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#ffffff'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n //标注的遮挡距离设置为100则视角与标注的距离大于100米时会有遮挡\n // distanceDisplayCondition: this.distanceDisplayCondition,\n\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // scaleByDistance,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM\n },\n position: new Cesium.CallbackProperty(function () {\n return that.center;\n }, false),\n polygon: {\n classificationType: Cesium.ClassificationType.BOTH,\n hierarchy: new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy(that.positions);\n }, false),\n material: new Cesium.Color.fromCssColorString(that.options.color || that.defaultColor),\n zIndex: 99999999\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n if (that.positions.length) return that.positions.concat(that.positions[0]);\n return that.positions;\n }, false),\n width: 2,\n material: new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString(that.options.lineColor || that.defaultColor),\n dashLength: 20 //短划线长度\n }),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MeasureTyArea);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9NZWFzdXJlVHlBcmVhL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL01lYXN1cmUvTWVhc3VyZVR5QXJlYS9pbmRleC5qcz8zNzg5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogaW5kZXhcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMi0wNy0xMSAxNzoyOFxyXG4gKiBAZGVzY3JpcHRpb27vvJppbmRleFxyXG4gKiBAdXBkYXRlOiAyMDIyLTA3LTExIDE3OjI4XHJcbiAqL1xyXG5pbXBvcnQgTWVhc3VyZSBmcm9tIFwiLi4vaW5kZXhcIlxyXG5cclxuLyoqQGV4dGVuZHMgTWVhc3VyZSovXHJcbmNsYXNzIE1lYXN1cmVUeUFyZWEgZXh0ZW5kcyBNZWFzdXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDmipXlvbHpnaLnp6/mtYvph49cclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmVDb2xvciA9ICcjZmZkZjUzJ1xyXG4gICAgdGhpcy5wb2x5Z29uX2lkID0gXCJcIlxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZV9wb2x5Z29uKHRoYXQpIHtcclxuICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuXHJcbiAgICBsZXQgc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKDIwMDAsIDEsIDEwMDAwMCwgMClcclxuXHJcbiAgICBsZXQgZSA9IHRoYXQudmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgdGV4dDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoYXQudGV4dFxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgLy/moIfms6jmloflrZfmj4/ov7BcclxuICAgICAgICAgIGZvbnQ6ICcyMHB4IE1pY3Jvc29mdCBZYUhlaScsXHJcbiAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmZmZmYnKSxcclxuICAgICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAgICAgLy/moIfms6jnmoTpga7mjKHot53nprvorr7nva7kuLoxMDDliJnop4bop5LkuI7moIfms6jnmoTot53nprvlpKfkuo4xMDDnsbPml7bkvJrmnInpga7mjKFcclxuICAgICAgICAgIC8vIGRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbjogdGhpcy5kaXN0YW5jZURpc3BsYXlDb25kaXRpb24sXHJcblxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcblxyXG4gICAgICAgICAgLy8gc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICBob3Jpem9udGFsT3JpZ2luOiBDZXNpdW0uSG9yaXpvbnRhbE9yaWdpbi5DRU5URVIsXHJcbiAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoYXQuY2VudGVyXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5CT1RILFxyXG4gICAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0LnBvc2l0aW9ucylcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IgfHwgdGhhdC5kZWZhdWx0Q29sb3IpLFxyXG4gICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoYXQucG9zaXRpb25zLmxlbmd0aClcclxuICAgICAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnMuY29uY2F0KHRoYXQucG9zaXRpb25zWzBdKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnNcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGNvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMubGluZUNvbG9yIHx8IHRoYXQuZGVmYXVsdENvbG9yKSxcclxuICAgICAgICAgICAgZGFzaExlbmd0aDogMjAsIC8v55+t5YiS57q/6ZW/5bqmXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlvIDlp4vmtYvph49cclxuICAgKi9cclxuICBzdGFydCgpIHtcclxuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgc3VwZXIuc3RhcnQoKVxyXG4gICAgICB0aGlzLmlkcyA9IFtdXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy50ZXh0ID0gXCJcIlxyXG4gICAgICB0aGlzLmNlbnRlciA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgIHRoaXMuY2FjaGVQb3NpdGlvbnMgPSBbXVxyXG4gICAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgICBsZXQgbGFzdEFyZWEgPSAwXHJcbiAgICAgIGxldCBsYXN0Y25ldGVyXHJcblxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbHlnb25faWQgPSBNZWFzdXJlVHlBcmVhLmNyZWF0ZV9wb2x5Z29uKHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGVQb3NpdGlvbnMucHVzaCh7IC4uLmNhciB9KVxyXG4gICAgICAgIHRoaXMuaWRzLnB1c2godGhpcy5jcmVhdGVfcG9pbnQoeyAuLi5jYXIgfSwgZmFsc2UpKVxyXG4gICAgICAgIGxldCBwbyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoeyAuLi5jYXIgfSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgaWYgKHBvLmFsdCA+IGhlaWdodCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gcG8uYWx0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuY2FjaGVQb3NpdGlvbnMuY29uY2F0KHsgLi4uY2FyIH0pXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oeyAuLi5jYXIgfSwgbW92ZW1lbnQucG9zaXRpb24ueCwgbW92ZW1lbnQucG9zaXRpb24ueSlcclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgbGV0IGFyciA9IFtdXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgcCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoaXRlbSwgdGhpcy52aWV3ZXIpXHJcbiAgICAgICAgICAgIGFyci5wdXNoKHsgbG5nOiBwLmxuZywgbGF0OiBwLmxhdCB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBjZW50ZXIgPSB0aGlzLmNvbXB1dGVDZW50ZXIoYXJyKVxyXG4gICAgICAgICAgbGV0IGFyZWEgPSB0aGlzLmNvbXB1dGVBcmVhKGFycilcclxuICAgICAgICAgIGxhc3RBcmVhID0gYXJlYVxyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudGVyLmxuZywgY2VudGVyLmxhdCwgaGVpZ2h0KVxyXG4gICAgICAgICAgbGFzdGNuZXRlciA9IHRoaXMuY2VudGVyXHJcbiAgICAgICAgICB0aGlzLnRleHQgPSBcIuaKleW9semdouenr++8mlwiICsgYXJlYSArIFwiIOOOoVwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKHsgLi4uY2FyIH0sIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsIG1vdmVtZW50LmVuZFBvc2l0aW9uLnkpXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLmNhY2hlUG9zaXRpb25zLmNvbmNhdCh7IC4uLmNhciB9KVxyXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9ucy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICBsZXQgYXJyID0gW11cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGlzLnZpZXdlcilcclxuICAgICAgICAgICAgYXJyLnB1c2goeyBsbmc6IHAubG5nLCBsYXQ6IHAubGF0IH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IGNlbnRlciA9IHRoaXMuY29tcHV0ZUNlbnRlcihhcnIpXHJcbiAgICAgICAgICBsZXQgYXJlYSA9IHRoaXMuY29tcHV0ZUFyZWEoYXJyKVxyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudGVyLmxuZywgY2VudGVyLmxhdCwgaGVpZ2h0KVxyXG4gICAgICAgICAgdGhpcy50ZXh0ID0gXCLmipXlvbHpnaLnp6/vvJpcIiArIGFyZWEgKyBcIiDjjqFcIlxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMuY2VudGVyID0gbGFzdGNuZXRlclxyXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHQgPSBcIlwiXHJcbiAgICAgICAgICBsZXQgZXJyb3IgPSAn6Z2i56ev6K6h566X6Iez5bCR6ZyA6KaB5LiJ5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKGVycm9yKVxyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50ZXh0ID0gXCLmipXlvbHpnaLnp6/vvJpcIiArIGxhc3RBcmVhICsgXCIg446hXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jYWNoZVBvc2l0aW9uc1xyXG4gICAgICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTmtYvph49cclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgW3RoaXMucG9seWdvbl9pZCwgLi4udGhpcy5pZHNdLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZV9lbnRpdHkoaWQpXHJcbiAgICB9KVxyXG4gICAgc3VwZXIuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDnu5PmnZ/mtYvph49cclxuICAgKi9cclxuICBlbmQoKSB7XHJcbiAgICBzdXBlci5lbmQoKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVhc3VyZVR5QXJlYVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBMUtBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUF3SEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Measure/MeasureTyArea/index.js\n"); /***/ }), /***/ "./src/Measure/clear.js": /*!******************************!*\ !*** ./src/Measure/clear.js ***! \******************************/ /*! exports provided: Clear */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Clear\", function() { return Clear; });\n/**\r\n * @name: clear\r\n * @author: Administrator\r\n * @date: 2022-07-11 15:28\r\n * @description:clear\r\n * @update: 2022-07-11 15:28\r\n */\n\nfunction Clear() {\n YJ.Measure.Measures.forEach(function (m) {\n m.destroy();\n });\n YJ.Measure.Measures = [];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9jbGVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NZWFzdXJlL2NsZWFyLmpzP2NkMzAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBjbGVhclxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIyLTA3LTExIDE1OjI4XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmNsZWFyXHJcbiAqIEB1cGRhdGU6IDIwMjItMDctMTEgMTU6MjhcclxuICovXHJcblxyXG5mdW5jdGlvbiBDbGVhcigpIHtcclxuICBZSi5NZWFzdXJlLk1lYXN1cmVzLmZvckVhY2gobSA9PiB7XHJcbiAgICBtLmRlc3Ryb3koKVxyXG4gIH0pXHJcbiAgWUouTWVhc3VyZS5NZWFzdXJlcyA9IFtdXHJcbn1cclxuXHJcbmV4cG9ydCB7Q2xlYXJ9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Measure/clear.js\n"); /***/ }), /***/ "./src/Measure/index.js": /*!******************************!*\ !*** ./src/Measure/index.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Tools */ \"./src/Tools/index.js\");\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n/**\r\n * @name: measure\r\n * @author: Administrator\r\n * @date: 2022-07-11 10:52\r\n * @description:measure\r\n * @update: 2022-07-11 10:52\r\n */\nvar Measure = /*#__PURE__*/function (_Tools) {\n function Measure(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n text: \"左键开始,右键结束;\"\n };\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Measure);\n _this = _callSuper(this, Measure, [sdk, options]);\n _this.options = _objectSpread({}, options);\n _this.event = new _Event__WEBPACK_IMPORTED_MODULE_6__[\"default\"](sdk);\n _this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_7__[\"default\"](options.text, sdk);\n _this.viewer = sdk.viewer;\n _this.defaultColor = 'rgba(246,49,49,0.55)';\n _this.ids = [];\n YJ.Measure.Measures.push(_this);\n _this._isDestroy = false;\n // this.pickStatus = {pick: YJ.getEarth().interaction.picking.enabled}\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Measure, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Measure, [{\n key: \"start\",\n value: function start() {\n this.setPickStatus(false);\n YJ.Measure.SetMeasureStatus(true);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this2 = this;\n // YJ.Measure.Measures.pop()\n this._isDestroy = true;\n this.end();\n this.ids.forEach(function (id) {\n _this2.remove_entity(id);\n });\n }\n }, {\n key: \"end\",\n value: function end() {\n // this.ids.forEach(id => {\n // this.remove_entity(id)\n // })\n //还原上一次的状态\n // this.setPickStatus(this.pickStatus.pick)\n YJ.Measure.SetMeasureStatus(false);\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.tip = null;\n this.event = null;\n }\n }, {\n key: \"create_point\",\n value: function create_point(cartesian) {\n var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var id = this.randomString();\n var p = this.cartesian3Towgs84(cartesian, this.viewer);\n this.viewer.entities.add(new Cesium.Entity({\n id: id,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n show: show,\n image: this.getSourceRootPath() + '/img/point.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n }));\n return id;\n }\n }, {\n key: \"remove_entity\",\n value: function remove_entity(id) {\n this.viewer.entities.removeById(id);\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Measure);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTWVhc3VyZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NZWFzdXJlL2luZGV4LmpzPzgxOTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSBcIi4uL0V2ZW50XCI7XHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tIFwiLi4vTW91c2VUaXBcIjtcclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi9Ub29sc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lOiBtZWFzdXJlXHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDctMTEgMTA6NTJcclxuICogQGRlc2NyaXB0aW9u77yabWVhc3VyZVxyXG4gKiBAdXBkYXRlOiAyMDIyLTA3LTExIDEwOjUyXHJcbiAqL1xyXG5cclxuY2xhc3MgTWVhc3VyZSBleHRlbmRzIFRvb2xzIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7dGV4dDogXCLlt6bplK7lvIDlp4vvvIzlj7PplK7nu5PmnZ87XCJ9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4ub3B0aW9uc31cclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudChzZGspXHJcbiAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcChvcHRpb25zLnRleHQsIHNkaylcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlclxyXG4gICAgdGhpcy5kZWZhdWx0Q29sb3IgPSAncmdiYSgyNDYsNDksNDksMC41NSknXHJcbiAgICB0aGlzLmlkcyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLk1lYXN1cmVzLnB1c2godGhpcylcclxuICAgIHRoaXMuX2lzRGVzdHJveSA9IGZhbHNlXHJcbiAgICAvLyB0aGlzLnBpY2tTdGF0dXMgPSB7cGljazogWUouZ2V0RWFydGgoKS5pbnRlcmFjdGlvbi5waWNraW5nLmVuYWJsZWR9XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHRoaXMuc2V0UGlja1N0YXR1cyhmYWxzZSlcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIC8vIFlKLk1lYXN1cmUuTWVhc3VyZXMucG9wKClcclxuICAgIHRoaXMuX2lzRGVzdHJveSA9IHRydWVcclxuICAgIHRoaXMuZW5kKClcclxuICAgIHRoaXMuaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZV9lbnRpdHkoaWQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIGVuZCgpIHtcclxuICAgIC8vIHRoaXMuaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgLy8gICB0aGlzLnJlbW92ZV9lbnRpdHkoaWQpXHJcbiAgICAvLyB9KVxyXG4gICAgLy/ov5jljp/kuIrkuIDmrKHnmoTnirbmgIFcclxuICAgIC8vIHRoaXMuc2V0UGlja1N0YXR1cyh0aGlzLnBpY2tTdGF0dXMucGljaylcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICB0aGlzLmV2ZW50ID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgY3JlYXRlX3BvaW50KGNhcnRlc2lhbixzaG93ID0gdHJ1ZSkge1xyXG4gICAgbGV0IGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKVxyXG4gICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy52aWV3ZXIpXHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAubG5nLCBwLmxhdCwgcC5hbHQpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgc2hvdzogc2hvdyxcclxuICAgICAgICAgIGltYWdlOiB0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlkXHJcbiAgfVxyXG5cclxuICByZW1vdmVfZW50aXR5KGlkKSB7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmVCeUlkKGlkKVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Measure/index.js\n"); /***/ }), /***/ "./src/MouseTip/index.js": /*!*******************************!*\ !*** ./src/MouseTip/index.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return MouseTip; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Tools */ \"./src/Tools/index.js\");\n\n\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2022-06-14 14:37\r\n * @description:index\r\n * @update: 2022-06-14 14:37\r\n */\n\n\n//鼠标tip\nvar MouseTip = /*#__PURE__*/function () {\n function MouseTip() {\n var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '左键开始,右键结束';\n var sdk = arguments.length > 1 ? arguments[1] : undefined;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MouseTip);\n this.point = undefined;\n this.text = text;\n this.div = undefined;\n this.mouse_type = 0;\n this.position = new Cesium.Cartesian3();\n this.viewer = sdk.viewer;\n this.create_tip(this.viewer);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MouseTip, [{\n key: \"set_text\",\n value: function set_text(text) {\n var textElm = this.div.getElementsByTagName('p')[0];\n textElm.innerText = text;\n }\n }, {\n key: \"get_mouse_style\",\n value: function get_mouse_style(type) {\n var url = 'lib/img/';\n var style = ''; //默认的鼠标箭头样式\n switch (type) {\n case 1:\n style = 'move.png'; //移动样式\n break;\n default:\n style = 'arrow.png';\n break;\n }\n return 'url(' + url + style + '),auto';\n }\n }, {\n key: \"create_tip\",\n value: function create_tip(viewer) {\n // let tool = new Tools()\n // this.point = viewer.entities.add(\n // new Cesium.Entity({\n // position: new Cesium.CallbackProperty(() => {\n // return this.position\n // }, false),\n // billboard: {\n // image: tool.getSourceRootPath() + '/img/point.png',\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // disableDepthTestDistance: 100000000\n // }\n // })\n // )\n // tool = null\n // this.style_tip(viewer, this.mouse_type)\n this.create_tooltip();\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(position, x, y) {\n this.position = position;\n this.move_tooltip(x, y);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.viewer.entities.remove(this.point);\n this.remove_tooltip();\n // this.style_tip(viewer)\n }\n }, {\n key: \"create_tooltip\",\n value: function create_tooltip() {\n var tool = new _Tools__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n this.div = document.createElement('div');\n var c = \"#ec131a\";\n this.div.setAttribute('style', 'position: absolute;z-index: 777;color: ' + c + ';left:10px;top:0px;pointer-events: none;');\n var textElm = document.createElement('p');\n textElm.style.margin = '0px';\n textElm.style.padding = '0px';\n textElm.innerText = this.text;\n this.div.appendChild(textElm);\n var imgElm = document.createElement('div');\n imgElm.style.width = '12px';\n imgElm.style.height = '12px';\n imgElm.style.background = \"url(\".concat(tool.getSourceRootPath() + '/img/point.png', \") 100% 100% no-repeat\");\n imgElm.style.backgroundSize = '100% 100%';\n imgElm.style.position = 'absolute';\n imgElm.style.left = '-36px';\n imgElm.style.top = '-4px';\n this.div.style.display = 'none';\n this.div.appendChild(imgElm);\n tool = null;\n document.querySelector('body').appendChild(this.div);\n }\n\n /*移动时的鼠标样式*/\n }, {\n key: \"style_tip\",\n value: function style_tip(viewer) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n viewer._element.style.cursor = this.get_mouse_style(type);\n }\n }, {\n key: \"remove_tooltip\",\n value: function remove_tooltip() {\n document.querySelector('body').contains(this.div) && document.querySelector('body').removeChild(this.div);\n }\n }, {\n key: \"move_tooltip\",\n value: function move_tooltip(x, y) {\n var top = 0;\n var left = 0;\n this.div.style.display = 'block';\n if (this.viewer && this.viewer._element) {\n var element = this.viewer._element.getElementsByClassName('cesium-widget')[0].getElementsByTagName('canvas')[0];\n top = element.getBoundingClientRect().top + window.scrollY;\n left = element.getBoundingClientRect().left + window.scrollX;\n }\n this.div.style.left = x + 30 + left + 'px';\n this.div.style.top = y + top + 'px';\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvTW91c2VUaXAvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTW91c2VUaXAvaW5kZXguanM/MzU1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjItMDYtMTQgMTQ6MzdcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMi0wNi0xNCAxNDozN1xyXG4gKi9cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi9Ub29sc1wiO1xyXG5cclxuLy/pvKDmoId0aXBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW91c2VUaXAge1xyXG4gIGNvbnN0cnVjdG9yKHRleHQgPSAn5bem6ZSu5byA5aeL77yM5Y+z6ZSu57uT5p2fJywgc2RrKSB7XHJcbiAgICB0aGlzLnBvaW50ID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLnRleHQgPSB0ZXh0XHJcbiAgICB0aGlzLmRpdiA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5tb3VzZV90eXBlID0gMFxyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcblxyXG4gICAgdGhpcy52aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgICB0aGlzLmNyZWF0ZV90aXAodGhpcy52aWV3ZXIpXHJcbiAgfVxyXG5cclxuICBzZXRfdGV4dCh0ZXh0KSB7XHJcbiAgICBsZXQgdGV4dEVsbSA9IHRoaXMuZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwJylbMF1cclxuICAgIHRleHRFbG0uaW5uZXJUZXh0ID0gdGV4dFxyXG4gIH1cclxuXHJcbiAgZ2V0X21vdXNlX3N0eWxlKHR5cGUpIHtcclxuICAgIGxldCB1cmwgPSAnbGliL2ltZy8nXHJcbiAgICBsZXQgc3R5bGUgPSAnJyAvL+m7mOiupOeahOm8oOagh+eureWktOagt+W8j1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzdHlsZSA9ICdtb3ZlLnBuZycgLy/np7vliqjmoLflvI9cclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzdHlsZSA9ICdhcnJvdy5wbmcnXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIHJldHVybiAndXJsKCcgKyB1cmwgKyBzdHlsZSArICcpLGF1dG8nXHJcbiAgfVxyXG5cclxuICBjcmVhdGVfdGlwKHZpZXdlcikge1xyXG4gICAgLy8gbGV0IHRvb2wgPSBuZXcgVG9vbHMoKVxyXG4gICAgLy8gdGhpcy5wb2ludCA9IHZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAvLyAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgIC8vICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgIC8vICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uXHJcbiAgICAvLyAgICAgfSwgZmFsc2UpLFxyXG4gICAgLy8gICAgIGJpbGxib2FyZDoge1xyXG4gICAgLy8gICAgICAgaW1hZ2U6IHRvb2wuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAvLyAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgIC8vICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogMTAwMDAwMDAwXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gKVxyXG4gICAgLy8gdG9vbCA9IG51bGxcclxuICAgIC8vIHRoaXMuc3R5bGVfdGlwKHZpZXdlciwgdGhpcy5tb3VzZV90eXBlKVxyXG4gICAgdGhpcy5jcmVhdGVfdG9vbHRpcCgpXHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihwb3NpdGlvbiwgeCwgeSkge1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICB0aGlzLm1vdmVfdG9vbHRpcCh4LCB5KVxyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHRoaXMudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnBvaW50KVxyXG4gICAgdGhpcy5yZW1vdmVfdG9vbHRpcCgpXHJcbiAgICAvLyB0aGlzLnN0eWxlX3RpcCh2aWV3ZXIpXHJcbiAgfVxyXG5cclxuICBjcmVhdGVfdG9vbHRpcCgpIHtcclxuICAgIGxldCB0b29sID0gbmV3IFRvb2xzKClcclxuICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIGxldCBjID0gXCIjZWMxMzFhXCJcclxuICAgIHRoaXMuZGl2LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ3N0eWxlJyxcclxuICAgICAgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTt6LWluZGV4OiA3Nzc7Y29sb3I6ICcgKyBjICsgJztsZWZ0OjEwcHg7dG9wOjBweDtwb2ludGVyLWV2ZW50czogbm9uZTsnXHJcbiAgICApXHJcbiAgICBsZXQgdGV4dEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKVxyXG4gICAgdGV4dEVsbS5zdHlsZS5tYXJnaW4gPSAnMHB4J1xyXG4gICAgdGV4dEVsbS5zdHlsZS5wYWRkaW5nID0gJzBweCdcclxuICAgIHRleHRFbG0uaW5uZXJUZXh0ID0gdGhpcy50ZXh0XHJcbiAgICB0aGlzLmRpdi5hcHBlbmRDaGlsZCh0ZXh0RWxtKVxyXG4gICAgbGV0IGltZ0VsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICBpbWdFbG0uc3R5bGUud2lkdGggPSAnMTJweCdcclxuICAgIGltZ0VsbS5zdHlsZS5oZWlnaHQgPSAnMTJweCdcclxuICAgIGltZ0VsbS5zdHlsZS5iYWNrZ3JvdW5kID0gYHVybCgke3Rvb2wuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZyd9KSAxMDAlIDEwMCUgbm8tcmVwZWF0YFxyXG4gICAgaW1nRWxtLnN0eWxlLmJhY2tncm91bmRTaXplID0gJzEwMCUgMTAwJSdcclxuICAgIGltZ0VsbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcclxuICAgIGltZ0VsbS5zdHlsZS5sZWZ0ID0gJy0zNnB4J1xyXG4gICAgaW1nRWxtLnN0eWxlLnRvcCA9ICctNHB4J1xyXG4gICAgdGhpcy5kaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgdGhpcy5kaXYuYXBwZW5kQ2hpbGQoaW1nRWxtKVxyXG4gICAgdG9vbCA9IG51bGxcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5hcHBlbmRDaGlsZCh0aGlzLmRpdilcclxuICB9XHJcblxyXG4gIC8q56e75Yqo5pe255qE6byg5qCH5qC35byPKi9cclxuICBzdHlsZV90aXAodmlld2VyLCB0eXBlID0gMCkge1xyXG4gICAgdmlld2VyLl9lbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0X21vdXNlX3N0eWxlKHR5cGUpXHJcbiAgfVxyXG5cclxuICByZW1vdmVfdG9vbHRpcCgpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5jb250YWlucyh0aGlzLmRpdikgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLnJlbW92ZUNoaWxkKHRoaXMuZGl2KVxyXG4gIH1cclxuXHJcbiAgbW92ZV90b29sdGlwKHgsIHkpIHtcclxuICAgIGxldCB0b3AgPSAwXHJcbiAgICBsZXQgbGVmdCA9IDBcclxuICAgIHRoaXMuZGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgaWYgKHRoaXMudmlld2VyICYmIHRoaXMudmlld2VyLl9lbGVtZW50KSB7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy52aWV3ZXIuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2VzaXVtLXdpZGdldCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXVxyXG4gICAgICB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZXHJcbiAgICAgIGxlZnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGl2LnN0eWxlLmxlZnQgPSB4ICsgMzAgKyBsZWZ0ICsgJ3B4J1xyXG4gICAgdGhpcy5kaXYuc3R5bGUudG9wID0geSArIHRvcCArICdweCdcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/MouseTip/index.js\n"); /***/ }), /***/ "./src/Obj/AirLine/DrawTakeOff.js": /*!****************************************!*\ !*** ./src/Obj/AirLine/DrawTakeOff.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _MouseTip_index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../MouseTip/index */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Draw_draw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Draw/draw */ \"./src/Draw/draw.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\nvar DrawTakeOff = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @desc 获取坐标点\r\n * */\n function DrawTakeOff(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DrawTakeOff);\n _this = _callSuper(this, DrawTakeOff, [sdk, options]);\n _this.options.tipText = options.tipText ? options.tipText : '左键确定,右键结束;';\n return _this;\n }\n\n /**\r\n * @desc 开始动态获取坐标点\r\n * @method start\r\n * @param cb {function} 回调函数\r\n * @memberOf DrawPoint\r\n * @example draw.start((err,position)=>{\r\n *\r\n * })\r\n * */\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(DrawTakeOff, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DrawTakeOff, [{\n key: \"start\",\n value: function start(cb) {\n var _this2 = this;\n // eslint-disable-next-line no-undef\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var car = undefined;\n // eslint-disable-next-line no-undef\n YJ.Measure.SetMeasureStatus(true);\n // this.options\n this.tip = new _MouseTip_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.options.tipText, this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.sdk);\n this.isEntity = false;\n this.event.mouse_left(function (movement, cartesian) {\n _this2.end();\n var p = _this2.cartesian3Towgs84(car || cartesian, _this2.viewer);\n var pickedObject = _this2.viewer.scene.pick(movement.position);\n if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && pickedObject.id.id === window.airportEntity.options.id) {\n _this2.isEntity = true;\n }\n cb(null, p, _this2.isEntity);\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this2.end();\n cb(false);\n });\n this.event.mouse_move(function (movement, cartesian) {\n car = cartesian;\n _this2.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this2.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this2.end();\n cb(false);\n } else {\n _this2.end();\n var p = _this2.cartesian3Towgs84(car || cartesian, _this2.viewer);\n cb(null, p);\n }\n });\n });\n }\n }\n }, {\n key: \"end\",\n value: function end() {\n YJ.Measure.SetMeasureStatus(false);\n this.event.destroy();\n this.tip.destroy();\n }\n }]);\n}(_Draw_draw__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DrawTakeOff);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FpckxpbmUvRHJhd1Rha2VPZmYuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FpckxpbmUvRHJhd1Rha2VPZmYuanM/NzgwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vTW91c2VUaXAvaW5kZXgnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuLi8uLi9EcmF3L2RyYXcnXHJcblxyXG5jbGFzcyBEcmF3VGFrZU9mZiBleHRlbmRzIERyYXcge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjIOiOt+WPluWdkOagh+eCuVxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMub3B0aW9ucy50aXBUZXh0ID0gb3B0aW9ucy50aXBUZXh0XHJcbiAgICAgID8gb3B0aW9ucy50aXBUZXh0XHJcbiAgICAgIDogJ+W3pumUruehruWumu+8jOWPs+mUrue7k+adn++8mydcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIOW8gOWni+WKqOaAgeiOt+WPluWdkOagh+eCuVxyXG4gICAqIEBtZXRob2Qgc3RhcnRcclxuICAgKiBAcGFyYW0gY2Ige2Z1bmN0aW9ufSDlm57osIPlh73mlbBcclxuICAgKiBAbWVtYmVyT2YgRHJhd1BvaW50XHJcbiAgICogQGV4YW1wbGUgZHJhdy5zdGFydCgoZXJyLHBvc2l0aW9uKT0+e1xyXG4gICAqXHJcbiAgICogfSlcclxuICAgKiAqL1xyXG5cclxuICBzdGFydChjYikge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY2FyID0gdW5kZWZpbmVkXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgLy8gdGhpcy5vcHRpb25zXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKHRoaXMub3B0aW9ucy50aXBUZXh0LCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmlzRW50aXR5ID0gZmFsc2VcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgIGxldCBwID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXIgfHwgY2FydGVzaWFuLCB0aGlzLnZpZXdlcilcclxuICAgICAgICB2YXIgcGlja2VkT2JqZWN0ID0gdGhpcy52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBDZXNpdW0uZGVmaW5lZChwaWNrZWRPYmplY3QpICYmXHJcbiAgICAgICAgICBDZXNpdW0uZGVmaW5lZChwaWNrZWRPYmplY3QuaWQpICYmXHJcbiAgICAgICAgICBwaWNrZWRPYmplY3QuaWQuaWQgPT09IHdpbmRvdy5haXJwb3J0RW50aXR5Lm9wdGlvbnMuaWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRpdHkgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNiKG51bGwsIHAsIHRoaXMuaXNFbnRpdHkpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgICAgY2IoZmFsc2UpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGNhciA9IGNhcnRlc2lhblxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lbmQoKVxyXG4gICAgICAgICAgICBjYihmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgICAgbGV0IHAgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhciB8fCBjYXJ0ZXNpYW4sIHRoaXMudmlld2VyKVxyXG4gICAgICAgICAgICBjYihudWxsLCBwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmQoKSB7XHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3VGFrZU9mZlxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFBQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/AirLine/DrawTakeOff.js\n"); /***/ }), /***/ "./src/Obj/AirLine/billord_point_line.js": /*!***********************************************!*\ !*** ./src/Obj/AirLine/billord_point_line.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BillordPointLine; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar BillordPointLine = /*#__PURE__*/function () {\n function BillordPointLine(options, viewer) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, BillordPointLine);\n this.options = _objectSpread({}, options);\n this.pointEntity = null;\n this.billboardEntity = null;\n this.lineEntity = null;\n this.updatedPosition = [];\n this.pointUpdatedPosition = [];\n this.viewer = viewer;\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);\n this.pinBuilder = new Cesium.PinBuilder();\n this.index = null;\n //定义屏幕点击事件处理器\n BillordPointLine.setDefaultValue(this);\n BillordPointLine.init(this);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(BillordPointLine, [{\n key: \"changeAltitude\",\n value:\n // 改变高度\n function changeAltitude() {\n var isMouseDown = false;\n var startPosition;\n var initialHeight;\n var that = this;\n var HHH = false;\n // 标识Alt键是否被按下\n document.addEventListener('keydown', function (event) {\n var key = event.key; // 获取按下的键名\n // 检查特定键是否被按下\n if (key === 'h') {\n HHH = true;\n }\n });\n document.addEventListener('keyup', function (event) {\n HHH = false;\n });\n // 按下鼠标左键\n this.handler.setInputAction(function (movement) {\n var pickedObject = that.viewer.scene.pick(movement.position);\n if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && pickedObject.id === that.billboardEntity) {\n isMouseDown = true;\n startPosition = movement.position;\n\n // 获取Billboard当前的地理高度\n var positionCartographic = Cesium.Cartographic.fromCartesian(that.billboardEntity.position.getValue());\n initialHeight = positionCartographic.height;\n }\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n // 移动鼠标\n this.handler.setInputAction(function (movement) {\n if (isMouseDown && HHH == false) {\n // 移动位置\n var newCartesian = that.viewer.scene.pickPosition(movement.endPosition);\n that.disableCameraDrag(that.viewer, false);\n if (newCartesian) {\n var newCartographic = Cesium.Cartographic.fromCartesian(newCartesian);\n // 保持高度不变\n var newLongitude = newCartographic.longitude;\n var newLatitude = newCartographic.latitude;\n var updatedPosition = Cesium.Cartesian3.fromRadians(newLongitude, newLatitude, initialHeight);\n var pointUpdatedPosition = Cesium.Cartesian3.fromRadians(newLongitude, newLatitude, 0);\n that.billboardEntity.position = new Cesium.CallbackProperty(function () {\n return updatedPosition;\n }, false);\n that.billboardEntity.label.text = \"Lat: \".concat(Cesium.Math.toDegrees(newLongitude).toFixed(6), \"\\nLon: \").concat(Cesium.Math.toDegrees(newLatitude).toFixed(6), \"\\nAlt: \").concat(initialHeight.toFixed(2), \"m\");\n that.pointEntity.position = new Cesium.CallbackProperty(function () {\n return pointUpdatedPosition;\n }, false);\n }\n }\n if (isMouseDown && HHH) {\n console.log(HHH);\n // 改变高度\n var endPosition = movement.endPosition;\n var deltaY = startPosition.y - endPosition.y; // 计算Y轴方向上的移动距离\n // 根据鼠标移动的距离来调整高度\n var newHeight = initialHeight + deltaY;\n // 更新billboard位置\n var positionCartographic = Cesium.Cartographic.fromCartesian(that.billboardEntity.position.getValue());\n var newPosition = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(positionCartographic.longitude), Cesium.Math.toDegrees(positionCartographic.latitude), newHeight);\n // 禁用相机\n that.disableCameraDrag(that.viewer, false);\n that.billboardEntity.position = new Cesium.CallbackProperty(function () {\n return newPosition;\n }, false);\n that.billboardEntity.label.text = \"Lat: \".concat(Cesium.Math.toDegrees(positionCartographic.longitude).toFixed(6), \"\\nLon: \").concat(Cesium.Math.toDegrees(positionCartographic.latitude).toFixed(6), \"\\nAlt: \").concat(newHeight.toFixed(2), \"m\");\n }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n // 松开鼠标左键\n this.handler.setInputAction(function (movement) {\n var pickedObject = that.viewer.scene.pick(movement.position);\n isMouseDown = false; // 禁用相机\n HHH = false; //\n that.disableCameraDrag(that.viewer, true);\n // 更新frustum的位置\n if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && pickedObject.id === that.billboardEntity) {\n if (that.options.saveFun) {\n that.options.saveFun(null, false);\n }\n if (that.options.selectFun) {\n that.options.selectFun(that.billboardEntity.index - 1);\n }\n that.options.frustum.updatePositionHeight(that.billboardEntity.position.getValue());\n }\n }, Cesium.ScreenSpaceEventType.LEFT_UP);\n }\n }, {\n key: \"disableCameraDrag\",\n value: function disableCameraDrag(viewer, bool) {\n viewer.scene.screenSpaceCameraController.enableRotate = bool;\n viewer.scene.screenSpaceCameraController.enableTranslate = bool;\n viewer.scene.screenSpaceCameraController.enableZoom = bool;\n viewer.scene.screenSpaceCameraController.enableTilt = bool;\n viewer.scene.screenSpaceCameraController.enableLook = bool;\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n }\n /**\r\n * @param {boolean} bool\r\n */,\n set: function set(bool) {\n if (typeof bool === 'boolean') {\n this.pointEntity.show = bool;\n this.billboardEntity.show = bool;\n this.lineEntity.show = bool;\n }\n }\n }, {\n key: \"remove\",\n value: function remove() {\n this.viewer.entities.remove(this.pointEntity);\n this.viewer.entities.remove(this.billboardEntity);\n this.viewer.entities.remove(this.lineEntity);\n }\n }], [{\n key: \"setDefaultValue\",\n value: function setDefaultValue(that) {\n var _that$options$keyboar;\n that.options.positions = that.options.positions || {};\n that.options.normalHeight = that.options.normalHeight || 100;\n that.options.airHeight = that.options.airHeight || 100;\n that.options.image = that.options.image || '/static/img/cluster2.png';\n that.options.show = that.options.show || true;\n that.options.index = that.options.index || 1;\n that.options.saveFun = that.options.saveFun || null;\n that.options.selectFun = that.options.selectFun || null;\n that.options.keyboard = (_that$options$keyboar = that.options.keyboard) !== null && _that$options$keyboar !== void 0 ? _that$options$keyboar : true;\n that.options.updateFrustumFun = that.options.updateFrustumFun || null;\n that.options.frustum = that.options.frustum || null;\n }\n }, {\n key: \"init\",\n value: function init(that) {\n var positions = that.options.positions;\n // 添加一个Point,稍微偏离地面高度,使其完全可见\n that.pointEntity = that.viewer.entities.add({\n show: that.options.show,\n position: Cesium.Cartesian3.fromDegrees(positions.lng, positions.lat, 0),\n // 地面上\n point: {\n pixelSize: 8,\n color: Cesium.Color.WITHE,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n // 使用相对地面或贴地,\n disableDepthTestDistance: 0\n }\n });\n //\n var pinIndex = that.pinBuilder.fromText(that.options.index, Cesium.Color.fromCssColorString('#00d590'), 36).toDataURL();\n var altitude = 0;\n if (positions.altitude) {\n altitude = positions.altitude;\n } else {\n altitude = that.options.normalHeight;\n }\n // 添加一个Billboard\n that.billboardEntity = that.viewer.entities.add({\n show: that.options.show,\n position: Cesium.Cartesian3.fromDegrees(positions.lng, positions.lat, positions.alt + that.options.normalHeight),\n // 判断altitude是否有值\n\n label: {\n text: \"Lat: \".concat(positions.lng.toFixed(8), \"\\nLon: \").concat(positions.lat.toFixed(8), \"\\nAlt: \").concat(altitude.toFixed(8), \"m\"),\n font: '14px sans-serif',\n fillColor: Cesium.Color.YELLOW,\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 2,\n pixelOffset: new Cesium.Cartesian2(0, -60),\n // 标签偏移量,防止重叠\n heightReference: Cesium.HeightReference.RELATIVE_TO_TERRAIN,\n // 确保标签与地面贴合\n show: false\n },\n billboard: {\n image: pinIndex,\n // 示例图像路径\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // 图像底部对齐\n width: 36,\n height: 36\n },\n index: that.options.index\n });\n\n // 创建一个连接Point和Billboard的竖线\n that.lineEntity = that.viewer.entities.add({\n show: that.options.show,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return [that.pointEntity.position.getValue(), that.billboardEntity.position.getValue()];\n }, false),\n width: 1,\n material: new Cesium.PolylineOutlineMaterialProperty({\n outlineColor: Cesium.Color.GAINSBORO,\n outlineWidth: 1,\n color: Cesium.Color.WITHE\n }),\n zIndex: 99999999\n }\n });\n if (that.options.keyboard) {\n that.changeAltitude();\n }\n that.handler.setInputAction(function (movement) {\n var pickedObject = that.viewer.scene.pick(movement.position);\n if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && pickedObject.id === that.billboardEntity) {\n if (that.options.selectFun) {\n that.options.selectFun(that.billboardEntity.index - 1);\n }\n }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FpckxpbmUvYmlsbG9yZF9wb2ludF9saW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BaXJMaW5lL2JpbGxvcmRfcG9pbnRfbGluZS5qcz85NDIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbGxvcmRQb2ludExpbmUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHZpZXdlcikge1xyXG4gICAgdGhpcy5vcHRpb25zID0geyAuLi5vcHRpb25zIH1cclxuICAgIHRoaXMucG9pbnRFbnRpdHkgPSBudWxsXHJcbiAgICB0aGlzLmJpbGxib2FyZEVudGl0eSA9IG51bGxcclxuICAgIHRoaXMubGluZUVudGl0eSA9IG51bGxcclxuICAgIHRoaXMudXBkYXRlZFBvc2l0aW9uID0gW11cclxuICAgIHRoaXMucG9pbnRVcGRhdGVkUG9zaXRpb24gPSBbXVxyXG4gICAgdGhpcy52aWV3ZXIgPSB2aWV3ZXJcclxuICAgIHRoaXMuaGFuZGxlciA9IG5ldyBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIodmlld2VyLnNjZW5lLmNhbnZhcylcclxuICAgIHRoaXMucGluQnVpbGRlciA9IG5ldyBDZXNpdW0uUGluQnVpbGRlcigpXHJcbiAgICB0aGlzLmluZGV4ID0gbnVsbFxyXG4gICAgLy/lrprkuYnlsY/luZXngrnlh7vkuovku7blpITnkIblmahcclxuICAgIEJpbGxvcmRQb2ludExpbmUuc2V0RGVmYXVsdFZhbHVlKHRoaXMpXHJcbiAgICBCaWxsb3JkUG9pbnRMaW5lLmluaXQodGhpcylcclxuICB9XHJcbiAgc3RhdGljIHNldERlZmF1bHRWYWx1ZSh0aGF0KSB7XHJcbiAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucyB8fCB7fVxyXG4gICAgdGhhdC5vcHRpb25zLm5vcm1hbEhlaWdodCA9IHRoYXQub3B0aW9ucy5ub3JtYWxIZWlnaHQgfHwgMTAwXHJcbiAgICB0aGF0Lm9wdGlvbnMuYWlySGVpZ2h0ID0gdGhhdC5vcHRpb25zLmFpckhlaWdodCB8fCAxMDBcclxuICAgIHRoYXQub3B0aW9ucy5pbWFnZSA9IHRoYXQub3B0aW9ucy5pbWFnZSB8fCAnL3N0YXRpYy9pbWcvY2x1c3RlcjIucG5nJ1xyXG4gICAgdGhhdC5vcHRpb25zLnNob3cgPSB0aGF0Lm9wdGlvbnMuc2hvdyB8fCB0cnVlXHJcbiAgICB0aGF0Lm9wdGlvbnMuaW5kZXggPSB0aGF0Lm9wdGlvbnMuaW5kZXggfHwgMVxyXG4gICAgdGhhdC5vcHRpb25zLnNhdmVGdW4gPSB0aGF0Lm9wdGlvbnMuc2F2ZUZ1biB8fCBudWxsXHJcbiAgICB0aGF0Lm9wdGlvbnMuc2VsZWN0RnVuID0gdGhhdC5vcHRpb25zLnNlbGVjdEZ1biB8fCBudWxsXHJcbiAgICB0aGF0Lm9wdGlvbnMua2V5Ym9hcmQgPSB0aGF0Lm9wdGlvbnMua2V5Ym9hcmQgPz8gdHJ1ZVxyXG4gICAgdGhhdC5vcHRpb25zLnVwZGF0ZUZydXN0dW1GdW4gPSB0aGF0Lm9wdGlvbnMudXBkYXRlRnJ1c3R1bUZ1biB8fCBudWxsXHJcbiAgICB0aGF0Lm9wdGlvbnMuZnJ1c3R1bSA9IHRoYXQub3B0aW9ucy5mcnVzdHVtIHx8IG51bGxcclxuICB9XHJcbiAgc3RhdGljIGluaXQodGhhdCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIC8vIOa3u+WKoOS4gOS4qlBvaW5077yM56iN5b6u5YGP56a75Zyw6Z2i6auY5bqm77yM5L2/5YW25a6M5YWo5Y+v6KeBXHJcbiAgICB0aGF0LnBvaW50RW50aXR5ID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3NpdGlvbnMubG5nLCBwb3NpdGlvbnMubGF0LCAwKSwgLy8g5Zyw6Z2i5LiKXHJcbiAgICAgIHBvaW50OiB7XHJcbiAgICAgICAgcGl4ZWxTaXplOiA4LFxyXG4gICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0lUSEUsXHJcbiAgICAgICAgaGVpZ2h0UmVmZXJlbmNlOiBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORCwgLy8g5L2/55So55u45a+55Zyw6Z2i5oiW6LS05Zyw77yMXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiAwXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvL1xyXG4gICAgbGV0IHBpbkluZGV4ID0gdGhhdC5waW5CdWlsZGVyXHJcbiAgICAgIC5mcm9tVGV4dChcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuaW5kZXgsXHJcbiAgICAgICAgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZDU5MCcpLFxyXG4gICAgICAgIDM2XHJcbiAgICAgIClcclxuICAgICAgLnRvRGF0YVVSTCgpXHJcbiAgICBsZXQgYWx0aXR1ZGUgPSAwXHJcbiAgICBpZiAocG9zaXRpb25zLmFsdGl0dWRlKSB7XHJcbiAgICAgIGFsdGl0dWRlID0gcG9zaXRpb25zLmFsdGl0dWRlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhbHRpdHVkZSA9IHRoYXQub3B0aW9ucy5ub3JtYWxIZWlnaHRcclxuICAgIH1cclxuICAgIC8vIOa3u+WKoOS4gOS4qkJpbGxib2FyZFxyXG4gICAgdGhhdC5iaWxsYm9hcmRFbnRpdHkgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgIHBvc2l0aW9ucy5sbmcsXHJcbiAgICAgICAgcG9zaXRpb25zLmxhdCxcclxuICAgICAgICBwb3NpdGlvbnMuYWx0ICsgdGhhdC5vcHRpb25zLm5vcm1hbEhlaWdodFxyXG4gICAgICApLFxyXG4gICAgICAvLyDliKTmlq1hbHRpdHVkZeaYr+WQpuacieWAvFxyXG5cclxuICAgICAgbGFiZWw6IHtcclxuICAgICAgICB0ZXh0OiBgTGF0OiAke3Bvc2l0aW9ucy5sbmcudG9GaXhlZCg4KX1cXG5Mb246ICR7cG9zaXRpb25zLmxhdC50b0ZpeGVkKFxyXG4gICAgICAgICAgOFxyXG4gICAgICAgICl9XFxuQWx0OiAke2FsdGl0dWRlLnRvRml4ZWQoOCl9bWAsXHJcbiAgICAgICAgZm9udDogJzE0cHggc2Fucy1zZXJpZicsXHJcbiAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuWUVMTE9XLFxyXG4gICAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLkJMQUNLLFxyXG4gICAgICAgIG91dGxpbmVXaWR0aDogMixcclxuICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC02MCksIC8vIOagh+etvuWBj+enu+mHj++8jOmYsuatoumHjeWPoFxyXG4gICAgICAgIGhlaWdodFJlZmVyZW5jZTogQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5SRUxBVElWRV9UT19URVJSQUlOLCAvLyDnoa7kv53moIfnrb7kuI7lnLDpnaLotLTlkIhcclxuICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICBpbWFnZTogcGluSW5kZXgsIC8vIOekuuS+i+WbvuWDj+i3r+W+hFxyXG4gICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLCAvLyDlm77lg4/lupXpg6jlr7npvZBcclxuICAgICAgICB3aWR0aDogMzYsXHJcbiAgICAgICAgaGVpZ2h0OiAzNlxyXG4gICAgICB9LFxyXG4gICAgICBpbmRleDogdGhhdC5vcHRpb25zLmluZGV4XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIOWIm+W7uuS4gOS4qui/nuaOpVBvaW505ZKMQmlsbGJvYXJk55qE56uW57q/XHJcbiAgICB0aGF0LmxpbmVFbnRpdHkgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGF0LnBvaW50RW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIHRoYXQuYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgICAgIF1cclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uUG9seWxpbmVPdXRsaW5lTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5HQUlOU0JPUk8sXHJcbiAgICAgICAgICBvdXRsaW5lV2lkdGg6IDEsXHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldJVEhFXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5rZXlib2FyZCkge1xyXG4gICAgICB0aGF0LmNoYW5nZUFsdGl0dWRlKClcclxuICAgIH1cclxuICAgIHRoYXQuaGFuZGxlci5zZXRJbnB1dEFjdGlvbihmdW5jdGlvbihtb3ZlbWVudCkge1xyXG4gICAgICB2YXIgcGlja2VkT2JqZWN0ID0gdGhhdC52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgaWYgKFxyXG4gICAgICAgIENlc2l1bS5kZWZpbmVkKHBpY2tlZE9iamVjdCkgJiZcclxuICAgICAgICBDZXNpdW0uZGVmaW5lZChwaWNrZWRPYmplY3QuaWQpICYmXHJcbiAgICAgICAgcGlja2VkT2JqZWN0LmlkID09PSB0aGF0LmJpbGxib2FyZEVudGl0eVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnNlbGVjdEZ1bikge1xyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnNlbGVjdEZ1bih0aGF0LmJpbGxib2FyZEVudGl0eS5pbmRleCAtIDEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuICB9XHJcbiAgLy8g5pS55Y+Y6auY5bqmXHJcbiAgY2hhbmdlQWx0aXR1ZGUoKSB7XHJcbiAgICB2YXIgaXNNb3VzZURvd24gPSBmYWxzZVxyXG4gICAgdmFyIHN0YXJ0UG9zaXRpb25cclxuICAgIHZhciBpbml0aWFsSGVpZ2h0XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGxldCBISEggPSBmYWxzZVxyXG4gICAgLy8g5qCH6K+GQWx06ZSu5piv5ZCm6KKr5oyJ5LiLXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5IC8vIOiOt+WPluaMieS4i+eahOmUruWQjVxyXG4gICAgICAvLyDmo4Dmn6XnibnlrprplK7mmK/lkKbooqvmjInkuItcclxuICAgICAgaWYgKGtleSA9PT0gJ2gnKSB7XHJcbiAgICAgICAgSEhIID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBISEggPSBmYWxzZVxyXG4gICAgfSlcclxuICAgIC8vIOaMieS4i+m8oOagh+W3pumUrlxyXG4gICAgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uKG1vdmVtZW50KSB7XHJcbiAgICAgIHZhciBwaWNrZWRPYmplY3QgPSB0aGF0LnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgQ2VzaXVtLmRlZmluZWQocGlja2VkT2JqZWN0KSAmJlxyXG4gICAgICAgIENlc2l1bS5kZWZpbmVkKHBpY2tlZE9iamVjdC5pZCkgJiZcclxuICAgICAgICBwaWNrZWRPYmplY3QuaWQgPT09IHRoYXQuYmlsbGJvYXJkRW50aXR5XHJcbiAgICAgICkge1xyXG4gICAgICAgIGlzTW91c2VEb3duID0gdHJ1ZVxyXG4gICAgICAgIHN0YXJ0UG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvblxyXG5cclxuICAgICAgICAvLyDojrflj5ZCaWxsYm9hcmTlvZPliY3nmoTlnLDnkIbpq5jluqZcclxuICAgICAgICB2YXIgcG9zaXRpb25DYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oXHJcbiAgICAgICAgICB0aGF0LmJpbGxib2FyZEVudGl0eS5wb3NpdGlvbi5nZXRWYWx1ZSgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGluaXRpYWxIZWlnaHQgPSBwb3NpdGlvbkNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICAgICAgfVxyXG4gICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLkxFRlRfRE9XTilcclxuICAgIC8vIOenu+WKqOm8oOagh1xyXG4gICAgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uKG1vdmVtZW50KSB7XHJcbiAgICAgIGlmIChpc01vdXNlRG93biAmJiBISEggPT0gZmFsc2UpIHtcclxuICAgICAgICAvLyDnp7vliqjkvY3nva5cclxuICAgICAgICB2YXIgbmV3Q2FydGVzaWFuID0gdGhhdC52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG1vdmVtZW50LmVuZFBvc2l0aW9uKVxyXG4gICAgICAgIHRoYXQuZGlzYWJsZUNhbWVyYURyYWcodGhhdC52aWV3ZXIsIGZhbHNlKVxyXG4gICAgICAgIGlmIChuZXdDYXJ0ZXNpYW4pIHtcclxuICAgICAgICAgIHZhciBuZXdDYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4obmV3Q2FydGVzaWFuKVxyXG4gICAgICAgICAgLy8g5L+d5oyB6auY5bqm5LiN5Y+YXHJcbiAgICAgICAgICB2YXIgbmV3TG9uZ2l0dWRlID0gbmV3Q2FydG9ncmFwaGljLmxvbmdpdHVkZVxyXG4gICAgICAgICAgdmFyIG5ld0xhdGl0dWRlID0gbmV3Q2FydG9ncmFwaGljLmxhdGl0dWRlXHJcbiAgICAgICAgICB2YXIgdXBkYXRlZFBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbVJhZGlhbnMoXHJcbiAgICAgICAgICAgIG5ld0xvbmdpdHVkZSxcclxuICAgICAgICAgICAgbmV3TGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxIZWlnaHRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHZhciBwb2ludFVwZGF0ZWRQb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21SYWRpYW5zKFxyXG4gICAgICAgICAgICBuZXdMb25naXR1ZGUsXHJcbiAgICAgICAgICAgIG5ld0xhdGl0dWRlLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICB0aGF0LmJpbGxib2FyZEVudGl0eS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkUG9zaXRpb25cclxuICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgdGhhdC5iaWxsYm9hcmRFbnRpdHkubGFiZWwudGV4dCA9IGBMYXQ6ICR7Q2VzaXVtLk1hdGgudG9EZWdyZWVzKFxyXG4gICAgICAgICAgICBuZXdMb25naXR1ZGVcclxuICAgICAgICAgICkudG9GaXhlZCg2KX1cXG5Mb246ICR7Q2VzaXVtLk1hdGgudG9EZWdyZWVzKG5ld0xhdGl0dWRlKS50b0ZpeGVkKFxyXG4gICAgICAgICAgICA2XHJcbiAgICAgICAgICApfVxcbkFsdDogJHtpbml0aWFsSGVpZ2h0LnRvRml4ZWQoMil9bWBcclxuICAgICAgICAgIHRoYXQucG9pbnRFbnRpdHkucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcG9pbnRVcGRhdGVkUG9zaXRpb25cclxuICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNNb3VzZURvd24gJiYgSEhIKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coSEhIKVxyXG4gICAgICAgIC8vIOaUueWPmOmrmOW6plxyXG4gICAgICAgIHZhciBlbmRQb3NpdGlvbiA9IG1vdmVtZW50LmVuZFBvc2l0aW9uXHJcbiAgICAgICAgdmFyIGRlbHRhWSA9IHN0YXJ0UG9zaXRpb24ueSAtIGVuZFBvc2l0aW9uLnkgLy8g6K6h566XWei9tOaWueWQkeS4iueahOenu+WKqOi3neemu1xyXG4gICAgICAgIC8vIOagueaNrum8oOagh+enu+WKqOeahOi3neemu+adpeiwg+aVtOmrmOW6plxyXG4gICAgICAgIHZhciBuZXdIZWlnaHQgPSBpbml0aWFsSGVpZ2h0ICsgZGVsdGFZXHJcbiAgICAgICAgLy8g5pu05pawYmlsbGJvYXJk5L2N572uXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQ2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKFxyXG4gICAgICAgICAgdGhhdC5iaWxsYm9hcmRFbnRpdHkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgICAgIClcclxuICAgICAgICB2YXIgbmV3UG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIENlc2l1bS5NYXRoLnRvRGVncmVlcyhwb3NpdGlvbkNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpLFxyXG4gICAgICAgICAgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHBvc2l0aW9uQ2FydG9ncmFwaGljLmxhdGl0dWRlKSxcclxuICAgICAgICAgIG5ld0hlaWdodFxyXG4gICAgICAgIClcclxuICAgICAgICAvLyDnpoHnlKjnm7jmnLpcclxuICAgICAgICB0aGF0LmRpc2FibGVDYW1lcmFEcmFnKHRoYXQudmlld2VyLCBmYWxzZSlcclxuICAgICAgICB0aGF0LmJpbGxib2FyZEVudGl0eS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3UG9zaXRpb25cclxuICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICB0aGF0LmJpbGxib2FyZEVudGl0eS5sYWJlbC50ZXh0ID0gYExhdDogJHtDZXNpdW0uTWF0aC50b0RlZ3JlZXMoXHJcbiAgICAgICAgICBwb3NpdGlvbkNhcnRvZ3JhcGhpYy5sb25naXR1ZGVcclxuICAgICAgICApLnRvRml4ZWQoNil9XFxuTG9uOiAke0Nlc2l1bS5NYXRoLnRvRGVncmVlcyhcclxuICAgICAgICAgIHBvc2l0aW9uQ2FydG9ncmFwaGljLmxhdGl0dWRlXHJcbiAgICAgICAgKS50b0ZpeGVkKDYpfVxcbkFsdDogJHtuZXdIZWlnaHQudG9GaXhlZCgyKX1tYFxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTU9VU0VfTU9WRSlcclxuICAgIC8vIOadvuW8gOm8oOagh+W3pumUrlxyXG4gICAgdGhpcy5oYW5kbGVyLnNldElucHV0QWN0aW9uKGZ1bmN0aW9uKG1vdmVtZW50KSB7XHJcbiAgICAgIHZhciBwaWNrZWRPYmplY3QgPSB0aGF0LnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgICBpc01vdXNlRG93biA9IGZhbHNlIC8vIOemgeeUqOebuOaculxyXG4gICAgICBISEggPSBmYWxzZSAvL1xyXG4gICAgICB0aGF0LmRpc2FibGVDYW1lcmFEcmFnKHRoYXQudmlld2VyLCB0cnVlKVxyXG4gICAgICAvLyDmm7TmlrBmcnVzdHVt55qE5L2N572uXHJcbiAgICAgIGlmIChcclxuICAgICAgICBDZXNpdW0uZGVmaW5lZChwaWNrZWRPYmplY3QpICYmXHJcbiAgICAgICAgQ2VzaXVtLmRlZmluZWQocGlja2VkT2JqZWN0LmlkKSAmJlxyXG4gICAgICAgIHBpY2tlZE9iamVjdC5pZCA9PT0gdGhhdC5iaWxsYm9hcmRFbnRpdHlcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5zYXZlRnVuKSB7XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMuc2F2ZUZ1bihudWxsLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5zZWxlY3RGdW4pIHtcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5zZWxlY3RGdW4odGhhdC5iaWxsYm9hcmRFbnRpdHkuaW5kZXggLSAxKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0Lm9wdGlvbnMuZnJ1c3R1bS51cGRhdGVQb3NpdGlvbkhlaWdodChcclxuICAgICAgICAgIHRoYXQuYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX1VQKVxyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUNhbWVyYURyYWcodmlld2VyLCBib29sKSB7XHJcbiAgICB2aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZVJvdGF0ZSA9IGJvb2xcclxuICAgIHZpZXdlci5zY2VuZS5zY3JlZW5TcGFjZUNhbWVyYUNvbnRyb2xsZXIuZW5hYmxlVHJhbnNsYXRlID0gYm9vbFxyXG4gICAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVab29tID0gYm9vbFxyXG4gICAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVUaWx0ID0gYm9vbFxyXG4gICAgdmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVMb29rID0gYm9vbFxyXG4gIH1cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJvb2xcclxuICAgKi9cclxuICBzZXQgc2hvdyhib29sKSB7XHJcbiAgICBpZiAodHlwZW9mIGJvb2wgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLnBvaW50RW50aXR5LnNob3cgPSBib29sXHJcbiAgICAgIHRoaXMuYmlsbGJvYXJkRW50aXR5LnNob3cgPSBib29sXHJcbiAgICAgIHRoaXMubGluZUVudGl0eS5zaG93ID0gYm9vbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMucG9pbnRFbnRpdHkpXHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5iaWxsYm9hcmRFbnRpdHkpXHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5saW5lRW50aXR5KVxyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBMkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE5UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/AirLine/billord_point_line.js\n"); /***/ }), /***/ "./src/Obj/AirLine/frustum.js": /*!************************************!*\ !*** ./src/Obj/AirLine/frustum.js ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Frustum; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar Frustum = /*#__PURE__*/function () {\n function Frustum(options, viewer, viewer1) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Frustum);\n this.options = _objectSpread({}, options);\n this.viewer = viewer;\n this.viewer1 = viewer1;\n this.head = 0;\n this.pitch = 90;\n this.po = 0.00001;\n this.position = null;\n this.hpr = null;\n this.currentFrustumOutline = null;\n this.frustum = null;\n this.setInterval1 = null;\n this.webrtc = null;\n\n // 设置默认值\n Frustum.setDefaultValue(this);\n this.create();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Frustum, [{\n key: \"create\",\n value:\n // 初始化视锥体\n function create() {\n this.frustum = new Cesium.PerspectiveFrustum({\n fov: Cesium.Math.toRadians(this.options.fov),\n aspectRatio: this.options.aspectRatio,\n near: this.options.near,\n far: this.options.far\n });\n var _this$options$positio = this.options.position,\n lng = _this$options$positio.lng,\n lat = _this$options$positio.lat,\n alt = _this$options$positio.alt;\n var _this$options = this.options,\n heading = _this$options.heading,\n pitch = _this$options.pitch,\n roll = _this$options.roll;\n this.position = Cesium.Cartesian3.fromDegrees(lng, lat, alt + this.options.normalHeight);\n this.hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(heading), Cesium.Math.toRadians(pitch), Cesium.Math.toRadians(roll));\n this.drawFrustumOutline();\n this.drawFrustumFilled();\n this.monitorKeyboard();\n this.updateFrustumSquareBase(40);\n this.syncHpr();\n if (this.options.videoUrl) {\n this.addVideoToFrustumTop2();\n }\n }\n\n // 监听键盘事件\n }, {\n key: \"monitorKeyboard\",\n value: function monitorKeyboard() {\n var _this = this;\n var keyActions = {\n KeyQ: function KeyQ() {\n return _this.setIntervalhpr(-0.45);\n },\n KeyE: function KeyE() {\n return _this.setIntervalhpr(0.45);\n },\n KeyB: function KeyB() {\n return _this.setIntervalhprr(-0.45);\n },\n KeyN: function KeyN() {\n return _this.setIntervalhprr(0.45);\n },\n KeyW: function KeyW() {\n return _this.updateFrustumPosition('move', -0.00001);\n },\n KeyS: function KeyS() {\n return _this.updateFrustumPosition('move', 0.00001);\n },\n KeyA: function KeyA() {\n return _this.updateFrustumPosition('move', -0.00001, 0);\n },\n KeyD: function KeyD() {\n return _this.updateFrustumPosition('move', 0.00001, 0);\n },\n KeyC: function KeyC() {\n return _this.updateFrustumHeight(1);\n },\n // 增加高度\n KeyZ: function KeyZ() {\n return _this.updateFrustumHeight(-1);\n } // 降低高度\n };\n this.keydownHandler = function (event) {\n if (keyActions[event.code]) keyActions[event.code]();\n };\n this.keyupHandler = function () {\n return _this.stopFrustumRotation();\n };\n document.addEventListener('keydown', this.keydownHandler);\n document.addEventListener('keyup', this.keyupHandler);\n }\n // 渲染视频\n }, {\n key: \"addVideoToFrustumTop\",\n value: function addVideoToFrustumTop() {\n var _this2 = this;\n // 创建视频元素\n var videoElement = document.createElement('video');\n videoElement.width = 640;\n videoElement.height = 360;\n videoElement.autoplay = true;\n videoElement.loop = true;\n videoElement.muted = true;\n // videoElement.style.display = 'none'; // 隐藏视频元素\n document.body.appendChild(videoElement);\n\n // 使用 flv.js 播放 FLV 视频\n if (flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n // url: 'http://zmkg.cqet.top:9991/live/2pUbcgTrly3mIDuxsDXN9h3hqcEKU6TlsV_YeIDyqHqXGzXafqWokXdU1q6j_S7hTCP7HynZQIsuNM6KQ5l-ag==.flv',\n type: 'flv',\n isLive: true,\n hasAudio: false,\n enableStashBuffer: true,\n //\n enableWorker: true,\n autoCleanupSourceBuffer: true,\n //自动清除缓存\n url: this.options.videoUrl\n });\n flvPlayer.attachMediaElement(videoElement);\n flvPlayer.load();\n flvPlayer.play();\n } else {\n console.error('FLV.js is not supported in this browser.');\n }\n var corners = this.computeFrustumCorners(this.frustum, this.position, this.hpr);\n // 创建 PolygonGeometry 并应用视频作为纹理\n var polygonHierarchy = new Cesium.PolygonHierarchy([corners.bottomLeft, corners.bottomRight, corners.topRight, corners.topLeft]);\n this.videoEntity = this.viewer.entities.add(new Cesium.Entity({\n id: '22222222',\n show: true,\n polygon: {\n hierarchy: polygonHierarchy\n }\n }));\n videoElement.addEventListener('loadeddata', function () {\n _this2.videoEntity.polygon.material = videoElement; // 确保视频纹理加载后再设置\n });\n }\n // 渲染视频\n }, {\n key: \"addVideoToFrustumTop2\",\n value: function () {\n var _addVideoToFrustumTop = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n var _this3 = this;\n var videoElement, corners, polygonHierarchy;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n // 创建视频元素\n videoElement = document.createElement('video');\n videoElement.width = 640;\n videoElement.height = 360;\n videoElement.autoplay = true;\n videoElement.loop = true;\n videoElement.muted = true;\n // videoElement.style.display = 'none'; // 隐藏视频元素\n document.body.appendChild(videoElement);\n _context.next = 9;\n return this.startPlay(videoElement, this.options.videoUrl);\n case 9:\n corners = this.computeFrustumCorners(this.frustum, this.position, this.hpr); // 创建 PolygonGeometry 并应用视频作为纹理\n polygonHierarchy = new Cesium.PolygonHierarchy([corners.bottomLeft, corners.bottomRight, corners.topRight, corners.topLeft]);\n this.videoEntity = this.viewer.entities.add(new Cesium.Entity({\n id: '22222222',\n show: true,\n polygon: {\n hierarchy: polygonHierarchy\n }\n }));\n videoElement.addEventListener('loadeddata', function () {\n _this3.videoEntity.polygon.material = videoElement; // 确保视频纹理加载后再设置\n });\n case 13:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function addVideoToFrustumTop2() {\n return _addVideoToFrustumTop.apply(this, arguments);\n }\n return addVideoToFrustumTop2;\n }()\n }, {\n key: \"startPlay\",\n value: function () {\n var _startPlay = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2(element, url) {\n var session;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n // Close existing SDK instance if any\n if (this.webrtc) {\n this.webrtc.close();\n }\n\n // Initialize a new SDK instance\n this.webrtc = new SrsRtcWhipWhepAsync();\n\n // Bind the video player to the SDK stream\n element.srcObject = this.webrtc.stream;\n _context2.prev = 3;\n _context2.next = 6;\n return this.webrtc.play(url);\n case 6:\n session = _context2.sent;\n console.log(session);\n // this.sessionId = session.sessionid\n // this.simulatorUrl = `${session.simulator}?drop=1&username=${session.sessionid}`\n _context2.next = 13;\n break;\n case 10:\n _context2.prev = 10;\n _context2.t0 = _context2[\"catch\"](3);\n // console.error('Error playing stream:', error)\n this.webrtc.close();\n // this.playerVisible = false\n case 13:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this, [[3, 10]]);\n }));\n function startPlay(_x, _x2) {\n return _startPlay.apply(this, arguments);\n }\n return startPlay;\n }() // 计算视锥体远裁剪面(大面)的四个角点\n }, {\n key: \"computeFrustumCorners\",\n value: function computeFrustumCorners(frustum, position, hpr) {\n var tanFov = Math.tan(frustum.fov * 0.5);\n var farHeight = frustum.far * tanFov;\n var farWidth = farHeight * frustum.aspectRatio;\n var topLeft = new Cesium.Cartesian3(-farWidth, farHeight, -frustum.far);\n var topRight = new Cesium.Cartesian3(farWidth, farHeight, -frustum.far);\n var bottomLeft = new Cesium.Cartesian3(-farWidth, -farHeight, -frustum.far);\n var bottomRight = new Cesium.Cartesian3(farWidth, -farHeight, -frustum.far);\n var transform = Cesium.Transforms.headingPitchRollToFixedFrame(position, hpr);\n // console.log('transform111111111111111111111111', transform)\n return {\n topLeft: Cesium.Matrix4.multiplyByPoint(transform, topLeft, new Cesium.Cartesian3()),\n topRight: Cesium.Matrix4.multiplyByPoint(transform, topRight, new Cesium.Cartesian3()),\n bottomLeft: Cesium.Matrix4.multiplyByPoint(transform, bottomLeft, new Cesium.Cartesian3()),\n bottomRight: Cesium.Matrix4.multiplyByPoint(transform, bottomRight, new Cesium.Cartesian3())\n };\n }\n // 封装的函数:更新 Polygon 面的位置\n }, {\n key: \"updatePolygonPosition\",\n value: function updatePolygonPosition() {\n var corners = this.computeFrustumCorners(this.frustum, this.position, this.hpr);\n this.videoEntity.polygon.hierarchy = new Cesium.CallbackProperty(function (e) {\n return new Cesium.PolygonHierarchy([corners.bottomLeft, corners.bottomRight, corners.topRight, corners.topLeft]);\n });\n }\n // 更新锥体底部为正方形的方法\n }, {\n key: \"updateFrustumSquareBase\",\n value: function updateFrustumSquareBase(value) {\n // 将输入值范围从 56 到 1 映射到面积范围 10000 到 100\n var minArea = 100; // 最小面积\n var maxArea = 10000; // 最大面积\n\n // 映射公式(反转映射)\n var newArea = (56 - value) / (56 - 1) * (maxArea - minArea) + minArea;\n\n // 确保aspectRatio保持为1(正方形)\n this.frustum.aspectRatio = 1;\n\n // 根据面积计算正方形边长\n var sideLength = Math.sqrt(newArea);\n\n // 远平面距离\n var far = this.frustum.far;\n\n // 计算新的fov\n var fov = 2 * Math.atan(sideLength / (2 * far));\n\n // 更新视锥体的fov\n this.frustum.fov = fov;\n\n // 重新绘制视锥体轮廓和填充\n this.drawFrustumOutline();\n this.drawFrustumFilled();\n this.syncHpr();\n }\n }, {\n key: \"updateFrustumHeight\",\n value: function updateFrustumHeight(deltaHeight) {\n var cartographic = Cesium.Cartographic.fromCartesian(this.position);\n cartographic.height += deltaHeight; // 更新高度\n this.position = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude), cartographic.height);\n this.options.position.alt = cartographic.height;\n // this.options.arr[\n // this.options.index\n // ] = this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic)\n this.syncHpr();\n this.drawFrustumOutline(); // 重新绘制视锥体轮廓\n this.drawFrustumFilled();\n }\n // 更新position变化后的视锥体属性\n }, {\n key: \"updatePositionHeight\",\n value: function updatePositionHeight(p) {\n this.options.position = this.cartesian3Towgs84(p);\n this.syncHpr();\n this.drawFrustumOutline(); // 重新绘制视锥体轮廓\n this.drawFrustumFilled();\n }\n }, {\n key: \"cartesian3Towgs84\",\n value: function cartesian3Towgs84(cartesian) {\n var ellipsoid = this.viewer.scene.globe.ellipsoid;\n var cartesian3 = new Cesium.Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n var cartographic = ellipsoid.cartesianToCartographic(cartesian3);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n var alt = cartographic.height < 0 ? 0 : cartographic.height;\n return {\n lng: lng,\n lat: lat,\n alt: alt\n };\n }\n }, {\n key: \"setIntervalhpr\",\n value: function setIntervalhpr(num) {\n var _this4 = this;\n this.stopFrustumRotation(); // 先停止当前的定时器\n this.setInterval1 = setInterval(function () {\n _this4.head += num;\n _this4.updateFrustumHPR(Cesium.Math.toRadians(_this4.head), _this4.pitch);\n }, 10);\n }\n }, {\n key: \"setIntervalhprr\",\n value: function setIntervalhprr(num) {\n var _this5 = this;\n this.stopFrustumRotation(); // 先停止当前的定时器\n this.setInterval1 = setInterval(function () {\n // 限制 pitch 在 [60, 180] 范围内\n _this5.pitch = Math.max(60, Math.min(180, _this5.pitch + num));\n _this5.updateFrustumHPR(_this5.head, Cesium.Math.toRadians(_this5.pitch));\n }, 10);\n }\n // 停止视锥体旋转\n }, {\n key: \"stopFrustumRotation\",\n value: function stopFrustumRotation() {\n if (this.setInterval1) {\n clearInterval(this.setInterval1);\n this.setInterval1 = null;\n }\n }\n // 新增:绘制填充的视锥体\n }, {\n key: \"drawFrustumFilled\",\n value: function drawFrustumFilled() {\n var that = this;\n // console.log('that.options.show', that.options.show)\n\n var transform = Cesium.Transforms.headingPitchRollToFixedFrame(this.position, this.hpr);\n var frustumGeometry = new Cesium.FrustumGeometry({\n frustum: this.frustum,\n origin: Cesium.Matrix4.getTranslation(transform, new Cesium.Cartesian3()),\n orientation: Cesium.Quaternion.fromRotationMatrix(Cesium.Matrix4.getRotation(transform, new Cesium.Matrix3()))\n });\n if (this.currentFrustumFilled) {\n this.viewer.scene.primitives.remove(this.currentFrustumFilled);\n }\n this.currentFrustumFilled = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: frustumGeometry,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.4) // 半透明黄色填充\n )\n }\n }),\n appearance: new Cesium.MaterialAppearance({\n material: Cesium.Material.fromType('Color', {\n color: Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.4) // 填充颜色\n }),\n translucent: true\n }),\n asynchronous: false,\n // show: false\n show: that.options.show\n });\n this.viewer.scene.primitives.add(this.currentFrustumFilled);\n }\n // 绘制视锥体轮廓\n }, {\n key: \"drawFrustumOutline\",\n value: function drawFrustumOutline() {\n var that = this;\n // console.log('that.options.show', that.options.show)\n\n var transform = Cesium.Transforms.headingPitchRollToFixedFrame(this.position, this.hpr);\n var frustumOutlineGeometry = new Cesium.FrustumOutlineGeometry({\n frustum: this.frustum,\n origin: Cesium.Matrix4.getTranslation(transform, new Cesium.Cartesian3()),\n orientation: Cesium.Quaternion.fromRotationMatrix(Cesium.Matrix4.getRotation(transform, new Cesium.Matrix3()))\n });\n if (this.currentFrustumOutline) {\n this.viewer.scene.primitives.remove(this.currentFrustumOutline);\n }\n this.currentFrustumOutline = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: frustumOutlineGeometry,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW)\n }\n }),\n appearance: new Cesium.PolylineColorAppearance({\n translucent: false\n }),\n asynchronous: false,\n show: that.options.show\n // show: false\n });\n this.viewer.scene.primitives.add(this.currentFrustumOutline);\n }\n // 更新视锥体位置\n }, {\n key: \"updateFrustumPosition\",\n value: function updateFrustumPosition() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'move';\n var p = arguments.length > 1 ? arguments[1] : undefined;\n var deg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 90;\n var flag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n if (type === 'move') {\n // eslint-disable-next-line no-undef\n var point = turf.point([this.options.position.lng, this.options.position.lat]);\n var degreesValue = Cesium.Math.toDegrees(this.hpr.heading);\n var bearing = degreesValue + deg;\n var options = {\n units: 'degrees'\n };\n // eslint-disable-next-line no-undef\n var destination = turf.destination(point, p, bearing, options).geometry.coordinates;\n this.position = Cesium.Cartesian3.fromDegrees(destination[0], destination[1], this.options.position.alt + this.options.normalHeight);\n this.options.position.lng = destination[0];\n this.options.position.lat = destination[1];\n this.viewer.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(destination[0], destination[1], this.viewer.camera.positionCartographic.height)\n });\n }\n if (type === 'update') {\n this.position = p;\n this.options.videoUrl && this.updatePolygonPosition();\n }\n if (flag) {\n this.syncHpr();\n this.updateFrustumAttributes();\n }\n }\n // 同步视角\n }, {\n key: \"syncHpr\",\n value: function syncHpr() {\n // console.log('this.viewer1', this.viewer1);\n if (this.viewer1) {\n var _this$options$positio2 = this.options.position,\n lng = _this$options$positio2.lng,\n lat = _this$options$positio2.lat,\n alt = _this$options$positio2.alt;\n var pitch = -this.hpr.pitch - Cesium.Math.toRadians(-90.0);\n this.viewer1.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(lng, lat, alt + this.options.normalHeight),\n orientation: {\n heading: this.hpr.heading + Cesium.Math.toRadians(-90.0),\n pitch: pitch,\n roll: this.hpr.roll\n }\n });\n }\n }\n // 更新视锥体的 HeadingPitchRoll\n }, {\n key: \"updateFrustumHPR\",\n value: function updateFrustumHPR() {\n var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.head;\n var p = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.pitch;\n var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var flag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var type = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n function degreesToRadians(degrees) {\n return degrees * Math.PI / 180.0;\n }\n if (type == 'alone') {\n this.hpr.heading = degreesToRadians(h);\n this.hpr.pitch = degreesToRadians(p);\n this.hpr.roll = degreesToRadians(r);\n } else {\n this.hpr.heading = Cesium.Math.negativePiToPi(h);\n this.hpr.pitch = Cesium.Math.negativePiToPi(p);\n this.hpr.roll = Cesium.Math.negativePiToPi(r);\n }\n if (flag) {\n this.syncHpr();\n this.updateFrustumAttributes();\n }\n }\n // 用于更新\n }, {\n key: \"updateFrustumAttributes\",\n value: function updateFrustumAttributes() {\n var that = this;\n // 检查 position 和 hpr 是否已初始化\n if (!this.position || !this.hpr) {\n // eslint-disable-next-line no-console\n console.error('Position or HPR is not defined:', this.position, this.hpr);\n return;\n }\n\n // 生成变换矩阵\n var transform = Cesium.Transforms.headingPitchRollToFixedFrame(this.position, this.hpr);\n if (!transform) {\n // eslint-disable-next-line no-console\n console.error('Transform generation failed.');\n return;\n }\n try {\n // 准备轮廓几何体和外观\n var outlineGeometry = new Cesium.FrustumOutlineGeometry({\n frustum: this.frustum,\n origin: Cesium.Matrix4.getTranslation(transform, new Cesium.Cartesian3()),\n orientation: Cesium.Quaternion.fromRotationMatrix(Cesium.Matrix4.getRotation(transform, new Cesium.Matrix3()))\n });\n var outlineAppearance = new Cesium.PolylineColorAppearance({\n translucent: false\n });\n var outlineColor = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW);\n\n // 准备填充几何体和外观\n var filledGeometry = new Cesium.FrustumGeometry({\n frustum: this.frustum,\n origin: Cesium.Matrix4.getTranslation(transform, new Cesium.Cartesian3()),\n orientation: Cesium.Quaternion.fromRotationMatrix(Cesium.Matrix4.getRotation(transform, new Cesium.Matrix3()))\n });\n var filledAppearance = new Cesium.MaterialAppearance({\n material: Cesium.Material.fromType('Color', {\n color: Cesium.Color.YELLOW.withAlpha(0.5)\n }),\n translucent: true\n });\n var filledColor = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED.withAlpha(0.5));\n\n // 删除旧的 Primitive\n if (this.currentFrustumOutline) {\n this.viewer.scene.primitives.remove(this.currentFrustumOutline);\n }\n if (this.currentFrustumFilled) {\n this.viewer.scene.primitives.remove(this.currentFrustumFilled);\n }\n\n // 创建并添加新的轮廓 Primitive\n this.currentFrustumOutline = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: outlineGeometry,\n attributes: {\n color: outlineColor\n }\n }),\n appearance: outlineAppearance,\n asynchronous: false,\n show: that.options.show\n });\n this.viewer.scene.primitives.add(this.currentFrustumOutline);\n\n // 创建并添加新的填充 Primitive\n this.currentFrustumFilled = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: filledGeometry,\n attributes: {\n color: filledColor\n }\n }),\n appearance: filledAppearance,\n asynchronous: false,\n show: that.options.show\n });\n this.viewer.scene.primitives.add(this.currentFrustumFilled);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in drawFrustum:', error);\n }\n }\n // 调整视锥体的 near 和 far 平面\n }, {\n key: \"updateFrustumNearFar\",\n value: function updateFrustumNearFar(newNear, newFar) {\n this.frustum.near = newNear;\n this.frustum.far = newFar;\n this.drawFrustumOutline();\n this.drawFrustumFilled();\n }\n // 调整视锥体的 fov\n }, {\n key: \"updateFrustumFov\",\n value: function updateFrustumFov(newFov) {\n this.frustum.fov = Cesium.Math.toRadians(newFov);\n this.drawFrustumOutline();\n this.drawFrustumFilled();\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(bool) {\n if (typeof bool === 'boolean') {\n this.options.show = bool;\n this.currentFrustumOutline.show = bool;\n this.currentFrustumFilled.show = bool;\n }\n }\n }, {\n key: \"remove\",\n value: function remove() {\n document.removeEventListener('keydown', this.keydownHandler);\n document.removeEventListener('keyup', this.keyupHandler);\n if (this.currentFrustumFilled) {\n this.viewer.scene.primitives.remove(this.currentFrustumFilled);\n }\n if (this.currentFrustumOutline) {\n this.viewer.scene.primitives.remove(this.currentFrustumOutline);\n }\n if (this.videoEntity) {\n this.viewer.entities.remove(this.videoEntity);\n }\n }\n }], [{\n key: \"setDefaultValue\",\n value: function setDefaultValue(that) {\n var _that$options$show;\n that.options.position = that.options.position || {};\n that.options.fov = that.options.fov || 30;\n that.options.aspectRatio = that.options.aspectRatio || 1;\n that.options.near = that.options.near || 1;\n that.options.far = that.options.far || 120;\n that.options.heading = that.options.heading || 0;\n that.options.pitch = that.options.pitch || 90;\n that.options.roll = that.options.roll || 0;\n that.options.show = (_that$options$show = that.options.show) !== null && _that$options$show !== void 0 ? _that$options$show : true;\n that.options.videoUrl = that.options.videoUrl || '';\n that.options.index = that.options.index || 0;\n that.options.arr = that.options.arr || [];\n that.options.normalHeight = that.options.normalHeight || 100;\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FpckxpbmUvZnJ1c3R1bS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQWlyTGluZS9mcnVzdHVtLmpzPzEyMjIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJ1c3R1bSB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucywgdmlld2VyLCB2aWV3ZXIxKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgdGhpcy52aWV3ZXIgPSB2aWV3ZXJcclxuICAgIHRoaXMudmlld2VyMSA9IHZpZXdlcjFcclxuICAgIHRoaXMuaGVhZCA9IDBcclxuICAgIHRoaXMucGl0Y2ggPSA5MFxyXG4gICAgdGhpcy5wbyA9IDAuMDAwMDFcclxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsXHJcbiAgICB0aGlzLmhwciA9IG51bGxcclxuICAgIHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lID0gbnVsbFxyXG4gICAgdGhpcy5mcnVzdHVtID0gbnVsbFxyXG4gICAgdGhpcy5zZXRJbnRlcnZhbDEgPSBudWxsXHJcbiAgICB0aGlzLndlYnJ0YyA9IG51bGxcclxuXHJcbiAgICAvLyDorr7nva7pu5jorqTlgLxcclxuICAgIEZydXN0dW0uc2V0RGVmYXVsdFZhbHVlKHRoaXMpXHJcbiAgICB0aGlzLmNyZWF0ZSgpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0RGVmYXVsdFZhbHVlKHRoYXQpIHtcclxuICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbiA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbiB8fCB7fVxyXG4gICAgdGhhdC5vcHRpb25zLmZvdiA9IHRoYXQub3B0aW9ucy5mb3YgfHwgMzBcclxuICAgIHRoYXQub3B0aW9ucy5hc3BlY3RSYXRpbyA9IHRoYXQub3B0aW9ucy5hc3BlY3RSYXRpbyB8fCAxXHJcbiAgICB0aGF0Lm9wdGlvbnMubmVhciA9IHRoYXQub3B0aW9ucy5uZWFyIHx8IDFcclxuICAgIHRoYXQub3B0aW9ucy5mYXIgPSB0aGF0Lm9wdGlvbnMuZmFyIHx8IDEyMFxyXG4gICAgdGhhdC5vcHRpb25zLmhlYWRpbmcgPSB0aGF0Lm9wdGlvbnMuaGVhZGluZyB8fCAwXHJcbiAgICB0aGF0Lm9wdGlvbnMucGl0Y2ggPSB0aGF0Lm9wdGlvbnMucGl0Y2ggfHwgOTBcclxuICAgIHRoYXQub3B0aW9ucy5yb2xsID0gdGhhdC5vcHRpb25zLnJvbGwgfHwgMFxyXG4gICAgdGhhdC5vcHRpb25zLnNob3cgPSB0aGF0Lm9wdGlvbnMuc2hvdyA/PyB0cnVlXHJcbiAgICB0aGF0Lm9wdGlvbnMudmlkZW9VcmwgPSB0aGF0Lm9wdGlvbnMudmlkZW9VcmwgfHwgJydcclxuICAgIHRoYXQub3B0aW9ucy5pbmRleCA9IHRoYXQub3B0aW9ucy5pbmRleCB8fCAwXHJcbiAgICB0aGF0Lm9wdGlvbnMuYXJyID0gdGhhdC5vcHRpb25zLmFyciB8fCBbXVxyXG4gICAgdGhhdC5vcHRpb25zLm5vcm1hbEhlaWdodCA9IHRoYXQub3B0aW9ucy5ub3JtYWxIZWlnaHQgfHwgMTAwXHJcbiAgfVxyXG5cclxuICAvLyDliJ3lp4vljJbop4bplKXkvZNcclxuICBjcmVhdGUoKSB7XHJcbiAgICB0aGlzLmZydXN0dW0gPSBuZXcgQ2VzaXVtLlBlcnNwZWN0aXZlRnJ1c3R1bSh7XHJcbiAgICAgIGZvdjogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5mb3YpLFxyXG4gICAgICBhc3BlY3RSYXRpbzogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvLFxyXG4gICAgICBuZWFyOiB0aGlzLm9wdGlvbnMubmVhcixcclxuICAgICAgZmFyOiB0aGlzLm9wdGlvbnMuZmFyXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHsgbG5nLCBsYXQsIGFsdCB9ID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgICBjb25zdCB7IGhlYWRpbmcsIHBpdGNoLCByb2xsIH0gPSB0aGlzLm9wdGlvbnNcclxuICAgIHRoaXMucG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgbG5nLFxyXG4gICAgICBsYXQsXHJcbiAgICAgIGFsdCArIHRoaXMub3B0aW9ucy5ub3JtYWxIZWlnaHRcclxuICAgIClcclxuICAgIHRoaXMuaHByID0gbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsKFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoaGVhZGluZyksXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhwaXRjaCksXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhyb2xsKVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuZHJhd0ZydXN0dW1PdXRsaW5lKClcclxuICAgIHRoaXMuZHJhd0ZydXN0dW1GaWxsZWQoKVxyXG4gICAgdGhpcy5tb25pdG9yS2V5Ym9hcmQoKVxyXG4gICAgdGhpcy51cGRhdGVGcnVzdHVtU3F1YXJlQmFzZSg0MClcclxuICAgIHRoaXMuc3luY0hwcigpXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnZpZGVvVXJsKSB7XHJcbiAgICAgIHRoaXMuYWRkVmlkZW9Ub0ZydXN0dW1Ub3AyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOebkeWQrOmUruebmOS6i+S7tlxyXG4gIG1vbml0b3JLZXlib2FyZCgpIHtcclxuICAgIGNvbnN0IGtleUFjdGlvbnMgPSB7XHJcbiAgICAgIEtleVE6ICgpID0+IHRoaXMuc2V0SW50ZXJ2YWxocHIoLTAuNDUpLFxyXG4gICAgICBLZXlFOiAoKSA9PiB0aGlzLnNldEludGVydmFsaHByKDAuNDUpLFxyXG4gICAgICBLZXlCOiAoKSA9PiB0aGlzLnNldEludGVydmFsaHBycigtMC40NSksXHJcbiAgICAgIEtleU46ICgpID0+IHRoaXMuc2V0SW50ZXJ2YWxocHJyKDAuNDUpLFxyXG4gICAgICBLZXlXOiAoKSA9PiB0aGlzLnVwZGF0ZUZydXN0dW1Qb3NpdGlvbignbW92ZScsIC0wLjAwMDAxKSxcclxuICAgICAgS2V5UzogKCkgPT4gdGhpcy51cGRhdGVGcnVzdHVtUG9zaXRpb24oJ21vdmUnLCAwLjAwMDAxKSxcclxuICAgICAgS2V5QTogKCkgPT4gdGhpcy51cGRhdGVGcnVzdHVtUG9zaXRpb24oJ21vdmUnLCAtMC4wMDAwMSwgMCksXHJcbiAgICAgIEtleUQ6ICgpID0+IHRoaXMudXBkYXRlRnJ1c3R1bVBvc2l0aW9uKCdtb3ZlJywgMC4wMDAwMSwgMCksXHJcbiAgICAgIEtleUM6ICgpID0+IHRoaXMudXBkYXRlRnJ1c3R1bUhlaWdodCgxKSwgLy8g5aKe5Yqg6auY5bqmXHJcbiAgICAgIEtleVo6ICgpID0+IHRoaXMudXBkYXRlRnJ1c3R1bUhlaWdodCgtMSkgLy8g6ZmN5L2O6auY5bqmXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5rZXlkb3duSGFuZGxlciA9IGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGtleUFjdGlvbnNbZXZlbnQuY29kZV0pIGtleUFjdGlvbnNbZXZlbnQuY29kZV0oKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMua2V5dXBIYW5kbGVyID0gKCkgPT4gdGhpcy5zdG9wRnJ1c3R1bVJvdGF0aW9uKClcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duSGFuZGxlcilcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMua2V5dXBIYW5kbGVyKVxyXG4gIH1cclxuICAvLyDmuLLmn5Pop4bpopFcclxuICBhZGRWaWRlb1RvRnJ1c3R1bVRvcCgpIHtcclxuICAgIC8vIOWIm+W7uuinhumikeWFg+e0oFxyXG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKVxyXG4gICAgdmlkZW9FbGVtZW50LndpZHRoID0gNjQwXHJcbiAgICB2aWRlb0VsZW1lbnQuaGVpZ2h0ID0gMzYwXHJcbiAgICB2aWRlb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlXHJcbiAgICB2aWRlb0VsZW1lbnQubG9vcCA9IHRydWVcclxuICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWVcclxuICAgIC8vIHZpZGVvRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAvLyDpmpDol4/op4bpopHlhYPntKBcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlkZW9FbGVtZW50KVxyXG5cclxuICAgIC8vIOS9v+eUqCBmbHYuanMg5pKt5pS+IEZMViDop4bpopFcclxuICAgIGlmIChmbHZqcy5pc1N1cHBvcnRlZCgpKSB7XHJcbiAgICAgIGNvbnN0IGZsdlBsYXllciA9IGZsdmpzLmNyZWF0ZVBsYXllcih7XHJcbiAgICAgICAgLy8gIHVybDogJ2h0dHA6Ly96bWtnLmNxZXQudG9wOjk5OTEvbGl2ZS8ycFViY2dUcmx5M21JRHV4c0RYTjloM2hxY0VLVTZUbHNWX1llSUR5cUhxWEd6WGFmcVdva1hkVTFxNmpfUzdoVENQN0h5blpRSXN1Tk02S1E1bC1hZz09LmZsdicsXHJcbiAgICAgICAgdHlwZTogJ2ZsdicsXHJcbiAgICAgICAgaXNMaXZlOiB0cnVlLFxyXG4gICAgICAgIGhhc0F1ZGlvOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTdGFzaEJ1ZmZlcjogdHJ1ZSwgLy9cclxuICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXHJcbiAgICAgICAgYXV0b0NsZWFudXBTb3VyY2VCdWZmZXI6IHRydWUsIC8v6Ieq5Yqo5riF6Zmk57yT5a2YXHJcbiAgICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudmlkZW9VcmxcclxuICAgICAgfSlcclxuICAgICAgZmx2UGxheWVyLmF0dGFjaE1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpXHJcbiAgICAgIGZsdlBsYXllci5sb2FkKClcclxuICAgICAgZmx2UGxheWVyLnBsYXkoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRkxWLmpzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLicpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29ybmVycyA9IHRoaXMuY29tcHV0ZUZydXN0dW1Db3JuZXJzKFxyXG4gICAgICB0aGlzLmZydXN0dW0sXHJcbiAgICAgIHRoaXMucG9zaXRpb24sXHJcbiAgICAgIHRoaXMuaHByXHJcbiAgICApXHJcbiAgICAvLyDliJvlu7ogUG9seWdvbkdlb21ldHJ5IOW5tuW6lOeUqOinhumikeS9nOS4uue6ueeQhlxyXG4gICAgY29uc3QgcG9seWdvbkhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShbXHJcbiAgICAgIGNvcm5lcnMuYm90dG9tTGVmdCxcclxuICAgICAgY29ybmVycy5ib3R0b21SaWdodCxcclxuICAgICAgY29ybmVycy50b3BSaWdodCxcclxuICAgICAgY29ybmVycy50b3BMZWZ0XHJcbiAgICBdKVxyXG4gICAgdGhpcy52aWRlb0VudGl0eSA9IHRoaXMudmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIGlkOiAnMjIyMjIyMjInLFxyXG4gICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgICAgaGllcmFyY2h5OiBwb2x5Z29uSGllcmFyY2h5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMudmlkZW9FbnRpdHkucG9seWdvbi5tYXRlcmlhbCA9IHZpZGVvRWxlbWVudCAvLyDnoa7kv53op4bpopHnurnnkIbliqDovb3lkI7lho3orr7nva5cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIOa4suafk+inhumikVxyXG4gIGFzeW5jIGFkZFZpZGVvVG9GcnVzdHVtVG9wMigpIHtcclxuICAgIC8vIOWIm+W7uuinhumikeWFg+e0oFxyXG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKVxyXG4gICAgdmlkZW9FbGVtZW50LndpZHRoID0gNjQwXHJcbiAgICB2aWRlb0VsZW1lbnQuaGVpZ2h0ID0gMzYwXHJcbiAgICB2aWRlb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlXHJcbiAgICB2aWRlb0VsZW1lbnQubG9vcCA9IHRydWVcclxuICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWVcclxuICAgIC8vIHZpZGVvRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAvLyDpmpDol4/op4bpopHlhYPntKBcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlkZW9FbGVtZW50KVxyXG4gICAgYXdhaXQgdGhpcy5zdGFydFBsYXkodmlkZW9FbGVtZW50LCB0aGlzLm9wdGlvbnMudmlkZW9VcmwpXHJcbiAgICBjb25zdCBjb3JuZXJzID0gdGhpcy5jb21wdXRlRnJ1c3R1bUNvcm5lcnMoXHJcbiAgICAgIHRoaXMuZnJ1c3R1bSxcclxuICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgdGhpcy5ocHJcclxuICAgIClcclxuICAgIC8vIOWIm+W7uiBQb2x5Z29uR2VvbWV0cnkg5bm25bqU55So6KeG6aKR5L2c5Li657q555CGXHJcbiAgICBjb25zdCBwb2x5Z29uSGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFtcclxuICAgICAgY29ybmVycy5ib3R0b21MZWZ0LFxyXG4gICAgICBjb3JuZXJzLmJvdHRvbVJpZ2h0LFxyXG4gICAgICBjb3JuZXJzLnRvcFJpZ2h0LFxyXG4gICAgICBjb3JuZXJzLnRvcExlZnRcclxuICAgIF0pXHJcbiAgICB0aGlzLnZpZGVvRW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgaWQ6ICcyMjIyMjIyMicsXHJcbiAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICBoaWVyYXJjaHk6IHBvbHlnb25IaWVyYXJjaHlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsICgpID0+IHtcclxuICAgICAgdGhpcy52aWRlb0VudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gdmlkZW9FbGVtZW50IC8vIOehruS/neinhumikee6ueeQhuWKoOi9veWQjuWGjeiuvue9rlxyXG4gICAgfSlcclxuICB9XHJcbiAgYXN5bmMgc3RhcnRQbGF5KGVsZW1lbnQsIHVybCkge1xyXG4gICAgLy8gQ2xvc2UgZXhpc3RpbmcgU0RLIGluc3RhbmNlIGlmIGFueVxyXG4gICAgaWYgKHRoaXMud2VicnRjKSB7XHJcbiAgICAgIHRoaXMud2VicnRjLmNsb3NlKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIGEgbmV3IFNESyBpbnN0YW5jZVxyXG4gICAgdGhpcy53ZWJydGMgPSBuZXcgU3JzUnRjV2hpcFdoZXBBc3luYygpXHJcblxyXG4gICAgLy8gQmluZCB0aGUgdmlkZW8gcGxheWVyIHRvIHRoZSBTREsgc3RyZWFtXHJcbiAgICBlbGVtZW50LnNyY09iamVjdCA9IHRoaXMud2VicnRjLnN0cmVhbVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCB0aGlzLndlYnJ0Yy5wbGF5KHVybClcclxuICAgICAgY29uc29sZS5sb2coc2Vzc2lvbilcclxuICAgICAgLy8gdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uLnNlc3Npb25pZFxyXG4gICAgICAvLyB0aGlzLnNpbXVsYXRvclVybCA9IGAke3Nlc3Npb24uc2ltdWxhdG9yfT9kcm9wPTEmdXNlcm5hbWU9JHtzZXNzaW9uLnNlc3Npb25pZH1gXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvciBwbGF5aW5nIHN0cmVhbTonLCBlcnJvcilcclxuICAgICAgdGhpcy53ZWJydGMuY2xvc2UoKVxyXG4gICAgICAvLyB0aGlzLnBsYXllclZpc2libGUgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyDorqHnrpfop4bplKXkvZPov5zoo4HliarpnaLvvIjlpKfpnaLvvInnmoTlm5vkuKrop5LngrlcclxuICBjb21wdXRlRnJ1c3R1bUNvcm5lcnMoZnJ1c3R1bSwgcG9zaXRpb24sIGhwcikge1xyXG4gICAgY29uc3QgdGFuRm92ID0gTWF0aC50YW4oZnJ1c3R1bS5mb3YgKiAwLjUpXHJcbiAgICBjb25zdCBmYXJIZWlnaHQgPSBmcnVzdHVtLmZhciAqIHRhbkZvdlxyXG4gICAgY29uc3QgZmFyV2lkdGggPSBmYXJIZWlnaHQgKiBmcnVzdHVtLmFzcGVjdFJhdGlvXHJcblxyXG4gICAgY29uc3QgdG9wTGVmdCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygtZmFyV2lkdGgsIGZhckhlaWdodCwgLWZydXN0dW0uZmFyKVxyXG4gICAgY29uc3QgdG9wUmlnaHQgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoZmFyV2lkdGgsIGZhckhlaWdodCwgLWZydXN0dW0uZmFyKVxyXG4gICAgY29uc3QgYm90dG9tTGVmdCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhcclxuICAgICAgLWZhcldpZHRoLFxyXG4gICAgICAtZmFySGVpZ2h0LFxyXG4gICAgICAtZnJ1c3R1bS5mYXJcclxuICAgIClcclxuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgICBmYXJXaWR0aCxcclxuICAgICAgLWZhckhlaWdodCxcclxuICAgICAgLWZydXN0dW0uZmFyXHJcbiAgICApXHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKFxyXG4gICAgICBwb3NpdGlvbixcclxuICAgICAgaHByXHJcbiAgICApXHJcbiAgICAvLyBjb25zb2xlLmxvZygndHJhbnNmb3JtMTExMTExMTExMTExMTExMTExMTExMTExJywgdHJhbnNmb3JtKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdG9wTGVmdDogQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KFxyXG4gICAgICAgIHRyYW5zZm9ybSxcclxuICAgICAgICB0b3BMZWZ0LFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICksXHJcbiAgICAgIHRvcFJpZ2h0OiBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5UG9pbnQoXHJcbiAgICAgICAgdHJhbnNmb3JtLFxyXG4gICAgICAgIHRvcFJpZ2h0LFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICksXHJcbiAgICAgIGJvdHRvbUxlZnQ6IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlQb2ludChcclxuICAgICAgICB0cmFuc2Zvcm0sXHJcbiAgICAgICAgYm90dG9tTGVmdCxcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApLFxyXG4gICAgICBib3R0b21SaWdodDogQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KFxyXG4gICAgICAgIHRyYW5zZm9ybSxcclxuICAgICAgICBib3R0b21SaWdodCxcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOWwgeijheeahOWHveaVsO+8muabtOaWsCBQb2x5Z29uIOmdoueahOS9jee9rlxyXG4gIHVwZGF0ZVBvbHlnb25Qb3NpdGlvbigpIHtcclxuICAgIGNvbnN0IGNvcm5lcnMgPSB0aGlzLmNvbXB1dGVGcnVzdHVtQ29ybmVycyhcclxuICAgICAgdGhpcy5mcnVzdHVtLFxyXG4gICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICB0aGlzLmhwclxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMudmlkZW9FbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoW1xyXG4gICAgICAgIGNvcm5lcnMuYm90dG9tTGVmdCxcclxuICAgICAgICBjb3JuZXJzLmJvdHRvbVJpZ2h0LFxyXG4gICAgICAgIGNvcm5lcnMudG9wUmlnaHQsXHJcbiAgICAgICAgY29ybmVycy50b3BMZWZ0XHJcbiAgICAgIF0pXHJcbiAgICB9KVxyXG4gIH1cclxuICAvLyDmm7TmlrDplKXkvZPlupXpg6jkuLrmraPmlrnlvaLnmoTmlrnms5VcclxuICB1cGRhdGVGcnVzdHVtU3F1YXJlQmFzZSh2YWx1ZSkge1xyXG4gICAgLy8g5bCG6L6T5YWl5YC86IyD5Zu05LuOIDU2IOWIsCAxIOaYoOWwhOWIsOmdouenr+iMg+WbtCAxMDAwMCDliLAgMTAwXHJcbiAgICBjb25zdCBtaW5BcmVhID0gMTAwIC8vIOacgOWwj+mdouenr1xyXG4gICAgY29uc3QgbWF4QXJlYSA9IDEwMDAwIC8vIOacgOWkp+mdouenr1xyXG5cclxuICAgIC8vIOaYoOWwhOWFrOW8j++8iOWPjei9rOaYoOWwhO+8iVxyXG4gICAgY29uc3QgbmV3QXJlYSA9ICgoNTYgLSB2YWx1ZSkgLyAoNTYgLSAxKSkgKiAobWF4QXJlYSAtIG1pbkFyZWEpICsgbWluQXJlYVxyXG5cclxuICAgIC8vIOehruS/nWFzcGVjdFJhdGlv5L+d5oyB5Li6Me+8iOato+aWueW9ou+8iVxyXG4gICAgdGhpcy5mcnVzdHVtLmFzcGVjdFJhdGlvID0gMVxyXG5cclxuICAgIC8vIOagueaNrumdouenr+iuoeeul+ato+aWueW9oui+uemVv1xyXG4gICAgY29uc3Qgc2lkZUxlbmd0aCA9IE1hdGguc3FydChuZXdBcmVhKVxyXG5cclxuICAgIC8vIOi/nOW5s+mdoui3neemu1xyXG4gICAgY29uc3QgZmFyID0gdGhpcy5mcnVzdHVtLmZhclxyXG5cclxuICAgIC8vIOiuoeeul+aWsOeahGZvdlxyXG4gICAgY29uc3QgZm92ID0gMiAqIE1hdGguYXRhbihzaWRlTGVuZ3RoIC8gKDIgKiBmYXIpKVxyXG5cclxuICAgIC8vIOabtOaWsOinhumUpeS9k+eahGZvdlxyXG4gICAgdGhpcy5mcnVzdHVtLmZvdiA9IGZvdlxyXG5cclxuICAgIC8vIOmHjeaWsOe7mOWItuinhumUpeS9k+i9ruW7k+WSjOWhq+WFhVxyXG4gICAgdGhpcy5kcmF3RnJ1c3R1bU91dGxpbmUoKVxyXG4gICAgdGhpcy5kcmF3RnJ1c3R1bUZpbGxlZCgpXHJcbiAgICB0aGlzLnN5bmNIcHIoKVxyXG4gIH1cclxuICB1cGRhdGVGcnVzdHVtSGVpZ2h0KGRlbHRhSGVpZ2h0KSB7XHJcbiAgICBjb25zdCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4odGhpcy5wb3NpdGlvbilcclxuICAgIGNhcnRvZ3JhcGhpYy5oZWlnaHQgKz0gZGVsdGFIZWlnaHQgLy8g5pu05paw6auY5bqmXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubG9uZ2l0dWRlKSxcclxuICAgICAgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSksXHJcbiAgICAgIGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICAgIClcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBjYXJ0b2dyYXBoaWMuaGVpZ2h0XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXJyW1xyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMuaW5kZXhcclxuICAgIC8vIF0gPSB0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKVxyXG4gICAgdGhpcy5zeW5jSHByKClcclxuICAgIHRoaXMuZHJhd0ZydXN0dW1PdXRsaW5lKCkgLy8g6YeN5paw57uY5Yi26KeG6ZSl5L2T6L2u5buTXHJcbiAgICB0aGlzLmRyYXdGcnVzdHVtRmlsbGVkKClcclxuICB9XHJcbiAgLy8g5pu05pawcG9zaXRpb27lj5jljJblkI7nmoTop4bplKXkvZPlsZ7mgKdcclxuICB1cGRhdGVQb3NpdGlvbkhlaWdodChwKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHApXHJcbiAgICB0aGlzLnN5bmNIcHIoKVxyXG4gICAgdGhpcy5kcmF3RnJ1c3R1bU91dGxpbmUoKSAvLyDph43mlrDnu5jliLbop4bplKXkvZPova7lu5NcclxuICAgIHRoaXMuZHJhd0ZydXN0dW1GaWxsZWQoKVxyXG4gIH1cclxuICBjYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4pIHtcclxuICAgIHZhciBlbGxpcHNvaWQgPSB0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWRcclxuICAgIHZhciBjYXJ0ZXNpYW4zID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgICBjYXJ0ZXNpYW4ueCxcclxuICAgICAgY2FydGVzaWFuLnksXHJcbiAgICAgIGNhcnRlc2lhbi56XHJcbiAgICApXHJcbiAgICB2YXIgY2FydG9ncmFwaGljID0gZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhcnRlc2lhbjMpXHJcbiAgICB2YXIgbGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSlcclxuICAgIHZhciBsbmcgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSlcclxuICAgIHZhciBhbHQgPSBjYXJ0b2dyYXBoaWMuaGVpZ2h0IDwgMCA/IDAgOiBjYXJ0b2dyYXBoaWMuaGVpZ2h0XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsbmc6IGxuZyxcclxuICAgICAgbGF0OiBsYXQsXHJcbiAgICAgIGFsdDogYWx0XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldEludGVydmFsaHByKG51bSkge1xyXG4gICAgdGhpcy5zdG9wRnJ1c3R1bVJvdGF0aW9uKCkgLy8g5YWI5YGc5q2i5b2T5YmN55qE5a6a5pe25ZmoXHJcbiAgICB0aGlzLnNldEludGVydmFsMSA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5oZWFkICs9IG51bVxyXG4gICAgICB0aGlzLnVwZGF0ZUZydXN0dW1IUFIoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMuaGVhZCksIHRoaXMucGl0Y2gpXHJcbiAgICB9LCAxMClcclxuICB9XHJcbiAgc2V0SW50ZXJ2YWxocHJyKG51bSkge1xyXG4gICAgdGhpcy5zdG9wRnJ1c3R1bVJvdGF0aW9uKCkgLy8g5YWI5YGc5q2i5b2T5YmN55qE5a6a5pe25ZmoXHJcbiAgICB0aGlzLnNldEludGVydmFsMSA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgLy8g6ZmQ5Yi2IHBpdGNoIOWcqCBbNjAsIDE4MF0g6IyD5Zu05YaFXHJcbiAgICAgIHRoaXMucGl0Y2ggPSBNYXRoLm1heCg2MCwgTWF0aC5taW4oMTgwLCB0aGlzLnBpdGNoICsgbnVtKSlcclxuICAgICAgdGhpcy51cGRhdGVGcnVzdHVtSFBSKHRoaXMuaGVhZCwgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMucGl0Y2gpKVxyXG4gICAgfSwgMTApXHJcbiAgfVxyXG4gIC8vIOWBnOatouinhumUpeS9k+aXi+i9rFxyXG4gIHN0b3BGcnVzdHVtUm90YXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zZXRJbnRlcnZhbDEpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnNldEludGVydmFsMSlcclxuICAgICAgdGhpcy5zZXRJbnRlcnZhbDEgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOaWsOWinu+8mue7mOWItuWhq+WFheeahOinhumUpeS9k1xyXG4gIGRyYXdGcnVzdHVtRmlsbGVkKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAvLyBjb25zb2xlLmxvZygndGhhdC5vcHRpb25zLnNob3cnLCB0aGF0Lm9wdGlvbnMuc2hvdylcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKFxyXG4gICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICB0aGlzLmhwclxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IGZydXN0dW1HZW9tZXRyeSA9IG5ldyBDZXNpdW0uRnJ1c3R1bUdlb21ldHJ5KHtcclxuICAgICAgZnJ1c3R1bTogdGhpcy5mcnVzdHVtLFxyXG4gICAgICBvcmlnaW46IENlc2l1bS5NYXRyaXg0LmdldFRyYW5zbGF0aW9uKHRyYW5zZm9ybSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLFxyXG4gICAgICBvcmllbnRhdGlvbjogQ2VzaXVtLlF1YXRlcm5pb24uZnJvbVJvdGF0aW9uTWF0cml4KFxyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0LmdldFJvdGF0aW9uKHRyYW5zZm9ybSwgbmV3IENlc2l1bS5NYXRyaXgzKCkpXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudEZydXN0dW1GaWxsZWQpIHtcclxuICAgICAgdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5jdXJyZW50RnJ1c3R1bUZpbGxlZClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRGcnVzdHVtRmlsbGVkID0gbmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICBnZW9tZXRyeTogZnJ1c3R1bUdlb21ldHJ5LFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgICAgQ2VzaXVtLkNvbG9yLmZyb21BbHBoYShDZXNpdW0uQ29sb3IuWUVMTE9XLCAwLjQpIC8vIOWNiumAj+aYjum7hOiJsuWhq+WFhVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uTWF0ZXJpYWxBcHBlYXJhbmNlKHtcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKCdDb2xvcicsIHtcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUFscGhhKENlc2l1bS5Db2xvci5ZRUxMT1csIDAuNCkgLy8g5aGr5YWF6aKc6ImyXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdHJhbnNsdWNlbnQ6IHRydWVcclxuICAgICAgfSksXHJcbiAgICAgIGFzeW5jaHJvbm91czogZmFsc2UsXHJcbiAgICAgIC8vIHNob3c6IGZhbHNlXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoaXMuY3VycmVudEZydXN0dW1GaWxsZWQpXHJcbiAgfVxyXG4gIC8vIOe7mOWItuinhumUpeS9k+i9ruW7k1xyXG4gIGRyYXdGcnVzdHVtT3V0bGluZSgpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoYXQub3B0aW9ucy5zaG93JywgdGhhdC5vcHRpb25zLnNob3cpXHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtID0gQ2VzaXVtLlRyYW5zZm9ybXMuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShcclxuICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgdGhpcy5ocHJcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBmcnVzdHVtT3V0bGluZUdlb21ldHJ5ID0gbmV3IENlc2l1bS5GcnVzdHVtT3V0bGluZUdlb21ldHJ5KHtcclxuICAgICAgZnJ1c3R1bTogdGhpcy5mcnVzdHVtLFxyXG4gICAgICBvcmlnaW46IENlc2l1bS5NYXRyaXg0LmdldFRyYW5zbGF0aW9uKHRyYW5zZm9ybSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLFxyXG4gICAgICBvcmllbnRhdGlvbjogQ2VzaXVtLlF1YXRlcm5pb24uZnJvbVJvdGF0aW9uTWF0cml4KFxyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0LmdldFJvdGF0aW9uKHRyYW5zZm9ybSwgbmV3IENlc2l1bS5NYXRyaXgzKCkpXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lID0gbmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICBnZW9tZXRyeTogZnJ1c3R1bU91dGxpbmVHZW9tZXRyeSxcclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoXHJcbiAgICAgICAgICAgIENlc2l1bS5Db2xvci5ZRUxMT1dcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBhcHBlYXJhbmNlOiBuZXcgQ2VzaXVtLlBvbHlsaW5lQ29sb3JBcHBlYXJhbmNlKHtcclxuICAgICAgICB0cmFuc2x1Y2VudDogZmFsc2VcclxuICAgICAgfSksXHJcbiAgICAgIGFzeW5jaHJvbm91czogZmFsc2UsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICAgIC8vIHNob3c6IGZhbHNlXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lKVxyXG4gIH1cclxuICAvLyDmm7TmlrDop4bplKXkvZPkvY3nva5cclxuICB1cGRhdGVGcnVzdHVtUG9zaXRpb24odHlwZSA9ICdtb3ZlJywgcCwgZGVnID0gOTAsIGZsYWcgPSB0cnVlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ21vdmUnKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICBjb25zdCBwb2ludCA9IHR1cmYucG9pbnQoW1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICBdKVxyXG4gICAgICBjb25zdCBkZWdyZWVzVmFsdWUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXModGhpcy5ocHIuaGVhZGluZylcclxuICAgICAgY29uc3QgYmVhcmluZyA9IGRlZ3JlZXNWYWx1ZSArIGRlZ1xyXG4gICAgICBjb25zdCBvcHRpb25zID0geyB1bml0czogJ2RlZ3JlZXMnIH1cclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgcCwgYmVhcmluZywgb3B0aW9ucykuZ2VvbWV0cnlcclxuICAgICAgICAuY29vcmRpbmF0ZXNcclxuXHJcbiAgICAgIHRoaXMucG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICBkZXN0aW5hdGlvblswXSxcclxuICAgICAgICBkZXN0aW5hdGlvblsxXSxcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ICsgdGhpcy5vcHRpb25zLm5vcm1hbEhlaWdodFxyXG4gICAgICApXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSBkZXN0aW5hdGlvblswXVxyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gZGVzdGluYXRpb25bMV1cclxuXHJcbiAgICAgIHRoaXMudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICBkZXN0aW5hdGlvblswXSxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uWzFdLFxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSAndXBkYXRlJykge1xyXG4gICAgICB0aGlzLnBvc2l0aW9uID0gcFxyXG4gICAgICB0aGlzLm9wdGlvbnMudmlkZW9VcmwgJiYgdGhpcy51cGRhdGVQb2x5Z29uUG9zaXRpb24oKVxyXG4gICAgfVxyXG4gICAgaWYgKGZsYWcpIHtcclxuICAgICAgdGhpcy5zeW5jSHByKClcclxuICAgICAgdGhpcy51cGRhdGVGcnVzdHVtQXR0cmlidXRlcygpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOWQjOatpeinhuinklxyXG4gIHN5bmNIcHIoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygndGhpcy52aWV3ZXIxJywgdGhpcy52aWV3ZXIxKTtcclxuICAgIGlmICh0aGlzLnZpZXdlcjEpIHtcclxuICAgICAgY29uc3QgeyBsbmcsIGxhdCwgYWx0IH0gPSB0aGlzLm9wdGlvbnMucG9zaXRpb25cclxuICAgICAgbGV0IHBpdGNoID0gLXRoaXMuaHByLnBpdGNoIC0gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKVxyXG4gICAgICB0aGlzLnZpZXdlcjEuY2FtZXJhLnNldFZpZXcoe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIGxuZyxcclxuICAgICAgICAgIGxhdCxcclxuICAgICAgICAgIGFsdCArIHRoaXMub3B0aW9ucy5ub3JtYWxIZWlnaHRcclxuICAgICAgICApLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLmhwci5oZWFkaW5nICsgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHBpdGNoLFxyXG4gICAgICAgICAgcm9sbDogdGhpcy5ocHIucm9sbFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgLy8g5pu05paw6KeG6ZSl5L2T55qEIEhlYWRpbmdQaXRjaFJvbGxcclxuICB1cGRhdGVGcnVzdHVtSFBSKFxyXG4gICAgaCA9IHRoaXMuaGVhZCxcclxuICAgIHAgPSB0aGlzLnBpdGNoLFxyXG4gICAgciA9IDAsXHJcbiAgICBmbGFnID0gdHJ1ZSxcclxuICAgIHR5cGUgPSAnJ1xyXG4gICkge1xyXG4gICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7XHJcbiAgICAgIHJldHVybiAoZGVncmVlcyAqIE1hdGguUEkpIC8gMTgwLjBcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09ICdhbG9uZScpIHtcclxuICAgICAgdGhpcy5ocHIuaGVhZGluZyA9IGRlZ3JlZXNUb1JhZGlhbnMoaClcclxuICAgICAgdGhpcy5ocHIucGl0Y2ggPSBkZWdyZWVzVG9SYWRpYW5zKHApXHJcbiAgICAgIHRoaXMuaHByLnJvbGwgPSBkZWdyZWVzVG9SYWRpYW5zKHIpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhwci5oZWFkaW5nID0gQ2VzaXVtLk1hdGgubmVnYXRpdmVQaVRvUGkoaClcclxuICAgICAgdGhpcy5ocHIucGl0Y2ggPSBDZXNpdW0uTWF0aC5uZWdhdGl2ZVBpVG9QaShwKVxyXG4gICAgICB0aGlzLmhwci5yb2xsID0gQ2VzaXVtLk1hdGgubmVnYXRpdmVQaVRvUGkocilcclxuICAgIH1cclxuICAgIGlmIChmbGFnKSB7XHJcbiAgICAgIHRoaXMuc3luY0hwcigpXHJcbiAgICAgIHRoaXMudXBkYXRlRnJ1c3R1bUF0dHJpYnV0ZXMoKVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyDnlKjkuo7mm7TmlrBcclxuICB1cGRhdGVGcnVzdHVtQXR0cmlidXRlcygpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgLy8g5qOA5p+lIHBvc2l0aW9uIOWSjCBocHIg5piv5ZCm5bey5Yid5aeL5YyWXHJcbiAgICBpZiAoIXRoaXMucG9zaXRpb24gfHwgIXRoaXMuaHByKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Bvc2l0aW9uIG9yIEhQUiBpcyBub3QgZGVmaW5lZDonLCB0aGlzLnBvc2l0aW9uLCB0aGlzLmhwcilcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLy8g55Sf5oiQ5Y+Y5o2i55+p6Zi1XHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKFxyXG4gICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICB0aGlzLmhwclxyXG4gICAgKVxyXG5cclxuICAgIGlmICghdHJhbnNmb3JtKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zZm9ybSBnZW5lcmF0aW9uIGZhaWxlZC4nKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyDlh4blpIfova7lu5Plh6DkvZXkvZPlkozlpJbop4JcclxuICAgICAgY29uc3Qgb3V0bGluZUdlb21ldHJ5ID0gbmV3IENlc2l1bS5GcnVzdHVtT3V0bGluZUdlb21ldHJ5KHtcclxuICAgICAgICBmcnVzdHVtOiB0aGlzLmZydXN0dW0sXHJcbiAgICAgICAgb3JpZ2luOiBDZXNpdW0uTWF0cml4NC5nZXRUcmFuc2xhdGlvbihcclxuICAgICAgICAgIHRyYW5zZm9ybSxcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBvcmllbnRhdGlvbjogQ2VzaXVtLlF1YXRlcm5pb24uZnJvbVJvdGF0aW9uTWF0cml4KFxyXG4gICAgICAgICAgQ2VzaXVtLk1hdHJpeDQuZ2V0Um90YXRpb24odHJhbnNmb3JtLCBuZXcgQ2VzaXVtLk1hdHJpeDMoKSlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCBvdXRsaW5lQXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVDb2xvckFwcGVhcmFuY2Uoe1xyXG4gICAgICAgIHRyYW5zbHVjZW50OiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCBvdXRsaW5lQ29sb3IgPSBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICBDZXNpdW0uQ29sb3IuWUVMTE9XXHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8vIOWHhuWkh+Whq+WFheWHoOS9leS9k+WSjOWkluinglxyXG4gICAgICBjb25zdCBmaWxsZWRHZW9tZXRyeSA9IG5ldyBDZXNpdW0uRnJ1c3R1bUdlb21ldHJ5KHtcclxuICAgICAgICBmcnVzdHVtOiB0aGlzLmZydXN0dW0sXHJcbiAgICAgICAgb3JpZ2luOiBDZXNpdW0uTWF0cml4NC5nZXRUcmFuc2xhdGlvbihcclxuICAgICAgICAgIHRyYW5zZm9ybSxcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBvcmllbnRhdGlvbjogQ2VzaXVtLlF1YXRlcm5pb24uZnJvbVJvdGF0aW9uTWF0cml4KFxyXG4gICAgICAgICAgQ2VzaXVtLk1hdHJpeDQuZ2V0Um90YXRpb24odHJhbnNmb3JtLCBuZXcgQ2VzaXVtLk1hdHJpeDMoKSlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCBmaWxsZWRBcHBlYXJhbmNlID0gbmV3IENlc2l1bS5NYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoJ0NvbG9yJywge1xyXG4gICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5ZRUxMT1cud2l0aEFscGhhKDAuNSlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCBmaWxsZWRDb2xvciA9IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKFxyXG4gICAgICAgIENlc2l1bS5Db2xvci5SRUQud2l0aEFscGhhKDAuNSlcclxuICAgICAgKVxyXG5cclxuICAgICAgLy8g5Yig6Zmk5pen55qEIFByaW1pdGl2ZVxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50RnJ1c3R1bU91dGxpbmUpIHtcclxuICAgICAgICB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmN1cnJlbnRGcnVzdHVtT3V0bGluZSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50RnJ1c3R1bUZpbGxlZCkge1xyXG4gICAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuY3VycmVudEZydXN0dW1GaWxsZWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWIm+W7uuW5tua3u+WKoOaWsOeahOi9ruW7kyBQcmltaXRpdmVcclxuICAgICAgdGhpcy5jdXJyZW50RnJ1c3R1bU91dGxpbmUgPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZSh7XHJcbiAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICBnZW9tZXRyeTogb3V0bGluZUdlb21ldHJ5LFxyXG4gICAgICAgICAgYXR0cmlidXRlczogeyBjb2xvcjogb3V0bGluZUNvbG9yIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBhcHBlYXJhbmNlOiBvdXRsaW5lQXBwZWFyYW5jZSxcclxuICAgICAgICBhc3luY2hyb25vdXM6IGZhbHNlLFxyXG4gICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lKVxyXG5cclxuICAgICAgLy8g5Yib5bu65bm25re75Yqg5paw55qE5aGr5YWFIFByaW1pdGl2ZVxyXG4gICAgICB0aGlzLmN1cnJlbnRGcnVzdHVtRmlsbGVkID0gbmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgICAgZ2VvbWV0cnk6IGZpbGxlZEdlb21ldHJ5LFxyXG4gICAgICAgICAgYXR0cmlidXRlczogeyBjb2xvcjogZmlsbGVkQ29sb3IgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6IGZpbGxlZEFwcGVhcmFuY2UsXHJcbiAgICAgICAgYXN5bmNocm9ub3VzOiBmYWxzZSxcclxuICAgICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvd1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZCh0aGlzLmN1cnJlbnRGcnVzdHVtRmlsbGVkKVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZHJhd0ZydXN0dW06JywgZXJyb3IpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOiwg+aVtOinhumUpeS9k+eahCBuZWFyIOWSjCBmYXIg5bmz6Z2iXHJcbiAgdXBkYXRlRnJ1c3R1bU5lYXJGYXIobmV3TmVhciwgbmV3RmFyKSB7XHJcbiAgICB0aGlzLmZydXN0dW0ubmVhciA9IG5ld05lYXJcclxuICAgIHRoaXMuZnJ1c3R1bS5mYXIgPSBuZXdGYXJcclxuICAgIHRoaXMuZHJhd0ZydXN0dW1PdXRsaW5lKClcclxuICAgIHRoaXMuZHJhd0ZydXN0dW1GaWxsZWQoKVxyXG4gIH1cclxuICAvLyDosIPmlbTop4bplKXkvZPnmoQgZm92XHJcbiAgdXBkYXRlRnJ1c3R1bUZvdihuZXdGb3YpIHtcclxuICAgIHRoaXMuZnJ1c3R1bS5mb3YgPSBDZXNpdW0uTWF0aC50b1JhZGlhbnMobmV3Rm92KVxyXG4gICAgdGhpcy5kcmF3RnJ1c3R1bU91dGxpbmUoKVxyXG4gICAgdGhpcy5kcmF3RnJ1c3R1bUZpbGxlZCgpXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIH1cclxuXHJcbiAgc2V0IHNob3coYm9vbCkge1xyXG4gICAgaWYgKHR5cGVvZiBib29sID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBib29sXHJcbiAgICAgIHRoaXMuY3VycmVudEZydXN0dW1PdXRsaW5lLnNob3cgPSBib29sXHJcbiAgICAgIHRoaXMuY3VycmVudEZydXN0dW1GaWxsZWQuc2hvdyA9IGJvb2xcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd25IYW5kbGVyKVxyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmtleXVwSGFuZGxlcilcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGcnVzdHVtRmlsbGVkKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuY3VycmVudEZydXN0dW1GaWxsZWQpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RnJ1c3R1bU91dGxpbmUpIHtcclxuICAgICAgdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5jdXJyZW50RnJ1c3R1bU91dGxpbmUpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52aWRlb0VudGl0eSkge1xyXG4gICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy52aWRlb0VudGl0eSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFNQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFuQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9DQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXRCQTtBQUFBO0FBQUE7QUFBQTtBQXVCQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBS0E7QUFLQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFNQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUEzb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/AirLine/frustum.js\n"); /***/ }), /***/ "./src/Obj/AirLine/pointRoute.js": /*!***************************************!*\ !*** ./src/Obj/AirLine/pointRoute.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PointRoute; });\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/readOnlyError */ \"./node_modules/@babel/runtime/helpers/readOnlyError.js\");\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _frustum_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./frustum.js */ \"./src/Obj/AirLine/frustum.js\");\n/* harmony import */ var _billord_point_line__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./billord_point_line */ \"./src/Obj/AirLine/billord_point_line.js\");\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\nvar PointRoute = /*#__PURE__*/function () {\n function PointRoute() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var viewer = arguments.length > 1 ? arguments[1] : undefined;\n var viewer1 = arguments.length > 2 ? arguments[2] : undefined;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, PointRoute);\n this.options = _objectSpread({}, options);\n this.viewer = viewer;\n this.viewer1 = viewer1;\n this.entity = null;\n this.frustum = null;\n this.billordPointLineMaps = [];\n this.index = 0;\n this.positions = [];\n PointRoute.setDefaultValue(this);\n this.create();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(PointRoute, [{\n key: \"create\",\n value: function create() {\n var _this = this;\n if (this.options.positions.length < 2) {\n return;\n }\n var that = this;\n var frustumShow = that.options.frustumShow;\n this.entity = this.viewer.entities.add({\n show: this.options.show,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n var positions = [];\n for (var i = 0; i < _this.billordPointLineMaps.length; i++) {\n var element = _this.billordPointLineMaps[i];\n positions.push(element.billboardEntity.position.getValue());\n }\n return positions;\n }, false),\n width: 3,\n material: Cesium.Color.fromCssColorString(this.options.color)\n }\n });\n // 创建点、线、billbord\n for (var i = 0; i < this.options.positions.length; i++) {\n var element = this.options.positions[i];\n // console.log(\"elementelementelement\", element);\n if (frustumShow && i == this.index) {\n this.frustum = new _frustum_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n position: element,\n show: false,\n arr: this.options.positions,\n index: i,\n normalHeight: this.options.normalHeight\n }, this.viewer, this.viewer1);\n }\n var op = new _billord_point_line__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n positions: element,\n index: i + 1,\n saveFun: that.options.saveFun,\n selectFun: that.options.selectFun,\n keyboard: that.options.keyboard,\n updateFrustumFun: that.updateFrustumPosition,\n normalHeight: that.options.normalHeight,\n frustum: that.frustum,\n airHeight: that.options.airHeight\n }, this.viewer);\n this.billordPointLineMaps.push(op);\n }\n this.onKey();\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(bool) {\n if (typeof bool === 'boolean') {\n this.frustum.currentFrustumOutline.show = bool;\n this.billordPointLineMaps.forEach(function (item) {\n item.show = bool;\n });\n this.entity.show = bool;\n }\n }\n // 监听键盘事件\n }, {\n key: \"onKey\",\n value: function onKey() {\n var that = this;\n document.addEventListener('keydown', function (event) {\n switch (event.key) {\n case 'ArrowUp':\n that.index += 1;\n that.updateFrustum(true);\n break;\n case 'ArrowDown':\n that.index -= 1;\n that.updateFrustum(false);\n break;\n }\n });\n }\n // 更新frustum\n }, {\n key: \"updateFrustum\",\n value: function updateFrustum(flag) {\n console.log(this.index);\n var obj;\n if (this.index > this.options.positions.length - 1 || this.index < 0) {\n var str = this.index > 0 ? '已选中最后一个航点' : '已选中第一个航点';\n alert(str);\n return;\n }\n for (var i = 0; i < this.billordPointLineMaps.length; i++) {\n var element = this.billordPointLineMaps[i];\n var hpr = null;\n if (i == this.index) {\n var position = element.billboardEntity.position.getValue();\n if (this.index !== 0) {\n obj = this.direction(this.billordPointLineMaps[i - 1].billboardEntity.position.getValue(), element.billboardEntity.position.getValue());\n obj.hpr, _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0___default()(\"hpr\");\n }\n if (this.index == 0) {\n obj = this.direction(this.billordPointLineMaps[0].billboardEntity.position.getValue(), this.billordPointLineMaps[1].billboardEntity.position.getValue());\n obj.hpr, _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0___default()(\"hpr\");\n }\n if (hpr) {\n this.frustum.updateFrustumHPR(hpr.heading, this.frustum.pitch, hpr.roll);\n }\n if (position) {\n this.frustum.updateFrustumPosition('update', position);\n }\n }\n }\n }\n }, {\n key: \"cartesian3Towgs84\",\n value: function cartesian3Towgs84(cartesian) {\n var ellipsoid = this.viewer.scene.globe.ellipsoid;\n var cartesian3 = new Cesium.Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n var cartographic = ellipsoid.cartesianToCartographic(cartesian3);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n var alt = cartographic.height < 0 ? 0 : cartographic.height;\n return {\n lng: lng,\n lat: lat,\n alt: alt\n };\n }\n // 计算一个到另一个点的方向\n }, {\n key: \"direction\",\n value: function direction(pointA, pointB) {\n //向量AB\n var vector2 = Cesium.Cartesian3.subtract(pointA, pointB, new Cesium.Cartesian3());\n //归一化\n var normal = Cesium.Cartesian3.normalize(vector2, new Cesium.Cartesian3());\n //旋转矩阵 rotationMatrixFromPositionVelocity源码中有,并未出现在cesiumAPI中\n var rotationMatrix3 = Cesium.Transforms.rotationMatrixFromPositionVelocity(pointA, normal, Cesium.Ellipsoid.WGS84);\n var modelMatrix4 = Cesium.Matrix4.fromRotationTranslation(rotationMatrix3, pointA);\n // 获取getHeadingPitchRoll\n var m1 = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Matrix4.getTranslation(modelMatrix4, new Cesium.Cartesian3()), Cesium.Ellipsoid.WGS84, new Cesium.Matrix4());\n // 矩阵相除\n var m3 = Cesium.Matrix4.multiply(Cesium.Matrix4.inverse(m1, new Cesium.Matrix4()), modelMatrix4, new Cesium.Matrix4());\n // 得到旋转矩阵\n var mat3 = Cesium.Matrix4.getMatrix3(m3, new Cesium.Matrix3());\n // 计算四元数\n var q = Cesium.Quaternion.fromRotationMatrix(mat3);\n // 计算旋转角(弧度)\n var hpr = Cesium.HeadingPitchRoll.fromQuaternion(q);\n // hpr.pitch = hpr.pitch + 3.14 / 2 + 3.14;\n hpr.pitch = 90;\n var orientation = Cesium.Transforms.headingPitchRollQuaternion(pointA, hpr);\n return {\n hpr: hpr,\n orientation: orientation\n };\n }\n /**\r\n *\r\n * @param {index} 索引\r\n */\n // 删除航点\n }, {\n key: \"delPosition\",\n value: function delPosition(index) {\n this.options.positions.splice(index, 1);\n // this.options.positions = this.options.positions.filter((item, index) => index !== i);\n this.remove();\n this.create();\n }\n // 获取最新的positions\n }, {\n key: \"getNewPositions\",\n value: function getNewPositions() {\n var positions = [];\n for (var i = 0; i < this.billordPointLineMaps.length; i++) {\n var element = this.billordPointLineMaps[i];\n var position = this.cartesian3Towgs84(element.billboardEntity.position.getValue());\n positions.push(position);\n }\n return positions;\n }\n // 删除\n }, {\n key: \"remove\",\n value: function remove() {\n this.billordPointLineMaps.forEach(function (item, i) {\n item.remove();\n });\n if (this.frustum) {\n this.frustum.remove();\n }\n this.viewer.entities.remove(this.entity);\n this.billordPointLineMaps = [];\n }\n /**\r\n *\r\n * @param {String} type\r\n * @param {Number} index\r\n * @param {Array} position\r\n */\n // 新增航点 (before,after,end)\n }, {\n key: \"addPoint\",\n value: function addPoint(positions) {\n this.options.positions = positions;\n this.remove();\n this.create();\n }\n // 根据选中的点更新视锥的位置\n }, {\n key: \"updateFrustumPosition\",\n value: function updateFrustumPosition(index) {\n if (!this.billordPointLineMaps || this.billordPointLineMaps.length === 0) return;\n if (this.frustum) {\n this.frustum.show = true;\n }\n var current = this.billordPointLineMaps[index].billboardEntity.position.getValue();\n if (index !== 0) {\n var obj;\n var after = index === this.billordPointLineMaps.length - 1 ? this.billordPointLineMaps[index - 1].billboardEntity.position.getValue() // 获取前一个位置\n : this.billordPointLineMaps[index + 1].billboardEntity.position.getValue(); // 获取下一个位置\n obj = this.direction(index === this.billordPointLineMaps.length - 1 ? after : current, index === this.billordPointLineMaps.length - 1 ? current : after);\n var _obj = obj,\n hpr = _obj.hpr;\n this.frustum.updateFrustumHPR(hpr.heading, Cesium.Math.toRadians(this.frustum.pitch), hpr.roll);\n } else {\n var _obj2;\n var _after = this.billordPointLineMaps[1].billboardEntity.position.getValue();\n _obj2 = this.direction(current, _after);\n var _obj3 = _obj2,\n _hpr = _obj3.hpr;\n this.frustum.updateFrustumHPR(_hpr.heading, Cesium.Math.toRadians(this.frustum.pitch), _hpr.roll);\n }\n if (current) {\n this.frustum.updateFrustumPosition('update', current);\n }\n var position = this.cartesian3Towgs84(current);\n this.billordPointLineMaps.forEach(function (item) {\n item.billboardEntity.label.show = false; // 先将所有元素的 label.show 设置为 false\n });\n var targetItem = this.billordPointLineMaps.find(function (item) {\n return item.billboardEntity.index == index + 1;\n });\n if (targetItem) {\n targetItem.billboardEntity.label.show = true; // 然后找到匹配的 index 设置为 true\n }\n return position;\n }\n }, {\n key: \"flyTo\",\n value: function flyTo() {\n var positionArray = [];\n for (var i = 0; i < this.options.positions.length; i++) {\n var a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt + this.options.height);\n positionArray.push(a.x, a.y, a.z);\n }\n var BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-80.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n //计算航线的长度\n }, {\n key: \"countLength\",\n value: function countLength() {\n if (this.options.positions.length < 2) {\n return 0;\n } else {\n var lineString = [];\n this.options.positions.forEach(function (item) {\n lineString.push([item.lng, item.lat]);\n });\n var line = turf.lineString(lineString);\n return (turf.length(line) * 1000).toFixed(2);\n }\n }\n //计算航线时间\n }, {\n key: \"countTime\",\n value: function countTime() {\n var time = Math.floor(Number(this.countLength())) / this.options.speed;\n var s = Math.floor(time % 60);\n var m = Math.floor(time / 60);\n var str = m + '分' + s + '秒';\n return str;\n }\n }], [{\n key: \"setDefaultValue\",\n value: function setDefaultValue(that) {\n var _that$options$frustum, _that$options$keyboar;\n that.options.positions = that.options.positions || [];\n that.options.show = that.options.show || true;\n that.options.color = that.options.color || '#00d590';\n that.options.height = that.options.height || 500;\n that.options.speed = that.options.speed || 1;\n that.options.frustumShow = (_that$options$frustum = that.options.frustumShow) !== null && _that$options$frustum !== void 0 ? _that$options$frustum : true;\n that.options.saveFun = that.options.saveFun || null;\n that.options.selectFun = that.options.selectFun || null;\n that.options.keyboard = (_that$options$keyboar = that.options.keyboard) !== null && _that$options$keyboar !== void 0 ? _that$options$keyboar : true;\n that.options.normalHeight = that.options.normalHeight || 100;\n that.options.airHeight = that.options.airHeight || 100;\n }\n }]);\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FpckxpbmUvcG9pbnRSb3V0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQWlyTGluZS9wb2ludFJvdXRlLmpzPzU1ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZSVVNUVU4gZnJvbSAnLi9mcnVzdHVtLmpzJ1xyXG5pbXBvcnQgQmlsbG9yZFBvaW50TGluZSBmcm9tICcuL2JpbGxvcmRfcG9pbnRfbGluZSdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvaW50Um91dGUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgdmlld2VyLCB2aWV3ZXIxKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgdGhpcy52aWV3ZXIgPSB2aWV3ZXJcclxuICAgIHRoaXMudmlld2VyMSA9IHZpZXdlcjFcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy5mcnVzdHVtID0gbnVsbFxyXG4gICAgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcyA9IFtdXHJcbiAgICB0aGlzLmluZGV4ID0gMFxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgUG9pbnRSb3V0ZS5zZXREZWZhdWx0VmFsdWUodGhpcylcclxuICAgIHRoaXMuY3JlYXRlKClcclxuICB9XHJcbiAgc3RhdGljIHNldERlZmF1bHRWYWx1ZSh0aGF0KSB7XHJcbiAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucyB8fCBbXVxyXG4gICAgdGhhdC5vcHRpb25zLnNob3cgPSB0aGF0Lm9wdGlvbnMuc2hvdyB8fCB0cnVlXHJcbiAgICB0aGF0Lm9wdGlvbnMuY29sb3IgPSB0aGF0Lm9wdGlvbnMuY29sb3IgfHwgJyMwMGQ1OTAnXHJcbiAgICB0aGF0Lm9wdGlvbnMuaGVpZ2h0ID0gdGhhdC5vcHRpb25zLmhlaWdodCB8fCA1MDBcclxuICAgIHRoYXQub3B0aW9ucy5zcGVlZCA9IHRoYXQub3B0aW9ucy5zcGVlZCB8fCAxXHJcbiAgICB0aGF0Lm9wdGlvbnMuZnJ1c3R1bVNob3cgPSB0aGF0Lm9wdGlvbnMuZnJ1c3R1bVNob3cgPz8gdHJ1ZVxyXG4gICAgdGhhdC5vcHRpb25zLnNhdmVGdW4gPSB0aGF0Lm9wdGlvbnMuc2F2ZUZ1biB8fCBudWxsXHJcbiAgICB0aGF0Lm9wdGlvbnMuc2VsZWN0RnVuID0gdGhhdC5vcHRpb25zLnNlbGVjdEZ1biB8fCBudWxsXHJcbiAgICB0aGF0Lm9wdGlvbnMua2V5Ym9hcmQgPSB0aGF0Lm9wdGlvbnMua2V5Ym9hcmQgPz8gdHJ1ZVxyXG4gICAgdGhhdC5vcHRpb25zLm5vcm1hbEhlaWdodCA9IHRoYXQub3B0aW9ucy5ub3JtYWxIZWlnaHQgfHwgMTAwXHJcbiAgICB0aGF0Lm9wdGlvbnMuYWlySGVpZ2h0ID0gdGhhdC5vcHRpb25zLmFpckhlaWdodCB8fCAxMDBcclxuICB9XHJcbiAgY3JlYXRlKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgbGV0IHsgZnJ1c3R1bVNob3cgfSA9IHRoYXQub3B0aW9uc1xyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGlzLm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwc1tpXVxyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaChlbGVtZW50LmJpbGxib2FyZEVudGl0eS5wb3NpdGlvbi5nZXRWYWx1ZSgpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHBvc2l0aW9uc1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICB3aWR0aDogMyxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyDliJvlu7rngrnjgIHnur/jgIFiaWxsYm9yZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiZWxlbWVudGVsZW1lbnRlbGVtZW50XCIsIGVsZW1lbnQpO1xyXG4gICAgICBpZiAoZnJ1c3R1bVNob3cgJiYgaSA9PSB0aGlzLmluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5mcnVzdHVtID0gbmV3IEZSVVNUVU4oXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBlbGVtZW50LFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgYXJyOiB0aGlzLm9wdGlvbnMucG9zaXRpb25zLFxyXG4gICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgbm9ybWFsSGVpZ2h0OiB0aGlzLm9wdGlvbnMubm9ybWFsSGVpZ2h0XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIsXHJcbiAgICAgICAgICB0aGlzLnZpZXdlcjFcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgbGV0IG9wID0gbmV3IEJpbGxvcmRQb2ludExpbmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBlbGVtZW50LFxyXG4gICAgICAgICAgaW5kZXg6IGkgKyAxLFxyXG4gICAgICAgICAgc2F2ZUZ1bjogdGhhdC5vcHRpb25zLnNhdmVGdW4sXHJcbiAgICAgICAgICBzZWxlY3RGdW46IHRoYXQub3B0aW9ucy5zZWxlY3RGdW4sXHJcbiAgICAgICAgICBrZXlib2FyZDogdGhhdC5vcHRpb25zLmtleWJvYXJkLFxyXG4gICAgICAgICAgdXBkYXRlRnJ1c3R1bUZ1bjogdGhhdC51cGRhdGVGcnVzdHVtUG9zaXRpb24sXHJcbiAgICAgICAgICBub3JtYWxIZWlnaHQ6IHRoYXQub3B0aW9ucy5ub3JtYWxIZWlnaHQsXHJcbiAgICAgICAgICBmcnVzdHVtOiB0aGF0LmZydXN0dW0sXHJcbiAgICAgICAgICBhaXJIZWlnaHQ6IHRoYXQub3B0aW9ucy5haXJIZWlnaHRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXMudmlld2VyXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5wdXNoKG9wKVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbktleSgpXHJcbiAgfVxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KGJvb2wpIHtcclxuICAgIGlmICh0eXBlb2YgYm9vbCA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuZnJ1c3R1bS5jdXJyZW50RnJ1c3R1bU91dGxpbmUuc2hvdyA9IGJvb2xcclxuICAgICAgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uc2hvdyA9IGJvb2xcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5lbnRpdHkuc2hvdyA9IGJvb2xcclxuICAgIH1cclxuICB9XHJcbiAgLy8g55uR5ZCs6ZSu55uY5LqL5Lu2XHJcbiAgb25LZXkoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG4gICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgdGhhdC5pbmRleCArPSAxXHJcbiAgICAgICAgICB0aGF0LnVwZGF0ZUZydXN0dW0odHJ1ZSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgIHRoYXQuaW5kZXggLT0gMVxyXG4gICAgICAgICAgdGhhdC51cGRhdGVGcnVzdHVtKGZhbHNlKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8g5pu05pawZnJ1c3R1bVxyXG4gIHVwZGF0ZUZydXN0dW0oZmxhZykge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pbmRleClcclxuICAgIGxldCBvYmpcclxuICAgIGlmICh0aGlzLmluZGV4ID4gdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggLSAxIHx8IHRoaXMuaW5kZXggPCAwKSB7XHJcbiAgICAgIGxldCBzdHIgPSB0aGlzLmluZGV4ID4gMCA/ICflt7LpgInkuK3mnIDlkI7kuIDkuKroiKrngrknIDogJ+W3sumAieS4reesrOS4gOS4quiIqueCuSdcclxuICAgICAgYWxlcnQoc3RyKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwc1tpXVxyXG4gICAgICBjb25zdCBocHIgPSBudWxsXHJcbiAgICAgIGlmIChpID09IHRoaXMuaW5kZXgpIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSBlbGVtZW50LmJpbGxib2FyZEVudGl0eS5wb3NpdGlvbi5nZXRWYWx1ZSgpXHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggIT09IDApIHtcclxuICAgICAgICAgIG9iaiA9IHRoaXMuZGlyZWN0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLmJpbGxvcmRQb2ludExpbmVNYXBzW1xyXG4gICAgICAgICAgICAgIGkgLSAxXHJcbiAgICAgICAgICAgIF0uYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGVsZW1lbnQuYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGhwciA9IG9iai5ocHJcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgb2JqID0gdGhpcy5kaXJlY3Rpb24oXHJcbiAgICAgICAgICAgIHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHNbMF0uYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHNbMV0uYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGhwciA9IG9iai5ocHJcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhwcikge1xyXG4gICAgICAgICAgdGhpcy5mcnVzdHVtLnVwZGF0ZUZydXN0dW1IUFIoXHJcbiAgICAgICAgICAgIGhwci5oZWFkaW5nLFxyXG4gICAgICAgICAgICB0aGlzLmZydXN0dW0ucGl0Y2gsXHJcbiAgICAgICAgICAgIGhwci5yb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5mcnVzdHVtLnVwZGF0ZUZydXN0dW1Qb3NpdGlvbigndXBkYXRlJywgcG9zaXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbikge1xyXG4gICAgdmFyIGVsbGlwc29pZCA9IHRoaXMudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZFxyXG4gICAgdmFyIGNhcnRlc2lhbjMgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoXHJcbiAgICAgIGNhcnRlc2lhbi54LFxyXG4gICAgICBjYXJ0ZXNpYW4ueSxcclxuICAgICAgY2FydGVzaWFuLnpcclxuICAgIClcclxuICAgIHZhciBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoY2FydGVzaWFuMylcclxuICAgIHZhciBsYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKVxyXG4gICAgdmFyIGxuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubG9uZ2l0dWRlKVxyXG4gICAgdmFyIGFsdCA9IGNhcnRvZ3JhcGhpYy5oZWlnaHQgPCAwID8gMCA6IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxuZzogbG5nLFxyXG4gICAgICBsYXQ6IGxhdCxcclxuICAgICAgYWx0OiBhbHRcclxuICAgIH1cclxuICB9XHJcbiAgLy8g6K6h566X5LiA5Liq5Yiw5Y+m5LiA5Liq54K555qE5pa55ZCRXHJcbiAgZGlyZWN0aW9uKHBvaW50QSwgcG9pbnRCKSB7XHJcbiAgICAvL+WQkemHj0FCXHJcbiAgICBjb25zdCB2ZWN0b3IyID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgIHBvaW50QSxcclxuICAgICAgcG9pbnRCLFxyXG4gICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgKVxyXG4gICAgLy/lvZLkuIDljJZcclxuICAgIGNvbnN0IG5vcm1hbCA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZSh2ZWN0b3IyLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgIC8v5peL6L2s55+p6Zi1IHJvdGF0aW9uTWF0cml4RnJvbVBvc2l0aW9uVmVsb2NpdHnmupDnoIHkuK3mnInvvIzlubbmnKrlh7rnjrDlnKhjZXNpdW1BUEnkuK1cclxuICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4MyA9IENlc2l1bS5UcmFuc2Zvcm1zLnJvdGF0aW9uTWF0cml4RnJvbVBvc2l0aW9uVmVsb2NpdHkoXHJcbiAgICAgIHBvaW50QSxcclxuICAgICAgbm9ybWFsLFxyXG4gICAgICBDZXNpdW0uRWxsaXBzb2lkLldHUzg0XHJcbiAgICApXHJcbiAgICBjb25zdCBtb2RlbE1hdHJpeDQgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihcclxuICAgICAgcm90YXRpb25NYXRyaXgzLFxyXG4gICAgICBwb2ludEFcclxuICAgIClcclxuICAgIC8vIOiOt+WPlmdldEhlYWRpbmdQaXRjaFJvbGxcclxuICAgIGxldCBtMSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKFxyXG4gICAgICBDZXNpdW0uTWF0cml4NC5nZXRUcmFuc2xhdGlvbihtb2RlbE1hdHJpeDQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSxcclxuICAgICAgQ2VzaXVtLkVsbGlwc29pZC5XR1M4NCxcclxuICAgICAgbmV3IENlc2l1bS5NYXRyaXg0KClcclxuICAgIClcclxuICAgIC8vIOefqemYteebuOmZpFxyXG4gICAgbGV0IG0zID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkoXHJcbiAgICAgIENlc2l1bS5NYXRyaXg0LmludmVyc2UobTEsIG5ldyBDZXNpdW0uTWF0cml4NCgpKSxcclxuICAgICAgbW9kZWxNYXRyaXg0LFxyXG4gICAgICBuZXcgQ2VzaXVtLk1hdHJpeDQoKVxyXG4gICAgKVxyXG4gICAgLy8g5b6X5Yiw5peL6L2s55+p6Zi1XHJcbiAgICBsZXQgbWF0MyA9IENlc2l1bS5NYXRyaXg0LmdldE1hdHJpeDMobTMsIG5ldyBDZXNpdW0uTWF0cml4MygpKVxyXG4gICAgLy8g6K6h566X5Zub5YWD5pWwXHJcbiAgICBsZXQgcSA9IENlc2l1bS5RdWF0ZXJuaW9uLmZyb21Sb3RhdGlvbk1hdHJpeChtYXQzKVxyXG4gICAgLy8g6K6h566X5peL6L2s6KeSKOW8p+W6pilcclxuICAgIGxldCBocHIgPSBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbC5mcm9tUXVhdGVybmlvbihxKVxyXG4gICAgLy8gaHByLnBpdGNoID0gaHByLnBpdGNoICsgMy4xNCAvIDIgKyAzLjE0O1xyXG4gICAgaHByLnBpdGNoID0gOTBcclxuICAgIGxldCBvcmllbnRhdGlvbiA9IENlc2l1bS5UcmFuc2Zvcm1zLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uKHBvaW50QSwgaHByKVxyXG4gICAgcmV0dXJuIHsgaHByLCBvcmllbnRhdGlvbiB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtpbmRleH0g57Si5byVXHJcbiAgICovXHJcbiAgLy8g5Yig6Zmk6Iiq54K5XHJcbiAgZGVsUG9zaXRpb24oaW5kZXgpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggIT09IGkpO1xyXG4gICAgdGhpcy5yZW1vdmUoKVxyXG4gICAgdGhpcy5jcmVhdGUoKVxyXG4gIH1cclxuICAvLyDojrflj5bmnIDmlrDnmoRwb3NpdGlvbnNcclxuICBnZXROZXdQb3NpdGlvbnMoKSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwc1tpXVxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgIGVsZW1lbnQuYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgKVxyXG4gICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbilcclxuICAgIH1cclxuICAgIHJldHVybiBwb3NpdGlvbnNcclxuICB9XHJcbiAgLy8g5Yig6ZmkXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgIGl0ZW0ucmVtb3ZlKClcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5mcnVzdHVtKSB7XHJcbiAgICAgIHRoaXMuZnJ1c3R1bS5yZW1vdmUoKVxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcyA9IFtdXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcclxuICAgKiBAcGFyYW0ge051bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0FycmF5fSBwb3NpdGlvblxyXG4gICAqL1xyXG4gIC8vIOaWsOWinuiIqueCuSDvvIhiZWZvcmXvvIxhZnRlcu+8jGVuZO+8iVxyXG4gIGFkZFBvaW50KHBvc2l0aW9ucykge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IHBvc2l0aW9uc1xyXG4gICAgdGhpcy5yZW1vdmUoKVxyXG4gICAgdGhpcy5jcmVhdGUoKVxyXG4gIH1cclxuICAvLyDmoLnmja7pgInkuK3nmoTngrnmm7TmlrDop4bplKXnmoTkvY3nva5cclxuICB1cGRhdGVGcnVzdHVtUG9zaXRpb24oaW5kZXgpIHtcclxuICAgIGlmICghdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcyB8fCB0aGlzLmJpbGxvcmRQb2ludExpbmVNYXBzLmxlbmd0aCA9PT0gMClcclxuICAgICAgcmV0dXJuXHJcbiAgICBpZiAodGhpcy5mcnVzdHVtKSB7XHJcbiAgICAgIHRoaXMuZnJ1c3R1bS5zaG93ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJpbGxvcmRQb2ludExpbmVNYXBzW1xyXG4gICAgICBpbmRleFxyXG4gICAgXS5iaWxsYm9hcmRFbnRpdHkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgaWYgKGluZGV4ICE9PSAwKSB7XHJcbiAgICAgIGxldCBvYmpcclxuICAgICAgbGV0IGFmdGVyID1cclxuICAgICAgICBpbmRleCA9PT0gdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwcy5sZW5ndGggLSAxXHJcbiAgICAgICAgICA/IHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHNbXHJcbiAgICAgICAgICAgICAgaW5kZXggLSAxXHJcbiAgICAgICAgICAgIF0uYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKCkgLy8g6I635Y+W5YmN5LiA5Liq5L2N572uXHJcbiAgICAgICAgICA6IHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHNbXHJcbiAgICAgICAgICAgICAgaW5kZXggKyAxXHJcbiAgICAgICAgICAgIF0uYmlsbGJvYXJkRW50aXR5LnBvc2l0aW9uLmdldFZhbHVlKCkgLy8g6I635Y+W5LiL5LiA5Liq5L2N572uXHJcbiAgICAgIG9iaiA9IHRoaXMuZGlyZWN0aW9uKFxyXG4gICAgICAgIGluZGV4ID09PSB0aGlzLmJpbGxvcmRQb2ludExpbmVNYXBzLmxlbmd0aCAtIDEgPyBhZnRlciA6IGN1cnJlbnQsXHJcbiAgICAgICAgaW5kZXggPT09IHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHMubGVuZ3RoIC0gMSA/IGN1cnJlbnQgOiBhZnRlclxyXG4gICAgICApXHJcbiAgICAgIGxldCB7IGhwciB9ID0gb2JqXHJcbiAgICAgIHRoaXMuZnJ1c3R1bS51cGRhdGVGcnVzdHVtSFBSKFxyXG4gICAgICAgIGhwci5oZWFkaW5nLFxyXG4gICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLmZydXN0dW0ucGl0Y2gpLFxyXG4gICAgICAgIGhwci5yb2xsXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvYmpcclxuICAgICAgbGV0IGFmdGVyID0gdGhpcy5iaWxsb3JkUG9pbnRMaW5lTWFwc1sxXS5iaWxsYm9hcmRFbnRpdHkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgICBvYmogPSB0aGlzLmRpcmVjdGlvbihjdXJyZW50LCBhZnRlcilcclxuICAgICAgbGV0IHsgaHByIH0gPSBvYmpcclxuICAgICAgdGhpcy5mcnVzdHVtLnVwZGF0ZUZydXN0dW1IUFIoXHJcbiAgICAgICAgaHByLmhlYWRpbmcsXHJcbiAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMuZnJ1c3R1bS5waXRjaCksXHJcbiAgICAgICAgaHByLnJvbGxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKGN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5mcnVzdHVtLnVwZGF0ZUZydXN0dW1Qb3NpdGlvbigndXBkYXRlJywgY3VycmVudClcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY3VycmVudClcclxuICAgIHRoaXMuYmlsbG9yZFBvaW50TGluZU1hcHMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbS5iaWxsYm9hcmRFbnRpdHkubGFiZWwuc2hvdyA9IGZhbHNlIC8vIOWFiOWwhuaJgOacieWFg+e0oOeahCBsYWJlbC5zaG93IOiuvue9ruS4uiBmYWxzZVxyXG4gICAgfSlcclxuICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0aGlzLmJpbGxvcmRQb2ludExpbmVNYXBzLmZpbmQoXHJcbiAgICAgIGl0ZW0gPT4gaXRlbS5iaWxsYm9hcmRFbnRpdHkuaW5kZXggPT0gaW5kZXggKyAxXHJcbiAgICApXHJcbiAgICBpZiAodGFyZ2V0SXRlbSkge1xyXG4gICAgICB0YXJnZXRJdGVtLmJpbGxib2FyZEVudGl0eS5sYWJlbC5zaG93ID0gdHJ1ZSAvLyDnhLblkI7mib7liLDljLnphY3nmoQgaW5kZXgg6K6+572u5Li6IHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBwb3NpdGlvblxyXG4gIH1cclxuICBmbHlUbygpIHtcclxuICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ICsgdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICApXHJcbiAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgfVxyXG4gICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgdGhpcy52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtODAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy/orqHnrpfoiKrnur/nmoTplb/luqZcclxuICBjb3VudExlbmd0aCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgcmV0dXJuIDBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBsaW5lU3RyaW5nID0gW11cclxuICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxpbmVTdHJpbmcucHVzaChbaXRlbS5sbmcsIGl0ZW0ubGF0XSlcclxuICAgICAgfSlcclxuICAgICAgdmFyIGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcobGluZVN0cmluZylcclxuICAgICAgcmV0dXJuICh0dXJmLmxlbmd0aChsaW5lKSAqIDEwMDApLnRvRml4ZWQoMilcclxuICAgIH1cclxuICB9XHJcbiAgLy/orqHnrpfoiKrnur/ml7bpl7RcclxuICBjb3VudFRpbWUoKSB7XHJcbiAgICBsZXQgdGltZSA9IE1hdGguZmxvb3IoTnVtYmVyKHRoaXMuY291bnRMZW5ndGgoKSkpIC8gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgICBsZXQgcyA9IE1hdGguZmxvb3IodGltZSAlIDYwKVxyXG4gICAgbGV0IG0gPSBNYXRoLmZsb29yKHRpbWUgLyA2MClcclxuICAgIGxldCBzdHIgPSBtICsgJ+WIhicgKyBzICsgJ+enkidcclxuICAgIHJldHVybiBzdHJcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFJQTtBQUNBO0FBS0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFJQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBclZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/AirLine/pointRoute.js\n"); /***/ }), /***/ "./src/Obj/Analysis/CircleViewShed/_element.js": /*!*****************************************************!*\ !*** ./src/Obj/Analysis/CircleViewShed/_element.js ***! \*****************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u89C6\\u70B9\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u91C7\\u6837\\u7CBE\\u5EA6\\n \\n
\\n
\\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0NpcmNsZVZpZXdTaGVkL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9DaXJjbGVWaWV3U2hlZC9fZWxlbWVudC5qcz9iNTE5Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuinhueCuemrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OVwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJ2aWV3UG9pbnRIZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6YeH5qC357K+5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiMTAwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJwcmVjaXNpb25cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQXFCQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/CircleViewShed/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/CircleViewShed/index.js": /*!**************************************************!*\ !*** ./src/Obj/Analysis/CircleViewShed/index.js ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/CircleViewShed/_element.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n// ViewShed.js\n\n\n\n\n\n\n/**\n * @constructor\n * @description 可视域分析\n * @param sdk\n * @param {Object} options 选项。\n * @param {Number} options.viewPointHeight=1.8 视点高度(m)。\n * @param {Number} options.precision=20 精度。\n * @param {String} options.visibleAreaColor=#008000 可视区域颜色。\n * @param {String} options.invisibleAreaColor=#FF0000 不可视区域颜色。\n */\nvar _intervalEvents = /*#__PURE__*/new WeakMap();\nvar CircleViewShed = /*#__PURE__*/function (_Tools) {\n function CircleViewShed(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, CircleViewShed);\n _this2 = _callSuper(this, CircleViewShed, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _intervalEvents, new Map());\n _this2.viewer = sdk.viewer;\n _this2.options = {};\n _this2.options.visibleAreaColor = options.visibleAreaColor || '#008000';\n _this2.options.invisibleAreaColor = options.invisibleAreaColor || '#FF0000';\n _this2.ids = [];\n _this2.primitives = [];\n _this2.viewpointPrimitive = null;\n _this2._elms = {};\n _this2.precision = options.precision;\n _this2.viewPointHeight = options.viewPointHeight;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n _this2.html = null;\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_11__[\"default\"](sdk);\n YJ.Analysis.AnalysesResults.push(_this2);\n // CircleViewShed.edit(this)\n var terrainAvailability = _this2.viewer.terrainProvider.availability;\n if (!terrainAvailability) {\n tools.message({\n type: 'warning',\n text: '未加载地形数据!'\n });\n // window.ELEMENT && window.ELEMENT.Message({\n // message: '未加载地形数据!',\n // type: 'warning',\n // duration: 1500\n // });\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(_this2);\n }\n CircleViewShed.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(CircleViewShed, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(CircleViewShed, [{\n key: \"viewPointHeight\",\n get: function get() {\n return this.options.viewPointHeight;\n },\n set: function set(v) {\n var viewPointHeight = Math.floor(Number(v) * 10) / 10;\n if (isNaN(viewPointHeight)) {\n viewPointHeight = 1.8;\n }\n if (viewPointHeight < 0) {\n viewPointHeight = 0;\n }\n this.options.viewPointHeight = viewPointHeight;\n this._elms.viewPointHeight && this._elms.viewPointHeight.forEach(function (item) {\n item.value = viewPointHeight;\n });\n }\n }, {\n key: \"precision\",\n get: function get() {\n return this.options.precision;\n },\n set: function set(v) {\n var precision = Math.floor(Number(v));\n if (isNaN(precision)) {\n precision = 20;\n } else if (precision < 1) {\n precision = 1;\n }\n this.options.precision = precision;\n this._elms.precision && this._elms.precision.forEach(function (item) {\n item.value = precision;\n });\n }\n }, {\n key: \"analyse\",\n value: function analyse() {\n var _this3 = this;\n // this.destroy()\n var center = [this.center.lng, this.center.lat];\n var radius = this.radius / 1000;\n var circle = turf.circle(center, radius, {\n steps: 180,\n units: 'kilometers',\n properties: {\n foo: 'bar'\n }\n });\n if (!this.viewpointPrimitive) {\n this.viewpointPrimitive = this.viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());\n }\n if (!this.viewBillboardPrimitive) {\n this.viewBillboardPrimitive = this.viewer.scene.primitives.add(new Cesium.BillboardCollection());\n }\n var array = [];\n var distance = radius / this.precision;\n for (var i = 1; i < circle.geometry.coordinates[0].length; i++) {\n var line = turf.lineString([center, circle.geometry.coordinates[0][i]]);\n var array2 = [];\n for (var j = 1; j <= this.precision; j++) {\n var sliced = turf.lineSliceAlong(line, 0, distance * j, {\n units: 'kilometers'\n });\n array2.push([sliced.geometry.coordinates[1][0], sliced.geometry.coordinates[1][1]]);\n }\n array.push(array2);\n }\n var viewPoint = Cesium.Cartesian3.fromDegrees(this.center.lng, this.center.lat, this.center.alt + this.viewPointHeight);\n var instances = [];\n CircleViewShed.getcanvas(this).then(function (canvas) {\n return _this3.viewBillboardPrimitive.add({\n position: viewPoint,\n image: canvas,\n width: 200,\n height: 140,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n });\n });\n this.viewpointPrimitive.add({\n position: viewPoint,\n color: Cesium.Color.AQUA.withAlpha(1),\n pixelSize: 6\n });\n var m = 0;\n var _this = this;\n var key = this.randomString();\n var intervalEvent = setInterval(function () {\n if (m >= array.length) {\n var item = _classPrivateFieldGet(_intervalEvents, _this3).get(key);\n item && clearInterval(item.event);\n return;\n }\n InBatches(m);\n m += 1;\n }, 0);\n _classPrivateFieldGet(_intervalEvents, this).set(key, {\n event: intervalEvent\n });\n function InBatches(k) {\n var instances = [];\n var i = k;\n for (var _j = 0; _j < array[i].length; _j++) {\n var pt1 = array[i][_j];\n var pt2 = void 0;\n var pt3 = void 0;\n var pt4 = array[i][_j - 1];\n if (i == array.length - 1) {\n pt2 = array[0][_j];\n pt3 = array[0][_j - 1];\n } else {\n pt2 = array[i + 1][_j];\n pt3 = array[i + 1][_j - 1];\n }\n if (_j == 0) {\n pt3 = [].concat(center);\n pt4 = [];\n }\n var cpt = [(pt1[0] + pt3[0]) / 2, (pt1[1] + pt3[1]) / 2];\n var cartographic = Cesium.Cartographic.fromDegrees(cpt[0], cpt[1]);\n var height = _this.viewer.scene.globe.getHeight(cartographic);\n var targetPoint = Cesium.Cartesian3.fromDegrees(cpt[0], cpt[1], height);\n var direction = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(targetPoint, viewPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());\n var ray = new Cesium.Ray(viewPoint, direction);\n var pickedObjects = _this.viewer.scene.drillPickFromRay(ray, _this.primitives);\n var result = void 0;\n for (var _i = 0; _i < pickedObjects.length; _i++) {\n if (pickedObjects[_i].position) {\n result = pickedObjects[_i];\n break;\n }\n }\n var color = Cesium.Color.LIME;\n if (result && Math.abs(result.position.x - targetPoint.x) > 0.01 && Math.abs(result.position.y - targetPoint.y) > 0.01 && Math.abs(result.position.z - targetPoint.z) > 0.01) {\n color = Cesium.Color.RED;\n }\n var polyline = new Cesium.GroundPolylineGeometry({\n positions: Cesium.Cartesian3.fromDegreesArray([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pt1), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pt2), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pt3), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pt4), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pt1))),\n width: 2\n });\n var polygonInstance = new Cesium.GeometryInstance({\n geometry: polyline,\n name: 'ViewershedPolygon',\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(color),\n show: new Cesium.ShowGeometryInstanceAttribute(true) //显示或者隐藏\n }\n });\n instances.push(polygonInstance);\n }\n _this.primitives.push(_this.viewer.scene.primitives.add(new Cesium.GroundPolylinePrimitive({\n geometryInstances: instances,\n appearance: new Cesium.PolylineColorAppearance()\n })));\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _iterator = _createForOfIteratorHelper(_classPrivateFieldGet(_intervalEvents, this)),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step.value, 2),\n key = _step$value[0],\n value = _step$value[1];\n clearInterval(value.event);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n _classPrivateFieldSet(_intervalEvents, this, new Map());\n for (var i = 0; i < this.primitives.length; i++) {\n this.viewer.scene.primitives.remove(this.primitives[i]);\n }\n this.primitives = [];\n if (this.viewpointPrimitive) {\n this.viewer.scene.primitives.remove(this.viewpointPrimitive);\n this.viewpointPrimitive = null;\n }\n if (this.viewBillboardPrimitive) {\n this.viewer.scene.primitives.remove(this.viewBillboardPrimitive);\n this.viewBillboardPrimitive = null;\n }\n YJ.Measure.SetMeasureStatus(false);\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var count = 0;\n if (!YJ.Measure.GetMeasureStatus()) {\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n var Draw = new YJ.Draw.DrawCircle(that.sdk);\n Draw.start(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(a, options) {\n var positions;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (options) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n that.radius = options.radius;\n _context.next = 5;\n return Cesium.sampleTerrainMostDetailed(that.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(options.center.lng, options.center.lat)]);\n case 5:\n positions = _context.sent;\n that.center = {\n lng: options.center.lng,\n lat: options.center.lat,\n alt: positions[0].height\n };\n _context.next = 9;\n return that.analyse();\n case 9:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n console.log('上一次测量未结束');\n }\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(that) {\n var contentElm, drawElm, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context2.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_13__[\"default\"](that.sdk.viewer._container, {\n title: '圆形视域分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n YJ.Measure.SetMeasureStatus(false);\n }\n });\n case 3:\n that._DialogObject = _context2.sent;\n _context2.next = 6;\n return that._DialogObject.init();\n case 6:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' circle-view-shed';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_14__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n drawElm = document.createElement('button');\n drawElm.innerHTML = '绘制';\n drawElm.addEventListener('click', function () {\n var terrainAvailability = that.viewer.terrainProvider.availability;\n if (!terrainAvailability) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '未加载地形数据!',\n type: 'warning',\n duration: 1500\n });\n return;\n }\n CircleViewShed.create(that);\n });\n that._DialogObject.footAppChild(drawElm);\n all_elm = contentElm.getElementsByTagName('*');\n that._EventBinding.on(that, all_elm);\n that._elms = that._EventBinding.element;\n case 17:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"getcanvas\",\n value: function getcanvas(that) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n canvas.width = 220;\n canvas.height = 140;\n canvas.style.background = '#000000';\n var img = new Image();\n var data = [{\n images: that.getSourceRootPath() + '/img/bubble/lng.png',\n text: '经度:' + parseFloat(that.center.lng.toFixed(10)) + '°'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/lat.png',\n text: '纬度:' + parseFloat(that.center.lat.toFixed(10)) + '°'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/h.png',\n text: '视高:' + that.viewPointHeight + ' m'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/radius.png',\n text: '半径:' + that.radius + ' m'\n }];\n img.src = that.getSourceRootPath() + '/img/bubble/bubble.png';\n var imagesLoaded = 0;\n return new Promise(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(resolve, reject) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n img.onload = function () {\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n data.forEach(function (item, index) {\n var img = new Image();\n img.src = item.images;\n img.onload = function () {\n ctx.drawImage(img, 12, 12 + index * 26);\n ctx.fillStyle = '#fff';\n ctx.font = '12px Arial';\n ctx.fillText(item.text, 44, 28 + index * 26);\n imagesLoaded++;\n if (imagesLoaded === data.length) {\n resolve(canvas);\n }\n };\n });\n };\n case 1:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return function (_x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n }());\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CircleViewShed);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0NpcmNsZVZpZXdTaGVkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9DaXJjbGVWaWV3U2hlZC9pbmRleC5qcz9mNzU5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFZpZXdTaGVkLmpzXG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQnXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXG5pbXBvcnQgVG9vbHMgZnJvbSAnLi4vLi4vLi4vVG9vbHMnXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nL2V2ZW50QmluZGluZydcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vQmFzZURpYWxvZydcbmltcG9ydCB7IGh0bWwgfSBmcm9tICcuL19lbGVtZW50J1xuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBkZXNjcmlwdGlvbiDlj6/op4bln5/liIbmnpBcbiAqIEBwYXJhbSBzZGtcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIOmAiemhueOAglxuICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMudmlld1BvaW50SGVpZ2h0PTEuOCDop4bngrnpq5jluqYobSnjgIJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnByZWNpc2lvbj0yMCDnsr7luqbjgIJcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnZpc2libGVBcmVhQ29sb3I9IzAwODAwMCDlj6/op4bljLrln5/popzoibLjgIJcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmludmlzaWJsZUFyZWFDb2xvcj0jRkYwMDAwIOS4jeWPr+inhuWMuuWfn+minOiJsuOAglxuICovXG5jbGFzcyBDaXJjbGVWaWV3U2hlZCBleHRlbmRzIFRvb2xzIHtcbiAgI2ludGVydmFsRXZlbnRzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcblxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlclxuICAgIHRoaXMub3B0aW9ucyA9IHt9XG4gICAgdGhpcy5vcHRpb25zLnZpc2libGVBcmVhQ29sb3IgPSBvcHRpb25zLnZpc2libGVBcmVhQ29sb3IgfHwgJyMwMDgwMDAnXG4gICAgdGhpcy5vcHRpb25zLmludmlzaWJsZUFyZWFDb2xvciA9IG9wdGlvbnMuaW52aXNpYmxlQXJlYUNvbG9yIHx8ICcjRkYwMDAwJ1xuICAgIHRoaXMuaWRzID0gW11cbiAgICB0aGlzLnByaW1pdGl2ZXMgPSBbXVxuICAgIHRoaXMudmlld3BvaW50UHJpbWl0aXZlID0gbnVsbFxuXG4gICAgdGhpcy5fZWxtcyA9IHt9XG4gICAgdGhpcy5wcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvblxuICAgIHRoaXMudmlld1BvaW50SGVpZ2h0ID0gb3B0aW9ucy52aWV3UG9pbnRIZWlnaHRcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcbiAgICB0aGlzLmh0bWwgPSBudWxsXG4gICAgbGV0IHRvb2xzID0gbmV3IFRvb2xzKHNkaylcbiAgICBZSi5BbmFseXNpcy5BbmFseXNlc1Jlc3VsdHMucHVzaCh0aGlzKVxuICAgIC8vIENpcmNsZVZpZXdTaGVkLmVkaXQodGhpcylcbiAgICBsZXQgdGVycmFpbkF2YWlsYWJpbGl0eSA9IHRoaXMudmlld2VyLnRlcnJhaW5Qcm92aWRlci5hdmFpbGFiaWxpdHk7XG4gICAgaWYgKCF0ZXJyYWluQXZhaWxhYmlsaXR5KSB7XG4gICAgICB0b29scy5tZXNzYWdlKHsgdHlwZTogJ3dhcm5pbmcnLCB0ZXh0OiAn5pyq5Yqg6L295Zyw5b2i5pWw5o2u77yBJyB9KVxuICAgICAgLy8gd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XG4gICAgICAvLyAgIG1lc3NhZ2U6ICfmnKrliqDovb3lnLDlvaLmlbDmja7vvIEnLFxuICAgICAgLy8gICB0eXBlOiAnd2FybmluZycsXG4gICAgICAvLyAgIGR1cmF0aW9uOiAxNTAwXG4gICAgICAvLyB9KTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBDaXJjbGVWaWV3U2hlZC5jcmVhdGUodGhpcylcbiAgfVxuXG4gIGdldCB2aWV3UG9pbnRIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52aWV3UG9pbnRIZWlnaHRcbiAgfVxuXG4gIHNldCB2aWV3UG9pbnRIZWlnaHQodikge1xuICAgIGxldCB2aWV3UG9pbnRIZWlnaHQgPSBNYXRoLmZsb29yKE51bWJlcih2KSAqIDEwKSAvIDEwXG4gICAgaWYgKGlzTmFOKHZpZXdQb2ludEhlaWdodCkpIHtcbiAgICAgIHZpZXdQb2ludEhlaWdodCA9IDEuOFxuICAgIH1cbiAgICBpZiAodmlld1BvaW50SGVpZ2h0IDwgMCkge1xuICAgICAgdmlld1BvaW50SGVpZ2h0ID0gMFxuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMudmlld1BvaW50SGVpZ2h0ID0gdmlld1BvaW50SGVpZ2h0XG4gICAgdGhpcy5fZWxtcy52aWV3UG9pbnRIZWlnaHQgJiZcbiAgICAgIHRoaXMuX2VsbXMudmlld1BvaW50SGVpZ2h0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0udmFsdWUgPSB2aWV3UG9pbnRIZWlnaHRcbiAgICAgIH0pXG4gIH1cblxuICBnZXQgcHJlY2lzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlY2lzaW9uXG4gIH1cblxuICBzZXQgcHJlY2lzaW9uKHYpIHtcbiAgICBsZXQgcHJlY2lzaW9uID0gTWF0aC5mbG9vcihOdW1iZXIodikpXG4gICAgaWYgKGlzTmFOKHByZWNpc2lvbikpIHtcbiAgICAgIHByZWNpc2lvbiA9IDIwXG4gICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPCAxKSB7XG4gICAgICBwcmVjaXNpb24gPSAxXG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5wcmVjaXNpb24gPSBwcmVjaXNpb25cbiAgICB0aGlzLl9lbG1zLnByZWNpc2lvbiAmJlxuICAgICAgdGhpcy5fZWxtcy5wcmVjaXNpb24uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWx1ZSA9IHByZWNpc2lvblxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xuICAgIGxldCBjb3VudCA9IDBcbiAgICBpZiAoIVlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XG4gICAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xuICAgICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxuICAgICAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgRHJhdyA9IG5ldyBZSi5EcmF3LkRyYXdDaXJjbGUodGhhdC5zZGspXG4gICAgICBEcmF3LnN0YXJ0KGFzeW5jIChhLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIHRoYXQuY2VudGVyID0gb3B0aW9ucy5jZW50ZXJcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5yYWRpdXMgPSBvcHRpb25zLnJhZGl1c1xuICAgICAgICBsZXQgcG9zaXRpb25zID0gYXdhaXQgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQoXG4gICAgICAgICAgdGhhdC5zZGsudmlld2VyLnRlcnJhaW5Qcm92aWRlcixcbiAgICAgICAgICBbQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhvcHRpb25zLmNlbnRlci5sbmcsIG9wdGlvbnMuY2VudGVyLmxhdCldXG4gICAgICAgICk7XG4gICAgICAgIHRoYXQuY2VudGVyID0ge1xuICAgICAgICAgIGxuZzogb3B0aW9ucy5jZW50ZXIubG5nLFxuICAgICAgICAgIGxhdDogb3B0aW9ucy5jZW50ZXIubGF0LFxuICAgICAgICAgIGFsdDogcG9zaXRpb25zWzBdLmhlaWdodFxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoYXQuYW5hbHlzZSgpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygn5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZWRpdCh0aGF0KSB7XG4gICAgaWYgKHRoYXQuX0RpYWxvZ09iamVjdCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UpIHtcbiAgICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSgpXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBudWxsXG4gICAgfVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC5zZGsudmlld2VyLl9jb250YWluZXIsIHtcbiAgICAgIHRpdGxlOiAn5ZyG5b2i6KeG5Z+f5YiG5p6QJyxcbiAgICAgIGxlZnQ6ICcxODBweCcsXG4gICAgICB0b3A6ICcxMDBweCcsXG4gICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoYXQuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhhdC5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGF3YWl0IHRoYXQuX0RpYWxvZ09iamVjdC5pbml0KClcbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPVxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBjaXJjbGUtdmlldy1zaGVkJ1xuICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcblxuICAgIGxldCBkcmF3RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJylcbiAgICBkcmF3RWxtLmlubmVySFRNTCA9ICfnu5jliLYnXG4gICAgZHJhd0VsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIGxldCB0ZXJyYWluQXZhaWxhYmlsaXR5ID0gdGhhdC52aWV3ZXIudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eTtcbiAgICAgIGlmICghdGVycmFpbkF2YWlsYWJpbGl0eSkge1xuICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcbiAgICAgICAgICBtZXNzYWdlOiAn5pyq5Yqg6L295Zyw5b2i5pWw5o2u77yBJyxcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgZHVyYXRpb246IDE1MDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgQ2lyY2xlVmlld1NoZWQuY3JlYXRlKHRoYXQpXG4gICAgfSlcbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGRyYXdFbG0pXG5cbiAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKVxuICAgIHRoYXQuX0V2ZW50QmluZGluZy5vbih0aGF0LCBhbGxfZWxtKVxuICAgIHRoYXQuX2VsbXMgPSB0aGF0Ll9FdmVudEJpbmRpbmcuZWxlbWVudFxuICB9XG5cbiAgYW5hbHlzZSgpIHtcbiAgICAvLyB0aGlzLmRlc3Ryb3koKVxuICAgIGxldCBjZW50ZXIgPSBbdGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXRdXG4gICAgbGV0IHJhZGl1cyA9IHRoaXMucmFkaXVzIC8gMTAwMFxuICAgIGxldCBjaXJjbGUgPSB0dXJmLmNpcmNsZShjZW50ZXIsIHJhZGl1cywge1xuICAgICAgc3RlcHM6IDE4MCxcbiAgICAgIHVuaXRzOiAna2lsb21ldGVycycsXG4gICAgICBwcm9wZXJ0aWVzOiB7IGZvbzogJ2JhcicgfVxuICAgIH0pXG4gICAgaWYgKCF0aGlzLnZpZXdwb2ludFByaW1pdGl2ZSkge1xuICAgICAgdGhpcy52aWV3cG9pbnRQcmltaXRpdmUgPSB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChcbiAgICAgICAgbmV3IENlc2l1bS5Qb2ludFByaW1pdGl2ZUNvbGxlY3Rpb24oKVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAoIXRoaXMudmlld0JpbGxib2FyZFByaW1pdGl2ZSkge1xuICAgICAgdGhpcy52aWV3QmlsbGJvYXJkUHJpbWl0aXZlID0gdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQoXG4gICAgICAgIG5ldyBDZXNpdW0uQmlsbGJvYXJkQ29sbGVjdGlvbigpXG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBsZXQgZGlzdGFuY2UgPSByYWRpdXMgLyB0aGlzLnByZWNpc2lvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2lyY2xlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhbY2VudGVyLCBjaXJjbGUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1baV1dKVxuICAgICAgbGV0IGFycmF5MiA9IFtdXG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSB0aGlzLnByZWNpc2lvbjsgaisrKSB7XG4gICAgICAgIGxldCBzbGljZWQgPSB0dXJmLmxpbmVTbGljZUFsb25nKGxpbmUsIDAsIGRpc3RhbmNlICogaiwge1xuICAgICAgICAgIHVuaXRzOiAna2lsb21ldGVycydcbiAgICAgICAgfSlcbiAgICAgICAgYXJyYXkyLnB1c2goW1xuICAgICAgICAgIHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXVswXSxcbiAgICAgICAgICBzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1bMV1cbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICAgIGFycmF5LnB1c2goYXJyYXkyKVxuICAgIH1cblxuICAgIGxldCB2aWV3UG9pbnQgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcbiAgICAgIHRoaXMuY2VudGVyLmxuZyxcbiAgICAgIHRoaXMuY2VudGVyLmxhdCxcbiAgICAgIHRoaXMuY2VudGVyLmFsdCArIHRoaXMudmlld1BvaW50SGVpZ2h0XG4gICAgKVxuICAgIGxldCBpbnN0YW5jZXMgPSBbXVxuICAgIENpcmNsZVZpZXdTaGVkLmdldGNhbnZhcyh0aGlzKS50aGVuKGNhbnZhcyA9PlxuICAgICAgdGhpcy52aWV3QmlsbGJvYXJkUHJpbWl0aXZlLmFkZCh7XG4gICAgICAgIHBvc2l0aW9uOiB2aWV3UG9pbnQsXG4gICAgICAgIGltYWdlOiBjYW52YXMsXG4gICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgIH0pXG4gICAgKVxuICAgIHRoaXMudmlld3BvaW50UHJpbWl0aXZlLmFkZCh7XG4gICAgICBwb3NpdGlvbjogdmlld1BvaW50LFxuICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5BUVVBLndpdGhBbHBoYSgxKSxcbiAgICAgIHBpeGVsU2l6ZTogNlxuICAgIH0pXG5cbiAgICBsZXQgbSA9IDBcbiAgICBsZXQgX3RoaXMgPSB0aGlzXG4gICAgbGV0IGtleSA9IHRoaXMucmFuZG9tU3RyaW5nKClcbiAgICBsZXQgaW50ZXJ2YWxFdmVudCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChtID49IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuI2ludGVydmFsRXZlbnRzLmdldChrZXkpXG4gICAgICAgIGl0ZW0gJiYgY2xlYXJJbnRlcnZhbChpdGVtLmV2ZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIEluQmF0Y2hlcyhtKVxuICAgICAgbSArPSAxXG4gICAgfSwgMClcbiAgICB0aGlzLiNpbnRlcnZhbEV2ZW50cy5zZXQoa2V5LCB7IGV2ZW50OiBpbnRlcnZhbEV2ZW50IH0pXG5cbiAgICBmdW5jdGlvbiBJbkJhdGNoZXMoaykge1xuICAgICAgbGV0IGluc3RhbmNlcyA9IFtdXG4gICAgICBsZXQgaSA9IGtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyYXlbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IHB0MSA9IGFycmF5W2ldW2pdXG4gICAgICAgIGxldCBwdDJcbiAgICAgICAgbGV0IHB0M1xuICAgICAgICBsZXQgcHQ0ID0gYXJyYXlbaV1baiAtIDFdXG4gICAgICAgIGlmIChpID09IGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwdDIgPSBhcnJheVswXVtqXVxuICAgICAgICAgIHB0MyA9IGFycmF5WzBdW2ogLSAxXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB0MiA9IGFycmF5W2kgKyAxXVtqXVxuICAgICAgICAgIHB0MyA9IGFycmF5W2kgKyAxXVtqIC0gMV1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PSAwKSB7XG4gICAgICAgICAgcHQzID0gWy4uLmNlbnRlcl1cbiAgICAgICAgICBwdDQgPSBbXVxuICAgICAgICB9XG4gICAgICAgIGxldCBjcHQgPSBbKHB0MVswXSArIHB0M1swXSkgLyAyLCAocHQxWzFdICsgcHQzWzFdKSAvIDJdXG4gICAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNwdFswXSwgY3B0WzFdKVxuICAgICAgICBsZXQgaGVpZ2h0ID0gX3RoaXMudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChjYXJ0b2dyYXBoaWMpXG4gICAgICAgIGxldCB0YXJnZXRQb2ludCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNwdFswXSwgY3B0WzFdLCBoZWlnaHQpXG5cbiAgICAgICAgbGV0IGRpcmVjdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShcbiAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChcbiAgICAgICAgICAgIHRhcmdldFBvaW50LFxuICAgICAgICAgICAgdmlld1BvaW50LFxuICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXG4gICAgICAgIClcbiAgICAgICAgbGV0IHJheSA9IG5ldyBDZXNpdW0uUmF5KHZpZXdQb2ludCwgZGlyZWN0aW9uKVxuICAgICAgICBsZXQgcGlja2VkT2JqZWN0cyA9IF90aGlzLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KFxuICAgICAgICAgIHJheSxcbiAgICAgICAgICBfdGhpcy5wcmltaXRpdmVzXG4gICAgICAgIClcbiAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocGlja2VkT2JqZWN0c1tpXS5wb3NpdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gcGlja2VkT2JqZWN0c1tpXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbG9yID0gQ2VzaXVtLkNvbG9yLkxJTUVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlc3VsdCAmJlxuICAgICAgICAgIE1hdGguYWJzKHJlc3VsdC5wb3NpdGlvbi54IC0gdGFyZ2V0UG9pbnQueCkgPiAwLjAxICYmXG4gICAgICAgICAgTWF0aC5hYnMocmVzdWx0LnBvc2l0aW9uLnkgLSB0YXJnZXRQb2ludC55KSA+IDAuMDEgJiZcbiAgICAgICAgICBNYXRoLmFicyhyZXN1bHQucG9zaXRpb24ueiAtIHRhcmdldFBvaW50LnopID4gMC4wMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xvciA9IENlc2l1bS5Db2xvci5SRURcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9seWxpbmUgPSBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lR2VvbWV0cnkoe1xuICAgICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShbXG4gICAgICAgICAgICAuLi5wdDEsXG4gICAgICAgICAgICAuLi5wdDIsXG4gICAgICAgICAgICAuLi5wdDMsXG4gICAgICAgICAgICAuLi5wdDQsXG4gICAgICAgICAgICAuLi5wdDFcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB3aWR0aDogMlxuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBwb2x5Z29uSW5zdGFuY2UgPSBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xuICAgICAgICAgIGdlb21ldHJ5OiBwb2x5bGluZSxcbiAgICAgICAgICBuYW1lOiAnVmlld2Vyc2hlZFBvbHlnb24nLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihjb2xvciksXG4gICAgICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpIC8v5pi+56S65oiW6ICF6ZqQ6JePXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpbnN0YW5jZXMucHVzaChwb2x5Z29uSW5zdGFuY2UpXG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByaW1pdGl2ZXMucHVzaChcbiAgICAgICAgX3RoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxuICAgICAgICAgIG5ldyBDZXNpdW0uR3JvdW5kUG9seWxpbmVQcmltaXRpdmUoe1xuICAgICAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IGluc3RhbmNlcyxcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uUG9seWxpbmVDb2xvckFwcGVhcmFuY2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0Y2FudmFzKHRoYXQpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG4gICAgY2FudmFzLndpZHRoID0gMjIwXG4gICAgY2FudmFzLmhlaWdodCA9IDE0MFxuICAgIGNhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kID0gJyMwMDAwMDAnXG4gICAgbGV0IGltZyA9IG5ldyBJbWFnZSgpXG4gICAgY29uc3QgZGF0YSA9IFtcbiAgICAgIHtcbiAgICAgICAgaW1hZ2VzOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvbG5nLnBuZycsXG4gICAgICAgIHRleHQ6ICfnu4/luqbvvJonICsgcGFyc2VGbG9hdCh0aGF0LmNlbnRlci5sbmcudG9GaXhlZCgxMCkpICsgJ8KwJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW1hZ2VzOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvbGF0LnBuZycsXG4gICAgICAgIHRleHQ6ICfnuqzluqbvvJonICsgcGFyc2VGbG9hdCh0aGF0LmNlbnRlci5sYXQudG9GaXhlZCgxMCkpICsgJ8KwJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW1hZ2VzOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvaC5wbmcnLFxuICAgICAgICB0ZXh0OiAn6KeG6auY77yaJyArIHRoYXQudmlld1BvaW50SGVpZ2h0ICsgJyBtJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW1hZ2VzOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvcmFkaXVzLnBuZycsXG4gICAgICAgIHRleHQ6ICfljYrlvoTvvJonICsgdGhhdC5yYWRpdXMgKyAnIG0nXG4gICAgICB9XG4gICAgXVxuICAgIGltZy5zcmMgPSB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvYnViYmxlLnBuZydcbiAgICBsZXQgaW1hZ2VzTG9hZGVkID0gMFxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KVxuICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKClcbiAgICAgICAgICBpbWcuc3JjID0gaXRlbS5pbWFnZXNcbiAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDEyLCAxMiArIGluZGV4ICogMjYpXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZmYnXG4gICAgICAgICAgICBjdHguZm9udCA9ICcxMnB4IEFyaWFsJ1xuICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGl0ZW0udGV4dCwgNDQsIDI4ICsgaW5kZXggKiAyNilcbiAgICAgICAgICAgIGltYWdlc0xvYWRlZCsrXG4gICAgICAgICAgICBpZiAoaW1hZ2VzTG9hZGVkID09PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGNhbnZhcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy4jaW50ZXJ2YWxFdmVudHMpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodmFsdWUuZXZlbnQpXG4gICAgfVxuICAgIHRoaXMuI2ludGVydmFsRXZlbnRzID0gbmV3IE1hcCgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMucHJpbWl0aXZlc1tpXSlcbiAgICB9XG4gICAgdGhpcy5wcmltaXRpdmVzID0gW11cbiAgICBpZiAodGhpcy52aWV3cG9pbnRQcmltaXRpdmUpIHtcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMudmlld3BvaW50UHJpbWl0aXZlKVxuICAgICAgdGhpcy52aWV3cG9pbnRQcmltaXRpdmUgPSBudWxsXG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdCaWxsYm9hcmRQcmltaXRpdmUpIHtcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMudmlld0JpbGxib2FyZFByaW1pdGl2ZSlcbiAgICAgIHRoaXMudmlld0JpbGxib2FyZFByaW1pdGl2ZSA9IG51bGxcbiAgICB9XG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZVZpZXdTaGVkXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQUE7QUFhQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUEwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWtEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBSUE7QUFIQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFSQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF4Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQXVCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/CircleViewShed/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Contour/index.js": /*!*******************************************!*\ !*** ./src/Obj/Analysis/Contour/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n\n\n\nvar ContourAnalysis = /*#__PURE__*/function () {\n /**\r\n * @constructor 等高线分析\r\n * @param sdk \r\n * **/\n function ContourAnalysis(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ContourAnalysis);\n this.viewer = sdk.viewer;\n var terrainAvailability = this.viewer.terrainProvider.availability;\n if (!terrainAvailability) {\n this.error = '未加载地形数据!';\n window.ELEMENT && window.ELEMENT.Message({\n message: '未加载地形数据!',\n type: 'warning',\n duration: 1500\n });\n console.warn(this.error);\n return;\n }\n this.positions = options.positions;\n this.interfaceNum = options.interfaceNum || 25; //内插时均分的数量,即沿着边界长或宽均分成n分进行插点,默认值25\n this.colorFill = options.colorFill || [\"#8CEA00\", \"#B7FF4A\", \"#FFFF37\", \"#FFE66F\", \"#FFD1A4\", \"#FFCBB3\", \"#FFBD9D\", \"#FFAD86\", \"#FF9D6F\", \"#FF8F59\", \"#FF8040\", \"#FF5809\", \"#F75000\", \"#D94600\", \"#BB3D00\", \"#A23400\", \"#842B00\", \"#642100\", \"#4D0000\", \"#2F0000\"]; //等高线赋值颜色,内含default值\n this.countorLineList = Cesium.defaultValue(options.countorLineList, []);\n YJ.Analysis.AnalysesResults.push(this);\n this.createNewLine();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ContourAnalysis, [{\n key: \"type\",\n get: function get() {\n return 'ContourAnalysis';\n }\n }, {\n key: \"createNewLine\",\n value: function createNewLine() {\n ContourAnalysis.interpolatePoint(this);\n }\n\n //利用turf在box内进行插点\n }, {\n key: \"getObjectIndex\",\n value:\n /**\r\n * 返回随机插入的数在数组中的位置\r\n * @param {*} arr 元数组\r\n * @param {*} num 随机数\r\n * @returns 序号\r\n * @example getObjectIndex([0,218,325,333,444],354)=>4;\r\n */\n function getObjectIndex(arr, num) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] > num) {\n return i;\n }\n }\n }\n }, {\n key: \"clear\",\n value: function clear(countorLine) {\n if (countorLine) {\n this.viewer.dataSources.remove(countorLine);\n var index = this.countorLineList.indexOf(countorLine);\n this.countorLineList.splice(index, 1);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this = this;\n this.countorLineList.forEach(function (element) {\n _this.viewer.dataSources.remove(element);\n });\n this.countorLineList = [];\n }\n }], [{\n key: \"interpolatePoint\",\n value: function interpolatePoint(that) {\n var curPoints = that.positions;\n var features = [];\n var boundaryCoord = {\n minX: 360,\n maxX: -360,\n minY: 180,\n maxY: -180\n }; //绘制几何图形的外围矩形box\n for (var index = 0; index < curPoints.length; index++) {\n var element = Cesium.Cartesian3.fromDegrees(curPoints[index].lng, curPoints[index].lat, curPoints[index].alt);\n var ellipsoid = that.viewer.scene.globe.ellipsoid;\n var cartographic = ellipsoid.cartesianToCartographic(element);\n var lat = Cesium.Math.toDegrees(cartographic.latitude);\n var lng = Cesium.Math.toDegrees(cartographic.longitude);\n boundaryCoord.maxY = Math.max(lat, boundaryCoord.maxY);\n boundaryCoord.minY = Math.min(lat, boundaryCoord.minY);\n boundaryCoord.maxX = Math.max(lng, boundaryCoord.maxX);\n boundaryCoord.minX = Math.min(lng, boundaryCoord.minX);\n var curFeature = {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Point\",\n coordinates: [lng, lat]\n }\n };\n features.push(curFeature);\n }\n var boundaryJson = {\n type: \"FeatureCollection\",\n features: features\n };\n turf.featureEach(boundaryJson, function (point) {\n point.properties.height = 0;\n });\n var options = {\n gridType: \"points\",\n property: \"height\",\n units: \"kilometers\"\n };\n var from = turf.point([boundaryCoord.minX, boundaryCoord.minY]);\n var to = turf.point([boundaryCoord.maxX, boundaryCoord.maxY]);\n var diagonalDistance = turf.rhumbDistance(from, to, {\n units: \"kilometers\"\n });\n var grid = turf.interpolate(boundaryJson, diagonalDistance / that.interfaceNum, options);\n var minHeight = 10000000; //最低点高程值\n var maxHeight = -100000000; //最高点高程值\n turf.featureEach(grid, function (point) {\n var pos = point.geometry.coordinates;\n var cartographic = Cesium.Cartographic.fromDegrees(pos[0], pos[1]);\n var height = that.viewer.scene.globe.getHeight(cartographic);\n maxHeight = Math.max(height, maxHeight);\n minHeight = Math.min(height, minHeight);\n point.properties.height = height;\n });\n var breaks = [];\n var stepCount = that.colorFill.length - 1;\n var step = (maxHeight - minHeight) / stepCount;\n for (var _index = 0; _index < stepCount + 1; _index++) {\n breaks.push(Math.ceil(minHeight + step * _index));\n }\n // console.log('grid', grid)\n var linesJson = turf.isolines(grid, breaks, {\n zProperty: \"height\"\n });\n var _countorLine = Cesium.GeoJsonDataSource.load(linesJson, {\n clampToGround: true\n });\n // console.log(linesJson)\n _countorLine.then(function (dataSource) {\n console.log(dataSource);\n that.countorLine = dataSource; //最终计算生成的等高线对象,GeoJsonDataSource\n that.countorLineList.push(dataSource); //等高线数组\n that.viewer.dataSources.add(dataSource);\n var entities = dataSource.entities.values;\n for (var _index2 = 0; _index2 < entities.length; _index2++) {\n var _element = entities[_index2];\n var center = getPolylineCenter(_element.polyline);\n _element.position = center;\n // dataSource.entities.add(new Cesium.Entity({\n // position: center,\n // label: {\n // text: element.properties.height._value + '',\n // font: '20px Microsoft YaHei',\n // fillColor: Cesium.Color.fromCssColorString('#f1d20c'),\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\n // },\n // }))\n // element.label = new Cesium.LabelGraphics({\n\n // })\n var cur_index = that.getObjectIndex(breaks, _element.properties.height._value);\n if (cur_index) {\n _element.polyline.material = Cesium.Color.fromCssColorString(that.colorFill[cur_index - 1]);\n }\n }\n });\n function getPolylineCenter(polyline) {\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n var positions = polyline.positions;\n var length = positions._value.length;\n var array = [];\n for (var i = 0; i < length; i++) {\n var pos = tools.cartesian3Towgs84(positions._value[i], that.viewer);\n array.push([pos.lng, pos.lat]);\n }\n var line = turf.lineString(array);\n var distance = turf.length(line, {\n units: \"kilometers\"\n });\n var along = turf.along(line, distance / 2, {\n units: \"kilometers\"\n });\n return Cesium.Cartesian3.fromDegrees(along.geometry.coordinates[0], along.geometry.coordinates[1], 0);\n }\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ContourAnalysis);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0NvbnRvdXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL0NvbnRvdXIvaW5kZXguanM/ZjE3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbmltcG9ydCBUb29scyBmcm9tICcuLi8uLi8uLi9Ub29scyc7XHJcbmNsYXNzIENvbnRvdXJBbmFseXNpcyB7XHJcbiAgLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciDnrYnpq5jnur/liIbmnpBcclxuICogQHBhcmFtIHNkayBcclxuICogKiovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlclxyXG4gICAgbGV0IHRlcnJhaW5BdmFpbGFiaWxpdHkgPSB0aGlzLnZpZXdlci50ZXJyYWluUHJvdmlkZXIuYXZhaWxhYmlsaXR5O1xyXG4gICAgaWYgKCF0ZXJyYWluQXZhaWxhYmlsaXR5KSB7XHJcbiAgICAgIHRoaXMuZXJyb3IgPSAn5pyq5Yqg6L295Zyw5b2i5pWw5o2u77yBJ1xyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiAn5pyq5Yqg6L295Zyw5b2i5pWw5o2u77yBJyxcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmVycm9yKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIHRoaXMuaW50ZXJmYWNlTnVtID0gb3B0aW9ucy5pbnRlcmZhY2VOdW0gfHwgMjUgLy/lhoXmj5Lml7blnYfliIbnmoTmlbDph4/vvIzljbPmsr/nnYDovrnnlYzplb/miJblrr3lnYfliIbmiJBu5YiG6L+b6KGM5o+S54K577yM6buY6K6k5YC8MjVcclxuICAgIHRoaXMuY29sb3JGaWxsID0gb3B0aW9ucy5jb2xvckZpbGwgfHwgW1xyXG4gICAgICBcIiM4Q0VBMDBcIixcclxuICAgICAgXCIjQjdGRjRBXCIsXHJcbiAgICAgIFwiI0ZGRkYzN1wiLFxyXG4gICAgICBcIiNGRkU2NkZcIixcclxuICAgICAgXCIjRkZEMUE0XCIsXHJcbiAgICAgIFwiI0ZGQ0JCM1wiLFxyXG4gICAgICBcIiNGRkJEOURcIixcclxuICAgICAgXCIjRkZBRDg2XCIsXHJcbiAgICAgIFwiI0ZGOUQ2RlwiLFxyXG4gICAgICBcIiNGRjhGNTlcIixcclxuICAgICAgXCIjRkY4MDQwXCIsXHJcbiAgICAgIFwiI0ZGNTgwOVwiLFxyXG4gICAgICBcIiNGNzUwMDBcIixcclxuICAgICAgXCIjRDk0NjAwXCIsXHJcbiAgICAgIFwiI0JCM0QwMFwiLFxyXG4gICAgICBcIiNBMjM0MDBcIixcclxuICAgICAgXCIjODQyQjAwXCIsXHJcbiAgICAgIFwiIzY0MjEwMFwiLFxyXG4gICAgICBcIiM0RDAwMDBcIixcclxuICAgICAgXCIjMkYwMDAwXCIsXHJcbiAgICBdOyAvL+etiemrmOe6v+i1i+WAvOminOiJsu+8jOWGheWQq2RlZmF1bHTlgLxcclxuICAgIHRoaXMuY291bnRvckxpbmVMaXN0ID0gQ2VzaXVtLmRlZmF1bHRWYWx1ZShvcHRpb25zLmNvdW50b3JMaW5lTGlzdCwgW10pO1xyXG4gICAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLnB1c2godGhpcylcclxuICAgIHRoaXMuY3JlYXRlTmV3TGluZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ0NvbnRvdXJBbmFseXNpcydcclxuICB9XHJcblxyXG4gIGNyZWF0ZU5ld0xpbmUoKSB7XHJcbiAgICBDb250b3VyQW5hbHlzaXMuaW50ZXJwb2xhdGVQb2ludCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8v5Yip55SodHVyZuWcqGJveOWGhei/m+ihjOaPkueCuVxyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZVBvaW50KHRoYXQpIHtcclxuICAgIGxldCBjdXJQb2ludHMgPSB0aGF0LnBvc2l0aW9uc1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW107XHJcbiAgICBjb25zdCBib3VuZGFyeUNvb3JkID0ge1xyXG4gICAgICBtaW5YOiAzNjAsXHJcbiAgICAgIG1heFg6IC0zNjAsXHJcbiAgICAgIG1pblk6IDE4MCxcclxuICAgICAgbWF4WTogLTE4MCxcclxuICAgIH07IC8v57uY5Yi25Yeg5L2V5Zu+5b2i55qE5aSW5Zu055+p5b2iYm94XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY3VyUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY3VyUG9pbnRzW2luZGV4XS5sbmcsIGN1clBvaW50c1tpbmRleF0ubGF0LCBjdXJQb2ludHNbaW5kZXhdLmFsdCk7XHJcbiAgICAgIGxldCBlbGxpcHNvaWQgPSB0aGF0LnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQ7XHJcbiAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBlbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZWxlbWVudCk7XHJcbiAgICAgIGxldCBsYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKTtcclxuICAgICAgbGV0IGxuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubG9uZ2l0dWRlKTtcclxuICAgICAgYm91bmRhcnlDb29yZC5tYXhZID0gTWF0aC5tYXgobGF0LCBib3VuZGFyeUNvb3JkLm1heFkpO1xyXG4gICAgICBib3VuZGFyeUNvb3JkLm1pblkgPSBNYXRoLm1pbihsYXQsIGJvdW5kYXJ5Q29vcmQubWluWSk7XHJcbiAgICAgIGJvdW5kYXJ5Q29vcmQubWF4WCA9IE1hdGgubWF4KGxuZywgYm91bmRhcnlDb29yZC5tYXhYKTtcclxuICAgICAgYm91bmRhcnlDb29yZC5taW5YID0gTWF0aC5taW4obG5nLCBib3VuZGFyeUNvb3JkLm1pblgpO1xyXG5cclxuICAgICAgbGV0IGN1ckZlYXR1cmUgPSB7XHJcbiAgICAgICAgdHlwZTogXCJGZWF0dXJlXCIsXHJcbiAgICAgICAgcHJvcGVydGllczoge30sXHJcbiAgICAgICAgZ2VvbWV0cnk6IHtcclxuICAgICAgICAgIHR5cGU6IFwiUG9pbnRcIixcclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbbG5nLCBsYXRdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGZlYXR1cmVzLnB1c2goY3VyRmVhdHVyZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgYm91bmRhcnlKc29uID0ge1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcyxcclxuICAgIH07XHJcbiAgICB0dXJmLmZlYXR1cmVFYWNoKGJvdW5kYXJ5SnNvbiwgZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgIHBvaW50LnByb3BlcnRpZXMuaGVpZ2h0ID0gMDtcclxuICAgIH0pO1xyXG4gICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGdyaWRUeXBlOiBcInBvaW50c1wiLFxyXG4gICAgICBwcm9wZXJ0eTogXCJoZWlnaHRcIixcclxuICAgICAgdW5pdHM6IFwia2lsb21ldGVyc1wiLFxyXG4gICAgfTtcclxuICAgIGxldCBmcm9tID0gdHVyZi5wb2ludChbYm91bmRhcnlDb29yZC5taW5YLCBib3VuZGFyeUNvb3JkLm1pblldKTtcclxuICAgIGxldCB0byA9IHR1cmYucG9pbnQoW2JvdW5kYXJ5Q29vcmQubWF4WCwgYm91bmRhcnlDb29yZC5tYXhZXSk7XHJcbiAgICBsZXQgZGlhZ29uYWxEaXN0YW5jZSA9IHR1cmYucmh1bWJEaXN0YW5jZShmcm9tLCB0bywge1xyXG4gICAgICB1bml0czogXCJraWxvbWV0ZXJzXCIsXHJcbiAgICB9KTtcclxuICAgIGxldCBncmlkID0gdHVyZi5pbnRlcnBvbGF0ZShcclxuICAgICAgYm91bmRhcnlKc29uLFxyXG4gICAgICBkaWFnb25hbERpc3RhbmNlIC8gdGhhdC5pbnRlcmZhY2VOdW0sXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICBsZXQgbWluSGVpZ2h0ID0gMTAwMDAwMDA7IC8v5pyA5L2O54K56auY56iL5YC8XHJcbiAgICBsZXQgbWF4SGVpZ2h0ID0gLTEwMDAwMDAwMDsgLy/mnIDpq5jngrnpq5jnqIvlgLxcclxuICAgIHR1cmYuZmVhdHVyZUVhY2goZ3JpZCwgZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgIGxldCBwb3MgPSBwb2ludC5nZW9tZXRyeS5jb29yZGluYXRlcztcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zWzBdLCBwb3NbMV0pO1xyXG4gICAgICBsZXQgaGVpZ2h0ID0gdGhhdC52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KGNhcnRvZ3JhcGhpYyk7XHJcbiAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgbWF4SGVpZ2h0KTtcclxuICAgICAgbWluSGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBtaW5IZWlnaHQpO1xyXG4gICAgICBwb2ludC5wcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0pO1xyXG4gICAgbGV0IGJyZWFrcyA9IFtdO1xyXG4gICAgbGV0IHN0ZXBDb3VudCA9IHRoYXQuY29sb3JGaWxsLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgc3RlcCA9IChtYXhIZWlnaHQgLSBtaW5IZWlnaHQpIC8gc3RlcENvdW50O1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHN0ZXBDb3VudCArIDE7IGluZGV4KyspIHtcclxuICAgICAgYnJlYWtzLnB1c2goTWF0aC5jZWlsKG1pbkhlaWdodCArIHN0ZXAgKiBpbmRleCkpO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ2dyaWQnLCBncmlkKVxyXG4gICAgbGV0IGxpbmVzSnNvbiA9IHR1cmYuaXNvbGluZXMoZ3JpZCwgYnJlYWtzLCB7IHpQcm9wZXJ0eTogXCJoZWlnaHRcIiB9KTtcclxuICAgIGxldCBfY291bnRvckxpbmUgPSBDZXNpdW0uR2VvSnNvbkRhdGFTb3VyY2UubG9hZChsaW5lc0pzb24sIHtcclxuICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgLy8gY29uc29sZS5sb2cobGluZXNKc29uKVxyXG4gICAgX2NvdW50b3JMaW5lLnRoZW4oZnVuY3Rpb24gKGRhdGFTb3VyY2UpIHtcclxuICAgICAgY29uc29sZS5sb2coZGF0YVNvdXJjZSlcclxuICAgICAgdGhhdC5jb3VudG9yTGluZSA9IGRhdGFTb3VyY2U7IC8v5pyA57uI6K6h566X55Sf5oiQ55qE562J6auY57q/5a+56LGh77yMR2VvSnNvbkRhdGFTb3VyY2VcclxuICAgICAgdGhhdC5jb3VudG9yTGluZUxpc3QucHVzaChkYXRhU291cmNlKTsgLy/nrYnpq5jnur/mlbDnu4RcclxuICAgICAgdGhhdC52aWV3ZXIuZGF0YVNvdXJjZXMuYWRkKGRhdGFTb3VyY2UpO1xyXG4gICAgICBsZXQgZW50aXRpZXMgPSBkYXRhU291cmNlLmVudGl0aWVzLnZhbHVlcztcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVudGl0aWVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbnRpdGllc1tpbmRleF07XHJcbiAgICAgICAgbGV0IGNlbnRlciA9IGdldFBvbHlsaW5lQ2VudGVyKGVsZW1lbnQucG9seWxpbmUpO1xyXG4gICAgICAgIGVsZW1lbnQucG9zaXRpb24gPSBjZW50ZXI7XHJcbiAgICAgICAgLy8gZGF0YVNvdXJjZS5lbnRpdGllcy5hZGQobmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIC8vICAgcG9zaXRpb246IGNlbnRlcixcclxuICAgICAgICAvLyAgIGxhYmVsOiB7XHJcbiAgICAgICAgLy8gICAgIHRleHQ6IGVsZW1lbnQucHJvcGVydGllcy5oZWlnaHQuX3ZhbHVlICsgJycsXHJcbiAgICAgICAgLy8gICAgIGZvbnQ6ICcyMHB4IE1pY3Jvc29mdCBZYUhlaScsXHJcbiAgICAgICAgLy8gICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2YxZDIwYycpLFxyXG4gICAgICAgIC8vICAgICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgICAvLyAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgLy8gICAgIGhlaWdodFJlZmVyZW5jZTogQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkRcclxuICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgLy8gfSkpXHJcbiAgICAgICAgLy8gZWxlbWVudC5sYWJlbCA9IG5ldyBDZXNpdW0uTGFiZWxHcmFwaGljcyh7XHJcbiAgICAgICAgICBcclxuICAgICAgICAvLyB9KVxyXG4gICAgICAgIGxldCBjdXJfaW5kZXggPSB0aGF0LmdldE9iamVjdEluZGV4KFxyXG4gICAgICAgICAgYnJlYWtzLFxyXG4gICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLmhlaWdodC5fdmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjdXJfaW5kZXgpIHtcclxuICAgICAgICAgIGVsZW1lbnQucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKFxyXG4gICAgICAgICAgICB0aGF0LmNvbG9yRmlsbFtjdXJfaW5kZXggLSAxXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFBvbHlsaW5lQ2VudGVyKHBvbHlsaW5lKSB7XHJcbiAgICAgIGxldCB0b29scyA9IG5ldyBUb29scygpXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBwb2x5bGluZS5wb3NpdGlvbnM7XHJcbiAgICAgIGxldCBsZW5ndGggPSBwb3NpdGlvbnMuX3ZhbHVlLmxlbmd0aDtcclxuICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb3MgPSB0b29scy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnMuX3ZhbHVlW2ldLCB0aGF0LnZpZXdlcilcclxuICAgICAgICBhcnJheS5wdXNoKFtwb3MubG5nLCBwb3MubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhhcnJheSk7XHJcbiAgICAgIGxldCBkaXN0YW5jZSA9IHR1cmYubGVuZ3RoKGxpbmUsIHsgdW5pdHM6IFwia2lsb21ldGVyc1wiIH0pO1xyXG4gICAgICBsZXQgYWxvbmcgPSB0dXJmLmFsb25nKGxpbmUsIGRpc3RhbmNlLzIsIHsgdW5pdHM6IFwia2lsb21ldGVyc1wiIH0pO1xyXG4gICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoYWxvbmcuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGFsb25nLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLCAwKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICog6L+U5Zue6ZqP5py65o+S5YWl55qE5pWw5Zyo5pWw57uE5Lit55qE5L2N572uXHJcbiAgICogQHBhcmFtIHsqfSBhcnIg5YWD5pWw57uEXHJcbiAgICogQHBhcmFtIHsqfSBudW0g6ZqP5py65pWwXHJcbiAgICogQHJldHVybnMg5bqP5Y+3XHJcbiAgICogQGV4YW1wbGUgZ2V0T2JqZWN0SW5kZXgoWzAsMjE4LDMyNSwzMzMsNDQ0XSwzNTQpPT40O1xyXG4gICAqL1xyXG4gIGdldE9iamVjdEluZGV4KGFyciwgbnVtKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXJyW2ldID4gbnVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgY2xlYXIoY291bnRvckxpbmUpIHtcclxuICAgIGlmIChjb3VudG9yTGluZSkge1xyXG4gICAgICB0aGlzLnZpZXdlci5kYXRhU291cmNlcy5yZW1vdmUoY291bnRvckxpbmUpO1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmNvdW50b3JMaW5lTGlzdC5pbmRleE9mKGNvdW50b3JMaW5lKTtcclxuICAgICAgdGhpcy5jb3VudG9yTGluZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHRoaXMuY291bnRvckxpbmVMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgdGhpcy52aWV3ZXIuZGF0YVNvdXJjZXMucmVtb3ZlKGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvdW50b3JMaW5lTGlzdCA9IFtdO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBDb250b3VyQW5hbHlzaXM7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQThIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBNkJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Contour/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/CutFill/_element.js": /*!**********************************************!*\ !*** ./src/Obj/Analysis/CutFill/_element.js ***! \**********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u7ED8\\u5236\\u5206\\u6790\\u533A\\u57DF\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u57FA\\u51C6\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u7CBE\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u603B\\u5206\\u6790\\u9762\\u79EF:\\n 0\\n m\\xB2\\n
\\n
\\n \\u65E0\\u987B\\u586B\\u6316\\u9762\\u79EF:\\n 0\\n m\\xB2\\n
\\n
\\n
\\n
\\n \\u586B\\u65B9\\u9762\\u79EF:\\n 0\\n m\\xB2\\n
\\n
\\n \\u6316\\u65B9\\u9762\\u79EF:\\n 0\\n m\\xB2\\n
\\n
\\n
\\n
\\n \\u586B\\u65B9\\u4F53\\u79EF:\\n 0\\n m\\xB3\\n
\\n
\\n \\u6316\\u65B9\\u4F53\\u79EF:\\n 0\\n m\\xB3\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0N1dEZpbGwvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL0N1dEZpbGwvX2VsZW1lbnQuanM/MzU0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA3MHB4O1wiPue7mOWItuWIhuaekOWMuuWfnzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcmF3LWJ0blwiPjxzdmcgY2xhc3M9XCJpY29uLWVkaXRcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1lZGl0XCI+PC91c2U+PC9zdmc+5byA5aeL57uY5Yi2PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Z+65YeG6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5XCIgbWF4PVwiOTk5OTk5XCIgbmFtZT1cImhlaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPueyvuW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCIxMjUwXCIgbmFtZT1cInByZWNpc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA3NHB4O1wiPuaAu+WIhuaekOmdouenrzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbnVtYmVyXCIgbmFtZT1cImFsbEFyZWFcIj4wPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0IHRleHQtbnVtYmVyXCI+bcKyPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDkwcHg7XCI+5peg6aG75aGr5oyW6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1udW1iZXJcIiBuYW1lPVwibm9BcmVhXCI+MDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdCB0ZXh0LW51bWJlclwiPm3Csjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNzRweDtcIj7loavmlrnpnaLnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW51bWJlclwiIG5hbWU9XCJmaWxsQXJlYVwiPjA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXQgdGV4dC1udW1iZXJcIj5twrI8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgOTBweDtcIj7mjJbmlrnpnaLnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW51bWJlclwiIG5hbWU9XCJjdXRBcmVhXCI+MDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdCB0ZXh0LW51bWJlclwiPm3Csjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNzRweDtcIj7loavmlrnkvZPnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW51bWJlclwiIG5hbWU9XCJmaWxsVm9sdW1lXCI+MDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdCB0ZXh0LW51bWJlclwiPm3Cszwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA5MHB4O1wiPuaMluaWueS9k+enrzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbnVtYmVyXCIgbmFtZT1cImN1dFZvbHVtZVwiPjA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXQgdGV4dC1udW1iZXJcIj5twrM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdUVBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/CutFill/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/CutFill/index.js": /*!*******************************************!*\ !*** ./src/Obj/Analysis/CutFill/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/CutFill/_element.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n\n\n\n\n\n\n// import CreatePolygon from \"./CreatePolygon\";\n\nvar CutFillAnalysis = /*#__PURE__*/function () {\n /**\r\n * @constructor 填挖方分析\r\n * @param sdk \r\n * **/\n function CutFillAnalysis(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, CutFillAnalysis);\n this.sdk = sdk;\n this.viewer = sdk.viewer;\n // if (!positions) throw new Error(\"no positions object!\");\n // this.positions = positions;\n this.height = options.height || 70;\n this.maxHeigh = -1000000;\n this.precision = options.precision || 125;\n this.Dialog = _Dialog;\n this.result = {\n allArea: \"\",\n cutArea: \"\",\n cutVolume: \"\",\n fillArea: \"\",\n fillVolume: \"\",\n noArea: \"\"\n };\n this.entities = [];\n this.Draw = new _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.sdk);\n YJ.Analysis.AnalysesResults.push(this);\n CutFillAnalysis.EditBox(this);\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(CutFillAnalysis, [{\n key: \"create\",\n value: function create() {\n var _this = this;\n this.clean();\n this.Draw.start(function (a, positions) {\n if (!positions || positions.length < 3) {\n var _error = '最少需要三个坐标!';\n console.warn(_error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _error,\n type: 'warning',\n duration: 1500\n });\n return;\n }\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n _this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this.createPolygonGeo(_this.positions);\n _this.result = _this.VolumeAnalysis();\n _this.viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; //允许相机进入地下\n });\n // const $this = this;\n // if (!this.cp) {\n // this.cp = new CreatePolygon(this.viewer)\n // }\n // this.cp.start(function () {\n // console.log($this.cp.activeShapePoints)\n // $this.positions = $this.cp.activeShapePoints;\n // $this.createPolygonGeo($this.positions);\n // $this.result = $this.VolumeAnalysis();\n // $this.viewer.entities.remove($this.cp.polygon);\n // $this.viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; //允许相机进入地下\n\n // });\n }\n }, {\n key: \"createPolygonGeo\",\n value: function createPolygonGeo(points) {\n //计算网格粒度-精度\n var granularity = Math.PI / Math.pow(2, 11);\n granularity = granularity / this.precision;\n var polygonGeometry = new Cesium.PolygonGeometry.fromPositions({\n positions: points,\n vertexFormat: Cesium.PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,\n granularity: granularity\n });\n //创建自定义平面几何体\n this.geom = new Cesium.PolygonGeometry.createGeometry(polygonGeometry);\n }\n }, {\n key: \"VolumeAnalysis\",\n value: function VolumeAnalysis() {\n var cutArea = 0,\n cutVolume = 0,\n fillArea = 0,\n fillVolume = 0,\n noArea = 0;\n var indices = this.geom.indices; //获取顶点索引数据\n if (!this.geom || !this.geom.attributes || !this.geom.attributes.position) {\n return;\n }\n var positions = this.geom.attributes.position.values;\n for (var index = 0; index < indices.length; index += 3) {\n var pos0 = this.returnPosition(positions, indices[index]);\n var pos1 = this.returnPosition(positions, indices[index + 1]);\n var pos2 = this.returnPosition(positions, indices[index + 2]);\n var entity = this.viewer.entities.add({\n name: \"三角面\",\n polygon: {\n hierarchy: [pos0.heightPos, pos1.heightPos, pos2.heightPos],\n perPositionHeight: true,\n material: Cesium.Color.fromRandom(),\n extrudedHeight: this.height,\n outline: true,\n outlineColor: Cesium.Color.BLACK\n }\n });\n this.entities.push(entity);\n //水平状态下三角形面积\n var area = this.computeArea4Triangle(pos0.noHeightPos, pos1.noHeightPos, pos2.noHeightPos);\n //计算三个点的均高\n var height = (pos0.height + pos1.height + pos2.height) / 3;\n if (height < this.height) {\n // 需要填方的部分\n fillArea += area;\n var volume = area * (this.height - height);\n fillVolume += volume;\n } else if (height == this.height) {\n noArea += area;\n } else {\n // 需要挖方的部分\n cutArea += area;\n var _volume = area * (height - this.height);\n cutVolume += _volume;\n }\n }\n var allArea = cutArea + fillArea + noArea;\n // this.result = {\n // allArea,\n // cutArea,\n // cutVolume,\n // fillArea,\n // fillVolume,\n // noArea,\n // };\n this.result.allArea = allArea;\n this.result.cutArea = cutArea;\n this.result.cutVolume = cutVolume;\n this.result.fillArea = fillArea;\n this.result.fillVolume = fillVolume;\n this.result.noArea = noArea;\n return this.result;\n }\n }, {\n key: \"computeCentroid4Polygon\",\n value: function computeCentroid4Polygon(positions) {\n var x = [],\n y = [];\n var allX = 0,\n allY = 0;\n for (var i = 0; i < positions.length; i++) {\n var cartographic = Cesium.Cartographic.fromCartesian(positions[i]);\n allX += cartographic.longitude;\n allY += cartographic.latitude;\n x.push(cartographic.longitude);\n y.push(cartographic.latitude);\n }\n var centroidx = allX / positions.length;\n var centroidy = allY / positions.length;\n var Cartographic = new Cesium.Cartographic(centroidx, centroidy);\n return Cesium.Cartesian3.fromRadians(Cartographic.longitude, Cartographic.latitude, this.maxHeigh + 30);\n }\n /**\r\n * 海伦公式求取三角形面积\r\n * @param {*} pos1\r\n * @param {*} pos2\r\n * @param {*} pos3\r\n * @returns 三角形面积㎡\r\n */\n }, {\n key: \"computeArea4Triangle\",\n value: function computeArea4Triangle(pos1, pos2, pos3) {\n var a = Cesium.Cartesian3.distance(pos1, pos2);\n var b = Cesium.Cartesian3.distance(pos2, pos3);\n var c = Cesium.Cartesian3.distance(pos3, pos1);\n var S = (a + b + c) / 2;\n return Math.sqrt(S * (S - a) * (S - b) * (S - c));\n }\n }, {\n key: \"returnPosition\",\n value: function returnPosition(positions, index) {\n var cartesian = new Cesium.Cartesian3(positions[index * 3], positions[index * 3 + 1], positions[index * 3 + 2]);\n var cartographic = Cesium.Cartographic.fromCartesian(cartesian);\n var height = this.viewer.scene.sampleHeightSupported ? this.viewer.scene.sampleHeight(cartographic) : this.viewer.scene.globe.getHeight(cartographic);\n if (height > this.maxHeigh) {\n this.maxHeigh = height;\n }\n return {\n heightPos: Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height),\n noHeightPos: Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0),\n height: height\n };\n }\n }, {\n key: \"clean\",\n value: function clean() {\n this.Draw && this.Draw.end();\n for (var i = 0; i < this.entities.length; i++) {\n this.viewer.entities.remove(this.entities[i]);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.clean();\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }], [{\n key: \"EditBox\",\n value: function () {\n var _EditBox = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(that) {\n var contentElm, e_height, e_precision, e_allArea, e_fillArea, e_fillVolume, e_cutArea, e_cutVolume, e_noArea, newDivBtn;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_4__[\"default\"](that.sdk.viewer._container, {\n title: '土方分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n that.clean();\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n }\n });\n case 3:\n that._DialogObject = _context.sent;\n _context.next = 6;\n return that._DialogObject.init();\n case 6:\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_5__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' cut-fill';\n\n // 高度值\n e_height = contentElm.querySelector(\"input[name='height']\");\n e_height.value = that.height;\n e_height.addEventListener('blur', function (e) {\n var value = e.target.value;\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n e_height.value = value;\n that.height = e_height.value;\n }\n });\n\n // 精度值\n e_precision = contentElm.querySelector(\"input[name='precision']\");\n e_precision.value = that.precision;\n e_precision.addEventListener('blur', function (e) {\n var value = Number(e.target.value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n e_precision.value = value;\n that.precision = e_precision.value;\n });\n\n // 总分析面积\n e_allArea = contentElm.querySelector(\"span[name='allArea']\");\n e_allArea.innerHTML = that.result.allArea || 0;\n Object.defineProperty(that.result, 'allArea', {\n get: function get() {\n return e_allArea.innerHTML;\n },\n set: function set(value) {\n e_allArea.innerHTML = Number(value.toFixed(4));\n }\n });\n // 填方面积\n e_fillArea = contentElm.querySelector(\"span[name='fillArea']\");\n e_fillArea.innerHTML = that.result.fillArea || 0;\n Object.defineProperty(that.result, 'fillArea', {\n get: function get() {\n return e_fillArea.innerHTML;\n },\n set: function set(value) {\n e_fillArea.innerHTML = Number(value.toFixed(4));\n }\n });\n\n // 填方体积\n e_fillVolume = contentElm.querySelector(\"span[name='fillVolume']\");\n e_fillVolume.innerHTML = that.result.fillVolume || 0;\n Object.defineProperty(that.result, 'fillVolume', {\n get: function get() {\n return e_fillVolume.innerHTML;\n },\n set: function set(value) {\n e_fillVolume.innerHTML = Number(value.toFixed(4));\n }\n });\n\n // 挖方面积\n e_cutArea = contentElm.querySelector(\"span[name='cutArea']\");\n e_cutArea.innerHTML = that.result.cutArea || 0;\n Object.defineProperty(that.result, 'cutArea', {\n get: function get() {\n return e_cutArea.innerHTML;\n },\n set: function set(value) {\n e_cutArea.innerHTML = Number(value.toFixed(4));\n }\n });\n\n // 挖方体积\n e_cutVolume = contentElm.querySelector(\"span[name='cutVolume']\");\n e_cutVolume.innerHTML = that.result.cutVolume || 0;\n Object.defineProperty(that.result, 'cutVolume', {\n get: function get() {\n return e_cutVolume.innerHTML;\n },\n set: function set(value) {\n e_cutVolume.innerHTML = Number(value.toFixed(4));\n }\n });\n\n // 无须填挖面积\n e_noArea = contentElm.querySelector(\"span[name='noArea']\");\n e_noArea.innerHTML = that.result.noArea || 0;\n Object.defineProperty(that.result, 'noArea', {\n get: function get() {\n return e_noArea.innerHTML;\n },\n set: function set(value) {\n e_noArea.innerHTML = Number(value.toFixed(4));\n }\n });\n newDivBtn = contentElm.getElementsByClassName('draw-btn')[0];\n newDivBtn.addEventListener('click', function () {\n that.create();\n });\n case 36:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function EditBox(_x) {\n return _EditBox.apply(this, arguments);\n }\n return EditBox;\n }()\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (CutFillAnalysis);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0N1dEZpbGwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL0N1dEZpbGwvaW5kZXguanM/NmQwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uL0Jhc2VEaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuLy8gaW1wb3J0IENyZWF0ZVBvbHlnb24gZnJvbSBcIi4vQ3JlYXRlUG9seWdvblwiO1xyXG5pbXBvcnQgRHJhd1BvbHlnb24gZnJvbSBcIi4uLy4uLy4uL0RyYXcvZHJhd1BvbHlnb25cIlxyXG5cclxuY2xhc3MgQ3V0RmlsbEFuYWx5c2lzIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3Ig5aGr5oyW5pa55YiG5p6QXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiAqKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICB0aGlzLnNkayA9IHNkaztcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlcjtcclxuICAgIC8vIGlmICghcG9zaXRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJubyBwb3NpdGlvbnMgb2JqZWN0IVwiKTtcclxuICAgIC8vIHRoaXMucG9zaXRpb25zID0gcG9zaXRpb25zO1xyXG4gICAgdGhpcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCA3MFxyXG4gICAgdGhpcy5tYXhIZWlnaCA9IC0xMDAwMDAwO1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbiB8fCAxMjVcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5yZXN1bHQgPSB7XHJcbiAgICAgIGFsbEFyZWE6IFwiXCIsXHJcbiAgICAgIGN1dEFyZWE6IFwiXCIsXHJcbiAgICAgIGN1dFZvbHVtZTogXCJcIixcclxuICAgICAgZmlsbEFyZWE6IFwiXCIsXHJcbiAgICAgIGZpbGxWb2x1bWU6IFwiXCIsXHJcbiAgICAgIG5vQXJlYTogXCJcIixcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXRpZXMgPSBbXVxyXG4gICAgdGhpcy5EcmF3ID0gbmV3IERyYXdQb2x5Z29uKHRoaXMuc2RrKVxyXG4gICAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLnB1c2godGhpcylcclxuICAgIEN1dEZpbGxBbmFseXNpcy5FZGl0Qm94KHRoaXMpXHJcbiAgfVxyXG5cclxuICBjcmVhdGUoKSB7XHJcbiAgICB0aGlzLmNsZWFuKClcclxuICAgIHRoaXMuRHJhdy5zdGFydCgoYSwgcG9zaXRpb25zKSA9PiB7XHJcbiAgICAgIGlmKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aDwzKSB7XHJcbiAgICAgICAgbGV0IF9lcnJvciA9ICfmnIDlsJHpnIDopoHkuInkuKrlnZDmoIfvvIEnXHJcbiAgICAgICAgY29uc29sZS53YXJuKF9lcnJvcilcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IF9lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgdGhpcy5jcmVhdGVQb2x5Z29uR2VvKHRoaXMucG9zaXRpb25zKTtcclxuICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLlZvbHVtZUFuYWx5c2lzKCk7XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnNjcmVlblNwYWNlQ2FtZXJhQ29udHJvbGxlci5lbmFibGVDb2xsaXNpb25EZXRlY3Rpb24gPSBmYWxzZTsgLy/lhYHorrjnm7jmnLrov5vlhaXlnLDkuItcclxuICAgIH0pXHJcbiAgICAvLyBjb25zdCAkdGhpcyA9IHRoaXM7XHJcbiAgICAvLyBpZiAoIXRoaXMuY3ApIHtcclxuICAgIC8vICAgdGhpcy5jcCA9IG5ldyBDcmVhdGVQb2x5Z29uKHRoaXMudmlld2VyKVxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5jcC5zdGFydChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCR0aGlzLmNwLmFjdGl2ZVNoYXBlUG9pbnRzKVxyXG4gICAgLy8gICAkdGhpcy5wb3NpdGlvbnMgPSAkdGhpcy5jcC5hY3RpdmVTaGFwZVBvaW50cztcclxuICAgIC8vICAgJHRoaXMuY3JlYXRlUG9seWdvbkdlbygkdGhpcy5wb3NpdGlvbnMpO1xyXG4gICAgLy8gICAkdGhpcy5yZXN1bHQgPSAkdGhpcy5Wb2x1bWVBbmFseXNpcygpO1xyXG4gICAgLy8gICAkdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKCR0aGlzLmNwLnBvbHlnb24pO1xyXG4gICAgLy8gICAkdGhpcy52aWV3ZXIuc2NlbmUuc2NyZWVuU3BhY2VDYW1lcmFDb250cm9sbGVyLmVuYWJsZUNvbGxpc2lvbkRldGVjdGlvbiA9IGZhbHNlOyAvL+WFgeiuuOebuOacuui/m+WFpeWcsOS4i1xyXG5cclxuICAgIC8vIH0pO1xyXG4gIH1cclxuICBjcmVhdGVQb2x5Z29uR2VvKHBvaW50cykge1xyXG4gICAgLy/orqHnrpfnvZHmoLznspLluqYt57K+5bqmXHJcbiAgICBsZXQgZ3JhbnVsYXJpdHkgPSBNYXRoLlBJIC8gTWF0aC5wb3coMiwgMTEpO1xyXG4gICAgZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eSAvIHRoaXMucHJlY2lzaW9uO1xyXG4gICAgbGV0IHBvbHlnb25HZW9tZXRyeSA9IG5ldyBDZXNpdW0uUG9seWdvbkdlb21ldHJ5LmZyb21Qb3NpdGlvbnMoe1xyXG4gICAgICBwb3NpdGlvbnM6IHBvaW50cyxcclxuICAgICAgdmVydGV4Rm9ybWF0OiBDZXNpdW0uUGVySW5zdGFuY2VDb2xvckFwcGVhcmFuY2UuRkxBVF9WRVJURVhfRk9STUFULFxyXG4gICAgICBncmFudWxhcml0eTogZ3JhbnVsYXJpdHksXHJcbiAgICB9KTtcclxuICAgIC8v5Yib5bu66Ieq5a6a5LmJ5bmz6Z2i5Yeg5L2V5L2TXHJcbiAgICB0aGlzLmdlb20gPSBuZXcgQ2VzaXVtLlBvbHlnb25HZW9tZXRyeS5jcmVhdGVHZW9tZXRyeShwb2x5Z29uR2VvbWV0cnkpO1xyXG4gIH1cclxuICBWb2x1bWVBbmFseXNpcygpIHtcclxuICAgIGxldCBjdXRBcmVhID0gMCxcclxuICAgICAgY3V0Vm9sdW1lID0gMCxcclxuICAgICAgZmlsbEFyZWEgPSAwLFxyXG4gICAgICBmaWxsVm9sdW1lID0gMCxcclxuICAgICAgbm9BcmVhID0gMDtcclxuICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmdlb20uaW5kaWNlczsgLy/ojrflj5bpobbngrnntKLlvJXmlbDmja5cclxuICAgIGlmICghdGhpcy5nZW9tIHx8ICF0aGlzLmdlb20uYXR0cmlidXRlcyB8fCAhdGhpcy5nZW9tLmF0dHJpYnV0ZXMucG9zaXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5nZW9tLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGluZGljZXMubGVuZ3RoOyBpbmRleCArPSAzKSB7XHJcbiAgICAgIGNvbnN0IHBvczAgPSB0aGlzLnJldHVyblBvc2l0aW9uKHBvc2l0aW9ucywgaW5kaWNlc1tpbmRleF0pO1xyXG4gICAgICBjb25zdCBwb3MxID0gdGhpcy5yZXR1cm5Qb3NpdGlvbihwb3NpdGlvbnMsIGluZGljZXNbaW5kZXggKyAxXSk7XHJcbiAgICAgIGNvbnN0IHBvczIgPSB0aGlzLnJldHVyblBvc2l0aW9uKHBvc2l0aW9ucywgaW5kaWNlc1tpbmRleCArIDJdKTtcclxuICAgICAgbGV0IGVudGl0eSA9IHRoaXMudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgbmFtZTogXCLkuInop5LpnaJcIixcclxuICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICBoaWVyYXJjaHk6IFtwb3MwLmhlaWdodFBvcywgcG9zMS5oZWlnaHRQb3MsIHBvczIuaGVpZ2h0UG9zXSxcclxuICAgICAgICAgIHBlclBvc2l0aW9uSGVpZ2h0OiB0cnVlLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tUmFuZG9tKCksXHJcbiAgICAgICAgICBleHRydWRlZEhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICBvdXRsaW5lOiB0cnVlLFxyXG4gICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZW50aXRpZXMucHVzaChlbnRpdHkpXHJcbiAgICAgIC8v5rC05bmz54q25oCB5LiL5LiJ6KeS5b2i6Z2i56evXHJcbiAgICAgIGNvbnN0IGFyZWEgPSB0aGlzLmNvbXB1dGVBcmVhNFRyaWFuZ2xlKFxyXG4gICAgICAgIHBvczAubm9IZWlnaHRQb3MsXHJcbiAgICAgICAgcG9zMS5ub0hlaWdodFBvcyxcclxuICAgICAgICBwb3MyLm5vSGVpZ2h0UG9zXHJcbiAgICAgICk7XHJcbiAgICAgIC8v6K6h566X5LiJ5Liq54K555qE5Z2H6auYXHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IChwb3MwLmhlaWdodCArIHBvczEuaGVpZ2h0ICsgcG9zMi5oZWlnaHQpIC8gMztcclxuICAgICAgaWYgKGhlaWdodCA8IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgLy8g6ZyA6KaB5aGr5pa555qE6YOo5YiGXHJcbiAgICAgICAgZmlsbEFyZWEgKz0gYXJlYTtcclxuICAgICAgICBjb25zdCB2b2x1bWUgPSBhcmVhICogKHRoaXMuaGVpZ2h0IC0gaGVpZ2h0KTtcclxuICAgICAgICBmaWxsVm9sdW1lICs9IHZvbHVtZTtcclxuICAgICAgfSBlbHNlIGlmIChoZWlnaHQgPT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICBub0FyZWEgKz0gYXJlYTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDpnIDopoHmjJbmlrnnmoTpg6jliIZcclxuICAgICAgICBjdXRBcmVhICs9IGFyZWE7XHJcbiAgICAgICAgY29uc3Qgdm9sdW1lID0gYXJlYSAqIChoZWlnaHQgLSB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgY3V0Vm9sdW1lICs9IHZvbHVtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYWxsQXJlYSA9IGN1dEFyZWEgKyBmaWxsQXJlYSArIG5vQXJlYTtcclxuICAgIC8vIHRoaXMucmVzdWx0ID0ge1xyXG4gICAgLy8gICBhbGxBcmVhLFxyXG4gICAgLy8gICBjdXRBcmVhLFxyXG4gICAgLy8gICBjdXRWb2x1bWUsXHJcbiAgICAvLyAgIGZpbGxBcmVhLFxyXG4gICAgLy8gICBmaWxsVm9sdW1lLFxyXG4gICAgLy8gICBub0FyZWEsXHJcbiAgICAvLyB9O1xyXG4gICAgdGhpcy5yZXN1bHQuYWxsQXJlYSA9IGFsbEFyZWFcclxuICAgIHRoaXMucmVzdWx0LmN1dEFyZWEgPSBjdXRBcmVhXHJcbiAgICB0aGlzLnJlc3VsdC5jdXRWb2x1bWUgPSBjdXRWb2x1bWVcclxuICAgIHRoaXMucmVzdWx0LmZpbGxBcmVhID0gZmlsbEFyZWFcclxuICAgIHRoaXMucmVzdWx0LmZpbGxWb2x1bWUgPSBmaWxsVm9sdW1lXHJcbiAgICB0aGlzLnJlc3VsdC5ub0FyZWEgPSBub0FyZWFcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcclxuICB9XHJcbiAgY29tcHV0ZUNlbnRyb2lkNFBvbHlnb24ocG9zaXRpb25zKSB7XHJcbiAgICBsZXQgeCA9IFtdLFxyXG4gICAgICB5ID0gW107XHJcbiAgICBsZXQgYWxsWCA9IDAsXHJcbiAgICAgIGFsbFkgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb3NpdGlvbnNbaV0pO1xyXG4gICAgICBhbGxYICs9IGNhcnRvZ3JhcGhpYy5sb25naXR1ZGU7XHJcbiAgICAgIGFsbFkgKz0gY2FydG9ncmFwaGljLmxhdGl0dWRlO1xyXG4gICAgICB4LnB1c2goY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICAgIHkucHVzaChjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNlbnRyb2lkeCA9IGFsbFggLyBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGNlbnRyb2lkeSA9IGFsbFkgLyBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgY29uc3QgQ2FydG9ncmFwaGljID0gbmV3IENlc2l1bS5DYXJ0b2dyYXBoaWMoY2VudHJvaWR4LCBjZW50cm9pZHkpO1xyXG4gICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21SYWRpYW5zKFxyXG4gICAgICBDYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLFxyXG4gICAgICBDYXJ0b2dyYXBoaWMubGF0aXR1ZGUsXHJcbiAgICAgIHRoaXMubWF4SGVpZ2ggKyAzMFxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5rW35Lym5YWs5byP5rGC5Y+W5LiJ6KeS5b2i6Z2i56evXHJcbiAgICogQHBhcmFtIHsqfSBwb3MxXHJcbiAgICogQHBhcmFtIHsqfSBwb3MyXHJcbiAgICogQHBhcmFtIHsqfSBwb3MzXHJcbiAgICogQHJldHVybnMg5LiJ6KeS5b2i6Z2i56ev446hXHJcbiAgICovXHJcbiAgY29tcHV0ZUFyZWE0VHJpYW5nbGUocG9zMSwgcG9zMiwgcG9zMykge1xyXG4gICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwb3MxLCBwb3MyKTtcclxuICAgIGxldCBiID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9zMiwgcG9zMyk7XHJcbiAgICBsZXQgYyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvczMsIHBvczEpO1xyXG4gICAgbGV0IFMgPSAoYSArIGIgKyBjKSAvIDI7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KFMgKiAoUyAtIGEpICogKFMgLSBiKSAqIChTIC0gYykpO1xyXG4gIH1cclxuICByZXR1cm5Qb3NpdGlvbihwb3NpdGlvbnMsIGluZGV4KSB7XHJcbiAgICBsZXQgY2FydGVzaWFuID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgICBwb3NpdGlvbnNbaW5kZXggKiAzXSxcclxuICAgICAgcG9zaXRpb25zW2luZGV4ICogMyArIDFdLFxyXG4gICAgICBwb3NpdGlvbnNbaW5kZXggKiAzICsgMl1cclxuICAgICk7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKGNhcnRlc2lhbik7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy52aWV3ZXIuc2NlbmUuc2FtcGxlSGVpZ2h0U3VwcG9ydGVkXHJcbiAgICAgID8gdGhpcy52aWV3ZXIuc2NlbmUuc2FtcGxlSGVpZ2h0KGNhcnRvZ3JhcGhpYylcclxuICAgICAgOiB0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoY2FydG9ncmFwaGljKTtcclxuICAgIGlmIChoZWlnaHQgPiB0aGlzLm1heEhlaWdoKSB7XHJcbiAgICAgIHRoaXMubWF4SGVpZ2ggPSBoZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBoZWlnaHRQb3M6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21SYWRpYW5zKFxyXG4gICAgICAgIGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUsXHJcbiAgICAgICAgY2FydG9ncmFwaGljLmxhdGl0dWRlLFxyXG4gICAgICAgIGhlaWdodFxyXG4gICAgICApLFxyXG4gICAgICBub0hlaWdodFBvczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbVJhZGlhbnMoXHJcbiAgICAgICAgY2FydG9ncmFwaGljLmxvbmdpdHVkZSxcclxuICAgICAgICBjYXJ0b2dyYXBoaWMubGF0aXR1ZGUsXHJcbiAgICAgICAgMFxyXG4gICAgICApLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgRWRpdEJveCh0aGF0KSB7XHJcbiAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoYXQuc2RrLnZpZXdlci5fY29udGFpbmVyLCB7XHJcbiAgICAgIHRpdGxlOiAn5Zyf5pa55YiG5p6QJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhhdC5jbGVhbigpXHJcbiAgICAgICAgdGhhdC5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGF0LkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgICBhd2FpdCB0aGF0Ll9EaWFsb2dPYmplY3QuaW5pdCgpXHJcbiAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgY3V0LWZpbGwnXHJcblxyXG4gICAgLy8g6auY5bqm5YC8XHJcbiAgICBsZXQgZV9oZWlnaHQgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdoZWlnaHQnXVwiKVxyXG4gICAgZV9oZWlnaHQudmFsdWUgPSB0aGF0LmhlaWdodFxyXG4gICAgZV9oZWlnaHQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVfaGVpZ2h0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICB0aGF0LmhlaWdodCA9IGVfaGVpZ2h0LnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDnsr7luqblgLxcclxuICAgIGxldCBlX3ByZWNpc2lvbiA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3ByZWNpc2lvbiddXCIpXHJcbiAgICBlX3ByZWNpc2lvbi52YWx1ZSA9IHRoYXQucHJlY2lzaW9uXHJcbiAgICBlX3ByZWNpc2lvbi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgbGV0IHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKVxyXG4gICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgfVxyXG4gICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgfVxyXG4gICAgICBlX3ByZWNpc2lvbi52YWx1ZSA9IHZhbHVlXHJcbiAgICAgIHRoYXQucHJlY2lzaW9uID0gZV9wcmVjaXNpb24udmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDmgLvliIbmnpDpnaLnp69cclxuICAgIGxldCBlX2FsbEFyZWEgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J2FsbEFyZWEnXVwiKVxyXG4gICAgZV9hbGxBcmVhLmlubmVySFRNTCA9IHRoYXQucmVzdWx0LmFsbEFyZWEgfHwgMFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQucmVzdWx0LCAnYWxsQXJlYScsIHtcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiBlX2FsbEFyZWEuaW5uZXJIVE1MXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldCh2YWx1ZSkge1xyXG4gICAgICAgIGVfYWxsQXJlYS5pbm5lckhUTUwgPSBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIOWhq+aWuemdouenr1xyXG4gICAgbGV0IGVfZmlsbEFyZWEgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J2ZpbGxBcmVhJ11cIilcclxuICAgIGVfZmlsbEFyZWEuaW5uZXJIVE1MID0gdGhhdC5yZXN1bHQuZmlsbEFyZWEgfHwgMFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQucmVzdWx0LCAnZmlsbEFyZWEnLCB7XHJcbiAgICAgIGdldCgpIHtcclxuICAgICAgICByZXR1cm4gZV9maWxsQXJlYS5pbm5lckhUTUxcclxuICAgICAgfSxcclxuICAgICAgc2V0KHZhbHVlKSB7XHJcbiAgICAgICAgZV9maWxsQXJlYS5pbm5lckhUTUwgPSBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDloavmlrnkvZPnp69cclxuICAgIGxldCBlX2ZpbGxWb2x1bWUgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J2ZpbGxWb2x1bWUnXVwiKVxyXG4gICAgZV9maWxsVm9sdW1lLmlubmVySFRNTCA9IHRoYXQucmVzdWx0LmZpbGxWb2x1bWUgfHwgMFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQucmVzdWx0LCAnZmlsbFZvbHVtZScsIHtcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiBlX2ZpbGxWb2x1bWUuaW5uZXJIVE1MXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldCh2YWx1ZSkge1xyXG4gICAgICAgIGVfZmlsbFZvbHVtZS5pbm5lckhUTUwgPSBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDmjJbmlrnpnaLnp69cclxuICAgIGxldCBlX2N1dEFyZWEgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J2N1dEFyZWEnXVwiKVxyXG4gICAgZV9jdXRBcmVhLmlubmVySFRNTCA9IHRoYXQucmVzdWx0LmN1dEFyZWEgfHwgMFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQucmVzdWx0LCAnY3V0QXJlYScsIHtcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiBlX2N1dEFyZWEuaW5uZXJIVE1MXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldCh2YWx1ZSkge1xyXG4gICAgICAgIGVfY3V0QXJlYS5pbm5lckhUTUwgPSBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDmjJbmlrnkvZPnp69cclxuICAgIGxldCBlX2N1dFZvbHVtZSA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcInNwYW5bbmFtZT0nY3V0Vm9sdW1lJ11cIilcclxuICAgIGVfY3V0Vm9sdW1lLmlubmVySFRNTCA9IHRoYXQucmVzdWx0LmN1dFZvbHVtZSB8fCAwXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdC5yZXN1bHQsICdjdXRWb2x1bWUnLCB7XHJcbiAgICAgIGdldCgpIHtcclxuICAgICAgICByZXR1cm4gZV9jdXRWb2x1bWUuaW5uZXJIVE1MXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldCh2YWx1ZSkge1xyXG4gICAgICAgIGVfY3V0Vm9sdW1lLmlubmVySFRNTCA9IE51bWJlcih2YWx1ZS50b0ZpeGVkKDQpKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIOaXoOmhu+Whq+aMlumdouenr1xyXG4gICAgbGV0IGVfbm9BcmVhID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwic3BhbltuYW1lPSdub0FyZWEnXVwiKVxyXG4gICAgZV9ub0FyZWEuaW5uZXJIVE1MID0gdGhhdC5yZXN1bHQubm9BcmVhIHx8IDBcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LnJlc3VsdCwgJ25vQXJlYScsIHtcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiBlX25vQXJlYS5pbm5lckhUTUxcclxuICAgICAgfSxcclxuICAgICAgc2V0KHZhbHVlKSB7XHJcbiAgICAgICAgZV9ub0FyZWEuaW5uZXJIVE1MID0gTnVtYmVyKHZhbHVlLnRvRml4ZWQoNCkpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgbGV0IG5ld0RpdkJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZHJhdy1idG4nKVswXTtcclxuICAgIG5ld0RpdkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhhdC5jcmVhdGUoKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhbigpIHtcclxuICAgIHRoaXMuRHJhdyAmJiB0aGlzLkRyYXcuZW5kKClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdGllc1tpXSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNsZWFuKClcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQ3V0RmlsbEFuYWx5c2lzOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBS0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQW1JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE3SUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE5SEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0lBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/CutFill/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Flat/index.js": /*!****************************************!*\ !*** ./src/Obj/Analysis/Flat/index.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Base_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Base/index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\nvar FlatList = {};\nvar Flat = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 模型压平\r\n * @param sdk \r\n * @param {Cesium.Cesium3DTileset} tileset 三维模型\r\n * @param {Object} options \r\n * @param {string} attr.id id\r\n * @param {Cesium.Cartesian3[]} attr.positions 压平面坐标\r\n */\n function Flat(sdk, tileset) {\n var _this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _Dialog = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Flat);\n _this = _callSuper(this, Flat, [sdk]);\n // 数组去重,不能处理嵌套的数组\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_this, \"getUniqueArray\", function (arr) {\n return arr.filter(function (item, index, arr) {\n //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素\n return arr.indexOf(item, 0) === index;\n });\n });\n if (!tileset || !_this.sdk || !_this.sdk.viewer) return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(_this);\n _this.options = _objectSpread({}, options);\n _this.options.id = options.id || _this.randomString();\n _this.options.name = options.name || '压平面';\n _this.options.positions = options.positions || [];\n _this.options.show = options.show || options.show === false ? options.show : true;\n _this.tileset = tileset;\n _this.Dialog = _Dialog;\n if (!_this.options.height && _this.options.height !== 0) {\n var height = _this.options.positions[0].alt;\n for (var i = 0; i < _this.options.positions.length; i++) {\n if (height > _this.options.positions[i].alt) {\n height = _this.options.positions[i].alt;\n }\n }\n _this.options.height = height;\n }\n if (FlatList[_this.tileset.id]) {\n FlatList[_this.tileset.id].push(_objectSpread({}, _this.options));\n } else {\n FlatList[_this.tileset.id] = [_objectSpread({}, _this.options)];\n }\n _this.center = tileset.boundingSphere.center.clone();\n _this.center84 = _this.cartesian3Towgs84(_this.center, _this.sdk.viewer);\n _this.matrix = Cesium.Transforms.eastNorthUpToFixedFrame(_this.center.clone());\n _this.localMatrix = Cesium.Matrix4.inverse(_this.matrix, new Cesium.Matrix4());\n // this.entity = {\n // id: this.options.id\n // }\n _this.addFlat();\n // Flat.createPolygon(this)\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Flat, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Flat, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.options.show = v;\n for (var i = 0; i < FlatList[this.tileset.id].length; i++) {\n if (FlatList[this.tileset.id][i].id == this.options.id) {\n FlatList[this.tileset.id][i].show = v;\n }\n }\n this.addFlat();\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.options.height = Number(v);\n for (var i = 0; i < FlatList[this.tileset.id].length; i++) {\n if (FlatList[this.tileset.id][i].id == this.options.id) {\n FlatList[this.tileset.id][i].height = Number(v);\n }\n }\n this.addFlat();\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n for (var i = 0; i < FlatList[this.tileset.id].length; i++) {\n if (FlatList[this.tileset.id][i].id == this.options.id) {\n FlatList[this.tileset.id][i].name = v;\n }\n }\n }\n }, {\n key: \"addFlat\",\n value: function addFlat() {\n var _this2 = this;\n var localPositionsArr = [];\n for (var i = 0; i < FlatList[this.tileset.id].length; i++) {\n var item = FlatList[this.tileset.id][i];\n if (item.show) {\n var positions = item.positions;\n var height = item.height;\n var fromDegreesArray = [];\n for (var _i = 0; _i < positions.length; _i++) {\n fromDegreesArray.push(positions[_i].lng, positions[_i].lat);\n }\n FlatList[this.tileset.id][i].flatHeight = height - this.center84.alt;\n var localCoor = this.cartesiansToLocal(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray));\n localPositionsArr.push(localCoor);\n }\n }\n var funstr = this.getIsinPolygonFun(localPositionsArr);\n var str = \"\";\n var _loop = function _loop() {\n var coors = localPositionsArr[_i2];\n var n = coors.length;\n var instr = \"\";\n coors.forEach(function (coordinate, index) {\n instr += \"points_\".concat(n, \"[\").concat(index, \"] = vec2(\").concat(coordinate[0], \", \").concat(coordinate[1], \");\\n\");\n });\n str += \"\\n \".concat(instr, \"\\n if(isPointInPolygon_\").concat(n, \"(position2D)){\\n vec4 tileset_local_position_transformed = vec4(tileset_local_position.x, tileset_local_position.y, ground_z + \").concat(FlatList[_this2.tileset.id][_i2].flatHeight, \", 1.0);\\n vec4 model_local_position_transformed = czm_inverseModel * u_tileset_localToWorldMatrix * tileset_local_position_transformed;\\n\\n vsOutput.positionMC.xy = model_local_position_transformed.xy;\\n vsOutput.positionMC.z = model_local_position_transformed.z+ modelMC.z*0.002;\\n return;\\n }\");\n };\n for (var _i2 = 0; _i2 < localPositionsArr.length; _i2++) {\n _loop();\n }\n this.updateShader(funstr, str);\n }\n\n // static createPolygon(that) {\n // let color = '#ffffff'\n // let linecolor = '#000000'\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(positions[i].lng, positions[i].lat, that.options.height)\n // }\n // that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n // that.entity = that.sdk.viewer.entities.add({\n // show: that.options.show,\n // id: that.options.id,\n // polyline: {\n // positions: [...that.positions, that.positions[0], that.positions[1]],\n // width: 2,\n // material: Cesium.Color.fromCssColorString(linecolor),\n // depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\n // color: Cesium.Color.YELLOW\n // }),\n // clampToGround: false,\n // zIndex: that.sdk._entityZIndex\n // },\n // })\n // that.sdk._entityZIndex++\n // }\n }, {\n key: \"remove\",\n value: function remove() {\n var _this3 = this;\n FlatList[this.tileset.id] = FlatList[this.tileset.id].filter(function (attr) {\n return attr.id != _this3.options.id;\n });\n var localPositionsArr = [];\n for (var i = 0; i < FlatList[this.tileset.id].length; i++) {\n var item = FlatList[this.tileset.id][i];\n if (item.show) {\n var positions = item.positions;\n var height = item.height;\n var fromDegreesArray = [];\n for (var _i3 = 0; _i3 < positions.length; _i3++) {\n fromDegreesArray.push(positions[_i3].lng, positions[_i3].lat);\n }\n FlatList[this.tileset.id][i].flatHeight = height - this.center84.alt;\n var localCoor = this.cartesiansToLocal(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray));\n localPositionsArr.push(localCoor);\n }\n }\n var funstr = this.getIsinPolygonFun(localPositionsArr);\n var str = \"\";\n var _loop2 = function _loop2() {\n var coors = localPositionsArr[_i4];\n var n = coors.length;\n var instr = \"\";\n coors.forEach(function (coordinate, index) {\n instr += \"points_\".concat(n, \"[\").concat(index, \"] = vec2(\").concat(coordinate[0], \", \").concat(coordinate[1], \");\\n\");\n });\n str += \"\\n \".concat(instr, \"\\n if(isPointInPolygon_\").concat(n, \"(position2D)){\\n vec4 tileset_local_position_transformed = vec4(tileset_local_position.x, tileset_local_position.y, ground_z + \").concat(FlatList[_this3.tileset.id][_i4].flatHeight, \", 1.0);\\n vec4 model_local_position_transformed = czm_inverseModel * u_tileset_localToWorldMatrix * tileset_local_position_transformed;\\n vsOutput.positionMC.xy = model_local_position_transformed.xy;\\n vsOutput.positionMC.z = model_local_position_transformed.z+ modelMC.z*0.002;\\n return;\\n }\");\n };\n for (var _i4 = 0; _i4 < localPositionsArr.length; _i4++) {\n _loop2();\n }\n this.updateShader(funstr, str);\n }\n\n // 根据数组长度,构建 判断点是否在面内 的压平函数\n }, {\n key: \"getIsinPolygonFun\",\n value: function getIsinPolygonFun(polygons) {\n var pmap = polygons.map(function (polygon) {\n return polygon.length;\n });\n var uniqueArray = this.getUniqueArray(pmap);\n var str = \"\";\n uniqueArray.forEach(function (length) {\n str += \"\\n vec2 points_\".concat(length, \"[\").concat(length, \"];\\n bool isPointInPolygon_\").concat(length, \"(vec2 point){\\n int nCross = 0; // \\u4EA4\\u70B9\\u6570\\n const int n = \").concat(length, \"; \\n for(int i = 0; i < n; i++){\\n vec2 p1 = points_\").concat(length, \"[i];\\n vec2 p2 = points_\").concat(length, \"[int(mod(float(i+1),float(n)))];\\n if(p1[1] == p2[1]){\\n continue;\\n }\\n if(point[1] < min(p1[1], p2[1])){\\n continue;\\n }\\n if(point[1] >= max(p1[1], p2[1])){\\n continue;\\n }\\n float x = p1[0] + ((point[1] - p1[1]) * (p2[0] - p1[0])) / (p2[1] - p1[1]);\\n if(x > point[0]){\\n nCross++;\\n }\\n }\\n return int(mod(float(nCross), float(2))) == 1;\\n }\\n \");\n });\n return str;\n }\n }, {\n key: \"updateShader\",\n value: function updateShader(vtx1, vtx2) {\n var flatCustomShader = new Cesium.CustomShader({\n uniforms: {\n u_tileset_localToWorldMatrix: {\n type: Cesium.UniformType.MAT4,\n value: this.matrix\n },\n u_tileset_worldToLocalMatrix: {\n type: Cesium.UniformType.MAT4,\n value: this.localMatrix\n },\n u_flatHeight: {\n type: Cesium.UniformType.FLOAT,\n value: this.flatHeight\n }\n },\n vertexShaderText: \"\\n // \\u6240\\u6709isPointInPolygon\\u51FD\\u6570\\n \".concat(vtx1, \"\\n void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput){\\n vec3 modelMC = vsInput.attributes.positionMC;\\n vec4 model_local_position = vec4(modelMC.x, modelMC.y, modelMC.z, 1.0);\\n vec4 tileset_local_position = u_tileset_worldToLocalMatrix * czm_model * model_local_position;\\n vec2 position2D = vec2(tileset_local_position.x,tileset_local_position.y);\\n float ground_z = 0.0;\\n // \\u591A\\u4E2A\\u591A\\u8FB9\\u5F62\\u533A\\u57DF\\n \").concat(vtx2, \"\\n }\")\n });\n this.tileset.customShader = flatCustomShader;\n this.sdk.viewer.scene.requestRender();\n }\n }, {\n key: \"cartesiansToLocal\",\n value:\n // 世界坐标转数组局部坐标\n function cartesiansToLocal(positions) {\n var arr = [];\n for (var i = 0; i < positions.length; i++) {\n var position = positions[i];\n var localp = Cesium.Matrix4.multiplyByPoint(this.localMatrix, position.clone(), new Cesium.Cartesian3());\n arr.push([localp.x, localp.y]);\n }\n return arr;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var orientation, lng, lat, alt, destination, position, positionArray, i, a, BoundingSphere;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context.next = 22;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.line && this.options.line.positions) {\n position = _objectSpread({}, this.options.line.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context.next = 15;\n break;\n }\n _context.next = 14;\n return this.getClampToHeight(position);\n case 14:\n position.alt = _context.sent;\n case 15:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context.next = 26;\n break;\n case 22:\n positionArray = [];\n for (i = 0; i < this.options.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.center84.alt);\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 26:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }())\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(state) {\n var _this4 = this;\n var contentElm, name_elm, height_elm, confirmElm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!state) {\n _context2.next = 23;\n break;\n }\n this.originalOptions = this.deepCopyObj(this.options);\n _context2.next = 4;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk.viewer._container, {\n title: '压平面属性',\n left: '180px',\n top: '100px',\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n }\n });\n case 4:\n this._DialogObject = _context2.sent;\n _context2.next = 7;\n return this._DialogObject.init();\n case 7:\n // 内容部分\n contentElm = document.createElement('div');\n contentElm.innerHTML = \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u538B\\u5E73\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \";\n this._DialogObject.contentAppChild(contentElm);\n name_elm = contentElm.getElementsByClassName('input-name')[0];\n name_elm.value = this.options.name;\n name_elm.addEventListener('input', function () {\n _this4.name = name_elm.value;\n });\n height_elm = contentElm.getElementsByClassName('flat-height')[0];\n height_elm.value = this.options.height;\n height_elm.addEventListener('input', function () {\n _this4.height = Number(height_elm.value);\n _this4.addFlat();\n });\n confirmElm = document.createElement('button');\n confirmElm.className = 'btn';\n confirmElm.innerHTML = '确认';\n this._DialogObject.footAppChild(confirmElm);\n confirmElm.addEventListener('click', function () {\n if (!_this4.options.name) {\n _this4.options.name = '压平面';\n }\n _this4.originalOptions = _this4.deepCopyObj(_this4.options);\n _this4._DialogObject.close();\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_this4.options);\n });\n\n // let flatElm = document.createElement('button');\n // flatElm.className = 'btn'\n // flatElm.innerHTML = '二次编辑'\n // flatElm.style.width = 'auto'\n // flatElm.style.position = 'absolute'\n // flatElm.style.left = '10px'\n // this._DialogObject.footAppChild(flatElm)\n // flatElm.addEventListener('click', () => {\n // console.log('二次编辑')\n // })\n _context2.next = 24;\n break;\n case 23:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 24:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.options.name;\n this.height = this.options.height;\n this.addFlat();\n }\n }, {\n key: \"flatEdit\",\n value: function flatEdit(state) {\n if (state) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, FlatList[this.tileset.id]);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_Base_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Flat);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL0ZsYXQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL0ZsYXQvaW5kZXguanM/YzBmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vQmFzZS9pbmRleFwiO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uL0Jhc2VEaWFsb2cnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmxldCBGbGF0TGlzdCA9IHt9XHJcbmNsYXNzIEZsYXQgZXh0ZW5kcyBCYXNlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGNvbnN0cnVjdG9yXHJcbiAgICAgKiBAZGVzY3JpcHRpb24g5qih5Z6L5Y6L5bmzXHJcbiAgICAgKiBAcGFyYW0gc2RrIFxyXG4gICAgICogQHBhcmFtIHtDZXNpdW0uQ2VzaXVtM0RUaWxlc2V0fSB0aWxlc2V0IOS4iee7tOaooeWei1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0ci5pZCBpZFxyXG4gICAgICogQHBhcmFtIHtDZXNpdW0uQ2FydGVzaWFuM1tdfSBhdHRyLnBvc2l0aW9ucyDljovlubPpnaLlnZDmoIdcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Ioc2RrLCB0aWxlc2V0LCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHNkaylcclxuICAgICAgICBpZiAoIXRpbGVzZXQgfHwgIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5pZCA9IG9wdGlvbnMuaWQgfHwgdGhpcy5yYW5kb21TdHJpbmcoKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfljovlubPpnaInXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgICAgIHRoaXMudGlsZXNldCA9IHRpbGVzZXQ7XHJcbiAgICAgICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmhlaWdodCAmJiB0aGlzLm9wdGlvbnMuaGVpZ2h0ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChoZWlnaHQgPiB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEZsYXRMaXN0W3RoaXMudGlsZXNldC5pZF0pIHtcclxuICAgICAgICAgICAgRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXS5wdXNoKHsgLi4udGhpcy5vcHRpb25zIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdID0gW3sgLi4udGhpcy5vcHRpb25zIH1dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNlbnRlciA9IHRpbGVzZXQuYm91bmRpbmdTcGhlcmUuY2VudGVyLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5jZW50ZXI4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5jZW50ZXIsIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLm1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHRoaXMuY2VudGVyLmNsb25lKCkpO1xyXG4gICAgICAgIHRoaXMubG9jYWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5pbnZlcnNlKHRoaXMubWF0cml4LCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSk7XHJcbiAgICAgICAgLy8gdGhpcy5lbnRpdHkgPSB7XHJcbiAgICAgICAgLy8gICAgIGlkOiB0aGlzLm9wdGlvbnMuaWRcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5hZGRGbGF0KClcclxuICAgICAgICAvLyBGbGF0LmNyZWF0ZVBvbHlnb24odGhpcylcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvdygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2hvdyh2KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdW2ldLmlkID09IHRoaXMub3B0aW9ucy5pZCkge1xyXG4gICAgICAgICAgICAgICAgRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXVtpXS5zaG93ID0gdlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkRmxhdCgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgfVxyXG5cclxuICAgIHNldCBoZWlnaHQodikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBOdW1iZXIodilcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEZsYXRMaXN0W3RoaXMudGlsZXNldC5pZF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKEZsYXRMaXN0W3RoaXMudGlsZXNldC5pZF1baV0uaWQgPT0gdGhpcy5vcHRpb25zLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdW2ldLmhlaWdodCA9IE51bWJlcih2KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkRmxhdCgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5uYW1lXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IG5hbWUodikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXVtpXS5pZCA9PSB0aGlzLm9wdGlvbnMuaWQpIHtcclxuICAgICAgICAgICAgICAgIEZsYXRMaXN0W3RoaXMudGlsZXNldC5pZF1baV0ubmFtZSA9IHZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRGbGF0KCkge1xyXG4gICAgICAgIGxldCBsb2NhbFBvc2l0aW9uc0FyciA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXVtpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uc2hvdykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gaXRlbS5wb3NpdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbS5oZWlnaHRcclxuICAgICAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdW2ldLmZsYXRIZWlnaHQgPSBoZWlnaHQgLSB0aGlzLmNlbnRlcjg0LmFsdFxyXG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsQ29vciA9IHRoaXMuY2FydGVzaWFuc1RvTG9jYWwoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KSk7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFBvc2l0aW9uc0Fyci5wdXNoKGxvY2FsQ29vcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZ1bnN0ciA9IHRoaXMuZ2V0SXNpblBvbHlnb25GdW4obG9jYWxQb3NpdGlvbnNBcnIpO1xyXG4gICAgICAgIGxldCBzdHIgPSBgYDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsUG9zaXRpb25zQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvb3JzID0gbG9jYWxQb3NpdGlvbnNBcnJbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG4gPSBjb29ycy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBpbnN0ciA9IGBgO1xyXG4gICAgICAgICAgICBjb29ycy5mb3JFYWNoKChjb29yZGluYXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaW5zdHIgKz0gYHBvaW50c18ke259WyR7aW5kZXh9XSA9IHZlYzIoJHtjb29yZGluYXRlWzBdfSwgJHtjb29yZGluYXRlWzFdfSk7XFxuYDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgc3RyICs9IGBcclxuICAgICAgICAgICAgICAke2luc3RyfVxyXG4gICAgICAgICAgICAgIGlmKGlzUG9pbnRJblBvbHlnb25fJHtufShwb3NpdGlvbjJEKSl7XHJcbiAgICAgICAgICAgICAgICAgIHZlYzQgdGlsZXNldF9sb2NhbF9wb3NpdGlvbl90cmFuc2Zvcm1lZCA9IHZlYzQodGlsZXNldF9sb2NhbF9wb3NpdGlvbi54LCB0aWxlc2V0X2xvY2FsX3Bvc2l0aW9uLnksIGdyb3VuZF96ICsgJHtGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdW2ldLmZsYXRIZWlnaHR9LCAxLjApO1xyXG4gICAgICAgICAgICAgICAgICB2ZWM0IG1vZGVsX2xvY2FsX3Bvc2l0aW9uX3RyYW5zZm9ybWVkID0gY3ptX2ludmVyc2VNb2RlbCAqIHVfdGlsZXNldF9sb2NhbFRvV29ybGRNYXRyaXggKiB0aWxlc2V0X2xvY2FsX3Bvc2l0aW9uX3RyYW5zZm9ybWVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdnNPdXRwdXQucG9zaXRpb25NQy54eSA9IG1vZGVsX2xvY2FsX3Bvc2l0aW9uX3RyYW5zZm9ybWVkLnh5O1xyXG4gICAgICAgICAgICAgICAgICB2c091dHB1dC5wb3NpdGlvbk1DLnogPSBtb2RlbF9sb2NhbF9wb3NpdGlvbl90cmFuc2Zvcm1lZC56KyBtb2RlbE1DLnoqMC4wMDI7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9YDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNoYWRlcihmdW5zdHIsIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3RhdGljIGNyZWF0ZVBvbHlnb24odGhhdCkge1xyXG4gICAgLy8gICAgIGxldCBjb2xvciA9ICcjZmZmZmZmJ1xyXG4gICAgLy8gICAgIGxldCBsaW5lY29sb3IgPSAnIzAwMDAwMCdcclxuICAgIC8vICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgLy8gICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgdGhhdC5vcHRpb25zLmhlaWdodClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhhdC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgLy8gICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAvLyAgICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgLy8gICAgICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgLy8gICAgICAgICBwb2x5bGluZToge1xyXG4gICAgLy8gICAgICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhhdC5wb3NpdGlvbnMsIHRoYXQucG9zaXRpb25zWzBdLCB0aGF0LnBvc2l0aW9uc1sxXV0sXHJcbiAgICAvLyAgICAgICAgICAgICB3aWR0aDogMixcclxuICAgIC8vICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGxpbmVjb2xvciksXHJcbiAgICAvLyAgICAgICAgICAgICBkZXB0aEZhaWxNYXRlcmlhbDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLllFTExPV1xyXG4gICAgLy8gICAgICAgICAgICAgfSksXHJcbiAgICAvLyAgICAgICAgICAgICBjbGFtcFRvR3JvdW5kOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmVtb3ZlKCkge1xyXG4gICAgICAgIEZsYXRMaXN0W3RoaXMudGlsZXNldC5pZF0gPSBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdLmZpbHRlcigoYXR0cikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXR0ci5pZCAhPSB0aGlzLm9wdGlvbnMuaWQ7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgbGV0IGxvY2FsUG9zaXRpb25zQXJyID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gRmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXVtpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uc2hvdykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gaXRlbS5wb3NpdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbS5oZWlnaHRcclxuICAgICAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdW2ldLmZsYXRIZWlnaHQgPSBoZWlnaHQgLSB0aGlzLmNlbnRlcjg0LmFsdFxyXG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsQ29vciA9IHRoaXMuY2FydGVzaWFuc1RvTG9jYWwoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KSk7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFBvc2l0aW9uc0Fyci5wdXNoKGxvY2FsQ29vcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZ1bnN0ciA9IHRoaXMuZ2V0SXNpblBvbHlnb25GdW4obG9jYWxQb3NpdGlvbnNBcnIpO1xyXG4gICAgICAgIGxldCBzdHIgPSBgYDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsUG9zaXRpb25zQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvb3JzID0gbG9jYWxQb3NpdGlvbnNBcnJbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG4gPSBjb29ycy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBpbnN0ciA9IGBgO1xyXG4gICAgICAgICAgICBjb29ycy5mb3JFYWNoKChjb29yZGluYXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaW5zdHIgKz0gYHBvaW50c18ke259WyR7aW5kZXh9XSA9IHZlYzIoJHtjb29yZGluYXRlWzBdfSwgJHtjb29yZGluYXRlWzFdfSk7XFxuYDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgc3RyICs9IGBcclxuICAgICAgICAgICAgICAke2luc3RyfVxyXG4gICAgICAgICAgICAgIGlmKGlzUG9pbnRJblBvbHlnb25fJHtufShwb3NpdGlvbjJEKSl7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHRpbGVzZXRfbG9jYWxfcG9zaXRpb25fdHJhbnNmb3JtZWQgPSB2ZWM0KHRpbGVzZXRfbG9jYWxfcG9zaXRpb24ueCwgdGlsZXNldF9sb2NhbF9wb3NpdGlvbi55LCBncm91bmRfeiArICR7RmxhdExpc3RbdGhpcy50aWxlc2V0LmlkXVtpXS5mbGF0SGVpZ2h0fSwgMS4wKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgbW9kZWxfbG9jYWxfcG9zaXRpb25fdHJhbnNmb3JtZWQgPSBjem1faW52ZXJzZU1vZGVsICogdV90aWxlc2V0X2xvY2FsVG9Xb3JsZE1hdHJpeCAqIHRpbGVzZXRfbG9jYWxfcG9zaXRpb25fdHJhbnNmb3JtZWQ7XHJcbiAgICAgICAgICAgICAgICB2c091dHB1dC5wb3NpdGlvbk1DLnh5ID0gbW9kZWxfbG9jYWxfcG9zaXRpb25fdHJhbnNmb3JtZWQueHk7XHJcbiAgICAgICAgICAgICAgICB2c091dHB1dC5wb3NpdGlvbk1DLnogPSBtb2RlbF9sb2NhbF9wb3NpdGlvbl90cmFuc2Zvcm1lZC56KyBtb2RlbE1DLnoqMC4wMDI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfWA7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNoYWRlcihmdW5zdHIsIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5qC55o2u5pWw57uE6ZW/5bqm77yM5p6E5bu6IOWIpOaWreeCueaYr+WQpuWcqOmdouWGhSDnmoTljovlubPlh73mlbBcclxuICAgIGdldElzaW5Qb2x5Z29uRnVuKHBvbHlnb25zKSB7XHJcbiAgICAgICAgbGV0IHBtYXAgPSBwb2x5Z29ucy5tYXAoKHBvbHlnb24pID0+IHBvbHlnb24ubGVuZ3RoKTtcclxuICAgICAgICBsZXQgdW5pcXVlQXJyYXkgPSB0aGlzLmdldFVuaXF1ZUFycmF5KHBtYXApO1xyXG4gICAgICAgIGxldCBzdHIgPSBgYDtcclxuICAgICAgICB1bmlxdWVBcnJheS5mb3JFYWNoKGxlbmd0aCA9PiB7XHJcbiAgICAgICAgICAgIHN0ciArPSBgXHJcbiAgICAgICAgICAgICAgdmVjMiBwb2ludHNfJHtsZW5ndGh9WyR7bGVuZ3RofV07XHJcbiAgICAgICAgICAgICAgYm9vbCBpc1BvaW50SW5Qb2x5Z29uXyR7bGVuZ3RofSh2ZWMyIHBvaW50KXtcclxuICAgICAgICAgICAgICBpbnQgbkNyb3NzID0gMDsgLy8g5Lqk54K55pWwXHJcbiAgICAgICAgICAgICAgY29uc3QgaW50IG4gPSAke2xlbmd0aH07IFxyXG4gICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgICB2ZWMyIHAxID0gcG9pbnRzXyR7bGVuZ3RofVtpXTtcclxuICAgICAgICAgICAgICAgICAgdmVjMiBwMiA9IHBvaW50c18ke2xlbmd0aH1baW50KG1vZChmbG9hdChpKzEpLGZsb2F0KG4pKSldO1xyXG4gICAgICAgICAgICAgICAgICBpZihwMVsxXSA9PSBwMlsxXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZihwb2ludFsxXSA8IG1pbihwMVsxXSwgcDJbMV0pKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHBvaW50WzFdID49IG1heChwMVsxXSwgcDJbMV0pKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZsb2F0IHggPSBwMVswXSArICgocG9pbnRbMV0gLSBwMVsxXSkgKiAocDJbMF0gLSBwMVswXSkpIC8gKHAyWzFdIC0gcDFbMV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZih4ID4gcG9pbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgbkNyb3NzKys7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGludChtb2QoZmxvYXQobkNyb3NzKSwgZmxvYXQoMikpKSA9PSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIGBcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBzdHJcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTaGFkZXIodnR4MSwgdnR4Mikge1xyXG4gICAgICAgIGxldCBmbGF0Q3VzdG9tU2hhZGVyID0gbmV3IENlc2l1bS5DdXN0b21TaGFkZXIoe1xyXG4gICAgICAgICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgICAgICAgICAgdV90aWxlc2V0X2xvY2FsVG9Xb3JsZE1hdHJpeDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IENlc2l1bS5Vbmlmb3JtVHlwZS5NQVQ0LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLm1hdHJpeCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB1X3RpbGVzZXRfd29ybGRUb0xvY2FsTWF0cml4OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQ2VzaXVtLlVuaWZvcm1UeXBlLk1BVDQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMubG9jYWxNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdV9mbGF0SGVpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQ2VzaXVtLlVuaWZvcm1UeXBlLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZsYXRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJUZXh0OiBgXHJcbiAgICAgICAgICAvLyDmiYDmnIlpc1BvaW50SW5Qb2x5Z29u5Ye95pWwXHJcbiAgICAgICAgICAke3Z0eDF9XHJcbiAgICAgICAgICB2b2lkIHZlcnRleE1haW4oVmVydGV4SW5wdXQgdnNJbnB1dCwgaW5vdXQgY3ptX21vZGVsVmVydGV4T3V0cHV0IHZzT3V0cHV0KXtcclxuICAgICAgICAgICAgICB2ZWMzIG1vZGVsTUMgPSB2c0lucHV0LmF0dHJpYnV0ZXMucG9zaXRpb25NQztcclxuICAgICAgICAgICAgICB2ZWM0IG1vZGVsX2xvY2FsX3Bvc2l0aW9uID0gdmVjNChtb2RlbE1DLngsIG1vZGVsTUMueSwgbW9kZWxNQy56LCAxLjApO1xyXG4gICAgICAgICAgICAgIHZlYzQgdGlsZXNldF9sb2NhbF9wb3NpdGlvbiA9IHVfdGlsZXNldF93b3JsZFRvTG9jYWxNYXRyaXggKiBjem1fbW9kZWwgKiBtb2RlbF9sb2NhbF9wb3NpdGlvbjtcclxuICAgICAgICAgICAgICB2ZWMyIHBvc2l0aW9uMkQgPSB2ZWMyKHRpbGVzZXRfbG9jYWxfcG9zaXRpb24ueCx0aWxlc2V0X2xvY2FsX3Bvc2l0aW9uLnkpO1xyXG4gICAgICAgICAgICAgIGZsb2F0IGdyb3VuZF96ID0gMC4wO1xyXG4gICAgICAgICAgICAgIC8vIOWkmuS4quWkmui+ueW9ouWMuuWfn1xyXG4gICAgICAgICAgICAgICR7dnR4Mn1cclxuICAgICAgICAgIH1gLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGlsZXNldC5jdXN0b21TaGFkZXIgPSBmbGF0Q3VzdG9tU2hhZGVyO1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5yZXF1ZXN0UmVuZGVyKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIOaVsOe7hOWOu+mHje+8jOS4jeiDveWkhOeQhuW1jOWll+eahOaVsOe7hFxyXG4gICAgZ2V0VW5pcXVlQXJyYXkgPSAoYXJyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4LCBhcnIpIHtcclxuICAgICAgICAgICAgLy/lvZPliY3lhYPntKDvvIzlnKjljp/lp4vmlbDnu4TkuK3nmoTnrKzkuIDkuKrntKLlvJU9PeW9k+WJjee0ouW8leWAvO+8jOWQpuWImei/lOWbnuW9k+WJjeWFg+e0oFxyXG4gICAgICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSwgMCkgPT09IGluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyDkuJbnlYzlnZDmoIfovazmlbDnu4TlsYDpg6jlnZDmoIdcclxuICAgIGNhcnRlc2lhbnNUb0xvY2FsKHBvc2l0aW9ucykge1xyXG4gICAgICAgIGxldCBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb24gPSBwb3NpdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGxldCBsb2NhbHAgPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5UG9pbnQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWF0cml4LFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24uY2xvbmUoKSxcclxuICAgICAgICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgYXJyLnB1c2goW2xvY2FscC54LCBsb2NhbHAueV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIOmjnuWIsFxyXG4gICovXHJcbiAgICBhc3luYyBmbHlUbygpIHtcclxuICAgICAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgICAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHx8IC02MC4wKSxcclxuICAgICAgICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmxpbmUgJiYgdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ubG5nID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICAgICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25BcnJheSA9IFtdXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsIHRoaXMuY2VudGVyODQuYWx0KVxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfljovlubPpnaLlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gICAgICAgICAgICAvLyDlhoXlrrnpg6jliIZcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJ3aWR0aDogNTZweDtmbGV4OiAwIDAgNTZweDtcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwid2lkdGg6IDU2cHg7ZmxleDogMCAwIDU2cHg7XCI+5Y6L5bmz6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgZmxhdC1oZWlnaHRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBgXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgICAgICAgbGV0IG5hbWVfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1uYW1lJylbMF1cclxuICAgICAgICAgICAgbmFtZV9lbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMubmFtZVxyXG4gICAgICAgICAgICBuYW1lX2VsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWVfZWxtLnZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0X2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmxhdC1oZWlnaHQnKVswXVxyXG4gICAgICAgICAgICBoZWlnaHRfZWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICAgICAgICBoZWlnaHRfZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBOdW1iZXIoaGVpZ2h0X2VsbS52YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmxhdCgpXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZmlybUVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICBjb25maXJtRWxtLmNsYXNzTmFtZSA9ICdidG4nXHJcbiAgICAgICAgICAgIGNvbmZpcm1FbG0uaW5uZXJIVE1MID0gJ+ehruiupCdcclxuICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmZvb3RBcHBDaGlsZChjb25maXJtRWxtKVxyXG4gICAgICAgICAgICBjb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gJ+WOi+W5s+mdoidcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAvLyBsZXQgZmxhdEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICAvLyBmbGF0RWxtLmNsYXNzTmFtZSA9ICdidG4nXHJcbiAgICAgICAgICAgIC8vIGZsYXRFbG0uaW5uZXJIVE1MID0gJzxzdmcgY2xhc3M9XCJpY29uLWVkaXRcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1lZGl0XCI+PC91c2U+PC9zdmc+5LqM5qyh57yW6L6RJ1xyXG4gICAgICAgICAgICAvLyBmbGF0RWxtLnN0eWxlLndpZHRoID0gJ2F1dG8nXHJcbiAgICAgICAgICAgIC8vIGZsYXRFbG0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICAgICAgICAgIC8vIGZsYXRFbG0uc3R5bGUubGVmdCA9ICcxMHB4J1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGZsYXRFbG0pXHJcbiAgICAgICAgICAgIC8vIGZsYXRFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZygn5LqM5qyh57yW6L6RJylcclxuICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWVcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICAgICAgICB0aGlzLmFkZEZsYXQoKVxyXG4gICAgfVxyXG5cclxuICAgIGZsYXRFZGl0KHN0YXRlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBGbGF0TGlzdFt0aGlzLnRpbGVzZXQuaWRdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoYXQucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmxpY2tlcigpIHsgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmxhdDsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQW9RQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFsQkE7QUFBQTtBQUFBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBakJBO0FBQUE7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBeEVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBVEE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFqRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Flat/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Profile/_element.js": /*!**********************************************!*\ !*** ./src/Obj/Analysis/Profile/_element.js ***! \**********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1Byb2ZpbGUvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1Byb2ZpbGUvX2VsZW1lbnQuanM/NWJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1lY2hhcnRzXCI+PC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Profile/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Profile/index.js": /*!*******************************************!*\ !*** ./src/Obj/Analysis/Profile/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Draw_draw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Draw/draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/Profile/_element.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\nvar Profile = /*#__PURE__*/function (_Draw) {\n /**\n * @constructor 剖面分析\n * @param sdk\n **/\n function Profile(sdk) {\n var _this;\n var _Dialog = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Profile);\n window.addEventListener(\"resize\", function () {\n _this.echartsObject && _this.echartsObject.resize();\n });\n _this = _callSuper(this, Profile, [sdk]);\n _this.viewer = sdk.viewer;\n _this.Dialog = _Dialog;\n YJ.Analysis.AnalysesResults.push(_this);\n Profile.create(_this);\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Profile, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Profile, [{\n key: \"reDraw\",\n value: function reDraw() {\n Profile.create(this);\n }\n }, {\n key: \"onEnd\",\n get: function get() {\n return this.clickCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n this.clickCallBack = val;\n }\n }\n\n /**\n * 线段插值点\n */\n }, {\n key: \"formatter\",\n value: function formatter(xy, tipData) {\n var pointOption = {\n show: true,\n pixelSize: 10,\n color: Cesium.Color.GREEN,\n outlineColor: Cesium.Color.SKYBLUE,\n outlineWidth: 3,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n };\n if (!this.tipEntity) {\n this.tipEntity = this.sdk.viewer.entities.add({\n position: Cesium.Cartesian3.fromDegrees(xy[0], xy[1], Number(tipData[1])),\n point: pointOption\n });\n } else {\n this.tipEntity.position = Cesium.Cartesian3.fromDegrees(xy[0], xy[1], Number(tipData[1]));\n }\n }\n }, {\n key: \"clean\",\n value: function clean() {\n this.end();\n this._currentId = null;\n this.entityHasCreated = false;\n this.polyline && this.viewer.entities.remove(this.polyline);\n this.tipEntity && this.viewer.entities.remove(this.tipEntity);\n this.polyline = null;\n this.tipEntity = null;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.clean();\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var _this2 = this;\n this._currentId = Cesium.createGuid();\n var id = this._currentId;\n that.clean();\n if (YJ.Measure.GetMeasureStatus()) {\n console.warn('上一次测量未结束');\n } else {\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('左键确定,右键取消', that.sdk);\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](that.sdk);\n that.positions = [];\n that.points_ids = []; //存放左键点击时临时添加的point的id\n\n var cache_positions = [];\n var car = undefined;\n that.event.mouse_left(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(movement, cartesian) {\n var positions;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n try {\n if (!that.entityHasCreated) {\n Profile.create_polyline(that);\n }\n cache_positions.push(cartesian);\n that.points_ids.push(that.create_point(cartesian));\n if (cache_positions.length == 2) {\n that.end();\n positions = [];\n cache_positions.forEach(function (item) {\n positions.push(that.cartesian3Towgs84(item, that.viewer));\n });\n Profile.interPoints(that).then(function (points) {\n if (_this2._currentId && _this2._currentId === id) {\n that.clickCallBack(points);\n }\n });\n }\n } catch (error) {\n console.log(error);\n }\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n that.event.mouse_right(function (movement, cartesian) {\n var positions = [];\n cache_positions = [];\n that.clean();\n });\n that.event.mouse_move(function (movement, cartesian) {\n that.positions = cache_positions.concat(cartesian);\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n var positions = [];\n cache_positions = [];\n that.end();\n }\n });\n });\n }\n }\n }, {\n key: \"create_polyline\",\n value: function create_polyline(that) {\n that.entityHasCreated = true;\n var id = that.randomString();\n that.polyline = that.viewer.entities.add(new Cesium.Entity({\n id: id,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.positions;\n }, false),\n width: 5,\n material: Cesium.Color.fromCssColorString(that.color),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n return id;\n }\n }, {\n key: \"interPoints\",\n value: (function () {\n var _interPoints = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee2(that) {\n var viewer, positions, positionsCartographic, positions84, index, element, cartographic, pos84, positions_Inter, height, i, line, totalDistance, m_Cartographic0, m_Cartographic1, a, b, length, distance, j, start, stop, sliced, lng, lat, _height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n viewer = that.viewer;\n positions = that.positions;\n positionsCartographic = [];\n positions84 = [];\n for (index = 0; index < positions.length; index++) {\n element = positions[index];\n cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(element);\n positionsCartographic.push(cartographic);\n pos84 = that.cartesian3Towgs84(element, viewer);\n positions84.push(pos84);\n }\n positions_Inter = [];\n _context2.next = 8;\n return that.getClampToHeight({\n lng: positions84[0].lng,\n lat: positions84[0].lat\n });\n case 8:\n height = _context2.sent;\n positions_Inter.push({\n position: {\n lng: positions84[0].lng,\n lat: positions84[0].lat,\n height: height\n },\n distance: 0\n });\n i = 0;\n case 11:\n if (!(i < positionsCartographic.length - 1)) {\n _context2.next = 42;\n break;\n }\n line = turf.lineString([[positions84[i].lng, positions84[i].lat], [positions84[i + 1].lng, positions84[i + 1].lat]]);\n totalDistance = turf.length(line, {\n units: 'kilometers'\n });\n m_Cartographic0 = positionsCartographic[i];\n m_Cartographic1 = positionsCartographic[i + 1];\n a = Math.abs(m_Cartographic0.longitude - m_Cartographic1.longitude) * 10000000;\n b = Math.abs(m_Cartographic0.latitude - m_Cartographic1.latitude) * 10000000; //等距采样\n if (a > b) b = a;\n length = parseInt(b / 2);\n if (length > 150) length = 150;\n if (length < 2) length = 2;\n distance = totalDistance / (length - 1);\n j = 0;\n case 24:\n if (!(j < length - 1)) {\n _context2.next = 39;\n break;\n }\n start = j * distance;\n stop = (j + 1) * distance;\n _context2.next = 29;\n return turf.lineSliceAlong(line, start, stop, {\n units: 'kilometers'\n });\n case 29:\n sliced = _context2.sent;\n lng = sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1][0];\n lat = sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1][1];\n _context2.next = 34;\n return that.getClampToHeight({\n lng: lng,\n lat: lat\n });\n case 34:\n _height = _context2.sent;\n positions_Inter.push({\n position: {\n lng: lng,\n lat: lat,\n height: _height\n },\n distance: stop * 1000\n });\n case 36:\n j++;\n _context2.next = 24;\n break;\n case 39:\n i++;\n _context2.next = 11;\n break;\n case 42:\n return _context2.abrupt(\"return\", positions_Inter);\n case 43:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function interPoints(_x3) {\n return _interPoints.apply(this, arguments);\n }\n return interPoints;\n }())\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee3(that, points) {\n var contentElm, resetBtn;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context3.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"](that.sdk.viewer._container, {\n title: '剖面分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n that.clean();\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n }\n });\n case 3:\n that._DialogObject = _context3.sent;\n _context3.next = 6;\n return that._DialogObject.init();\n case 6:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' profile';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n resetBtn = document.createElement('button');\n resetBtn.innerHTML = '重新绘制';\n resetBtn.style.width = 'auto';\n resetBtn.addEventListener('click', function () {\n Profile.create(that);\n Profile.initEcharts(that);\n });\n that._DialogObject.footAppChild(resetBtn);\n Profile.initEcharts(that, points);\n case 16:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function edit(_x4, _x5) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"initEcharts\",\n value: function initEcharts(that, points) {\n var datas = [],\n coords = [];\n var pointsData = points;\n var option;\n if (pointsData) {\n var maxDistance = pointsData[pointsData.length - 1].distance;\n var xAixMax = Math.ceil(maxDistance);\n for (var index = 0; index < pointsData.length; index++) {\n var element = pointsData[index];\n if (element.position.height === void 0) {\n continue;\n }\n var curData = [element.distance.toFixed(2), element.position.height.toFixed(2)];\n datas.push(curData);\n var curCoords = [element.position.lng, element.position.lat];\n coords.push(curCoords);\n }\n var pointOption = {\n show: true,\n pixelSize: 10,\n color: Cesium.Color.GREEN,\n outlineColor: Cesium.Color.SKYBLUE,\n outlineWidth: 3,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n };\n var ele = document.getElementsByClassName(\"profile-echarts\")[0];\n that.echartsObject = echarts.init(ele);\n option = {\n tooltip: {\n trigger: \"axis\",\n textStyle: {\n align: \"left\"\n },\n formatter: function formatter(params) {\n var xy = coords[params[0].dataIndex];\n var tipData = params[0][\"data\"];\n if (!that.tipEntity) {\n that.tipEntity = that.sdk.viewer.entities.add({\n position: Cesium.Cartesian3.fromDegrees(xy[0], xy[1], Number(tipData[1])),\n point: pointOption\n });\n } else {\n that.tipEntity.position = Cesium.Cartesian3.fromDegrees(xy[0], xy[1], Number(tipData[1]));\n }\n return \"距离:\" + tipData[0] + \"m
\" + \"高度:\" + tipData[1] + \"m
\" + \"坐标:\" + xy[0].toFixed(5) + \",\" + xy[1].toFixed(5);\n }\n },\n grid: {\n top: 40,\n bottom: 20,\n left: 55,\n right: 30\n },\n calculable: true,\n xAxis: [{\n type: \"value\",\n max: xAixMax,\n scale: true,\n axisLabel: {\n color: '#ffffff'\n },\n axisLine: {\n lineStyle: {\n color: \"#ffffff\"\n }\n }\n }],\n yAxis: [{\n type: \"value\",\n scale: true,\n axisLabel: {\n color: '#ffffff'\n },\n axisLine: {\n lineStyle: {\n color: \"#ffffff\"\n }\n }\n }],\n series: [{\n name: \"ProfileLine\",\n type: \"line\",\n data: datas,\n smooth: true,\n itemStyle: {\n normal: {\n color: \"#39FDA1\"\n }\n },\n lineStyle: {\n normal: {\n width: 3,\n color: {\n type: \"linear\",\n x: 0,\n y: 0,\n x2: 1,\n y2: 0,\n colorStops: [{\n offset: 0,\n color: \"rgba(85,254,139,1)\" // 0% 处的颜色\n }, {\n offset: 0.5,\n color: \"rgba(7,252,202,1)\" // 100% 处的颜色\n }, {\n offset: 1,\n color: \"rgba(14,245,210,1)\" // 100% 处的颜色\n }],\n globalCoord: false // 缺省为 false\n }\n }\n },\n areaStyle: {\n normal: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{\n offset: 0,\n color: \"rgba(102,153,255,1)\"\n }, {\n offset: 0.8,\n color: \"rgba(102,153,255,0.08)\"\n }, {\n offset: 1,\n color: \"rgba(9,173,208,0.15)\"\n }], false),\n shadowColor: \"rgba(14,245,210,1)\",\n //阴影颜色\n shadowBlur: 20\n }\n },\n markPoint: {\n data: [{\n type: \"max\",\n name: \"最高点\",\n label: {\n color: '#ffffff'\n }\n }, {\n type: \"min\",\n name: \"最低点\",\n label: {\n color: '#ffffff'\n }\n }]\n }\n }]\n };\n } else {\n var _ele = document.getElementsByClassName(\"profile-echarts\")[0];\n that.echartsObject = echarts.init(_ele);\n option = {\n tooltip: {\n trigger: \"axis\",\n textStyle: {\n align: \"left\"\n }\n },\n grid: {\n top: 40,\n bottom: 20,\n left: 55,\n right: 30\n },\n calculable: true,\n xAxis: [{\n type: \"value\",\n scale: true,\n axisLabel: {\n color: '#ffffff'\n },\n axisLine: {\n lineStyle: {\n color: \"#ffffff\"\n }\n }\n }],\n yAxis: [{\n type: \"value\",\n scale: true,\n axisLabel: {\n color: '#ffffff'\n },\n axisLine: {\n lineStyle: {\n color: \"#ffffff\"\n }\n }\n }],\n series: [{\n name: \"ProfileLine\",\n type: \"line\",\n data: [],\n smooth: true,\n itemStyle: {\n normal: {\n color: \"#39FDA1\"\n }\n },\n lineStyle: {\n normal: {\n width: 3,\n color: {\n type: \"linear\",\n x: 0,\n y: 0,\n x2: 1,\n y2: 0,\n colorStops: [{\n offset: 0,\n color: \"rgba(85,254,139,1)\" // 0% 处的颜色\n }, {\n offset: 0.5,\n color: \"rgba(7,252,202,1)\" // 100% 处的颜色\n }, {\n offset: 1,\n color: \"rgba(14,245,210,1)\" // 100% 处的颜色\n }],\n globalCoord: false // 缺省为 false\n }\n }\n },\n areaStyle: {\n normal: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{\n offset: 0,\n color: \"rgba(102,153,255,1)\"\n }, {\n offset: 0.8,\n color: \"rgba(102,153,255,0.08)\"\n }, {\n offset: 1,\n color: \"rgba(9,173,208,0.15)\"\n }], false),\n shadowColor: \"rgba(14,245,210,1)\",\n //阴影颜色\n shadowBlur: 20\n }\n },\n markPoint: {\n data: [{\n type: \"max\",\n name: \"最高点\",\n label: {\n color: '#ffffff'\n }\n }, {\n type: \"min\",\n name: \"最低点\",\n label: {\n color: '#ffffff'\n }\n }]\n }\n }]\n };\n }\n that.echartsObject.setOption(option);\n }\n }]);\n}(_Draw_draw__WEBPACK_IMPORTED_MODULE_7__[\"default\"]); // const Profile = function (viewer, callback) {\n// if (!viewer) throw new Error(\"no viewer object!\");\n// if (window.profileEntities && window.profileEntities.length > 0) {\n// window.profileEntities.forEach((element) => {\n// window.viewer.entities.remove(element);\n// });\n// }\n// window.profileEntities = [];\n// CreatePolyline(\n// viewer,\n// window.profileEntities,\n// { color: Cesium.Color.RED, width: 2 },\n// function (e) {\n// e.polyline.clampToGround = true;\n// console.log(e.pottingPoint);\n// let points = interPoints(viewer, e.pottingPoint, [e]);\n// console.log(points);\n// if (typeof callback == \"function\") callback(points);\n// }\n// );\n// };\n// /**\n// * 线段插值点\n// * @param {*} viewer\n// * @param {*} positions 线段节点集合\n// * @param {*} objectsToExclude 高度采集时排除的对象集合\n// * @returns 经纬度点集合,包含距离值\n// */\n// function interPoints(viewer, positions, objectsToExclude) {\n// let positionsCartographic = [];\n// let terrainSamplePositions = [];\n// for (let index = 0; index < positions.length; index++) {\n// const element = positions[index];\n// let ellipsoid = viewer.scene.globe.ellipsoid;\n// let cartographic = ellipsoid.cartesianToCartographic(element);\n// positionsCartographic.push(cartographic);\n// }\n// for (let i = 0; i < positionsCartographic.length; i++) {\n// const m_Cartographic0 = positionsCartographic[i];\n// const m_Cartographic1 = positionsCartographic[i + 1];\n// if (m_Cartographic1) {\n// let a =\n// Math.abs(m_Cartographic0.longitude - m_Cartographic1.longitude) *\n// 10000000;\n// let b =\n// Math.abs(m_Cartographic0.latitude - m_Cartographic1.latitude) *\n// 10000000;\n// //等距采样\n// if (a > b) b = a;\n// let length = parseInt(b / 2);\n// if (length > 1000) length = 1000;\n// if (length < 2) length = 2;\n// for (let j = 0; j < length; j++) {\n// terrainSamplePositions.push(\n// new Cesium.Cartographic(\n// Cesium.Math.lerp(\n// m_Cartographic0.longitude,\n// m_Cartographic1.longitude,\n// j / (length - 1)\n// ),\n// Cesium.Math.lerp(\n// m_Cartographic0.latitude,\n// m_Cartographic1.latitude,\n// j / (length - 1)\n// )\n// )\n// );\n// }\n// terrainSamplePositions.pop();\n// } else {\n// terrainSamplePositions.push(m_Cartographic0);\n// }\n// }\n// let positions_Inter = [];\n// let distance = 0;\n// for (let n = 0; n < terrainSamplePositions.length; n++) {\n// //地理坐标(弧度)转经纬度坐标\n// let curCartographic = terrainSamplePositions[n];\n// let height = viewer.scene.sampleHeight(curCartographic, objectsToExclude);\n// const lon = (curCartographic.longitude / Math.PI) * 180;\n// const lat = (curCartographic.latitude / Math.PI) * 180;\n// let point = Cesium.Cartesian3.fromDegrees(lon, lat, height);\n// let preCartographic = terrainSamplePositions[n - 1];\n// if (preCartographic) {\n// const lon1 = (preCartographic.longitude / Math.PI) * 180;\n// const lat1 = (preCartographic.latitude / Math.PI) * 180;\n// let point1 = Cesium.Cartesian3.fromDegrees(lon1, lat1, height);\n// let curDis = Cesium.Cartesian3.distance(point1, point);\n// distance += curDis;\n// }\n// positions_Inter.push({\n// position: { lon: lon, lat: lat, height: height },\n// distance: distance,\n// });\n// }\n// return positions_Inter;\n// }\n/* harmony default export */ __webpack_exports__[\"default\"] = (Profile);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1Byb2ZpbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1Byb2ZpbGUvaW5kZXguanM/NDhhMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRHJhdyBmcm9tIFwiLi4vLi4vLi4vRHJhdy9kcmF3XCI7XG5pbXBvcnQgTW91c2VFdmVudCBmcm9tIFwiLi4vLi4vLi4vRXZlbnRcIjtcbmltcG9ydCBNb3VzZVRpcCBmcm9tIFwiLi4vLi4vLi4vTW91c2VUaXBcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vQmFzZURpYWxvZyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBEcmF3IHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciDliZbpnaLliIbmnpBcbiAgICogQHBhcmFtIHNka1xuICAqKi9cbiAgY29uc3RydWN0b3Ioc2RrLCBfRGlhbG9nID0ge30pIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmVjaGFydHNPYmplY3QgJiYgdGhpcy5lY2hhcnRzT2JqZWN0LnJlc2l6ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyKHNkaylcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXI7XG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXG4gICAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLnB1c2godGhpcylcbiAgICBQcm9maWxlLmNyZWF0ZSh0aGlzKVxuICB9XG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xuICAgIHRoaXMuX2N1cnJlbnRJZCA9IENlc2l1bS5jcmVhdGVHdWlkKClcbiAgICBsZXQgaWQgPSB0aGlzLl9jdXJyZW50SWRcbiAgICB0aGF0LmNsZWFuKClcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcbiAgICAgIGNvbnNvbGUud2Fybign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcbiAgICB9IGVsc2Uge1xuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu5a6a77yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXG4gICAgICB0aGF0LmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXG4gICAgICB0aGF0LnBvc2l0aW9ucyA9IFtdXG4gICAgICB0aGF0LnBvaW50c19pZHMgPSBbXSAvL+WtmOaUvuW3pumUrueCueWHu+aXtuS4tOaXtua3u+WKoOeahHBvaW5055qEaWRcblxuICAgICAgbGV0IGNhY2hlX3Bvc2l0aW9ucyA9IFtdXG4gICAgICBsZXQgY2FyID0gdW5kZWZpbmVkXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoYXN5bmMgKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIXRoYXQuZW50aXR5SGFzQ3JlYXRlZCkge1xuICAgICAgICAgICAgUHJvZmlsZS5jcmVhdGVfcG9seWxpbmUodGhhdClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FjaGVfcG9zaXRpb25zLnB1c2goY2FydGVzaWFuKVxuICAgICAgICAgIHRoYXQucG9pbnRzX2lkcy5wdXNoKHRoYXQuY3JlYXRlX3BvaW50KGNhcnRlc2lhbiwpKVxuICAgICAgICAgIGlmIChjYWNoZV9wb3NpdGlvbnMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgIHRoYXQuZW5kKClcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGF0LnZpZXdlcikpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgUHJvZmlsZS5pbnRlclBvaW50cyh0aGF0KS50aGVuKChwb2ludHMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJZCAmJiB0aGlzLl9jdXJyZW50SWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5jbGlja0NhbGxCYWNrKHBvaW50cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgfSlcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXG4gICAgICAgIGNhY2hlX3Bvc2l0aW9ucyA9IFtdXG4gICAgICAgIHRoYXQuY2xlYW4oKVxuICAgICAgfSlcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xuICAgICAgICB0aGF0LnBvc2l0aW9ucyA9IGNhY2hlX3Bvc2l0aW9ucy5jb25jYXQoY2FydGVzaWFuKVxuICAgICAgICB0aGF0LnRpcC5zZXRQb3NpdGlvbihcbiAgICAgICAgICBjYXJ0ZXNpYW4sXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XG4gICAgICAgIClcbiAgICAgIH0pXG5cbiAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxuICAgICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxuICAgICAgICAgICAgY2FjaGVfcG9zaXRpb25zID0gW11cbiAgICAgICAgICAgIHRoYXQuZW5kKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICByZURyYXcoKSB7XG4gICAgUHJvZmlsZS5jcmVhdGUodGhpcylcbiAgfVxuICBzdGF0aWMgY3JlYXRlX3BvbHlsaW5lKHRoYXQpIHtcbiAgICB0aGF0LmVudGl0eUhhc0NyZWF0ZWQgPSB0cnVlXG4gICAgbGV0IGlkID0gdGhhdC5yYW5kb21TdHJpbmcoKVxuICAgIHRoYXQucG9seWxpbmUgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoXG4gICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcG9seWxpbmU6IHtcbiAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhhdC5wb3NpdGlvbnNcbiAgICAgICAgICB9LCBmYWxzZSksXG4gICAgICAgICAgd2lkdGg6IDUsXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5jb2xvciksXG4gICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICByZXR1cm4gaWRcbiAgfVxuICBnZXQgb25FbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tDYWxsQmFja1xuICB9XG4gIHNldCBvbkVuZCh2YWwpIHtcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3ZhbDonLCB2YWwsICfkuI3mmK/kuIDkuKpmdW5jdGlvbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xpY2tDYWxsQmFjayA9IHZhbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICog57q/5q615o+S5YC854K5XG4gKi9cbiAgc3RhdGljIGFzeW5jIGludGVyUG9pbnRzKHRoYXQpIHtcbiAgICBsZXQgdmlld2VyID0gdGhhdC52aWV3ZXJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5wb3NpdGlvbnNcbiAgICBsZXQgcG9zaXRpb25zQ2FydG9ncmFwaGljID0gW11cbiAgICBsZXQgcG9zaXRpb25zODQgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHBvc2l0aW9uc1tpbmRleF07XG4gICAgICBsZXQgY2FydG9ncmFwaGljID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlbGVtZW50KTtcbiAgICAgIHBvc2l0aW9uc0NhcnRvZ3JhcGhpYy5wdXNoKGNhcnRvZ3JhcGhpYyk7XG4gICAgICBsZXQgcG9zODQgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGVsZW1lbnQsIHZpZXdlcilcbiAgICAgIHBvc2l0aW9uczg0LnB1c2gocG9zODQpO1xuICAgIH1cbiAgICBsZXQgcG9zaXRpb25zX0ludGVyID0gW107XG4gICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogcG9zaXRpb25zODRbMF0ubG5nLCBsYXQ6IHBvc2l0aW9uczg0WzBdLmxhdCB9KTtcbiAgICBwb3NpdGlvbnNfSW50ZXIucHVzaCh7XG4gICAgICBwb3NpdGlvbjogeyBsbmc6IHBvc2l0aW9uczg0WzBdLmxuZywgbGF0OiBwb3NpdGlvbnM4NFswXS5sYXQsIGhlaWdodDogaGVpZ2h0IH0sXG4gICAgICBkaXN0YW5jZTogMCxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uc0NhcnRvZ3JhcGhpYy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGxldCBsaW5lID0gdHVyZi5saW5lU3RyaW5nKFtbcG9zaXRpb25zODRbaV0ubG5nLCBwb3NpdGlvbnM4NFtpXS5sYXRdLCBbcG9zaXRpb25zODRbaSArIDFdLmxuZywgcG9zaXRpb25zODRbaSArIDFdLmxhdF1dKTtcbiAgICAgIGxldCB0b3RhbERpc3RhbmNlID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xuXG4gICAgICBjb25zdCBtX0NhcnRvZ3JhcGhpYzAgPSBwb3NpdGlvbnNDYXJ0b2dyYXBoaWNbaV07XG4gICAgICBjb25zdCBtX0NhcnRvZ3JhcGhpYzEgPSBwb3NpdGlvbnNDYXJ0b2dyYXBoaWNbaSArIDFdO1xuICAgICAgbGV0IGEgPVxuICAgICAgICBNYXRoLmFicyhtX0NhcnRvZ3JhcGhpYzAubG9uZ2l0dWRlIC0gbV9DYXJ0b2dyYXBoaWMxLmxvbmdpdHVkZSkgKlxuICAgICAgICAxMDAwMDAwMDtcbiAgICAgIGxldCBiID1cbiAgICAgICAgTWF0aC5hYnMobV9DYXJ0b2dyYXBoaWMwLmxhdGl0dWRlIC0gbV9DYXJ0b2dyYXBoaWMxLmxhdGl0dWRlKSAqXG4gICAgICAgIDEwMDAwMDAwO1xuICAgICAgLy/nrYnot53ph4fmoLdcbiAgICAgIGlmIChhID4gYikgYiA9IGE7XG4gICAgICBsZXQgbGVuZ3RoID0gcGFyc2VJbnQoYiAvIDIpO1xuICAgICAgaWYgKGxlbmd0aCA+IDE1MCkgbGVuZ3RoID0gMTUwO1xuICAgICAgaWYgKGxlbmd0aCA8IDIpIGxlbmd0aCA9IDI7XG4gICAgICBsZXQgZGlzdGFuY2UgPSB0b3RhbERpc3RhbmNlIC8gKGxlbmd0aCAtIDEpXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICBsZXQgc3RhcnQgPSBqICogZGlzdGFuY2VcbiAgICAgICAgbGV0IHN0b3AgPSAoaiArIDEpICogZGlzdGFuY2VcbiAgICAgICAgbGV0IHNsaWNlZCA9IGF3YWl0IHR1cmYubGluZVNsaWNlQWxvbmcobGluZSwgc3RhcnQsIHN0b3AsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcbiAgICAgICAgbGV0IGxuZyA9IHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1bMF1cbiAgICAgICAgbGV0IGxhdCA9IHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1bMV1cbiAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogbG5nLCBsYXQ6IGxhdCB9KTtcbiAgICAgICAgcG9zaXRpb25zX0ludGVyLnB1c2goe1xuICAgICAgICAgIHBvc2l0aW9uOiB7IGxuZzogbG5nLCBsYXQ6IGxhdCwgaGVpZ2h0OiBoZWlnaHQgfSxcbiAgICAgICAgICBkaXN0YW5jZTogc3RvcCAqIDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zaXRpb25zX0ludGVyXG4gIH1cbiAgZm9ybWF0dGVyKHh5LCB0aXBEYXRhKSB7XG4gICAgY29uc3QgcG9pbnRPcHRpb24gPSB7XG4gICAgICBzaG93OiB0cnVlLFxuICAgICAgcGl4ZWxTaXplOiAxMCxcbiAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuR1JFRU4sXG4gICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5TS1lCTFVFLFxuICAgICAgb3V0bGluZVdpZHRoOiAzLFxuICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRpcEVudGl0eSkge1xuICAgICAgdGhpcy50aXBFbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcbiAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHh5WzBdLCB4eVsxXSwgTnVtYmVyKHRpcERhdGFbMV0pKSxcbiAgICAgICAgcG9pbnQ6IHBvaW50T3B0aW9uXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpcEVudGl0eS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxuICAgICAgICB4eVswXSxcbiAgICAgICAgeHlbMV0sXG4gICAgICAgIE51bWJlcih0aXBEYXRhWzFdKVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBlZGl0KHRoYXQsIHBvaW50cykge1xuICAgIGlmICh0aGF0Ll9EaWFsb2dPYmplY3QgJiYgdGhhdC5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gbnVsbFxuICAgIH1cbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoYXQuc2RrLnZpZXdlci5fY29udGFpbmVyLCB7XG4gICAgICB0aXRsZTogJ+WJlumdouWIhuaekCcsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcbiAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhhdC5jbGVhbigpXG4gICAgICAgIHRoYXQuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhhdC5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXG4gICAgICB9LFxuICAgIH0pXG4gICAgYXdhaXQgdGhhdC5fRGlhbG9nT2JqZWN0LmluaXQoKVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgcHJvZmlsZSdcbiAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXG4gICAgdGhhdC5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxuICAgIGxldCByZXNldEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIHJlc2V0QnRuLmlubmVySFRNTCA9ICc8c3ZnIGNsYXNzPVwiaWNvbi1lZGl0XCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tZWRpdFwiPjwvdXNlPjwvc3ZnPumHjeaWsOe7mOWItidcbiAgICByZXNldEJ0bi5zdHlsZS53aWR0aCA9ICdhdXRvJ1xuICAgIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgUHJvZmlsZS5jcmVhdGUodGhhdClcbiAgICAgIFByb2ZpbGUuaW5pdEVjaGFydHModGhhdClcbiAgICB9KVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5mb290QXBwQ2hpbGQocmVzZXRCdG4pXG4gICAgUHJvZmlsZS5pbml0RWNoYXJ0cyh0aGF0LCBwb2ludHMpXG4gIH1cblxuICBzdGF0aWMgaW5pdEVjaGFydHModGhhdCwgcG9pbnRzKSB7XG4gICAgbGV0IGRhdGFzID0gW10sXG4gICAgICBjb29yZHMgPSBbXTtcbiAgICBjb25zdCBwb2ludHNEYXRhID0gcG9pbnRzO1xuXG4gICAgbGV0IG9wdGlvblxuICAgIGlmIChwb2ludHNEYXRhKSB7XG4gICAgICBjb25zdCBtYXhEaXN0YW5jZSA9IHBvaW50c0RhdGFbcG9pbnRzRGF0YS5sZW5ndGggLSAxXS5kaXN0YW5jZTtcbiAgICAgIGxldCB4QWl4TWF4ID0gTWF0aC5jZWlsKG1heERpc3RhbmNlKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb2ludHNEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcG9pbnRzRGF0YVtpbmRleF07XG4gICAgICAgIGlmIChlbGVtZW50LnBvc2l0aW9uLmhlaWdodCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJEYXRhID0gW1xuICAgICAgICAgIGVsZW1lbnQuZGlzdGFuY2UudG9GaXhlZCgyKSxcbiAgICAgICAgICBlbGVtZW50LnBvc2l0aW9uLmhlaWdodC50b0ZpeGVkKDIpLFxuICAgICAgICBdO1xuICAgICAgICBkYXRhcy5wdXNoKGN1ckRhdGEpO1xuICAgICAgICBjb25zdCBjdXJDb29yZHMgPSBbZWxlbWVudC5wb3NpdGlvbi5sbmcsIGVsZW1lbnQucG9zaXRpb24ubGF0XTtcbiAgICAgICAgY29vcmRzLnB1c2goY3VyQ29vcmRzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvaW50T3B0aW9uID0ge1xuICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICBwaXhlbFNpemU6IDEwLFxuICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLkdSRUVOLFxuICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5TS1lCTFVFLFxuICAgICAgICBvdXRsaW5lV2lkdGg6IDMsXG4gICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG4gICAgICB9O1xuICAgICAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInByb2ZpbGUtZWNoYXJ0c1wiKVswXTtcbiAgICAgIHRoYXQuZWNoYXJ0c09iamVjdCA9IGVjaGFydHMuaW5pdChlbGUpO1xuICAgICAgb3B0aW9uID0ge1xuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgdHJpZ2dlcjogXCJheGlzXCIsXG4gICAgICAgICAgdGV4dFN0eWxlOiB7XG4gICAgICAgICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JtYXR0ZXIocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCB4eSA9IGNvb3Jkc1twYXJhbXNbMF0uZGF0YUluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHRpcERhdGEgPSBwYXJhbXNbMF1bXCJkYXRhXCJdO1xuICAgICAgICAgICAgaWYgKCF0aGF0LnRpcEVudGl0eSkge1xuICAgICAgICAgICAgICB0aGF0LnRpcEVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcbiAgICAgICAgICAgICAgICAgIHh5WzBdLFxuICAgICAgICAgICAgICAgICAgeHlbMV0sXG4gICAgICAgICAgICAgICAgICBOdW1iZXIodGlwRGF0YVsxXSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHBvaW50OiBwb2ludE9wdGlvbixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGF0LnRpcEVudGl0eS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxuICAgICAgICAgICAgICAgIHh5WzBdLFxuICAgICAgICAgICAgICAgIHh5WzFdLFxuICAgICAgICAgICAgICAgIE51bWJlcih0aXBEYXRhWzFdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgXCLot53nprvvvJpcIiArXG4gICAgICAgICAgICAgIHRpcERhdGFbMF0gK1xuICAgICAgICAgICAgICBcIm08YnI+XCIgK1xuICAgICAgICAgICAgICBcIumrmOW6pu+8mlwiICtcbiAgICAgICAgICAgICAgdGlwRGF0YVsxXSArXG4gICAgICAgICAgICAgIFwibTxicj5cIiArXG4gICAgICAgICAgICAgIFwi5Z2Q5qCH77yaXCIgK1xuICAgICAgICAgICAgICB4eVswXS50b0ZpeGVkKDUpICtcbiAgICAgICAgICAgICAgXCLvvIxcIiArXG4gICAgICAgICAgICAgIHh5WzFdLnRvRml4ZWQoNSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgIHRvcDogNDAsXG4gICAgICAgICAgYm90dG9tOiAyMCxcbiAgICAgICAgICBsZWZ0OiA1NSxcbiAgICAgICAgICByaWdodDogMzBcbiAgICAgICAgfSxcbiAgICAgICAgY2FsY3VsYWJsZTogdHJ1ZSxcbiAgICAgICAgeEF4aXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInZhbHVlXCIsXG4gICAgICAgICAgICBtYXg6IHhBaXhNYXgsXG4gICAgICAgICAgICBzY2FsZTogdHJ1ZSxcbiAgICAgICAgICAgIGF4aXNMYWJlbDoge1xuICAgICAgICAgICAgICBjb2xvcjogJyNmZmZmZmYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXhpc0xpbmU6IHtcbiAgICAgICAgICAgICAgbGluZVN0eWxlOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB5QXhpczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidmFsdWVcIixcbiAgICAgICAgICAgIHNjYWxlOiB0cnVlLFxuICAgICAgICAgICAgYXhpc0xhYmVsOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBheGlzTGluZToge1xuICAgICAgICAgICAgICBsaW5lU3R5bGU6IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHNlcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUHJvZmlsZUxpbmVcIixcbiAgICAgICAgICAgIHR5cGU6IFwibGluZVwiLFxuICAgICAgICAgICAgZGF0YTogZGF0YXMsXG4gICAgICAgICAgICBzbW9vdGg6IHRydWUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgbm9ybWFsOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzM5RkRBMVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmVTdHlsZToge1xuICAgICAgICAgICAgICBub3JtYWw6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMyxcbiAgICAgICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJsaW5lYXJcIixcbiAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgICAgeDI6IDEsXG4gICAgICAgICAgICAgICAgICB5MjogMCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yU3RvcHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDg1LDI1NCwxMzksMSlcIiwgLy8gMCUg5aSE55qE6aKc6ImyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAuNSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDcsMjUyLDIwMiwxKVwiLCAvLyAxMDAlIOWkhOeahOminOiJslxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYmEoMTQsMjQ1LDIxMCwxKVwiLCAvLyAxMDAlIOWkhOeahOminOiJslxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbENvb3JkOiBmYWxzZSwgLy8g57y655yB5Li6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcmVhU3R5bGU6IHtcbiAgICAgICAgICAgICAgbm9ybWFsOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IG5ldyBlY2hhcnRzLmdyYXBoaWMuTGluZWFyR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYmEoMTAyLDE1MywyNTUsMSlcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMC44LFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYmEoMTAyLDE1MywyNTUsMC4wOClcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDksMTczLDIwOCwwLjE1KVwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogXCJyZ2JhKDE0LDI0NSwyMTAsMSlcIiwgLy/pmLTlvbHpopzoibJcbiAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiAyMCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrUG9pbnQ6IHtcbiAgICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwibWF4XCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIuacgOmrmOeCuVwiLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwibWluXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIuacgOS9jueCuVwiLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicHJvZmlsZS1lY2hhcnRzXCIpWzBdO1xuICAgICAgdGhhdC5lY2hhcnRzT2JqZWN0ID0gZWNoYXJ0cy5pbml0KGVsZSk7XG4gICAgICBvcHRpb24gPSB7XG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICB0cmlnZ2VyOiBcImF4aXNcIixcbiAgICAgICAgICB0ZXh0U3R5bGU6IHtcbiAgICAgICAgICAgIGFsaWduOiBcImxlZnRcIixcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICB0b3A6IDQwLFxuICAgICAgICAgIGJvdHRvbTogMjAsXG4gICAgICAgICAgbGVmdDogNTUsXG4gICAgICAgICAgcmlnaHQ6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGN1bGFibGU6IHRydWUsXG4gICAgICAgIHhBeGlzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ2YWx1ZVwiLFxuICAgICAgICAgICAgc2NhbGU6IHRydWUsXG4gICAgICAgICAgICBheGlzTGFiZWw6IHtcbiAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF4aXNMaW5lOiB7XG4gICAgICAgICAgICAgIGxpbmVTdHlsZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgeUF4aXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInZhbHVlXCIsXG4gICAgICAgICAgICBzY2FsZTogdHJ1ZSxcbiAgICAgICAgICAgIGF4aXNMYWJlbDoge1xuICAgICAgICAgICAgICBjb2xvcjogJyNmZmZmZmYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXhpc0xpbmU6IHtcbiAgICAgICAgICAgICAgbGluZVN0eWxlOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZXJpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlByb2ZpbGVMaW5lXCIsXG4gICAgICAgICAgICB0eXBlOiBcImxpbmVcIixcbiAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgc21vb3RoOiB0cnVlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIG5vcm1hbDoge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMzOUZEQTFcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lU3R5bGU6IHtcbiAgICAgICAgICAgICAgbm9ybWFsOiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMsXG4gICAgICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwibGluZWFyXCIsXG4gICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgIHgyOiAxLFxuICAgICAgICAgICAgICAgICAgeTI6IDAsXG4gICAgICAgICAgICAgICAgICBjb2xvclN0b3BzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiYSg4NSwyNTQsMTM5LDEpXCIsIC8vIDAlIOWkhOeahOminOiJslxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLjUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiYSg3LDI1MiwyMDIsMSlcIiwgLy8gMTAwJSDlpITnmoTpopzoibJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDE0LDI0NSwyMTAsMSlcIiwgLy8gMTAwJSDlpITnmoTpopzoibJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBnbG9iYWxDb29yZDogZmFsc2UsIC8vIOe8uuecgeS4uiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJlYVN0eWxlOiB7XG4gICAgICAgICAgICAgIG5vcm1hbDoge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBuZXcgZWNoYXJ0cy5ncmFwaGljLkxpbmVhckdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDEwMiwxNTMsMjU1LDEpXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAuOCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2JhKDEwMiwxNTMsMjU1LDAuMDgpXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiYSg5LDE3MywyMDgsMC4xNSlcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc2hhZG93Q29sb3I6IFwicmdiYSgxNCwyNDUsMjEwLDEpXCIsIC8v6Zi05b2x6aKc6ImyXG4gICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogMjAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya1BvaW50OiB7XG4gICAgICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm1heFwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogXCLmnIDpq5jngrlcIixcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm1pblwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogXCLmnIDkvY7ngrlcIixcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhhdC5lY2hhcnRzT2JqZWN0LnNldE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy5lbmQoKVxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IG51bGxcbiAgICB0aGlzLmVudGl0eUhhc0NyZWF0ZWQgPSBmYWxzZVxuICAgIHRoaXMucG9seWxpbmUgJiYgdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMucG9seWxpbmUpXG4gICAgdGhpcy50aXBFbnRpdHkgJiYgdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMudGlwRW50aXR5KVxuICAgIHRoaXMucG9seWxpbmUgPSBudWxsXG4gICAgdGhpcy50aXBFbnRpdHkgPSBudWxsXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW4oKVxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG4vLyBjb25zdCBQcm9maWxlID0gZnVuY3Rpb24gKHZpZXdlciwgY2FsbGJhY2spIHtcbi8vICAgaWYgKCF2aWV3ZXIpIHRocm93IG5ldyBFcnJvcihcIm5vIHZpZXdlciBvYmplY3QhXCIpO1xuLy8gICBpZiAod2luZG93LnByb2ZpbGVFbnRpdGllcyAmJiB3aW5kb3cucHJvZmlsZUVudGl0aWVzLmxlbmd0aCA+IDApIHtcbi8vICAgICB3aW5kb3cucHJvZmlsZUVudGl0aWVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbi8vICAgICAgIHdpbmRvdy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKGVsZW1lbnQpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4vLyAgIHdpbmRvdy5wcm9maWxlRW50aXRpZXMgPSBbXTtcbi8vICAgQ3JlYXRlUG9seWxpbmUoXG4vLyAgICAgdmlld2VyLFxuLy8gICAgIHdpbmRvdy5wcm9maWxlRW50aXRpZXMsXG4vLyAgICAgeyBjb2xvcjogQ2VzaXVtLkNvbG9yLlJFRCwgd2lkdGg6IDIgfSxcbi8vICAgICBmdW5jdGlvbiAoZSkge1xuLy8gICAgICAgZS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZTtcbi8vICAgICAgIGNvbnNvbGUubG9nKGUucG90dGluZ1BvaW50KTtcbi8vICAgICAgIGxldCBwb2ludHMgPSBpbnRlclBvaW50cyh2aWV3ZXIsIGUucG90dGluZ1BvaW50LCBbZV0pO1xuLy8gICAgICAgY29uc29sZS5sb2cocG9pbnRzKTtcbi8vICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gXCJmdW5jdGlvblwiKSBjYWxsYmFjayhwb2ludHMpO1xuLy8gICAgIH1cbi8vICAgKTtcbi8vIH07XG4vLyAvKipcbi8vICAqIOe6v+auteaPkuWAvOeCuVxuLy8gICogQHBhcmFtIHsqfSB2aWV3ZXJcbi8vICAqIEBwYXJhbSB7Kn0gcG9zaXRpb25zIOe6v+auteiKgueCuembhuWQiFxuLy8gICogQHBhcmFtIHsqfSBvYmplY3RzVG9FeGNsdWRlIOmrmOW6pumHh+mbhuaXtuaOkumZpOeahOWvueixoembhuWQiFxuLy8gICogQHJldHVybnMg57uP57qs5bqm54K56ZuG5ZCI77yM5YyF5ZCr6Led56a75YC8XG4vLyAgKi9cbi8vIGZ1bmN0aW9uIGludGVyUG9pbnRzKHZpZXdlciwgcG9zaXRpb25zLCBvYmplY3RzVG9FeGNsdWRlKSB7XG4vLyAgIGxldCBwb3NpdGlvbnNDYXJ0b2dyYXBoaWMgPSBbXTtcbi8vICAgbGV0IHRlcnJhaW5TYW1wbGVQb3NpdGlvbnMgPSBbXTtcbi8vICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbi8vICAgICBjb25zdCBlbGVtZW50ID0gcG9zaXRpb25zW2luZGV4XTtcbi8vICAgICBsZXQgZWxsaXBzb2lkID0gdmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZDtcbi8vICAgICBsZXQgY2FydG9ncmFwaGljID0gZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVsZW1lbnQpO1xuLy8gICAgIHBvc2l0aW9uc0NhcnRvZ3JhcGhpYy5wdXNoKGNhcnRvZ3JhcGhpYyk7XG4vLyAgIH1cbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnNDYXJ0b2dyYXBoaWMubGVuZ3RoOyBpKyspIHtcbi8vICAgICBjb25zdCBtX0NhcnRvZ3JhcGhpYzAgPSBwb3NpdGlvbnNDYXJ0b2dyYXBoaWNbaV07XG4vLyAgICAgY29uc3QgbV9DYXJ0b2dyYXBoaWMxID0gcG9zaXRpb25zQ2FydG9ncmFwaGljW2kgKyAxXTtcbi8vICAgICBpZiAobV9DYXJ0b2dyYXBoaWMxKSB7XG4vLyAgICAgICBsZXQgYSA9XG4vLyAgICAgICAgIE1hdGguYWJzKG1fQ2FydG9ncmFwaGljMC5sb25naXR1ZGUgLSBtX0NhcnRvZ3JhcGhpYzEubG9uZ2l0dWRlKSAqXG4vLyAgICAgICAgIDEwMDAwMDAwO1xuLy8gICAgICAgbGV0IGIgPVxuLy8gICAgICAgICBNYXRoLmFicyhtX0NhcnRvZ3JhcGhpYzAubGF0aXR1ZGUgLSBtX0NhcnRvZ3JhcGhpYzEubGF0aXR1ZGUpICpcbi8vICAgICAgICAgMTAwMDAwMDA7XG4vLyAgICAgICAvL+etiei3nemHh+agt1xuLy8gICAgICAgaWYgKGEgPiBiKSBiID0gYTtcbi8vICAgICAgIGxldCBsZW5ndGggPSBwYXJzZUludChiIC8gMik7XG4vLyAgICAgICBpZiAobGVuZ3RoID4gMTAwMCkgbGVuZ3RoID0gMTAwMDtcbi8vICAgICAgIGlmIChsZW5ndGggPCAyKSBsZW5ndGggPSAyO1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKykge1xuLy8gICAgICAgICB0ZXJyYWluU2FtcGxlUG9zaXRpb25zLnB1c2goXG4vLyAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0b2dyYXBoaWMoXG4vLyAgICAgICAgICAgICBDZXNpdW0uTWF0aC5sZXJwKFxuLy8gICAgICAgICAgICAgICBtX0NhcnRvZ3JhcGhpYzAubG9uZ2l0dWRlLFxuLy8gICAgICAgICAgICAgICBtX0NhcnRvZ3JhcGhpYzEubG9uZ2l0dWRlLFxuLy8gICAgICAgICAgICAgICBqIC8gKGxlbmd0aCAtIDEpXG4vLyAgICAgICAgICAgICApLFxuLy8gICAgICAgICAgICAgQ2VzaXVtLk1hdGgubGVycChcbi8vICAgICAgICAgICAgICAgbV9DYXJ0b2dyYXBoaWMwLmxhdGl0dWRlLFxuLy8gICAgICAgICAgICAgICBtX0NhcnRvZ3JhcGhpYzEubGF0aXR1ZGUsXG4vLyAgICAgICAgICAgICAgIGogLyAobGVuZ3RoIC0gMSlcbi8vICAgICAgICAgICAgIClcbi8vICAgICAgICAgICApXG4vLyAgICAgICAgICk7XG4vLyAgICAgICB9XG4vLyAgICAgICB0ZXJyYWluU2FtcGxlUG9zaXRpb25zLnBvcCgpO1xuLy8gICAgIH0gZWxzZSB7XG4vLyAgICAgICB0ZXJyYWluU2FtcGxlUG9zaXRpb25zLnB1c2gobV9DYXJ0b2dyYXBoaWMwKTtcbi8vICAgICB9XG4vLyAgIH1cbi8vICAgbGV0IHBvc2l0aW9uc19JbnRlciA9IFtdO1xuLy8gICBsZXQgZGlzdGFuY2UgPSAwO1xuLy8gICBmb3IgKGxldCBuID0gMDsgbiA8IHRlcnJhaW5TYW1wbGVQb3NpdGlvbnMubGVuZ3RoOyBuKyspIHtcbi8vICAgICAvL+WcsOeQhuWdkOagh++8iOW8p+W6pu+8iei9rOe7j+e6rOW6puWdkOagh1xuLy8gICAgIGxldCBjdXJDYXJ0b2dyYXBoaWMgPSB0ZXJyYWluU2FtcGxlUG9zaXRpb25zW25dO1xuLy8gICAgIGxldCBoZWlnaHQgPSB2aWV3ZXIuc2NlbmUuc2FtcGxlSGVpZ2h0KGN1ckNhcnRvZ3JhcGhpYywgb2JqZWN0c1RvRXhjbHVkZSk7XG4vLyAgICAgY29uc3QgbG9uID0gKGN1ckNhcnRvZ3JhcGhpYy5sb25naXR1ZGUgLyBNYXRoLlBJKSAqIDE4MDtcbi8vICAgICBjb25zdCBsYXQgPSAoY3VyQ2FydG9ncmFwaGljLmxhdGl0dWRlIC8gTWF0aC5QSSkgKiAxODA7XG4vLyAgICAgbGV0IHBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG9uLCBsYXQsIGhlaWdodCk7XG4vLyAgICAgbGV0IHByZUNhcnRvZ3JhcGhpYyA9IHRlcnJhaW5TYW1wbGVQb3NpdGlvbnNbbiAtIDFdO1xuLy8gICAgIGlmIChwcmVDYXJ0b2dyYXBoaWMpIHtcbi8vICAgICAgIGNvbnN0IGxvbjEgPSAocHJlQ2FydG9ncmFwaGljLmxvbmdpdHVkZSAvIE1hdGguUEkpICogMTgwO1xuLy8gICAgICAgY29uc3QgbGF0MSA9IChwcmVDYXJ0b2dyYXBoaWMubGF0aXR1ZGUgLyBNYXRoLlBJKSAqIDE4MDtcbi8vICAgICAgIGxldCBwb2ludDEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsb24xLCBsYXQxLCBoZWlnaHQpO1xuLy8gICAgICAgbGV0IGN1ckRpcyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvaW50MSwgcG9pbnQpO1xuLy8gICAgICAgZGlzdGFuY2UgKz0gY3VyRGlzO1xuLy8gICAgIH1cbi8vICAgICBwb3NpdGlvbnNfSW50ZXIucHVzaCh7XG4vLyAgICAgICBwb3NpdGlvbjogeyBsb246IGxvbiwgbGF0OiBsYXQsIGhlaWdodDogaGVpZ2h0IH0sXG4vLyAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vICAgcmV0dXJuIHBvc2l0aW9uc19JbnRlcjtcbi8vIH1cbmV4cG9ydCBkZWZhdWx0IFByb2ZpbGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXFCQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQXVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBeVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF0aUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFWQTtBQUFBO0FBQUE7QUFBQTtBQWxCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbERBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2QkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Profile/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Section/index.js": /*!*******************************************!*\ !*** ./src/Obj/Analysis/Section/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\nvar Section = /*#__PURE__*/function (_Tools) {\n /**\r\n * @constructor 剖切\r\n * @param sdk \r\n * @param tiles3d {object} 3dtiles对象\r\n * @param {Array.} options.positions 经纬度[{lon,lat,alt},...]\r\n * @param options.regionsType=false 裁剪类型 false:裁剪内部,true:裁剪外部\r\n * **/\n function Section(sdk, tiles3d) {\n var _this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Section);\n _this = _callSuper(this, Section, [sdk, options]);\n _this.viewer = sdk.viewer;\n _this.tiles3d = tiles3d;\n _this.options = _objectSpread({}, options);\n _this.options.regionsType = _this.options.regionsType || false;\n YJ.Analysis.SectionResults.push(_this);\n _this.Planes = [];\n Section.start(_this);\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Section, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Section, [{\n key: \"regionsType\",\n get: function get() {\n return this.options.regionsType;\n },\n set: function set(v) {\n this.options.regionsType = v;\n if (this.Planes.length > 0) {\n this.Planes = [];\n Section.planeCollection(this);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.Planes = [];\n // this.tiles3d.clippingPlanes = new Cesium.ClippingPlaneCollection()\n if (this.tiles3d.clippingPlanes) {\n this.tiles3d.clippingPlanes.enabled = false;\n this.tiles3d.clippingPlanes.removeAll();\n }\n }\n }], [{\n key: \"start\",\n value: function start(that) {\n var positions = that.options.positions || [];\n if (!that.isConvex(positions)) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '不支持凹多边形',\n type: 'warning',\n duration: 1500\n });\n console.log('不支持凹多边形');\n return;\n }\n that.inverseTransform = getInverseTransform(that.tiles3d);\n that.Planes = [];\n var array = [];\n if (positions.length > 0) {\n for (var i = 0; i < positions.length; i++) {\n array.push([positions[i].lng, positions[i].lat]);\n }\n array.push([positions[0].lng, positions[0].lat]);\n that.isClockwise = turf.booleanClockwise(turf.lineString(array));\n }\n Section.planeCollection(that);\n function getInverseTransform(tileSet) {\n var transform;\n var tmp = tileSet.root.transform;\n if (tmp && tmp.equals(Cesium.Matrix4.IDENTITY) || !tmp) {\n transform = Cesium.Transforms.eastNorthUpToFixedFrame(tileSet.boundingSphere.center);\n } else {\n transform = Cesium.Matrix4.fromArray(tileSet.root.transform);\n }\n return Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());\n }\n }\n }, {\n key: \"planeCollection\",\n value: function planeCollection(that) {\n var positions = that.options.positions || [];\n if (that.regionsType == that.isClockwise) {\n for (var i = 0; i < positions.length; i++) {\n if (i === positions.length - 1) {\n that.Planes.push(createPlane(positions[i], positions[0], that.inverseTransform));\n } else {\n that.Planes.push(createPlane(positions[i], positions[i + 1], that.inverseTransform));\n }\n }\n } else {\n for (var _i = positions.length - 1; _i >= 0; _i--) {\n if (_i === 0) {\n that.Planes.push(createPlane(positions[_i], positions[positions.length - 1], that.inverseTransform));\n } else {\n that.Planes.push(createPlane(positions[_i], positions[_i - 1], that.inverseTransform));\n }\n }\n }\n if (that.tiles3d.clippingPlanes) {\n that.tiles3d.clippingPlanes.removeAll();\n for (var _i2 = 0; _i2 < that.Planes.length; _i2++) {\n that.tiles3d.clippingPlanes.add(that.Planes[_i2]);\n }\n that.tiles3d.clippingPlanes.enabled = true;\n } else {\n var PlaneCollection = new Cesium.ClippingPlaneCollection({\n planes: that.Planes,\n enabled: true,\n unionClippingRegions: that.regionsType,\n edgeColor: Cesium.Color.WHITE,\n edgeWidth: 1\n });\n that.tiles3d.clippingPlanes = PlaneCollection;\n }\n function createPlane(p1, p2, inverseTransform) {\n // 将仅包含经纬度信息的p1,p2,转换为相应坐标系的cartesian3对象\n var p1C3 = getOriginCoordinateSystemPoint(p1, inverseTransform);\n var p2C3 = getOriginCoordinateSystemPoint(p2, inverseTransform);\n\n // 定义一个垂直向上的向量up\n var up = new Cesium.Cartesian3(0, 0, 10);\n // right 实际上就是由p1指向p2的向量\n var right = Cesium.Cartesian3.subtract(p2C3, p1C3, new Cesium.Cartesian3());\n\n // 计算normal, right叉乘up,得到平面法向量,这个法向量指向right的右侧\n var normal = Cesium.Cartesian3.cross(right, up, new Cesium.Cartesian3());\n normal = Cesium.Cartesian3.normalize(normal, normal);\n\n // 由于已经获得了法向量和过平面的一点,因此可以直接构造Plane,并进一步构造ClippingPlane\n var planeTmp = Cesium.Plane.fromPointNormal(p1C3, normal);\n return Cesium.ClippingPlane.fromPlane(planeTmp);\n }\n function getOriginCoordinateSystemPoint(point, inverseTransform) {\n var val = Cesium.Cartesian3.fromDegrees(point.lng, point.lat);\n return Cesium.Matrix4.multiplyByPoint(inverseTransform, val, new Cesium.Cartesian3(0, 0, 0));\n }\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Section);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1NlY3Rpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1NlY3Rpb24vaW5kZXguanM/NDJhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uLy4uL1Rvb2xzXCI7XHJcbmNsYXNzIFNlY3Rpb24gZXh0ZW5kcyBUb29scyB7XHJcbiAgLyoqXHJcbiAgKiBAY29uc3RydWN0b3Ig5YmW5YiHXHJcbiAgKiBAcGFyYW0gc2RrIFxyXG4gICogQHBhcmFtIHRpbGVzM2Qge29iamVjdH0gM2R0aWxlc+WvueixoVxyXG4gICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg57uP57qs5bqmW3tsb24sbGF0LGFsdH0sLi4uXVxyXG4gICogQHBhcmFtIG9wdGlvbnMucmVnaW9uc1R5cGU9ZmFsc2Ug6KOB5Ymq57G75Z6LIGZhbHNlOuijgeWJquWGhemDqO+8jHRydWU66KOB5Ymq5aSW6YOoXHJcbiAgKiAqKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIHRpbGVzM2QsIG9wdGlvbnMgPSB7fSkge1xyXG5cclxuXHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXJcclxuICAgIHRoaXMudGlsZXMzZCA9IHRpbGVzM2RcclxuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9XHJcbiAgICB0aGlzLm9wdGlvbnMucmVnaW9uc1R5cGUgPSB0aGlzLm9wdGlvbnMucmVnaW9uc1R5cGUgfHwgZmFsc2VcclxuICAgIFlKLkFuYWx5c2lzLlNlY3Rpb25SZXN1bHRzLnB1c2godGhpcylcclxuICAgIHRoaXMuUGxhbmVzID0gW11cclxuICAgIFNlY3Rpb24uc3RhcnQodGhpcylcclxuICB9XHJcblxyXG4gIGdldCByZWdpb25zVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVnaW9uc1R5cGVcclxuICB9XHJcbiAgc2V0IHJlZ2lvbnNUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5yZWdpb25zVHlwZSA9IHZcclxuICAgIGlmICh0aGlzLlBsYW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuUGxhbmVzID0gW11cclxuICAgICAgU2VjdGlvbi5wbGFuZUNvbGxlY3Rpb24odGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzdGFydCh0aGF0KSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucyB8fCBbXVxyXG4gICAgaWYoIXRoYXQuaXNDb252ZXgocG9zaXRpb25zKSkge1xyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiAn5LiN5pSv5oyB5Ye55aSa6L655b2iJyxcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfkuI3mlK/mjIHlh7nlpJrovrnlvaInKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoYXQuaW52ZXJzZVRyYW5zZm9ybSA9IGdldEludmVyc2VUcmFuc2Zvcm0odGhhdC50aWxlczNkKVxyXG4gICAgdGhhdC5QbGFuZXMgPSBbXVxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uc1swXS5sbmcsIHBvc2l0aW9uc1swXS5sYXRdKVxyXG4gICAgICB0aGF0LmlzQ2xvY2t3aXNlID0gdHVyZi5ib29sZWFuQ2xvY2t3aXNlKHR1cmYubGluZVN0cmluZyhhcnJheSkpO1xyXG4gICAgfVxyXG4gICAgU2VjdGlvbi5wbGFuZUNvbGxlY3Rpb24odGhhdClcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRJbnZlcnNlVHJhbnNmb3JtKHRpbGVTZXQpIHtcclxuICAgICAgbGV0IHRyYW5zZm9ybVxyXG4gICAgICBjb25zdCB0bXAgPSB0aWxlU2V0LnJvb3QudHJhbnNmb3JtXHJcbiAgICAgIGlmICgodG1wICYmIHRtcC5lcXVhbHMoQ2VzaXVtLk1hdHJpeDQuSURFTlRJVFkpKSB8fCAhdG1wKSB7XHJcbiAgICAgICAgdHJhbnNmb3JtID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodGlsZVNldC5ib3VuZGluZ1NwaGVyZS5jZW50ZXIpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJhbnNmb3JtID0gQ2VzaXVtLk1hdHJpeDQuZnJvbUFycmF5KHRpbGVTZXQucm9vdC50cmFuc2Zvcm0pXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIENlc2l1bS5NYXRyaXg0LmludmVyc2VUcmFuc2Zvcm1hdGlvbih0cmFuc2Zvcm0sIG5ldyBDZXNpdW0uTWF0cml4NCgpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBsYW5lQ29sbGVjdGlvbih0aGF0KSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucyB8fCBbXVxyXG4gICAgaWYgKHRoYXQucmVnaW9uc1R5cGUgPT0gdGhhdC5pc0Nsb2Nrd2lzZSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChpID09PSAocG9zaXRpb25zLmxlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICB0aGF0LlBsYW5lcy5wdXNoKGNyZWF0ZVBsYW5lKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zWzBdLCB0aGF0LmludmVyc2VUcmFuc2Zvcm0pKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGF0LlBsYW5lcy5wdXNoKGNyZWF0ZVBsYW5lKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zW2kgKyAxXSwgdGhhdC5pbnZlcnNlVHJhbnNmb3JtKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gcG9zaXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgIHRoYXQuUGxhbmVzLnB1c2goY3JlYXRlUGxhbmUocG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbcG9zaXRpb25zLmxlbmd0aCAtIDFdLCB0aGF0LmludmVyc2VUcmFuc2Zvcm0pKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGF0LlBsYW5lcy5wdXNoKGNyZWF0ZVBsYW5lKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zW2kgLSAxXSwgdGhhdC5pbnZlcnNlVHJhbnNmb3JtKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZih0aGF0LnRpbGVzM2QuY2xpcHBpbmdQbGFuZXMpIHtcclxuICAgICAgdGhhdC50aWxlczNkLmNsaXBwaW5nUGxhbmVzLnJlbW92ZUFsbCgpXHJcbiAgICAgIGZvcihsZXQgaT0wO2k8dGhhdC5QbGFuZXMubGVuZ3RoO2krKykge1xyXG4gICAgICAgIHRoYXQudGlsZXMzZC5jbGlwcGluZ1BsYW5lcy5hZGQodGhhdC5QbGFuZXNbaV0pXHJcbiAgICAgIH1cclxuICAgICAgdGhhdC50aWxlczNkLmNsaXBwaW5nUGxhbmVzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IFBsYW5lQ29sbGVjdGlvbiA9IG5ldyBDZXNpdW0uQ2xpcHBpbmdQbGFuZUNvbGxlY3Rpb24oe1xyXG4gICAgICAgIHBsYW5lczogdGhhdC5QbGFuZXMsXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB1bmlvbkNsaXBwaW5nUmVnaW9uczogdGhhdC5yZWdpb25zVHlwZSxcclxuICAgICAgICBlZGdlQ29sb3I6IENlc2l1bS5Db2xvci5XSElURSxcclxuICAgICAgICBlZGdlV2lkdGg6IDEsXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQudGlsZXMzZC5jbGlwcGluZ1BsYW5lcyA9IFBsYW5lQ29sbGVjdGlvblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBsYW5lKHAxLCBwMiwgaW52ZXJzZVRyYW5zZm9ybSkge1xyXG4gICAgICAvLyDlsIbku4XljIXlkKvnu4/nuqzluqbkv6Hmga/nmoRwMSxwMu+8jOi9rOaNouS4uuebuOW6lOWdkOagh+ezu+eahGNhcnRlc2lhbjPlr7nosaFcclxuICAgICAgY29uc3QgcDFDMyA9IGdldE9yaWdpbkNvb3JkaW5hdGVTeXN0ZW1Qb2ludChwMSwgaW52ZXJzZVRyYW5zZm9ybSlcclxuICAgICAgY29uc3QgcDJDMyA9IGdldE9yaWdpbkNvb3JkaW5hdGVTeXN0ZW1Qb2ludChwMiwgaW52ZXJzZVRyYW5zZm9ybSlcclxuXHJcbiAgICAgIC8vIOWumuS5ieS4gOS4quWeguebtOWQkeS4iueahOWQkemHj3VwXHJcbiAgICAgIGNvbnN0IHVwID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKDAsIDAsIDEwKVxyXG4gICAgICAvLyAgcmlnaHQg5a6e6ZmF5LiK5bCx5piv55SxcDHmjIflkJFwMueahOWQkemHj1xyXG4gICAgICBjb25zdCByaWdodCA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHAyQzMsIHAxQzMsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKVxyXG5cclxuICAgICAgLy8g6K6h566Xbm9ybWFs77yMIHJpZ2h05Y+J5LmYdXDvvIzlvpfliLDlubPpnaLms5XlkJHph4/vvIzov5nkuKrms5XlkJHph4/mjIflkJFyaWdodOeahOWPs+S+p1xyXG4gICAgICBsZXQgbm9ybWFsID0gQ2VzaXVtLkNhcnRlc2lhbjMuY3Jvc3MocmlnaHQsIHVwLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgICAgbm9ybWFsID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKVxyXG5cclxuICAgICAgLy8g55Sx5LqO5bey57uP6I635b6X5LqG5rOV5ZCR6YeP5ZKM6L+H5bmz6Z2i55qE5LiA54K577yM5Zug5q2k5Y+v5Lul55u05o6l5p6E6YCgUGxhbmUs5bm26L+b5LiA5q2l5p6E6YCgQ2xpcHBpbmdQbGFuZVxyXG4gICAgICBjb25zdCBwbGFuZVRtcCA9IENlc2l1bS5QbGFuZS5mcm9tUG9pbnROb3JtYWwocDFDMywgbm9ybWFsKVxyXG4gICAgICByZXR1cm4gQ2VzaXVtLkNsaXBwaW5nUGxhbmUuZnJvbVBsYW5lKHBsYW5lVG1wKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldE9yaWdpbkNvb3JkaW5hdGVTeXN0ZW1Qb2ludChwb2ludCwgaW52ZXJzZVRyYW5zZm9ybSkge1xyXG4gICAgICBjb25zdCB2YWwgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludC5sbmcsIHBvaW50LmxhdClcclxuICAgICAgcmV0dXJuIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlQb2ludChcclxuICAgICAgICBpbnZlcnNlVHJhbnNmb3JtLCB2YWwsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygwLCAwLCAwKSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLlBsYW5lcyA9IFtdXHJcbiAgICAvLyB0aGlzLnRpbGVzM2QuY2xpcHBpbmdQbGFuZXMgPSBuZXcgQ2VzaXVtLkNsaXBwaW5nUGxhbmVDb2xsZWN0aW9uKClcclxuICAgIGlmKHRoaXMudGlsZXMzZC5jbGlwcGluZ1BsYW5lcykge1xyXG4gICAgICB0aGlzLnRpbGVzM2QuY2xpcHBpbmdQbGFuZXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMudGlsZXMzZC5jbGlwcGluZ1BsYW5lcy5yZW1vdmVBbGwoKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2VjdGlvbjsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQVlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Section/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/SlopeAspect/index.js": /*!***********************************************!*\ !*** ./src/Obj/Analysis/SlopeAspect/index.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\nvar SlopeAspect = /*#__PURE__*/function (_Tools) {\n /**\r\n * @constructor 坡度坡向分析\r\n * @param sdk \r\n * **/\n function SlopeAspect(sdk) {\n var _this2;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, SlopeAspect);\n _this2 = _callSuper(this, SlopeAspect, [sdk]);\n _this2.viewer = sdk.viewer;\n var terrainAvailability = _this2.viewer.terrainProvider.availability;\n if (!terrainAvailability) {\n _this2.error = '未加载地形数据!';\n window.ELEMENT && window.ELEMENT.Message({\n message: '未加载地形数据!',\n type: 'warning',\n duration: 1500\n });\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(_this2);\n }\n _this2.event;\n _this2.result = []; //存储创建的坡度分析结果,primitive集合\n _this2.handler = undefined;\n _this2.toolTip = \"\";\n YJ.Analysis.AnalysesResults.push(_this2);\n _this2.Draw = new _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_this2.sdk);\n // this.createNew4Distance()\n _this2.createNew4Num(50);\n return _this2;\n }\n\n //等距离切分网格\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(SlopeAspect, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(SlopeAspect, [{\n key: \"createNew4Distance\",\n value: function createNew4Distance(distance) {\n var _this3 = this;\n distance = distance || 0.1; //默认0.1km精度\n var width = distance * 200 > 35 ? 35 : distance * 200;\n this.arrowWidth = width < 15 ? 15 : width;\n var $this = this;\n var viewer = this.viewer;\n this.Draw.start(function (e, positions) {\n if (!positions || positions.length <= 2) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '至少拥有三个坐标位置!',\n type: 'warning',\n duration: 1500\n });\n return;\n }\n var boundary = [];\n var minX = 10000,\n minY = 10000,\n maxX = -10000,\n maxY = -1000;\n for (var index = 0; index < positions.length; index++) {\n var element = positions[index];\n var x = element.lng;\n var y = element.lat;\n boundary.push([x, y]);\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n }\n boundary.push(boundary[0]);\n var bbox = [minX, minY, maxX, maxY];\n var mask = turf.polygon([boundary]);\n var gridSquare = turf.squareGrid(bbox, distance, {\n mask: mask\n });\n _this3.createEllipse(gridSquare);\n });\n }\n // 等分切分网格,切分成一个num*num的网格\n }, {\n key: \"createNew4Num\",\n value: function createNew4Num(n) {\n var _this4 = this;\n var num = n;\n this.Draw.start(function (e, positions) {\n if (!positions || positions.length <= 2) {\n console.warn('至少拥有三个坐标位置!');\n return;\n }\n var boundary = [];\n var minX = 10000,\n minY = 10000,\n maxX = -10000,\n maxY = -1000;\n for (var index = 0; index < positions.length; index++) {\n var element = positions[index];\n var x = element.lng;\n var y = element.lat;\n boundary.push([x, y]);\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n }\n boundary.push(boundary[0]);\n var bbox = [minX, minY, maxX, maxY];\n var a = maxX - minX;\n var b = maxY - minY;\n b = b > a ? b : a;\n\n // 根据面积修改网格数\n var mask = turf.polygon([boundary]);\n var area = turf.area(mask);\n if (area > 5000000000000) {\n num = num - 25;\n } else if (area > 1000000000000) {\n num = num - 20;\n } else if (area > 500000000000) {\n num = num - 15;\n } else if (area > 100000000000) {\n num = num - 10;\n } else if (area > 60000000000) {\n num = num - 5;\n }\n var step = b / num;\n var width = step * 2000 > 35 ? 35 : step * 2000;\n _this4.arrowWidth = width < 15 ? 15 : width;\n var gridSquare = turf.squareGrid(bbox, step, {\n units: \"degrees\",\n mask: mask\n });\n _this4.createEllipse(gridSquare);\n });\n // CreatePolygonOnGround(\n // viewer,\n // [],\n // {\n // color: Cesium.Color.RED.withAlpha(0.1),\n // outlineColor: Cesium.Color.YELLOW,\n // outlineWidth: 2,\n // },\n // function (polygon) {\n // let degrees = $this.Cartesian3ListToWGS84(polygon.pottingPoint);\n // viewer.entities.remove(polygon);\n // let boundary = [];\n // let minX = 10000,\n // minY = 10000,\n // maxX = -10000,\n // maxY = -1000;\n // for (let index = 0; index < degrees.length; index++) {\n // const element = degrees[index];\n // const x = element.lng;\n // const y = element.lat;\n // boundary.push([x, y]);\n // minX = x < minX ? x : minX;\n // minY = y < minY ? y : minY;\n // maxX = x > maxX ? x : maxX;\n // maxY = y > maxY ? y : maxY;\n // }\n // boundary.push(boundary[0]);\n // let bbox = [minX, minY, maxX, maxY];\n // let a = maxX - minX;\n // let b = maxY - minY;\n // b = b > a ? b : a;\n // const step = b / num;\n // let width = step * 2000 > 35 ? 35 : step * 2000;\n // this.arrowWidth = width < 15 ? 15 : width;\n // let mask = turf.polygon([boundary]);\n // let gridSquare = turf.squareGrid(bbox, step, {\n // units: \"degrees\",\n // mask: mask,\n // });\n // this.createEllipse(gridSquare);\n // }\n // );\n }\n }, {\n key: \"createEllipse\",\n value: function createEllipse(gridSquare) {\n var boxResults = [];\n for (var index = 0; index < gridSquare.features.length; index++) {\n var feature = gridSquare.features[index];\n var coordinates = feature.geometry.coordinates[0];\n var centerdegree = [(coordinates[0][0] + coordinates[2][0]) / 2, (coordinates[0][1] + coordinates[2][1]) / 2];\n var centerCartographic = Cesium.Cartographic.fromDegrees(centerdegree[0], centerdegree[1]);\n boxResults.push(centerCartographic);\n for (var _i = 0; _i < coordinates.length; _i++) {\n var coord = coordinates[_i];\n var cartographic = Cesium.Cartographic.fromDegrees(coord[0], coord[1]);\n boxResults.push(cartographic);\n var coord1 = coordinates[_i + 1];\n if (coord1) {\n var newCoord = [(coord[0] + coord1[0]) / 2, (coord[1] + coord1[1]) / 2];\n var newCartographic = Cesium.Cartographic.fromDegrees(newCoord[0], newCoord[1]);\n boxResults.push(newCartographic);\n }\n }\n }\n var _this = this;\n // 点位过多,分为三份计算\n var num = Math.floor(boxResults.length / 3) + '';\n num = Number(num.substring(0, num.length - 1)) * 10;\n var i = 0;\n var points = boxResults.slice(i * num, (i + 1) * num);\n if (points.length > 0) {\n sampleTerrainMostDetailed(points);\n }\n function sampleTerrainMostDetailed(ps) {\n Cesium.sampleTerrainMostDetailed(_this.viewer.scene.terrainProvider, ps).then(function (updatePositions) {\n i++;\n var points = boxResults.slice(i * num, (i + 1) * num);\n if (points.length > 0) {\n sampleTerrainMostDetailed(points);\n }\n var arrr = [];\n var ellipseResults = updatePositions.reduce(function (pre, item, index, updatePositions) {\n var begin = index * 10;\n var end = begin + 10;\n var res = updatePositions.slice(begin, end);\n if (res.length != 0) {\n arrr[index] = res;\n }\n return arrr;\n }, []);\n _this.calculateSlope(ellipseResults);\n });\n }\n }\n }, {\n key: \"createPolygonInsrance\",\n value: function createPolygonInsrance(points, color, curSlope) {\n var positions = [];\n for (var index = 1; index < points.length - 1; index++) {\n var element = points[index];\n positions.push(Cesium.Cartographic.toCartesian(element));\n }\n var polygon = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(positions)\n });\n var polygonInstance = new Cesium.GeometryInstance({\n id: {\n type: \"SlopeAspect\",\n value: curSlope\n },\n geometry: polygon,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString(color)),\n show: new Cesium.ShowGeometryInstanceAttribute(true) //显示或者隐藏\n }\n });\n return polygonInstance;\n }\n }, {\n key: \"createArrowInstance\",\n value: function createArrowInstance(targetPoint, center, diagonalPoint, heightDifference, curSlope) {\n var cartographic_0 = new Cesium.Cartographic((targetPoint.longitude + center.longitude) / 2, (targetPoint.latitude + center.latitude) / 2, (targetPoint.height + center.height) / 2);\n var cartographic_1 = new Cesium.Cartographic((diagonalPoint.longitude + center.longitude) / 2, (diagonalPoint.latitude + center.latitude) / 2, (diagonalPoint.height + center.height) / 2);\n //偏移的\n var positions1 = heightDifference > 0 ? [Cesium.Cartographic.toCartesian(cartographic_0), Cesium.Cartographic.toCartesian(cartographic_1)] : [Cesium.Cartographic.toCartesian(cartographic_1), Cesium.Cartographic.toCartesian(cartographic_0)];\n //箭头线\n var instance = new Cesium.GeometryInstance({\n id: {\n type: \"SlopeAspect\",\n value: curSlope\n },\n geometry: new Cesium.GroundPolylineGeometry({\n positions: positions1,\n width: this.arrowWidth\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE.withAlpha(0.6)),\n show: new Cesium.ShowGeometryInstanceAttribute(true) //显示或者隐藏\n }\n });\n return instance;\n }\n }, {\n key: \"calculateSlope\",\n value: function calculateSlope(ellipseResults) {\n var _this5 = this;\n var instances = [];\n var polygonInstance = [];\n for (var index = 0; index < ellipseResults.length; index++) {\n var ellipse = ellipseResults[index];\n var center = ellipse[0];\n var heightDifference = 0;\n var maxIndex = 0;\n for (var i = 1; i < ellipse.length - 1; i++) {\n var point = ellipse[i];\n var curHD = point.height - center.height;\n if (Math.abs(curHD) > heightDifference) {\n heightDifference = curHD;\n maxIndex = i;\n }\n }\n var pos0 = new Cesium.Cartographic(center.longitude, center.latitude, 0);\n var pos1 = new Cesium.Cartographic(ellipse[maxIndex].longitude, ellipse[maxIndex].latitude, 0);\n var distance = Cesium.Cartesian3.distance(Cesium.Cartographic.toCartesian(pos0), Cesium.Cartographic.toCartesian(pos1));\n var curSlope = Math.abs(heightDifference / distance); //坡度的tan值\n var curColor = this.calculateSlopeColor(curSlope, 0.4);\n var curPolygonInstance = this.createPolygonInsrance(ellipse, curColor, curSlope);\n polygonInstance.push(curPolygonInstance);\n var diagonalPoint = maxIndex > 4 ? ellipse[maxIndex - 4] : ellipse[maxIndex + 4]; //对角点\n var targetPoint = ellipse[maxIndex];\n var arrowInstance = this.createArrowInstance(targetPoint, center, diagonalPoint, heightDifference, curSlope);\n instances.push(arrowInstance);\n }\n var mapPrimitive = this.viewer.scene.primitives.add(new Cesium.GroundPrimitive({\n geometryInstances: polygonInstance,\n appearance: new Cesium.PerInstanceColorAppearance({\n translucent: true,\n //false时透明度无效\n closed: false\n })\n }));\n var arrowPrimitive = this.viewer.scene.primitives.add(new Cesium.GroundPolylinePrimitive({\n geometryInstances: instances,\n appearance: new Cesium.PolylineMaterialAppearance({\n material: new Cesium.Material({\n fabric: {\n type: \"PolylineArrow\",\n uniforms: {\n color: new Cesium.Color(1.0, 1.0, 0.0, 0.8)\n }\n }\n })\n })\n }));\n this.result.push(arrowPrimitive, mapPrimitive);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk);\n var mouseEvent = function mouseEvent(movement, cartesian) {\n // console.log(movement, cartesian)\n var infoBox = document.getElementById('SlopeAspect-box');\n if (!infoBox) {\n infoBox = document.createElement('div');\n infoBox.id = 'SlopeAspect-box';\n infoBox.style.pointerEvents = 'none';\n infoBox.style.display = 'none';\n infoBox.style.position = 'absolute';\n infoBox.style.background = '#333333';\n infoBox.style.color = '#fff';\n infoBox.style.color = '#fff';\n infoBox.style.padding = '5px';\n infoBox.style.fontSize = '12px';\n infoBox.style.borderRadius = '5px';\n infoBox.style.transform = 'translate(-50%, -10px)';\n infoBox.innerHTML = \"\\n
\\u5761\\u5EA6\\uFF1A
\\n \\n \";\n document.body.appendChild(infoBox);\n }\n var vlaElm = infoBox.getElementsByClassName('value')[0];\n var position = _objectSpread({}, movement.position);\n var pickedObject = _this5.sdk.viewer.scene.pick(position);\n if (pickedObject && pickedObject.id && pickedObject.id.type && pickedObject.id.type === \"SlopeAspect\") {\n var top = 0;\n var left = 0;\n if (_this5.sdk.viewer && _this5.sdk.viewer._element) {\n var element = _this5.sdk.viewer._element.getElementsByClassName('cesium-widget')[0].getElementsByTagName('canvas')[0];\n top = element.getBoundingClientRect().top + window.scrollY;\n left = element.getBoundingClientRect().left + window.scrollX;\n }\n infoBox.style.display = 'block';\n infoBox.style.left = position.x + 2 + left + 'px';\n infoBox.style.top = position.y - 20 + top + 'px';\n vlaElm.innerHTML = '坡度:' + Number(Cesium.Math.toDegrees(pickedObject.id.value || 0).toFixed(2)) + '°';\n } else {\n infoBox.style.display = 'none';\n }\n };\n this.event.mouse_move(function (movement, cartesian) {\n var newMovement = {\n position: _objectSpread({}, movement.endPosition)\n };\n mouseEvent(newMovement, cartesian);\n });\n this.event.mouse_left(mouseEvent);\n this._camera = {\n position: this.sdk.viewer.camera.position,\n heading: this.sdk.viewer.camera.heading,\n pitch: this.sdk.viewer.camera.pitch,\n roll: this.sdk.viewer.camera.roll\n };\n this.sdk.viewer.scene.preRender.addEventListener(this._watchEvent, this);\n // this.sdk.viewer.clock.onTick.addEventListener(() => {\n // console.log(111111)\n // let infoBox = document.getElementById('SlopeAspect-box')\n // if(infoBox) {\n // infoBox.style.display = 'none'\n // }\n // })\n }\n }, {\n key: \"_watchEvent\",\n value: function _watchEvent() {\n if (this._camera.position.x.toFixed(8) !== this.sdk.viewer.camera.position.x.toFixed(8) || this._camera.position.y.toFixed(8) !== this.sdk.viewer.camera.position.y.toFixed(8) || this._camera.position.z.toFixed(8) !== this.sdk.viewer.camera.position.z.toFixed(8) || this._camera.heading.toFixed(8) !== this.sdk.viewer.camera.heading.toFixed(8) || this._camera.pitch.toFixed(8) !== this.sdk.viewer.camera.pitch.toFixed(8) || this._camera.roll.toFixed(8) !== this.sdk.viewer.camera.roll.toFixed(8)) {\n var infoBox = document.getElementById('SlopeAspect-box');\n if (infoBox) {\n infoBox.style.display = 'none';\n }\n }\n this._camera = {\n position: this.sdk.viewer.camera.position,\n heading: this.sdk.viewer.camera.heading,\n pitch: this.sdk.viewer.camera.pitch,\n roll: this.sdk.viewer.camera.roll\n };\n }\n\n //根据坡度值赋值颜色\n }, {\n key: \"calculateSlopeColor\",\n value: function calculateSlopeColor(value, alpha) {\n // 0°~0.5°为平原0.00872686779075879,rgb(85,182,43)\n // 0.5°~2°为微斜坡0.03492076949174773,rgb(135,211,43)\n // 2°~5°为缓斜坡0.08748866352592401,rgb(204,244,44)\n // 5°~15°为斜坡0.2679491924311227,rgb(245,233,44)\n // 15°~35°为陡坡0.7002075382097097,rgb(255,138,43)\n // 35°~55°为峭坡1.4281480067421144,rgb(255,84,43)\n // 55°~90°为垂直壁,rgb(255,32,43)\n if (value < 0.00872686779075879) {\n return \"rgba(85,182,43,\" + alpha + \")\";\n } else if (value < 0.03492076949174773) {\n return \"rgba(135,211,43,\" + alpha + \")\";\n } else if (value < 0.08748866352592401) {\n return \"rgba(204,244,44,\" + alpha + \")\";\n } else if (value < 0.2679491924311227) {\n return \"rgba(245,233,44,\" + alpha + \")\";\n } else if (value < 0.7002075382097097) {\n return \"rgba(255,138,43,\" + alpha + \")\";\n } else if (value < 1.4281480067421144) {\n return \"rgba(255,84,43,\" + alpha + \")\";\n } else {\n return \"rgba(255,32,43,\" + alpha + \")\";\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this6 = this;\n this.result && this.result.forEach(function (element) {\n _this6.viewer.scene.primitives.remove(element);\n });\n this.result = [];\n this.sdk.viewer.scene.preRender.removeEventListener(this._watchEvent, this);\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SlopeAspect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1Nsb3BlQXNwZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9TbG9wZUFzcGVjdC9pbmRleC5qcz9jOGM5Il0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uLy4uL1Rvb2xzXCI7XHJcbmltcG9ydCBEcmF3UG9seWdvbiBmcm9tIFwiLi4vLi4vLi4vRHJhdy9kcmF3UG9seWdvblwiXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5jbGFzcyBTbG9wZUFzcGVjdCBleHRlbmRzIFRvb2xzIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3Ig5Z2h5bqm5Z2h5ZCR5YiG5p6QXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiAqKi9cclxuICBjb25zdHJ1Y3RvcihzZGspIHtcclxuICAgIHN1cGVyKHNkaylcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlcjtcclxuICAgIGxldCB0ZXJyYWluQXZhaWxhYmlsaXR5ID0gdGhpcy52aWV3ZXIudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eTtcclxuICAgIGlmICghdGVycmFpbkF2YWlsYWJpbGl0eSkge1xyXG4gICAgICB0aGlzLmVycm9yID0gJ+acquWKoOi9veWcsOW9ouaVsOaNru+8gSdcclxuICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgbWVzc2FnZTogJ+acquWKoOi9veWcsOW9ouaVsOaNru+8gScsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRcclxuICAgIHRoaXMucmVzdWx0ID0gW107IC8v5a2Y5YKo5Yib5bu655qE5Z2h5bqm5YiG5p6Q57uT5p6c77yMcHJpbWl0aXZl6ZuG5ZCIXHJcbiAgICB0aGlzLmhhbmRsZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xUaXAgPSBcIlwiO1xyXG4gICAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLnB1c2godGhpcylcclxuICAgIHRoaXMuRHJhdyA9IG5ldyBEcmF3UG9seWdvbih0aGlzLnNkaylcclxuICAgIC8vIHRoaXMuY3JlYXRlTmV3NERpc3RhbmNlKClcclxuICAgIHRoaXMuY3JlYXRlTmV3NE51bSg1MClcclxuICB9XHJcblxyXG4gIC8v562J6Led56a75YiH5YiG572R5qC8XHJcbiAgY3JlYXRlTmV3NERpc3RhbmNlKGRpc3RhbmNlKSB7XHJcbiAgICBkaXN0YW5jZSA9IGRpc3RhbmNlIHx8IDAuMTsgLy/pu5jorqQwLjFrbeeyvuW6plxyXG4gICAgbGV0IHdpZHRoID0gZGlzdGFuY2UgKiAyMDAgPiAzNSA/IDM1IDogZGlzdGFuY2UgKiAyMDA7XHJcbiAgICB0aGlzLmFycm93V2lkdGggPSB3aWR0aCA8IDE1ID8gMTUgOiB3aWR0aDtcclxuICAgIGNvbnN0ICR0aGlzID0gdGhpcztcclxuICAgIGNvbnN0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgdGhpcy5EcmF3LnN0YXJ0KChlLCBwb3NpdGlvbnMpID0+IHtcclxuICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6Iez5bCR5oul5pyJ5LiJ5Liq5Z2Q5qCH5L2N572u77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJvdW5kYXJ5ID0gW107XHJcbiAgICAgIGxldCBtaW5YID0gMTAwMDAsXHJcbiAgICAgICAgbWluWSA9IDEwMDAwLFxyXG4gICAgICAgIG1heFggPSAtMTAwMDAsXHJcbiAgICAgICAgbWF4WSA9IC0xMDAwO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwb3NpdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHggPSBlbGVtZW50LmxuZztcclxuICAgICAgICBjb25zdCB5ID0gZWxlbWVudC5sYXQ7XHJcbiAgICAgICAgYm91bmRhcnkucHVzaChbeCwgeV0pO1xyXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xyXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xyXG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xyXG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xyXG4gICAgICB9XHJcbiAgICAgIGJvdW5kYXJ5LnB1c2goYm91bmRhcnlbMF0pO1xyXG4gICAgICBsZXQgYmJveCA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTtcclxuICAgICAgbGV0IG1hc2sgPSB0dXJmLnBvbHlnb24oW2JvdW5kYXJ5XSk7XHJcbiAgICAgIGxldCBncmlkU3F1YXJlID0gdHVyZi5zcXVhcmVHcmlkKGJib3gsIGRpc3RhbmNlLCB7IG1hc2s6IG1hc2sgfSk7XHJcbiAgICAgIHRoaXMuY3JlYXRlRWxsaXBzZShncmlkU3F1YXJlKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIOetieWIhuWIh+WIhue9keagvO+8jOWIh+WIhuaIkOS4gOS4qm51bSpudW3nmoTnvZHmoLxcclxuICBjcmVhdGVOZXc0TnVtKG4pIHtcclxuICAgIGxldCBudW0gPSBuXHJcbiAgICB0aGlzLkRyYXcuc3RhcnQoKGUsIHBvc2l0aW9ucykgPT4ge1xyXG4gICAgICBpZiAoIXBvc2l0aW9ucyB8fCBwb3NpdGlvbnMubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ+iHs+WwkeaLpeacieS4ieS4quWdkOagh+S9jee9ru+8gScpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJvdW5kYXJ5ID0gW107XHJcbiAgICAgIGxldCBtaW5YID0gMTAwMDAsXHJcbiAgICAgICAgbWluWSA9IDEwMDAwLFxyXG4gICAgICAgIG1heFggPSAtMTAwMDAsXHJcbiAgICAgICAgbWF4WSA9IC0xMDAwO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwb3NpdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHggPSBlbGVtZW50LmxuZztcclxuICAgICAgICBjb25zdCB5ID0gZWxlbWVudC5sYXQ7XHJcbiAgICAgICAgYm91bmRhcnkucHVzaChbeCwgeV0pO1xyXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xyXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xyXG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xyXG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xyXG4gICAgICB9XHJcbiAgICAgIGJvdW5kYXJ5LnB1c2goYm91bmRhcnlbMF0pO1xyXG4gICAgICBsZXQgYmJveCA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTtcclxuICAgICAgbGV0IGEgPSBtYXhYIC0gbWluWDtcclxuICAgICAgbGV0IGIgPSBtYXhZIC0gbWluWTtcclxuICAgICAgYiA9IGIgPiBhID8gYiA6IGE7XHJcblxyXG4gICAgICAvLyDmoLnmja7pnaLnp6/kv67mlLnnvZHmoLzmlbBcclxuICAgICAgbGV0IG1hc2sgPSB0dXJmLnBvbHlnb24oW2JvdW5kYXJ5XSk7XHJcbiAgICAgIGxldCBhcmVhID0gdHVyZi5hcmVhKG1hc2spO1xyXG4gICAgICBpZiAoYXJlYSA+IDUwMDAwMDAwMDAwMDApIHtcclxuICAgICAgICBudW0gPSBudW0gLSAyNTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhcmVhID4gMTAwMDAwMDAwMDAwMCkge1xyXG4gICAgICAgIG51bSA9IG51bSAtIDIwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFyZWEgPiA1MDAwMDAwMDAwMDApIHtcclxuICAgICAgICBudW0gPSBudW0gLSAxNTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhcmVhID4gMTAwMDAwMDAwMDAwKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gMTA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXJlYSA+IDYwMDAwMDAwMDAwKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gNTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3RlcCA9IGIgLyBudW07XHJcbiAgICAgIGxldCB3aWR0aCA9IHN0ZXAgKiAyMDAwID4gMzUgPyAzNSA6IHN0ZXAgKiAyMDAwO1xyXG4gICAgICB0aGlzLmFycm93V2lkdGggPSB3aWR0aCA8IDE1ID8gMTUgOiB3aWR0aDtcclxuXHJcbiAgICAgIGxldCBncmlkU3F1YXJlID0gdHVyZi5zcXVhcmVHcmlkKGJib3gsIHN0ZXAsIHtcclxuICAgICAgICB1bml0czogXCJkZWdyZWVzXCIsXHJcbiAgICAgICAgbWFzazogbWFzayxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY3JlYXRlRWxsaXBzZShncmlkU3F1YXJlKTtcclxuICAgIH0pXHJcbiAgICAvLyBDcmVhdGVQb2x5Z29uT25Hcm91bmQoXHJcbiAgICAvLyAgIHZpZXdlcixcclxuICAgIC8vICAgW10sXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLlJFRC53aXRoQWxwaGEoMC4xKSxcclxuICAgIC8vICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5ZRUxMT1csXHJcbiAgICAvLyAgICAgb3V0bGluZVdpZHRoOiAyLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBmdW5jdGlvbiAocG9seWdvbikge1xyXG4gICAgLy8gICAgIGxldCBkZWdyZWVzID0gJHRoaXMuQ2FydGVzaWFuM0xpc3RUb1dHUzg0KHBvbHlnb24ucG90dGluZ1BvaW50KTtcclxuICAgIC8vICAgICB2aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBvbHlnb24pO1xyXG4gICAgLy8gICAgIGxldCBib3VuZGFyeSA9IFtdO1xyXG4gICAgLy8gICAgIGxldCBtaW5YID0gMTAwMDAsXHJcbiAgICAvLyAgICAgICBtaW5ZID0gMTAwMDAsXHJcbiAgICAvLyAgICAgICBtYXhYID0gLTEwMDAwLFxyXG4gICAgLy8gICAgICAgbWF4WSA9IC0xMDAwO1xyXG4gICAgLy8gICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkZWdyZWVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgLy8gICAgICAgY29uc3QgZWxlbWVudCA9IGRlZ3JlZXNbaW5kZXhdO1xyXG4gICAgLy8gICAgICAgY29uc3QgeCA9IGVsZW1lbnQubG5nO1xyXG4gICAgLy8gICAgICAgY29uc3QgeSA9IGVsZW1lbnQubGF0O1xyXG4gICAgLy8gICAgICAgYm91bmRhcnkucHVzaChbeCwgeV0pO1xyXG4gICAgLy8gICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XHJcbiAgICAvLyAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcclxuICAgIC8vICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xyXG4gICAgLy8gICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGJvdW5kYXJ5LnB1c2goYm91bmRhcnlbMF0pO1xyXG4gICAgLy8gICAgIGxldCBiYm94ID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xyXG4gICAgLy8gICAgIGxldCBhID0gbWF4WCAtIG1pblg7XHJcbiAgICAvLyAgICAgbGV0IGIgPSBtYXhZIC0gbWluWTtcclxuICAgIC8vICAgICBiID0gYiA+IGEgPyBiIDogYTtcclxuICAgIC8vICAgICBjb25zdCBzdGVwID0gYiAvIG51bTtcclxuICAgIC8vICAgICBsZXQgd2lkdGggPSBzdGVwICogMjAwMCA+IDM1ID8gMzUgOiBzdGVwICogMjAwMDtcclxuICAgIC8vICAgICB0aGlzLmFycm93V2lkdGggPSB3aWR0aCA8IDE1ID8gMTUgOiB3aWR0aDtcclxuICAgIC8vICAgICBsZXQgbWFzayA9IHR1cmYucG9seWdvbihbYm91bmRhcnldKTtcclxuICAgIC8vICAgICBsZXQgZ3JpZFNxdWFyZSA9IHR1cmYuc3F1YXJlR3JpZChiYm94LCBzdGVwLCB7XHJcbiAgICAvLyAgICAgICB1bml0czogXCJkZWdyZWVzXCIsXHJcbiAgICAvLyAgICAgICBtYXNrOiBtYXNrLFxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICAgIHRoaXMuY3JlYXRlRWxsaXBzZShncmlkU3F1YXJlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gKTtcclxuICB9XHJcbiAgY3JlYXRlRWxsaXBzZShncmlkU3F1YXJlKSB7XHJcbiAgICBsZXQgYm94UmVzdWx0cyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGdyaWRTcXVhcmUuZmVhdHVyZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGZlYXR1cmUgPSBncmlkU3F1YXJlLmZlYXR1cmVzW2luZGV4XTtcclxuICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdO1xyXG4gICAgICBjb25zdCBjZW50ZXJkZWdyZWUgPSBbXHJcbiAgICAgICAgKGNvb3JkaW5hdGVzWzBdWzBdICsgY29vcmRpbmF0ZXNbMl1bMF0pIC8gMixcclxuICAgICAgICAoY29vcmRpbmF0ZXNbMF1bMV0gKyBjb29yZGluYXRlc1syXVsxXSkgLyAyLFxyXG4gICAgICBdO1xyXG4gICAgICBsZXQgY2VudGVyQ2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICBjZW50ZXJkZWdyZWVbMF0sXHJcbiAgICAgICAgY2VudGVyZGVncmVlWzFdXHJcbiAgICAgICk7XHJcbiAgICAgIGJveFJlc3VsdHMucHVzaChjZW50ZXJDYXJ0b2dyYXBoaWMpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZGluYXRlc1tpXTtcclxuICAgICAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjb29yZFswXSwgY29vcmRbMV0pO1xyXG4gICAgICAgIGJveFJlc3VsdHMucHVzaChjYXJ0b2dyYXBoaWMpO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkMSA9IGNvb3JkaW5hdGVzW2kgKyAxXTtcclxuICAgICAgICBpZiAoY29vcmQxKSB7XHJcbiAgICAgICAgICBsZXQgbmV3Q29vcmQgPSBbXHJcbiAgICAgICAgICAgIChjb29yZFswXSArIGNvb3JkMVswXSkgLyAyLFxyXG4gICAgICAgICAgICAoY29vcmRbMV0gKyBjb29yZDFbMV0pIC8gMixcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBsZXQgbmV3Q2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgbmV3Q29vcmRbMF0sXHJcbiAgICAgICAgICAgIG5ld0Nvb3JkWzFdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYm94UmVzdWx0cy5wdXNoKG5ld0NhcnRvZ3JhcGhpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICAvLyDngrnkvY3ov4flpJrvvIzliIbkuLrkuInku73orqHnrpdcclxuICAgIGxldCBudW0gPSAoTWF0aC5mbG9vcihib3hSZXN1bHRzLmxlbmd0aCAvIDMpICsgJycpXHJcbiAgICBudW0gPSBOdW1iZXIobnVtLnN1YnN0cmluZygwLCBudW0ubGVuZ3RoIC0gMSkpKjEwXHJcbiAgICBsZXQgaT0wXHJcbiAgICBsZXQgcG9pbnRzID0gYm94UmVzdWx0cy5zbGljZShpICogbnVtLCAoaSArIDEpICogbnVtKVxyXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQocG9pbnRzKVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChwcykge1xyXG4gICAgICBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChcclxuICAgICAgICBfdGhpcy52aWV3ZXIuc2NlbmUudGVycmFpblByb3ZpZGVyLFxyXG4gICAgICAgIHBzXHJcbiAgICAgICkudGhlbigodXBkYXRlUG9zaXRpb25zKSA9PiB7XHJcbiAgICAgICAgaSsrXHJcbiAgICAgICAgbGV0IHBvaW50cyA9IGJveFJlc3VsdHMuc2xpY2UoaSAqIG51bSwgKGkgKyAxKSAqIG51bSlcclxuICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQocG9pbnRzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYXJyciA9IFtdO1xyXG4gICAgICAgIGxldCBlbGxpcHNlUmVzdWx0cyA9IHVwZGF0ZVBvc2l0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKFxyXG4gICAgICAgICAgcHJlLFxyXG4gICAgICAgICAgaXRlbSxcclxuICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgdXBkYXRlUG9zaXRpb25zXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YXIgYmVnaW4gPSBpbmRleCAqIDEwO1xyXG4gICAgICAgICAgdmFyIGVuZCA9IGJlZ2luICsgMTA7XHJcbiAgICAgICAgICB2YXIgcmVzID0gdXBkYXRlUG9zaXRpb25zLnNsaWNlKGJlZ2luLCBlbmQpO1xyXG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICBhcnJyW2luZGV4XSA9IHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhcnJyO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICBbXSk7XHJcbiAgICAgICAgX3RoaXMuY2FsY3VsYXRlU2xvcGUoZWxsaXBzZVJlc3VsdHMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUG9seWdvbkluc3JhbmNlKHBvaW50cywgY29sb3IsIGN1clNsb3BlKSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcG9pbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHBvaW50c1tpbmRleF07XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKENlc2l1bS5DYXJ0b2dyYXBoaWMudG9DYXJ0ZXNpYW4oZWxlbWVudCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHBvbHlnb24gPSBuZXcgQ2VzaXVtLlBvbHlnb25HZW9tZXRyeSh7XHJcbiAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShwb3NpdGlvbnMpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBvbHlnb25JbnN0YW5jZSA9IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgIGlkOiB7XHJcbiAgICAgICAgdHlwZTogXCJTbG9wZUFzcGVjdFwiLFxyXG4gICAgICAgIHZhbHVlOiBjdXJTbG9wZVxyXG4gICAgICB9LFxyXG4gICAgICBnZW9tZXRyeTogcG9seWdvbixcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoY29sb3IpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpLCAvL+aYvuekuuaIluiAhemakOiXj1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcG9seWdvbkluc3RhbmNlO1xyXG4gIH1cclxuICBjcmVhdGVBcnJvd0luc3RhbmNlKFxyXG4gICAgdGFyZ2V0UG9pbnQsXHJcbiAgICBjZW50ZXIsXHJcbiAgICBkaWFnb25hbFBvaW50LFxyXG4gICAgaGVpZ2h0RGlmZmVyZW5jZSxcclxuICAgIGN1clNsb3BlXHJcbiAgKSB7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljXzAgPSBuZXcgQ2VzaXVtLkNhcnRvZ3JhcGhpYyhcclxuICAgICAgKHRhcmdldFBvaW50LmxvbmdpdHVkZSArIGNlbnRlci5sb25naXR1ZGUpIC8gMixcclxuICAgICAgKHRhcmdldFBvaW50LmxhdGl0dWRlICsgY2VudGVyLmxhdGl0dWRlKSAvIDIsXHJcbiAgICAgICh0YXJnZXRQb2ludC5oZWlnaHQgKyBjZW50ZXIuaGVpZ2h0KSAvIDJcclxuICAgICk7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljXzEgPSBuZXcgQ2VzaXVtLkNhcnRvZ3JhcGhpYyhcclxuICAgICAgKGRpYWdvbmFsUG9pbnQubG9uZ2l0dWRlICsgY2VudGVyLmxvbmdpdHVkZSkgLyAyLFxyXG4gICAgICAoZGlhZ29uYWxQb2ludC5sYXRpdHVkZSArIGNlbnRlci5sYXRpdHVkZSkgLyAyLFxyXG4gICAgICAoZGlhZ29uYWxQb2ludC5oZWlnaHQgKyBjZW50ZXIuaGVpZ2h0KSAvIDJcclxuICAgICk7XHJcbiAgICAvL+WBj+enu+eahFxyXG4gICAgbGV0IHBvc2l0aW9uczEgPVxyXG4gICAgICBoZWlnaHREaWZmZXJlbmNlID4gMFxyXG4gICAgICAgID8gW1xyXG4gICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy50b0NhcnRlc2lhbihjYXJ0b2dyYXBoaWNfMCksXHJcbiAgICAgICAgICBDZXNpdW0uQ2FydG9ncmFwaGljLnRvQ2FydGVzaWFuKGNhcnRvZ3JhcGhpY18xKSxcclxuICAgICAgICBdXHJcbiAgICAgICAgOiBbXHJcbiAgICAgICAgICBDZXNpdW0uQ2FydG9ncmFwaGljLnRvQ2FydGVzaWFuKGNhcnRvZ3JhcGhpY18xKSxcclxuICAgICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMudG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljXzApLFxyXG4gICAgICAgIF07XHJcbiAgICAvL+eureWktOe6v1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICBpZDoge1xyXG4gICAgICAgIHR5cGU6IFwiU2xvcGVBc3BlY3RcIixcclxuICAgICAgICB2YWx1ZTogY3VyU2xvcGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGdlb21ldHJ5OiBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvc2l0aW9uczogcG9zaXRpb25zMSxcclxuICAgICAgICB3aWR0aDogdGhpcy5hcnJvd1dpZHRoLFxyXG4gICAgICB9KSxcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgIENlc2l1bS5Db2xvci5CTFVFLndpdGhBbHBoYSgwLjYpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpLCAvL+aYvuekuuaIluiAhemakOiXj1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfVxyXG4gIGNhbGN1bGF0ZVNsb3BlKGVsbGlwc2VSZXN1bHRzKSB7XHJcbiAgICBsZXQgaW5zdGFuY2VzID0gW107XHJcbiAgICBsZXQgcG9seWdvbkluc3RhbmNlID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxsaXBzZVJlc3VsdHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsbGlwc2UgPSBlbGxpcHNlUmVzdWx0c1tpbmRleF07XHJcblxyXG4gICAgICBjb25zdCBjZW50ZXIgPSBlbGxpcHNlWzBdO1xyXG4gICAgICBsZXQgaGVpZ2h0RGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgIGxldCBtYXhJbmRleCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZWxsaXBzZS5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwb2ludCA9IGVsbGlwc2VbaV07XHJcbiAgICAgICAgbGV0IGN1ckhEID0gcG9pbnQuaGVpZ2h0IC0gY2VudGVyLmhlaWdodDtcclxuICAgICAgICBpZiAoTWF0aC5hYnMoY3VySEQpID4gaGVpZ2h0RGlmZmVyZW5jZSkge1xyXG4gICAgICAgICAgaGVpZ2h0RGlmZmVyZW5jZSA9IGN1ckhEO1xyXG4gICAgICAgICAgbWF4SW5kZXggPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9zMCA9IG5ldyBDZXNpdW0uQ2FydG9ncmFwaGljKGNlbnRlci5sb25naXR1ZGUsIGNlbnRlci5sYXRpdHVkZSwgMCk7XHJcbiAgICAgIGxldCBwb3MxID0gbmV3IENlc2l1bS5DYXJ0b2dyYXBoaWMoXHJcbiAgICAgICAgZWxsaXBzZVttYXhJbmRleF0ubG9uZ2l0dWRlLFxyXG4gICAgICAgIGVsbGlwc2VbbWF4SW5kZXhdLmxhdGl0dWRlLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgbGV0IGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UoXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy50b0NhcnRlc2lhbihwb3MwKSxcclxuICAgICAgICBDZXNpdW0uQ2FydG9ncmFwaGljLnRvQ2FydGVzaWFuKHBvczEpXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBjdXJTbG9wZSA9IE1hdGguYWJzKGhlaWdodERpZmZlcmVuY2UgLyBkaXN0YW5jZSk7IC8v5Z2h5bqm55qEdGFu5YC8XHJcbiAgICAgIGxldCBjdXJDb2xvciA9IHRoaXMuY2FsY3VsYXRlU2xvcGVDb2xvcihjdXJTbG9wZSwgMC40KTtcclxuICAgICAgY29uc3QgY3VyUG9seWdvbkluc3RhbmNlID0gdGhpcy5jcmVhdGVQb2x5Z29uSW5zcmFuY2UoZWxsaXBzZSwgY3VyQ29sb3IsIGN1clNsb3BlKTtcclxuICAgICAgcG9seWdvbkluc3RhbmNlLnB1c2goY3VyUG9seWdvbkluc3RhbmNlKTtcclxuXHJcbiAgICAgIGxldCBkaWFnb25hbFBvaW50ID1cclxuICAgICAgICBtYXhJbmRleCA+IDQgPyBlbGxpcHNlW21heEluZGV4IC0gNF0gOiBlbGxpcHNlW21heEluZGV4ICsgNF07IC8v5a+56KeS54K5XHJcbiAgICAgIGxldCB0YXJnZXRQb2ludCA9IGVsbGlwc2VbbWF4SW5kZXhdO1xyXG4gICAgICBjb25zdCBhcnJvd0luc3RhbmNlID0gdGhpcy5jcmVhdGVBcnJvd0luc3RhbmNlKFxyXG4gICAgICAgIHRhcmdldFBvaW50LFxyXG4gICAgICAgIGNlbnRlcixcclxuICAgICAgICBkaWFnb25hbFBvaW50LFxyXG4gICAgICAgIGhlaWdodERpZmZlcmVuY2UsXHJcbiAgICAgICAgY3VyU2xvcGVcclxuICAgICAgKTtcclxuICAgICAgaW5zdGFuY2VzLnB1c2goYXJyb3dJbnN0YW5jZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXBQcmltaXRpdmUgPSB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChcclxuICAgICAgbmV3IENlc2l1bS5Hcm91bmRQcmltaXRpdmUoe1xyXG4gICAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBwb2x5Z29uSW5zdGFuY2UsXHJcbiAgICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5QZXJJbnN0YW5jZUNvbG9yQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZSwgLy9mYWxzZeaXtumAj+aYjuW6puaXoOaViFxyXG4gICAgICAgICAgY2xvc2VkOiBmYWxzZSxcclxuICAgICAgICB9KSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBjb25zdCBhcnJvd1ByaW1pdGl2ZSA9IHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lUHJpbWl0aXZlKHtcclxuICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogaW5zdGFuY2VzLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uUG9seWxpbmVNYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBmYWJyaWM6IHtcclxuICAgICAgICAgICAgICB0eXBlOiBcIlBvbHlsaW5lQXJyb3dcIixcclxuICAgICAgICAgICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IG5ldyBDZXNpdW0uQ29sb3IoMS4wLCAxLjAsIDAuMCwgMC44KSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHQucHVzaChhcnJvd1ByaW1pdGl2ZSwgbWFwUHJpbWl0aXZlKTtcclxuXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICBsZXQgbW91c2VFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKG1vdmVtZW50LCBjYXJ0ZXNpYW4pXHJcbiAgICAgIGxldCBpbmZvQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nsb3BlQXNwZWN0LWJveCcpXHJcbiAgICAgIGlmICghaW5mb0JveCkge1xyXG4gICAgICAgIGluZm9Cb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIGluZm9Cb3guaWQgPSAnU2xvcGVBc3BlY3QtYm94J1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJ1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcbiAgICAgICAgaW5mb0JveC5zdHlsZS5iYWNrZ3JvdW5kID0gJyMzMzMzMzMnXHJcbiAgICAgICAgaW5mb0JveC5zdHlsZS5jb2xvciA9ICcjZmZmJ1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUuY29sb3IgPSAnI2ZmZidcclxuICAgICAgICBpbmZvQm94LnN0eWxlLnBhZGRpbmcgPSAnNXB4J1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUuZm9udFNpemUgPSAnMTJweCdcclxuICAgICAgICBpbmZvQm94LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc1cHgnXHJcbiAgICAgICAgaW5mb0JveC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKC01MCUsIC0xMHB4KSdcclxuICAgICAgICBpbmZvQm94LmlubmVySFRNTCA9IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj7lnaHluqbvvJo8L2Rpdj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIlxyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgYm9yZGVyOiA0cHggc29saWQ7XHJcbiAgICAgICAgICBib3JkZXItY29sb3I6ICNmZmYwICNmZmYwICMzMzMzMzMgIzMzMzMzMztcclxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XHJcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XHJcbiAgICAgICAgXCI+PC9zcGFuPlxyXG4gICAgICAgIGBcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGluZm9Cb3gpXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHZsYUVsbSA9IGluZm9Cb3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndmFsdWUnKVswXVxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB7IC4uLm1vdmVtZW50LnBvc2l0aW9uIH1cclxuICAgICAgbGV0IHBpY2tlZE9iamVjdCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrKHBvc2l0aW9uKTtcclxuICAgICAgaWYgKHBpY2tlZE9iamVjdCAmJiBwaWNrZWRPYmplY3QuaWQgJiYgcGlja2VkT2JqZWN0LmlkLnR5cGUgJiYgcGlja2VkT2JqZWN0LmlkLnR5cGUgPT09IFwiU2xvcGVBc3BlY3RcIikge1xyXG4gICAgICAgIGxldCB0b3AgPSAwXHJcbiAgICAgICAgbGV0IGxlZnQgPSAwXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIgJiYgdGhpcy5zZGsudmlld2VyLl9lbGVtZW50KSB7XHJcbiAgICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuc2RrLnZpZXdlci5fZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZXNpdW0td2lkZ2V0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdXHJcbiAgICAgICAgICB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZXHJcbiAgICAgICAgICBsZWZ0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgd2luZG93LnNjcm9sbFhcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb0JveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIGluZm9Cb3guc3R5bGUubGVmdCA9IHBvc2l0aW9uLnggKyAyICsgbGVmdCArICdweCdcclxuICAgICAgICBpbmZvQm94LnN0eWxlLnRvcCA9IHBvc2l0aW9uLnkgLSAyMCArIHRvcCArICdweCdcclxuICAgICAgICB2bGFFbG0uaW5uZXJIVE1MID0gJ+WdoeW6pu+8micgKyBOdW1iZXIoQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHBpY2tlZE9iamVjdC5pZC52YWx1ZSB8fCAwKS50b0ZpeGVkKDIpKSArICfCsCdcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpbmZvQm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIGxldCBuZXdNb3ZlbWVudCA9IHtcclxuICAgICAgICBwb3NpdGlvbjogeyAuLi5tb3ZlbWVudC5lbmRQb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgbW91c2VFdmVudChuZXdNb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgfSlcclxuICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChtb3VzZUV2ZW50KVxyXG5cclxuICAgIHRoaXMuX2NhbWVyYSA9IHtcclxuICAgICAgcG9zaXRpb246IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb24sXHJcbiAgICAgIGhlYWRpbmc6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuaGVhZGluZyxcclxuICAgICAgcGl0Y2g6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucGl0Y2gsXHJcbiAgICAgIHJvbGw6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucm9sbFxyXG4gICAgfVxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByZVJlbmRlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3dhdGNoRXZlbnQsIHRoaXMpXHJcbiAgICAvLyAgIHRoaXMuc2RrLnZpZXdlci5jbG9jay5vblRpY2suYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coMTExMTExKVxyXG4gICAgLy8gICAgIGxldCBpbmZvQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nsb3BlQXNwZWN0LWJveCcpXHJcbiAgICAvLyAgICAgaWYoaW5mb0JveCkge1xyXG4gICAgLy8gICAgICAgaW5mb0JveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gIH0pXHJcbiAgfVxyXG5cclxuICBfd2F0Y2hFdmVudCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fY2FtZXJhLnBvc2l0aW9uLngudG9GaXhlZCg4KSAhPT0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbi54LnRvRml4ZWQoOCkgfHxcclxuICAgICAgdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnkudG9GaXhlZCg4KSAhPT0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbi55LnRvRml4ZWQoOCkgfHxcclxuICAgICAgdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnoudG9GaXhlZCg4KSAhPT0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbi56LnRvRml4ZWQoOCkgfHxcclxuICAgICAgdGhpcy5fY2FtZXJhLmhlYWRpbmcudG9GaXhlZCg4KSAhPT0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLnRvRml4ZWQoOCkgfHxcclxuICAgICAgdGhpcy5fY2FtZXJhLnBpdGNoLnRvRml4ZWQoOCkgIT09IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucGl0Y2gudG9GaXhlZCg4KSB8fFxyXG4gICAgICB0aGlzLl9jYW1lcmEucm9sbC50b0ZpeGVkKDgpICE9PSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnJvbGwudG9GaXhlZCg4KVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBpbmZvQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nsb3BlQXNwZWN0LWJveCcpXHJcbiAgICAgIGlmIChpbmZvQm94KSB7XHJcbiAgICAgICAgaW5mb0JveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2NhbWVyYSA9IHtcclxuICAgICAgcG9zaXRpb246IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb24sXHJcbiAgICAgIGhlYWRpbmc6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuaGVhZGluZyxcclxuICAgICAgcGl0Y2g6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucGl0Y2gsXHJcbiAgICAgIHJvbGw6IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucm9sbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy/moLnmja7lnaHluqblgLzotYvlgLzpopzoibJcclxuICBjYWxjdWxhdGVTbG9wZUNvbG9yKHZhbHVlLCBhbHBoYSkge1xyXG4gICAgLy8gMMKw772eMC41wrDkuLrlubPljp8wLjAwODcyNjg2Nzc5MDc1ODc5LHJnYig4NSwxODIsNDMpXHJcbiAgICAvLyAwLjXCsO+9njLCsOS4uuW+ruaWnOWdoTAuMDM0OTIwNzY5NDkxNzQ3NzMscmdiKDEzNSwyMTEsNDMpXHJcbiAgICAvLyAywrDvvZ41wrDkuLrnvJPmlpzlnaEwLjA4NzQ4ODY2MzUyNTkyNDAxLHJnYigyMDQsMjQ0LDQ0KVxyXG4gICAgLy8gNcKw772eMTXCsOS4uuaWnOWdoTAuMjY3OTQ5MTkyNDMxMTIyNyxyZ2IoMjQ1LDIzMyw0NClcclxuICAgIC8vIDE1wrDvvZ4zNcKw5Li66Zmh5Z2hMC43MDAyMDc1MzgyMDk3MDk3LHJnYigyNTUsMTM4LDQzKVxyXG4gICAgLy8gMzXCsO+9njU1wrDkuLrls63lnaExLjQyODE0ODAwNjc0MjExNDQscmdiKDI1NSw4NCw0MylcclxuICAgIC8vIDU1wrDvvZ45MMKw5Li65Z6C55u05aOBLHJnYigyNTUsMzIsNDMpXHJcbiAgICBpZiAodmFsdWUgPCAwLjAwODcyNjg2Nzc5MDc1ODc5KSB7XHJcbiAgICAgIHJldHVybiBcInJnYmEoODUsMTgyLDQzLFwiICsgYWxwaGEgKyBcIilcIjtcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAzNDkyMDc2OTQ5MTc0NzczKSB7XHJcbiAgICAgIHJldHVybiBcInJnYmEoMTM1LDIxMSw0MyxcIiArIGFscGhhICsgXCIpXCI7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMC4wODc0ODg2NjM1MjU5MjQwMSkge1xyXG4gICAgICByZXR1cm4gXCJyZ2JhKDIwNCwyNDQsNDQsXCIgKyBhbHBoYSArIFwiKVwiO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuMjY3OTQ5MTkyNDMxMTIyNykge1xyXG4gICAgICByZXR1cm4gXCJyZ2JhKDI0NSwyMzMsNDQsXCIgKyBhbHBoYSArIFwiKVwiO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuNzAwMjA3NTM4MjA5NzA5Nykge1xyXG4gICAgICByZXR1cm4gXCJyZ2JhKDI1NSwxMzgsNDMsXCIgKyBhbHBoYSArIFwiKVwiO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDEuNDI4MTQ4MDA2NzQyMTE0NCkge1xyXG4gICAgICByZXR1cm4gXCJyZ2JhKDI1NSw4NCw0MyxcIiArIGFscGhhICsgXCIpXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJyZ2JhKDI1NSwzMiw0MyxcIiArIGFscGhhICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXN1bHQgJiYgdGhpcy5yZXN1bHQuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZShlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXN1bHQgPSBbXTtcclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmVSZW5kZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl93YXRjaEV2ZW50LCB0aGlzKVxyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBTbG9wZUFzcGVjdDsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFLQTtBQUtBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/SlopeAspect/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Submerge/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Analysis/Submerge/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u6C34\\u91CF\\n
\\n \\n m\\xB3\\n \\n
\\n
\\n
\\n \\u6700\\u5C0F\\u6C34\\u4F4D\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u6C34\\u9762\\u9762\\u79EF\\n
\\n \\n \\u33A1\\n \\n
\\n
\\n
\\n \\u6700\\u5927\\u6C34\\u4F4D\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u4E0A\\u5347\\u901F\\u5EA6\\n
\\n
\\n
\\n \\n
\\n \\n m/s\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\u5E8F\\u53F7
\\n
\\u7ECF\\u5EA6
\\n
\\u7EAC\\u5EA6
\\n
\\u9AD8\\u7A0B
\\n
\\n
\\n
\\n
\\n
\\n
\\n

\\u6682\\u65E0\\u6570\\u636E

\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1N1Ym1lcmdlL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9TdWJtZXJnZS9fZWxlbWVudC5qcz8xM2MwIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuawtOmHjzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbmFtZT1cIndhdGVyVm9sdW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bcKzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDlsI/msLTkvY08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG5hbWU9XCJtaW5XYXRlckxldmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuawtOmdoumdouenrzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGFyZWFcIiB0eXBlPVwibnVtYmVyXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+446hPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDlpKfmsLTkvY08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG5hbWU9XCJtYXhXYXRlckxldmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzdWJ0aXRsZS1ib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZVwiPuS4iuWNh+mAn+W6pjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCI1MFwiIG1pbj1cIjBcIiBzdGVwPVwiMC4wMVwiIG5hbWU9XCJyaXNpbmdTcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTEwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBuYW1lPVwicmlzaW5nU3BlZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tL3M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBvcGVyYXRlLWJ0bi1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcmF3XCI+PHN2ZyBjbGFzcz1cImljb24tZHJhd1wiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWRyYXdcIj48L3VzZT48L3N2Zz7nu5jliLbojIPlm7Q8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbHl0b1wiPjxzdmcgY2xhc3M9XCJpY29uLXBvc2l0aW9uc1wiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXBvc2l0aW9uc1wiPjwvdXNlPjwvc3ZnPuWumuS9jTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0XCI+PHN2ZyBjbGFzcz1cImljb24tcmVzZXRcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1yZXNldFwiPjwvdXNlPjwvc3ZnPumHjee9rjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFuYWxvZ1wiPjxzdmcgY2xhc3M9XCJpY29uLXBsYXlcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1wbGF5XCI+PC91c2U+PC9zdmc+5byA5aeL5qih5oufPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGF1c2VcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4O1wiPjxzdmcgY2xhc3M9XCJpY29uLXBhdXNlXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tcGF1c2VcIj48L3VzZT48L3N2Zz7mmoLlgZw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzdGFydFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTttYXJnaW4tcmlnaHQ6IDBweDtcIj48c3ZnIGNsYXNzPVwiaWNvbi1wbGF5XCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tcGxheVwiPjwvdXNlPjwvc3ZnPuaSreaUvjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuW6j+WPtzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57uP5bqmPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nuqzluqY8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumrmOeoizwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lbXB0eVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaW1nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxwPuaaguaXoOaVsOaNrjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiIHN0eWxlPVwibWFyZ2luLXRvcDogMjBweDtcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUF3RkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Submerge/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Submerge/index.js": /*!********************************************!*\ !*** ./src/Obj/Analysis/Submerge/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/Submerge/_element.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\nvar Submerge = /*#__PURE__*/function (_Tools) {\n /**\n * @constructor\n * @param sdk\n * @description 淹没效果\n * */\n function Submerge(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Submerge);\n _this = _callSuper(this, Submerge, [sdk, options]);\n _this.sdk = sdk;\n _this.options = {};\n _this.options.name = options.name;\n _this.options.risingSpeed = 1;\n _this.options.minWaterLevel = 0;\n _this.options.maxWaterLevel = 0;\n _this.options.waterVolume = 0;\n _this.currentWaterLaver;\n _this.color = '#00d9ff66';\n _this.Dialog = _Dialog;\n _this.Draw = new _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_this.sdk);\n _this.positions;\n _this.status = true;\n _this.area = 0;\n _this._elms = {};\n _this.tools = new _Tools__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_this.sdk);\n YJ.Analysis.AnalysesResults.push(_this);\n // Submerge.EditBox(this)\n // Submerge.create(this)\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Submerge, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Submerge, [{\n key: \"draw\",\n value: function draw() {\n Submerge.create(this);\n }\n }, {\n key: \"waterVolume\",\n get: function get() {\n return this.options.waterVolume;\n },\n set: function set(val) {\n this.options.waterVolume = val;\n }\n }, {\n key: \"minWaterLevel\",\n get: function get() {\n return this.options.minWaterLevel;\n },\n set: function set(val) {\n this.options.minWaterLevel = val;\n }\n }, {\n key: \"maxWaterLevel\",\n get: function get() {\n return this.options.maxWaterLevel;\n },\n set: function set(val) {\n this.options.maxWaterLevel = val;\n }\n }, {\n key: \"risingSpeed\",\n get: function get() {\n return this.options.risingSpeed;\n },\n set: function set(val) {\n this.options.risingSpeed = val;\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.area;\n },\n set: function set(val) {\n this.area = val;\n }\n }, {\n key: \"move\",\n value: function move() {\n var _this2 = this;\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n }\n var totalTime = (this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed * 1000;\n this.TweenAnimate = new TWEEN.Tween({\n waterLevel: this.options.minWaterLevel\n }).to({\n waterLevel: this.options.maxWaterLevel\n }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this2.currentWaterLaver = r.waterLevel;\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()).start();\n var contentElm = this._DialogObject._element.body;\n var pauseBtn = contentElm.getElementsByClassName('pause')[0];\n var startBtn = contentElm.getElementsByClassName('start')[0];\n startBtn.style.display = 'none';\n pauseBtn.style.display = 'flex';\n }\n }, {\n key: \"restart\",\n value: function restart() {\n var _this3 = this;\n this.currentWaterLaver = this.options.minWaterLevel;\n var isPaused = false;\n if (this.TweenAnimate) {\n isPaused = this.TweenAnimate._isPaused;\n TWEEN.remove(this.TweenAnimate);\n }\n var totalTime = (this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed * 1000;\n this.TweenAnimate = new TWEEN.Tween({\n waterLevel: this.options.minWaterLevel\n }).to({\n waterLevel: this.options.maxWaterLevel\n }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee2(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _this3.currentWaterLaver = r.waterLevel;\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }()).start();\n if (isPaused) {\n this.pause();\n }\n }\n }, {\n key: \"start\",\n value: function start() {\n if (this.TweenAnimate) {\n this.TweenAnimate.resume();\n }\n }\n }, {\n key: \"pause\",\n value: function pause() {\n if (this.TweenAnimate) {\n this.TweenAnimate.pause();\n }\n }\n }, {\n key: \"calculateVolumeHeight\",\n value: function calculateVolumeHeight() {\n that.options.maxWaterLevel;\n }\n\n /**\n * 飞到\n */\n }, {\n key: \"flyTo\",\n value: function flyTo() {\n if (!this.positions || this.positions.length === 0) {\n return;\n }\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_11__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_11__[\"closeViewFollow\"])(this.sdk);\n var positionArray = [];\n for (var i = 0; i < this.positions.length; i++) {\n var fromDegrees = Cesium.Cartesian3.fromDegrees(this.positions[i].lng, this.positions[i].lat, this.options.maxWaterLevel);\n positionArray.push(fromDegrees.x, fromDegrees.y, fromDegrees.z);\n }\n var BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var _this4 = this;\n that.Draw.start(function (a, positions) {\n if (!positions || positions.length < 3) {\n var _error = '至少需要三个坐标!';\n _this4.tools.message({\n message: _error,\n type: 'warning'\n });\n return;\n }\n Submerge.destroy();\n if (!positions || positions.length == 0) {\n that.positions = [];\n that._positions = [];\n that.options.minWaterLevel = 0;\n that.options.maxWaterLevel = 0;\n that.options.waterVolume = 0;\n that.area = 0;\n return;\n }\n var fromDegreesArray = [];\n that.positions = positions;\n that._positions = positions;\n that.options.minWaterLevel = positions[0].alt;\n for (var i = 0; i < positions.length; i++) {\n if (that.options.minWaterLevel > positions[i].alt) {\n that.options.minWaterLevel = positions[i].alt;\n }\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(positions[i].lng, positions[i].lat, that.options.minWaterLevel)\n // }\n var pos = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n that.currentWaterLaver = that.options.minWaterLevel;\n that.entity = that.sdk.viewer.entities.add({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(pos),\n height: new Cesium.CallbackProperty(function () {\n return that.options.minWaterLevel;\n }, false),\n extrudedHeight: new Cesium.CallbackProperty(function () {\n return that.currentWaterLaver;\n }, false),\n material: Cesium.Color.fromCssColorString(that.color)\n }\n });\n that.area = that.computeArea(positions);\n if (that.TweenAnimate) {\n TWEEN.remove(that.TweenAnimate);\n that.TweenAnimate = null;\n }\n var contentElm = that._DialogObject._element.body;\n var pauseBtn = contentElm.getElementsByClassName('pause')[0];\n var startBtn = contentElm.getElementsByClassName('start')[0];\n startBtn.style.display = 'flex';\n pauseBtn.style.display = 'none';\n // that.move()\n // Submerge.EditBox(that)\n });\n }\n }, {\n key: \"EditBox\",\n value: function () {\n var _EditBox = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee3(that) {\n var contentElm, stopBtn, drawBtn, analogBtn, flytoBtn, resetBtn, pauseBtn, startBtn, e_risingSpeed, e_minWaterLevel, e_maxWaterLevel, e_waterVolume, e_area, e_tableBody, e_tableEmpty;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context3.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"](that.sdk.viewer._container, {\n title: '淹没分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n Submerge.destroy();\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n }\n });\n case 3:\n that._DialogObject = _context3.sent;\n _context3.next = 6;\n return that._DialogObject.init();\n case 6:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' submerge';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_8__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n stopBtn = document.createElement('button');\n stopBtn.className = 'el-button';\n stopBtn.innerHTML = '暂停';\n stopBtn.style.width = '80px';\n drawBtn = contentElm.getElementsByClassName('draw')[0];\n drawBtn.addEventListener('click', function () {\n Submerge.create(that);\n });\n analogBtn = contentElm.getElementsByClassName('analog')[0];\n analogBtn.addEventListener('click', function () {\n that.move();\n });\n flytoBtn = contentElm.getElementsByClassName('flyto')[0];\n flytoBtn.addEventListener('click', function () {\n that.flyTo();\n });\n resetBtn = contentElm.getElementsByClassName('reset')[0];\n resetBtn.addEventListener('click', function () {\n that.restart();\n });\n pauseBtn = contentElm.getElementsByClassName('pause')[0];\n startBtn = contentElm.getElementsByClassName('start')[0];\n pauseBtn.addEventListener('click', function () {\n that.pause();\n pauseBtn.style.display = 'none';\n startBtn.style.display = 'flex';\n });\n startBtn.addEventListener('click', function () {\n that.start();\n startBtn.style.display = 'none';\n pauseBtn.style.display = 'flex';\n });\n\n // that._DialogObject.footAppChild(stopBtn)\n // that._DialogObject.footAppChild(resetBtn)\n // that._DialogObject.footAppChild(flytoBtn)\n // that._DialogObject.footAppChild(analogBtn)\n // that._DialogObject.footAppChild(drawBtn)\n\n // 速度\n e_risingSpeed = contentElm.querySelectorAll(\"input[name='risingSpeed']\");\n e_risingSpeed[0].value = that.options.risingSpeed;\n e_risingSpeed[1].value = that.options.risingSpeed;\n e_risingSpeed[0].addEventListener('input', function (e) {\n that.options.risingSpeed = Number(e.target.value);\n });\n e_risingSpeed[1].addEventListener('input', function (e) {\n if (e.data != '.') {\n var value = Number(e.target.value);\n var max = Number(e_risingSpeed[0].max);\n var min = Number(e_risingSpeed[0].min);\n if (value > max) {\n that.options.risingSpeed = max;\n } else if (value < min) {\n that.options.risingSpeed = min;\n } else {\n that.options.risingSpeed = Math.floor(value * 100) / 100;\n }\n }\n });\n Object.defineProperty(that.options, 'risingSpeed', {\n get: function get() {\n return e_risingSpeed[0].value;\n },\n set: function set(value) {\n e_risingSpeed[0].value = value;\n e_risingSpeed[1].value = value;\n }\n });\n that.waterLevel = that.options.maxWaterLevel - that.options.minWaterLevel;\n // 最低水位\n e_minWaterLevel = contentElm.querySelector(\"input[name='minWaterLevel']\");\n e_minWaterLevel.value = that.options.minWaterLevel;\n e_minWaterLevel.addEventListener('input', function (e) {\n if (e.data != '.') {\n var value = Number(e.target.value);\n if (value > 999999999) {\n value = 999999999;\n }\n if (value < 0) {\n value = 0;\n }\n that.options.minWaterLevel = Math.floor(value * 10000) / 10000;\n that.options.maxWaterLevel = that.options.minWaterLevel + that.waterLevel;\n }\n });\n Object.defineProperty(that.options, 'minWaterLevel', {\n get: function get() {\n return Number(e_minWaterLevel.value);\n },\n set: function set(value) {\n e_minWaterLevel.value = Math.floor(Number(value) * 10000) / 10000;\n }\n });\n\n // 最高水位\n e_maxWaterLevel = contentElm.querySelector(\"input[name='maxWaterLevel']\");\n e_maxWaterLevel.value = that.options.maxWaterLevel;\n e_maxWaterLevel.addEventListener('input', function (e) {\n if (e.data != '.') {\n var value = Number(e.target.value);\n if (value > 999999999) {\n value = 999999999;\n }\n if (value < 0) {\n value = 0;\n }\n if (value < that.options.minWaterLevel) {\n that.options.maxWaterLevel = that.options.minWaterLevel;\n } else {\n that.options.maxWaterLevel = Math.floor(value * 10000) / 10000;\n }\n that.waterLevel = that.options.maxWaterLevel - that.options.minWaterLevel;\n that.options.waterVolume = Number((that.waterLevel * that.area).toFixed(4));\n }\n });\n Object.defineProperty(that.options, 'maxWaterLevel', {\n get: function get() {\n return Number(e_maxWaterLevel.value);\n },\n set: function set(value) {\n if (isNaN(value)) {\n value = 0;\n }\n e_maxWaterLevel.value = Math.floor(Number(value) * 10000) / 10000;\n }\n });\n\n // 水量\n e_waterVolume = contentElm.querySelector(\"input[name='waterVolume']\");\n e_waterVolume.value = that.options.waterVolume;\n e_waterVolume.addEventListener('input', function (e) {\n if (e.data != '.') {\n var value = Number(e.target.value);\n if (value > 99999999999999) {\n value = 99999999999999;\n }\n if (value < 0) {\n value = 0;\n }\n that.options.waterVolume = Math.floor(value * 10000) / 10000;\n if (that.area) {\n that.waterLevel = Number((that.options.waterVolume / that.area).toFixed(4));\n that.options.maxWaterLevel = that.options.minWaterLevel + that.waterLevel;\n }\n }\n });\n Object.defineProperty(that.options, 'waterVolume', {\n get: function get() {\n return Number(e_waterVolume.value);\n },\n set: function set(value) {\n e_waterVolume.value = value;\n }\n });\n\n // 面积\n e_area = contentElm.getElementsByClassName('area')[0];\n e_area.value = that.area;\n Object.defineProperty(that, 'area', {\n get: function get() {\n return Number(e_area.value);\n },\n set: function set(value) {\n e_area.value = value;\n that.waterLevel = Number((that.options.waterVolume / that.area).toFixed(4));\n that.options.maxWaterLevel = that.options.minWaterLevel + that.waterLevel;\n }\n });\n // 表格\n e_tableBody = contentElm.getElementsByClassName('table-body')[0];\n e_tableEmpty = contentElm.getElementsByClassName('table-empty')[0];\n Object.defineProperty(that, 'positions', {\n get: function get() {\n return that._positions;\n },\n set: function set(value) {\n if (value && value.length > 0) {\n e_tableEmpty.style.display = 'none';\n var tr = '';\n for (var i = 0; i < value.length; i++) {\n tr = tr + \"
\\n
\".concat(i + 1, \"
\\n
\").concat(Number(value[i].lng.toFixed(10)), \"
\\n
\").concat(Number(value[i].lat.toFixed(10)), \"
\\n
\").concat(Number(value[i].alt.toFixed(4)), \"
\\n
\");\n }\n e_tableBody.innerHTML = tr;\n } else {\n e_tableBody.innerHTML = '';\n e_tableEmpty.style.display = 'flex';\n }\n }\n });\n case 51:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function EditBox(_x5) {\n return _EditBox.apply(this, arguments);\n }\n return EditBox;\n }()\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n }\n this.Draw.end();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n }\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n value = Number(value);\n }\n that[m.value] = value;\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Submerge);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1N1Ym1lcmdlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9TdWJtZXJnZS9pbmRleC5qcz8yZDY5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vQmFzZURpYWxvZyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcbmltcG9ydCBEcmF3UG9seWdvbiBmcm9tIFwiLi4vLi4vLi4vRHJhdy9kcmF3UG9seWdvblwiXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uLy4uL1Rvb2xzXCI7XG5pbXBvcnQgeyBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcbmNsYXNzIFN1Ym1lcmdlIGV4dGVuZHMgVG9vbHMge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBzZGtcbiAgICogQGRlc2NyaXB0aW9uIOa3ueayoeaViOaenFxuICAgKiAqL1xuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcbiAgICB0aGlzLnNkayA9IHNka1xuICAgIHRoaXMub3B0aW9ucyA9IHt9XG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWVcbiAgICB0aGlzLm9wdGlvbnMucmlzaW5nU3BlZWQgPSAxXG4gICAgdGhpcy5vcHRpb25zLm1pbldhdGVyTGV2ZWwgPSAwXG4gICAgdGhpcy5vcHRpb25zLm1heFdhdGVyTGV2ZWwgPSAwXG4gICAgdGhpcy5vcHRpb25zLndhdGVyVm9sdW1lID0gMFxuICAgIHRoaXMuY3VycmVudFdhdGVyTGF2ZXJcbiAgICB0aGlzLmNvbG9yID0gJyMwMGQ5ZmY2NidcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcbiAgICB0aGlzLkRyYXcgPSBuZXcgRHJhd1BvbHlnb24odGhpcy5zZGspXG4gICAgdGhpcy5wb3NpdGlvbnNcbiAgICB0aGlzLnN0YXR1cyA9IHRydWVcbiAgICB0aGlzLmFyZWEgPSAwXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xuICAgIHRoaXMudG9vbHMgPSBuZXcgVG9vbHModGhpcy5zZGspXG4gICAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLnB1c2godGhpcylcbiAgICAvLyBTdWJtZXJnZS5FZGl0Qm94KHRoaXMpXG4gICAgLy8gU3VibWVyZ2UuY3JlYXRlKHRoaXMpXG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcbiAgICB0aGF0LkRyYXcuc3RhcnQoKGEsIHBvc2l0aW9ucykgPT4ge1xuICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbGV0IF9lcnJvciA9ICfoh7PlsJHpnIDopoHkuInkuKrlnZDmoIfvvIEnXG4gICAgICAgIHRoaXMudG9vbHMubWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZTogX2Vycm9yLFxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgU3VibWVyZ2UuZGVzdHJveSgpXG4gICAgICBpZiAoIXBvc2l0aW9ucyB8fCBwb3NpdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhhdC5wb3NpdGlvbnMgPSBbXVxuICAgICAgICB0aGF0Ll9wb3NpdGlvbnMgPSBbXVxuICAgICAgICB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbCA9IDBcbiAgICAgICAgdGhhdC5vcHRpb25zLm1heFdhdGVyTGV2ZWwgPSAwXG4gICAgICAgIHRoYXQub3B0aW9ucy53YXRlclZvbHVtZSA9IDBcbiAgICAgICAgdGhhdC5hcmVhID0gMFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cbiAgICAgIHRoYXQucG9zaXRpb25zID0gcG9zaXRpb25zXG4gICAgICB0aGF0Ll9wb3NpdGlvbnMgPSBwb3NpdGlvbnNcbiAgICAgIHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsID0gcG9zaXRpb25zWzBdLmFsdFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsID4gcG9zaXRpb25zW2ldLmFsdCkge1xuICAgICAgICAgIHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsID0gcG9zaXRpb25zW2ldLmFsdFxuICAgICAgICB9XG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxuICAgICAgfVxuICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsKVxuICAgICAgLy8gfVxuICAgICAgbGV0IHBvcyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcbiAgICAgIHRoYXQuY3VycmVudFdhdGVyTGF2ZXIgPSB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbFxuICAgICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcbiAgICAgICAgcG9seWdvbjoge1xuICAgICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHBvcyksXG4gICAgICAgICAgaGVpZ2h0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsXG4gICAgICAgICAgfSwgZmFsc2UpLFxuICAgICAgICAgIGV4dHJ1ZGVkSGVpZ2h0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoYXQuY3VycmVudFdhdGVyTGF2ZXJcbiAgICAgICAgICB9LCBmYWxzZSksXG4gICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5jb2xvciksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgdGhhdC5hcmVhID0gdGhhdC5jb21wdXRlQXJlYShwb3NpdGlvbnMpXG4gICAgICBpZiAodGhhdC5Ud2VlbkFuaW1hdGUpIHtcbiAgICAgICAgVFdFRU4ucmVtb3ZlKHRoYXQuVHdlZW5BbmltYXRlKVxuICAgICAgICB0aGF0LlR3ZWVuQW5pbWF0ZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIGxldCBjb250ZW50RWxtID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHlcbiAgICAgIGxldCBwYXVzZUJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGF1c2UnKVswXTtcbiAgICAgIGxldCBzdGFydEJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3RhcnQnKVswXTtcbiAgICAgIHN0YXJ0QnRuLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcbiAgICAgIHBhdXNlQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIC8vIHRoYXQubW92ZSgpXG4gICAgICAvLyBTdWJtZXJnZS5FZGl0Qm94KHRoYXQpXG4gICAgfSlcbiAgfVxuICBkcmF3KCkge1xuICAgIFN1Ym1lcmdlLmNyZWF0ZSh0aGlzKVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIEVkaXRCb3godGhhdCkge1xuICAgIGlmICh0aGF0Ll9EaWFsb2dPYmplY3QgJiYgdGhhdC5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gbnVsbFxuICAgIH1cbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoYXQuc2RrLnZpZXdlci5fY29udGFpbmVyLCB7XG4gICAgICB0aXRsZTogJ+a3ueayoeWIhuaekCcsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcbiAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcbiAgICAgICAgU3VibWVyZ2UuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhhdC5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXG4gICAgICB9LFxuICAgIH0pXG4gICAgYXdhaXQgdGhhdC5fRGlhbG9nT2JqZWN0LmluaXQoKVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgc3VibWVyZ2UnXG4gICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxuICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcbiAgICBsZXQgc3RvcEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIHN0b3BCdG4uY2xhc3NOYW1lID0gJ2VsLWJ1dHRvbidcbiAgICBzdG9wQnRuLmlubmVySFRNTCA9ICfmmoLlgZwnXG4gICAgc3RvcEJ0bi5zdHlsZS53aWR0aCA9ICc4MHB4J1xuXG4gICAgbGV0IGRyYXdCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RyYXcnKVswXVxuICAgIGRyYXdCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBTdWJtZXJnZS5jcmVhdGUodGhhdClcbiAgICB9KVxuICAgIGxldCBhbmFsb2dCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FuYWxvZycpWzBdO1xuICAgIGFuYWxvZ0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoYXQubW92ZSgpXG4gICAgfSlcbiAgICBsZXQgZmx5dG9CdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZseXRvJylbMF07XG4gICAgZmx5dG9CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGF0LmZseVRvKClcbiAgICB9KVxuICAgIGxldCByZXNldEJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVzZXQnKVswXTtcbiAgICByZXNldEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoYXQucmVzdGFydCgpXG4gICAgfSlcbiAgICBsZXQgcGF1c2VCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BhdXNlJylbMF07XG4gICAgbGV0IHN0YXJ0QnRuID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGFydCcpWzBdO1xuICAgIHBhdXNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhhdC5wYXVzZSgpXG4gICAgICBwYXVzZUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBzdGFydEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgfSlcbiAgICBzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoYXQuc3RhcnQoKVxuICAgICAgc3RhcnRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgcGF1c2VCdG4uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xuICAgIH0pXG5cbiAgICAvLyB0aGF0Ll9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKHN0b3BCdG4pXG4gICAgLy8gdGhhdC5fRGlhbG9nT2JqZWN0LmZvb3RBcHBDaGlsZChyZXNldEJ0bilcbiAgICAvLyB0aGF0Ll9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGZseXRvQnRuKVxuICAgIC8vIHRoYXQuX0RpYWxvZ09iamVjdC5mb290QXBwQ2hpbGQoYW5hbG9nQnRuKVxuICAgIC8vIHRoYXQuX0RpYWxvZ09iamVjdC5mb290QXBwQ2hpbGQoZHJhd0J0bilcblxuICAgIC8vIOmAn+W6plxuICAgIGxldCBlX3Jpc2luZ1NwZWVkID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT0ncmlzaW5nU3BlZWQnXVwiKVxuICAgIGVfcmlzaW5nU3BlZWRbMF0udmFsdWUgPSB0aGF0Lm9wdGlvbnMucmlzaW5nU3BlZWRcbiAgICBlX3Jpc2luZ1NwZWVkWzFdLnZhbHVlID0gdGhhdC5vcHRpb25zLnJpc2luZ1NwZWVkXG4gICAgZV9yaXNpbmdTcGVlZFswXS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4ge1xuICAgICAgdGhhdC5vcHRpb25zLnJpc2luZ1NwZWVkID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9KTtcbiAgICBlX3Jpc2luZ1NwZWVkWzFdLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZSA9PiB7XG4gICAgICBpZiAoZS5kYXRhICE9ICcuJykge1xuICAgICAgICBsZXQgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpXG4gICAgICAgIGxldCBtYXggPSBOdW1iZXIoZV9yaXNpbmdTcGVlZFswXS5tYXgpXG4gICAgICAgIGxldCBtaW4gPSBOdW1iZXIoZV9yaXNpbmdTcGVlZFswXS5taW4pXG4gICAgICAgIGlmICh2YWx1ZSA+IG1heCkge1xuICAgICAgICAgIHRoYXQub3B0aW9ucy5yaXNpbmdTcGVlZCA9IG1heDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICAgIHRoYXQub3B0aW9ucy5yaXNpbmdTcGVlZCA9IG1pbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucmlzaW5nU3BlZWQgPSBNYXRoLmZsb29yKHZhbHVlICogMTAwKSAvIDEwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0Lm9wdGlvbnMsICdyaXNpbmdTcGVlZCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGVfcmlzaW5nU3BlZWRbMF0udmFsdWVcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgZV9yaXNpbmdTcGVlZFswXS52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGVfcmlzaW5nU3BlZWRbMV0udmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhhdC53YXRlckxldmVsID0gdGhhdC5vcHRpb25zLm1heFdhdGVyTGV2ZWwgLSB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbFxuICAgIC8vIOacgOS9juawtOS9jVxuICAgIGxldCBlX21pbldhdGVyTGV2ZWwgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdtaW5XYXRlckxldmVsJ11cIilcbiAgICBlX21pbldhdGVyTGV2ZWwudmFsdWUgPSB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbFxuICAgIGVfbWluV2F0ZXJMZXZlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4ge1xuICAgICAgaWYgKGUuZGF0YSAhPSAnLicpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICBpZiAodmFsdWUgPiA5OTk5OTk5OTkpIHtcbiAgICAgICAgICB2YWx1ZSA9IDk5OTk5OTk5OVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IDBcbiAgICAgICAgfVxuICAgICAgICB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbCA9IE1hdGguZmxvb3IodmFsdWUgKiAxMDAwMCkgLyAxMDAwMDtcbiAgICAgICAgdGhhdC5vcHRpb25zLm1heFdhdGVyTGV2ZWwgPSB0aGF0Lm9wdGlvbnMubWluV2F0ZXJMZXZlbCArIHRoYXQud2F0ZXJMZXZlbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdC5vcHRpb25zLCAnbWluV2F0ZXJMZXZlbCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihlX21pbldhdGVyTGV2ZWwudmFsdWUpXG4gICAgICB9LFxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGVfbWluV2F0ZXJMZXZlbC52YWx1ZSA9IE1hdGguZmxvb3IoTnVtYmVyKHZhbHVlKSAqIDEwMDAwKSAvIDEwMDAwO1xuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyDmnIDpq5jmsLTkvY1cbiAgICBsZXQgZV9tYXhXYXRlckxldmVsID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0nbWF4V2F0ZXJMZXZlbCddXCIpXG4gICAgZV9tYXhXYXRlckxldmVsLnZhbHVlID0gdGhhdC5vcHRpb25zLm1heFdhdGVyTGV2ZWxcbiAgICBlX21heFdhdGVyTGV2ZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBlID0+IHtcbiAgICAgIGlmIChlLmRhdGEgIT0gJy4nKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgaWYgKHZhbHVlID4gOTk5OTk5OTk5KSB7XG4gICAgICAgICAgdmFsdWUgPSA5OTk5OTk5OTlcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgICAgdmFsdWUgPSAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIDwgdGhhdC5vcHRpb25zLm1pbldhdGVyTGV2ZWwpIHtcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMubWF4V2F0ZXJMZXZlbCA9IHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoYXQub3B0aW9ucy5tYXhXYXRlckxldmVsID0gTWF0aC5mbG9vcih2YWx1ZSAqIDEwMDAwKSAvIDEwMDAwO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQud2F0ZXJMZXZlbCA9IHRoYXQub3B0aW9ucy5tYXhXYXRlckxldmVsIC0gdGhhdC5vcHRpb25zLm1pbldhdGVyTGV2ZWxcbiAgICAgICAgdGhhdC5vcHRpb25zLndhdGVyVm9sdW1lID0gTnVtYmVyKCh0aGF0LndhdGVyTGV2ZWwgKiB0aGF0LmFyZWEpLnRvRml4ZWQoNCkpXG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQub3B0aW9ucywgJ21heFdhdGVyTGV2ZWwnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoZV9tYXhXYXRlckxldmVsLnZhbHVlKVxuICAgICAgfSxcbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSAwXG4gICAgICAgIH1cbiAgICAgICAgZV9tYXhXYXRlckxldmVsLnZhbHVlID0gTWF0aC5mbG9vcihOdW1iZXIodmFsdWUpICogMTAwMDApIC8gMTAwMDA7XG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIOawtOmHj1xuICAgIGxldCBlX3dhdGVyVm9sdW1lID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0nd2F0ZXJWb2x1bWUnXVwiKVxuICAgIGVfd2F0ZXJWb2x1bWUudmFsdWUgPSB0aGF0Lm9wdGlvbnMud2F0ZXJWb2x1bWVcbiAgICBlX3dhdGVyVm9sdW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZSA9PiB7XG4gICAgICBpZiAoZS5kYXRhICE9ICcuJykge1xuICAgICAgICBsZXQgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpXG4gICAgICAgIGlmICh2YWx1ZSA+IDk5OTk5OTk5OTk5OTk5KSB7XG4gICAgICAgICAgdmFsdWUgPSA5OTk5OTk5OTk5OTk5OVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IDBcbiAgICAgICAgfVxuICAgICAgICB0aGF0Lm9wdGlvbnMud2F0ZXJWb2x1bWUgPSBNYXRoLmZsb29yKHZhbHVlICogMTAwMDApIC8gMTAwMDA7XG4gICAgICAgIGlmICh0aGF0LmFyZWEpIHtcbiAgICAgICAgICB0aGF0LndhdGVyTGV2ZWwgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy53YXRlclZvbHVtZSAvIHRoYXQuYXJlYSkudG9GaXhlZCg0KSlcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMubWF4V2F0ZXJMZXZlbCA9IHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsICsgdGhhdC53YXRlckxldmVsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdC5vcHRpb25zLCAnd2F0ZXJWb2x1bWUnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoZV93YXRlclZvbHVtZS52YWx1ZSlcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgZV93YXRlclZvbHVtZS52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIOmdouenr1xuICAgIGxldCBlX2FyZWEgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FyZWEnKVswXVxuICAgIGVfYXJlYS52YWx1ZSA9IHRoYXQuYXJlYVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCAnYXJlYScsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihlX2FyZWEudmFsdWUpXG4gICAgICB9LFxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGVfYXJlYS52YWx1ZSA9IHZhbHVlXG4gICAgICAgIHRoYXQud2F0ZXJMZXZlbCA9IE51bWJlcigodGhhdC5vcHRpb25zLndhdGVyVm9sdW1lIC8gdGhhdC5hcmVhKS50b0ZpeGVkKDQpKVxuICAgICAgICB0aGF0Lm9wdGlvbnMubWF4V2F0ZXJMZXZlbCA9IHRoYXQub3B0aW9ucy5taW5XYXRlckxldmVsICsgdGhhdC53YXRlckxldmVsXG4gICAgICB9XG4gICAgfSlcbiAgICAvLyDooajmoLxcbiAgICBsZXQgZV90YWJsZUJvZHkgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxuICAgIGxldCBlX3RhYmxlRW1wdHkgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgJ3Bvc2l0aW9ucycsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoYXQuX3Bvc2l0aW9uc1xuICAgICAgfSxcbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVfdGFibGVFbXB0eS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgbGV0IHRyID0gJydcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ciA9IHRyICsgYDxkaXYgY2xhc3M9XCJ0clwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7aSArIDF9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+JHtOdW1iZXIodmFsdWVbaV0ubG5nLnRvRml4ZWQoMTApKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke051bWJlcih2YWx1ZVtpXS5sYXQudG9GaXhlZCgxMCkpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7TnVtYmVyKHZhbHVlW2ldLmFsdC50b0ZpeGVkKDQpKX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICB9XG4gICAgICAgICAgZV90YWJsZUJvZHkuaW5uZXJIVE1MID0gdHJcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBlX3RhYmxlQm9keS5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIGVfdGFibGVFbXB0eS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0IHdhdGVyVm9sdW1lKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMud2F0ZXJWb2x1bWVcbiAgfVxuICBzZXQgd2F0ZXJWb2x1bWUodmFsKSB7XG4gICAgdGhpcy5vcHRpb25zLndhdGVyVm9sdW1lID0gdmFsXG4gIH1cbiAgZ2V0IG1pbldhdGVyTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5taW5XYXRlckxldmVsXG4gIH1cbiAgc2V0IG1pbldhdGVyTGV2ZWwodmFsKSB7XG4gICAgdGhpcy5vcHRpb25zLm1pbldhdGVyTGV2ZWwgPSB2YWxcbiAgfVxuICBnZXQgbWF4V2F0ZXJMZXZlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1heFdhdGVyTGV2ZWxcbiAgfVxuICBzZXQgbWF4V2F0ZXJMZXZlbCh2YWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubWF4V2F0ZXJMZXZlbCA9IHZhbFxuICB9XG4gIGdldCByaXNpbmdTcGVlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJpc2luZ1NwZWVkXG4gIH1cbiAgc2V0IHJpc2luZ1NwZWVkKHZhbCkge1xuICAgIHRoaXMub3B0aW9ucy5yaXNpbmdTcGVlZCA9IHZhbFxuICB9XG4gIGdldCBhcmVhKCkge1xuICAgIHJldHVybiB0aGlzLmFyZWFcbiAgfVxuICBzZXQgYXJlYSh2YWwpIHtcbiAgICB0aGlzLmFyZWEgPSB2YWxcbiAgfVxuXG5cblxuICBtb3ZlKCkge1xuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xuICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuVHdlZW5BbmltYXRlKVxuICAgIH1cbiAgICBsZXQgdG90YWxUaW1lID0gKCh0aGlzLm9wdGlvbnMubWF4V2F0ZXJMZXZlbCAtIHRoaXMub3B0aW9ucy5taW5XYXRlckxldmVsKSAvIHRoaXMub3B0aW9ucy5yaXNpbmdTcGVlZCkgKiAxMDAwXG4gICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBuZXcgVFdFRU4uVHdlZW4oeyB3YXRlckxldmVsOiB0aGlzLm9wdGlvbnMubWluV2F0ZXJMZXZlbCB9KS50byh7IHdhdGVyTGV2ZWw6IHRoaXMub3B0aW9ucy5tYXhXYXRlckxldmVsIH0sIHRvdGFsVGltZSkuZGVsYXkodGhpcy5kZWxheSkuZWFzaW5nKFRXRUVOLkVhc2luZy5MaW5lYXIuTm9uZSkub25VcGRhdGUoYXN5bmMgKHIsIGEpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFdhdGVyTGF2ZXIgPSByLndhdGVyTGV2ZWxcbiAgICB9KS5zdGFydCgpXG4gICAgbGV0IGNvbnRlbnRFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keVxuICAgIGxldCBwYXVzZUJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGF1c2UnKVswXTtcbiAgICBsZXQgc3RhcnRCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXJ0JylbMF07XG4gICAgc3RhcnRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHBhdXNlQnRuLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgdGhpcy5jdXJyZW50V2F0ZXJMYXZlciA9IHRoaXMub3B0aW9ucy5taW5XYXRlckxldmVsXG4gICAgbGV0IGlzUGF1c2VkID0gZmFsc2VcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcbiAgICAgIGlzUGF1c2VkID0gdGhpcy5Ud2VlbkFuaW1hdGUuX2lzUGF1c2VkXG4gICAgICBUV0VFTi5yZW1vdmUodGhpcy5Ud2VlbkFuaW1hdGUpXG4gICAgfVxuICAgIGxldCB0b3RhbFRpbWUgPSAoKHRoaXMub3B0aW9ucy5tYXhXYXRlckxldmVsIC0gdGhpcy5vcHRpb25zLm1pbldhdGVyTGV2ZWwpIC8gdGhpcy5vcHRpb25zLnJpc2luZ1NwZWVkKSAqIDEwMDBcbiAgICB0aGlzLlR3ZWVuQW5pbWF0ZSA9IG5ldyBUV0VFTi5Ud2Vlbih7IHdhdGVyTGV2ZWw6IHRoaXMub3B0aW9ucy5taW5XYXRlckxldmVsIH0pLnRvKHsgd2F0ZXJMZXZlbDogdGhpcy5vcHRpb25zLm1heFdhdGVyTGV2ZWwgfSwgdG90YWxUaW1lKS5kZWxheSh0aGlzLmRlbGF5KS5lYXNpbmcoVFdFRU4uRWFzaW5nLkxpbmVhci5Ob25lKS5vblVwZGF0ZShhc3luYyAociwgYSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50V2F0ZXJMYXZlciA9IHIud2F0ZXJMZXZlbFxuICAgIH0pLnN0YXJ0KClcbiAgICBpZiAoaXNQYXVzZWQpIHtcbiAgICAgIHRoaXMucGF1c2UoKVxuICAgIH1cbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlKSB7XG4gICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5wYXVzZSgpXG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlVm9sdW1lSGVpZ2h0KCkge1xuICAgIHRoYXQub3B0aW9ucy5tYXhXYXRlckxldmVsXG4gIH1cblxuICAvKipcbiAqIOmjnuWIsFxuKi9cbiAgZmx5VG8oKSB7XG4gICAgaWYgKCF0aGlzLnBvc2l0aW9ucyB8fCB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXG5cbiAgICBsZXQgcG9zaXRpb25BcnJheSA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZyb21EZWdyZWVzID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLnBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5tYXhXYXRlckxldmVsKVxuICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGZyb21EZWdyZWVzLngsIGZyb21EZWdyZWVzLnksIGZyb21EZWdyZWVzLnopXG4gICAgfVxuICAgIGxldCBCb3VuZGluZ1NwaGVyZSA9IENlc2l1bS5Cb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25BcnJheSlcbiAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcbiAgICAgIG9mZnNldDoge1xuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xuICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuVHdlZW5BbmltYXRlKVxuICAgIH1cbiAgICB0aGlzLkRyYXcuZW5kKClcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxuICB9XG5cbiAgc3RhdGljIEV2ZW50QmluZGluZyh0aGF0LCBlbGVtZW50cykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBFdmVudCA9IFtdXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXNbbS52YWx1ZV0pIHtcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcbiAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUgIT0gJycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVtb3ZlTmFtZS5sZW5ndGg7IG4rKykge1xuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNFdmVudCkge1xuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgRXZlbnRbdF0oZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWJtZXJnZVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBOE5BO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBek5BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMURBO0FBQUE7QUFBQTtBQTBEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakZBO0FBQUE7QUFLQTtBQTZFQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Submerge/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/TerrainExcavation/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Analysis/TerrainExcavation/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u6316\\u6398\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ED8\\u5236\\u5F00\\u6316\\u533A\\u57DF\\n \\n
\\n
\\n \\u6E05\\u9664\\u5F00\\u6316\\u533A\\u57DF\\n \\n
\\n
\\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1RlcnJhaW5FeGNhdmF0aW9uL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9UZXJyYWluRXhjYXZhdGlvbi9fZWxlbWVudC5qcz8xNzZmIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDcwcHg7XCI+5oyW5o6Y6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiNTAwMDAwMFwiIG5hbWU9XCJoZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu5jliLblvIDmjJbljLrln588L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3RhcnQtZXhjYXZhdGlvblwiPjxzdmcgY2xhc3M9XCJpY29uLWVkaXRcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1lZGl0XCI+PC91c2U+PC9zdmc+57uY5Yi2PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5riF6Zmk5byA5oyW5Yy65Z+fPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFuLWV4Y2F2YXRpb25cIj48c3ZnIGNsYXNzPVwiaWNvbi1jbG9zZVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWNsb3NlXCI+PC91c2U+PC9zdmc+5riF6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUE0QkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/TerrainExcavation/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/TerrainExcavation/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Analysis/TerrainExcavation/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/TerrainExcavation/_element.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\nvar ExcavationFaces = [];\nvar TerrainExcavation = /*#__PURE__*/function (_Tools) {\n /**\r\n * @constructor\r\n * @description 地形开挖\r\n * @param sdk\r\n * */\n function TerrainExcavation(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, TerrainExcavation);\n _this = _callSuper(this, TerrainExcavation, [sdk]);\n _this.viewer = sdk.viewer;\n _this.options = options || {};\n _this.options.height = _this.options.height || _this.options.height === 0 ? _this.options.height : 10;\n _this.options.show = _this.options.show || _this.options.show === false ? _this.options.show : true;\n _this.bottomImg = _this.getSourceRootPath() + '/img/excavationregion_top.jpg';\n _this.wallImg = _this.getSourceRootPath() + '/img/excavationregion_side.jpg';\n _this.splitNum = Cesium.defaultValue(options.splitNum, 50);\n _this.Draw = new _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_this.sdk);\n _this.bottomMaterial = Cesium.Material.fromType('Color', {\n color: Cesium.Color.fromAlpha(Cesium.Color.fromCssColorString('#735d4f'))\n });\n _this.wallMaterial = Cesium.Material.fromType('Color', {\n color: Cesium.Color.fromAlpha(Cesium.Color.fromCssColorString('#976b4e'))\n });\n var imageBottom = new Image();\n var wallBottom = new Image();\n imageBottom.src = _this.bottomImg;\n wallBottom.src = _this.wallImg;\n imageBottom.crossOrigin = \"Anonymous\";\n wallBottom.crossOrigin = \"Anonymous\";\n imageBottom.onload = function () {\n var canvas = document.createElement('canvas');\n canvas.width = imageBottom.width;\n canvas.height = imageBottom.height;\n var context = canvas.getContext('2d');\n context.drawImage(imageBottom, 0, 0, imageBottom.width, imageBottom.height);\n var base64 = canvas.toDataURL('image/jpg');\n _this.bottomMaterial = new Cesium.Material({\n fabric: {\n type: \"Image\",\n uniforms: {\n image: base64\n }\n }\n });\n if (_this.bottomSurface) {\n _this.bottomSurface.appearance.material = _this.bottomMaterial;\n }\n };\n wallBottom.onload = function () {\n var canvas = document.createElement('canvas');\n canvas.width = wallBottom.width;\n canvas.height = wallBottom.height;\n var context = canvas.getContext('2d');\n context.drawImage(wallBottom, 0, 0, wallBottom.width, wallBottom.height);\n var base64 = canvas.toDataURL('image/jpg');\n _this.wallMaterial = new Cesium.Material({\n fabric: {\n type: \"Image\",\n uniforms: {\n image: base64\n }\n }\n });\n if (_this.wellWall) {\n _this.wellWall.appearance.material = _this.wallMaterial;\n }\n };\n _this.init();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TerrainExcavation, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(TerrainExcavation, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.options.show = v;\n this.switchExcavate(v);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.options.height = v;\n // this.updateExcavateDepth(v);\n }\n }, {\n key: \"init\",\n value: function init() {\n TerrainExcavation.edit(this, true);\n }\n }, {\n key: \"startCreate\",\n value: function startCreate() {\n var _this2 = this;\n this.Draw.start(function (e, positions) {\n if (!positions || positions.length <= 2) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '至少拥有三个坐标位置!',\n type: 'warning',\n duration: 1500\n });\n return;\n }\n if (!_this2.isConvex(positions)) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '不支持凹多边形',\n type: 'warning',\n duration: 1500\n });\n console.log('不支持凹多边形');\n return;\n }\n _this2.updateData(positions);\n });\n }\n }, {\n key: \"updateData\",\n value: function updateData(activePoints) {\n var viewer = this.viewer;\n this.clear();\n var clippingPlanesList = [];\n var array = [];\n for (var i = 0; i < activePoints.length; i++) {\n array.push([activePoints[i].lng, activePoints[i].lat]);\n }\n array.push([activePoints[0].lng, activePoints[0].lat]);\n var clockwiseRing = turf.lineString(array);\n // 是否顺时针\n var boolDiff = turf.booleanClockwise(clockwiseRing);\n this.excavateMinHeight = 9999;\n for (var index = 0; index < activePoints.length; ++index) {\n var s = (index + 1) % activePoints.length;\n var position1 = Cesium.Cartesian3.fromDegrees(activePoints[index].lng, activePoints[index].lat, activePoints[index].alt);\n var position2 = Cesium.Cartesian3.fromDegrees(activePoints[s].lng, activePoints[s].lat, activePoints[s].alt);\n var curMidPoint = Cesium.Cartesian3.midpoint(position1, position2, new Cesium.Cartesian3());\n var cartographic = Cesium.Cartographic.fromCartesian(position1);\n var curHeight = viewer.scene.globe.getHeight(cartographic) || cartographic.height;\n if (curHeight < this.excavateMinHeight) {\n this.excavateMinHeight = curHeight;\n }\n var curMidPointNormal = Cesium.Cartesian3.normalize(curMidPoint, new Cesium.Cartesian3());\n var curMidPointDifference = boolDiff ? Cesium.Cartesian3.subtract(position1, curMidPoint, new Cesium.Cartesian3()) : Cesium.Cartesian3.subtract(position2, curMidPoint, new Cesium.Cartesian3());\n curMidPointDifference = Cesium.Cartesian3.normalize(curMidPointDifference, curMidPointDifference);\n var curMidPointCross = Cesium.Cartesian3.cross(curMidPointDifference, curMidPointNormal, new Cesium.Cartesian3());\n curMidPointCross = Cesium.Cartesian3.normalize(curMidPointCross, curMidPointCross);\n var plane = new Cesium.Plane(curMidPointCross, 0);\n var distance = Cesium.Plane.getPointDistance(plane, curMidPoint);\n clippingPlanesList.push(new Cesium.ClippingPlane(curMidPointCross, distance));\n }\n this.viewer.scene.globe.clippingPlanes = new Cesium.ClippingPlaneCollection({\n planes: clippingPlanesList,\n edgeWidth: 1,\n edgeColor: Cesium.Color.WHITE,\n enabled: true\n });\n this.prepareWell(activePoints);\n this.createWell(this.wellData);\n // this.viewer.entities.remove(this.drawGeomtry);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n if (this.viewer.scene.globe.clippingPlanes) {\n this.viewer.scene.globe.clippingPlanes.removeAll();\n this.viewer.scene.primitives.remove(this.bottomSurface);\n this.viewer.scene.primitives.remove(this.wellWall);\n this.viewer.scene.render();\n }\n for (var i = ExcavationFaces.length - 1; i >= 0; i--) {\n this.viewer.scene.primitives.remove(ExcavationFaces[i]);\n }\n ExcavationFaces = [];\n this.Draw && this.Draw.end();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.clear();\n }\n //计算并更新wellData\n }, {\n key: \"prepareWell\",\n value: function prepareWell(activePoints) {\n var pointLength = activePoints.length;\n var heightDiff = this.excavateMinHeight - this.height;\n var no_height_top = [],\n bottom_pos = [],\n lerp_pos = [];\n for (var l = 0; l < pointLength; l++) {\n var u = l == pointLength - 1 ? 0 : l + 1;\n var point0 = [Cesium.Cartographic.fromDegrees(activePoints[l].lng, activePoints[l].lat, activePoints[l].alt).longitude, Cesium.Cartographic.fromDegrees(activePoints[l].lng, activePoints[l].lat, activePoints[l].alt).latitude];\n var point1 = [Cesium.Cartographic.fromDegrees(activePoints[u].lng, activePoints[u].lat, activePoints[u].alt).longitude, Cesium.Cartographic.fromDegrees(activePoints[u].lng, activePoints[u].lat, activePoints[u].alt).latitude];\n if (0 == l) {\n lerp_pos.push(new Cesium.Cartographic(point0[0], point0[1]));\n bottom_pos.push(Cesium.Cartesian3.fromRadians(point0[0], point0[1], heightDiff));\n no_height_top.push(Cesium.Cartesian3.fromRadians(point0[0], point0[1], 0));\n }\n for (var p = 1; p <= this.splitNum; p++) {\n var m = Cesium.Math.lerp(point0[0], point1[0], p / this.splitNum);\n var g = Cesium.Math.lerp(point0[1], point1[1], p / this.splitNum);\n l == pointLength - 1 && p == this.splitNum || (lerp_pos.push(new Cesium.Cartographic(m, g)), bottom_pos.push(Cesium.Cartesian3.fromRadians(m, g, heightDiff)), no_height_top.push(Cesium.Cartesian3.fromRadians(m, g, 0)));\n }\n }\n this.wellData = {\n lerp_pos: lerp_pos,\n bottom_pos: bottom_pos,\n no_height_top: no_height_top\n };\n }\n //开始创建底面和侧面\n }, {\n key: \"createWell\",\n value: function createWell(wallData) {\n var $this = this;\n if (this.viewer.terrainProvider._layers) {\n this.createBottomSurface(wallData.bottom_pos);\n var positions = Cesium.sampleTerrainMostDetailed(this.viewer.terrainProvider, wallData.lerp_pos);\n positions.then(function (pos) {\n var positionList = [];\n for (var index = 0; index < pos.length; index++) {\n var element = pos[index];\n var curPos = Cesium.Cartesian3.fromRadians(element.longitude, element.latitude, element.height);\n positionList.push(curPos);\n }\n $this.createWellWall(wallData.bottom_pos, positionList);\n });\n } else {\n this.createBottomSurface(wallData.bottom_pos);\n this.createWellWall(wallData.bottom_pos, wallData.no_height_top);\n }\n }\n //坐标转换,转出经纬度格式\n }, {\n key: \"ellipsoidToDegree\",\n value: function ellipsoidToDegree(pos) {\n var cartesian3 = new Cesium.Cartesian3(pos.x, pos.y, pos.z);\n var cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3);\n return {\n longitude: Cesium.Math.toDegrees(cartographic.longitude),\n latitude: Cesium.Math.toDegrees(cartographic.latitude),\n altitude: cartographic.height\n };\n }\n //创建地形开挖的底面对象\n }, {\n key: \"createBottomSurface\",\n value: function createBottomSurface(points) {\n if (points.length) {\n var minHeight = this.getMinHeight(points);\n var positions = [];\n for (var i = 0; i < points.length; i++) {\n var curPoint = this.ellipsoidToDegree(points[i]);\n positions.push(curPoint.longitude, curPoint.latitude, minHeight);\n }\n var polygon = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(positions)),\n perPositionHeight: true\n });\n var appearance = new Cesium.MaterialAppearance({\n translucent: false,\n flat: true,\n material: this.bottomMaterial\n });\n this.bottomSurface = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: Cesium.PolygonGeometry.createGeometry(polygon)\n }),\n appearance: appearance,\n asynchronous: false\n });\n ExcavationFaces.push(this.bottomSurface);\n this.viewer.scene.primitives.add(this.bottomSurface);\n }\n }\n // 创建地形开挖的侧面墙对象\n }, {\n key: \"createWellWall\",\n value: function createWellWall(bottomPos, positionList) {\n var minHeight = this.getMinHeight(bottomPos);\n var maxHeights = [],\n minHeights = [];\n for (var i = 0; i < positionList.length; i++) {\n maxHeights.push(this.ellipsoidToDegree(positionList[i]).altitude);\n minHeights.push(minHeight);\n }\n var wall = new Cesium.WallGeometry({\n positions: positionList,\n maximumHeights: maxHeights,\n minimumHeights: minHeights\n });\n var geometry = Cesium.WallGeometry.createGeometry(wall);\n var appearance = new Cesium.MaterialAppearance({\n translucent: false,\n flat: true,\n material: this.wallMaterial\n });\n this.wellWall = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: geometry,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.GREY)\n },\n id: \"PitWall\"\n }),\n appearance: appearance,\n asynchronous: false\n });\n ExcavationFaces.push(this.wellWall);\n this.viewer.scene.primitives.add(this.wellWall);\n }\n //获取地形开挖最低点高程值\n }, {\n key: \"getMinHeight\",\n value: function getMinHeight(points) {\n var minHeight = 5000000;\n var minPoint = null;\n for (var i = 0; i < points.length; i++) {\n var height = points[i][\"z\"];\n if (height < minHeight) {\n minHeight = height;\n minPoint = this.ellipsoidToDegree(points[i]);\n }\n }\n return minPoint.altitude;\n }\n }, {\n key: \"switchExcavate\",\n value: function switchExcavate(show) {\n if (show) {\n this.viewer.scene.globe.material = null;\n this.wellWall.show = true;\n this.bottomSurface.show = true;\n } else {\n this.viewer.scene.globe.material = null;\n this.wellWall.show = false;\n this.bottomSurface.show = false;\n }\n }\n }, {\n key: \"updateExcavateDepth\",\n value: function updateExcavateDepth(height) {\n this.viewer.scene.primitives.remove(this.bottomSurface);\n this.viewer.scene.primitives.remove(this.wellWall);\n if (!this.wellData) {\n return;\n }\n var lerp_pos = this.wellData.lerp_pos;\n var posList = [];\n for (var n = 0; n < lerp_pos.length; n++) {\n posList.push(Cesium.Cartesian3.fromRadians(lerp_pos[n].longitude, lerp_pos[n].latitude, this.excavateMinHeight - height));\n }\n this.wellData.bottom_pos = posList;\n this.createWell(this.wellData);\n }\n }], [{\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(that, state) {\n var contentElm, e_start, e_clean, e_height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n if (!state) {\n _context.next = 21;\n break;\n }\n _context.next = 4;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](that.sdk.viewer._container, {\n title: '地形开挖',\n closeCallBack: function closeCallBack() {}\n });\n case 4:\n that._DialogObject = _context.sent;\n _context.next = 7;\n return that._DialogObject.init();\n case 7:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' terrain-excavation';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n\n // 开始\n e_start = contentElm.getElementsByClassName('start-excavation')[0];\n e_start.addEventListener('click', function () {\n that.startCreate();\n });\n // 清除\n e_clean = contentElm.getElementsByClassName('clean-excavation')[0];\n e_clean.addEventListener('click', function () {\n that.clear();\n });\n\n // 高度值\n e_height = contentElm.querySelector(\"input[name='height']\");\n e_height.value = that.height;\n e_height.addEventListener('change', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (value < 0.01) {\n value = 0.01;\n e.target.value = value;\n that.height = value;\n }\n });\n e_height.addEventListener('blur', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (value < 0.01) {\n value = 0.01;\n }\n e.target.value = value;\n that.height = value;\n });\n _context.next = 22;\n break;\n case 21:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n case 22:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function edit(_x, _x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TerrainExcavation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1RlcnJhaW5FeGNhdmF0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9UZXJyYWluRXhjYXZhdGlvbi9pbmRleC5qcz9jZWU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUb29scyBmcm9tIFwiLi4vLi4vLi4vVG9vbHNcIjtcclxuaW1wb3J0IERyYXdQb2x5Z29uIGZyb20gXCIuLi8uLi8uLi9EcmF3L2RyYXdQb2x5Z29uXCJcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi9CYXNlRGlhbG9nJztcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcblxyXG5sZXQgRXhjYXZhdGlvbkZhY2VzID0gW11cclxuY2xhc3MgVGVycmFpbkV4Y2F2YXRpb24gZXh0ZW5kcyBUb29scyB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQGRlc2NyaXB0aW9uIOWcsOW9ouW8gOaMllxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGspXHJcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXJcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gKHRoaXMub3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5vcHRpb25zLmhlaWdodCA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuaGVpZ2h0IDogMTA7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9ICh0aGlzLm9wdGlvbnMuc2hvdyB8fCB0aGlzLm9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gdGhpcy5vcHRpb25zLnNob3cgOiB0cnVlO1xyXG4gICAgdGhpcy5ib3R0b21JbWcgPSB0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9leGNhdmF0aW9ucmVnaW9uX3RvcC5qcGcnO1xyXG4gICAgdGhpcy53YWxsSW1nID0gdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvZXhjYXZhdGlvbnJlZ2lvbl9zaWRlLmpwZyc7XHJcbiAgICB0aGlzLnNwbGl0TnVtID0gQ2VzaXVtLmRlZmF1bHRWYWx1ZShvcHRpb25zLnNwbGl0TnVtLCA1MCk7XHJcbiAgICB0aGlzLkRyYXcgPSBuZXcgRHJhd1BvbHlnb24odGhpcy5zZGspXHJcbiAgICB0aGlzLmJvdHRvbU1hdGVyaWFsID0gQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKCdDb2xvcicsIHtcclxuICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5mcm9tQWxwaGEoQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzczNWQ0ZicpKVxyXG4gICAgfSlcclxuICAgIHRoaXMud2FsbE1hdGVyaWFsID0gQ2VzaXVtLk1hdGVyaWFsLmZyb21UeXBlKCdDb2xvcicsIHtcclxuICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5mcm9tQWxwaGEoQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzk3NmI0ZScpKVxyXG4gICAgfSlcclxuICAgIGxldCBpbWFnZUJvdHRvbSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgbGV0IHdhbGxCb3R0b20gPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltYWdlQm90dG9tLnNyYyA9IHRoaXMuYm90dG9tSW1nO1xyXG4gICAgd2FsbEJvdHRvbS5zcmMgPSB0aGlzLndhbGxJbWc7XHJcbiAgICBpbWFnZUJvdHRvbS5jcm9zc09yaWdpbiA9IFwiQW5vbnltb3VzXCI7XHJcbiAgICB3YWxsQm90dG9tLmNyb3NzT3JpZ2luID0gXCJBbm9ueW1vdXNcIjtcclxuICAgIGltYWdlQm90dG9tLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNhbnZhcy53aWR0aCA9IGltYWdlQm90dG9tLndpZHRoO1xyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1hZ2VCb3R0b20uaGVpZ2h0O1xyXG4gICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlQm90dG9tLCAwLCAwLCBpbWFnZUJvdHRvbS53aWR0aCwgaW1hZ2VCb3R0b20uaGVpZ2h0KTtcclxuICAgICAgY29uc3QgYmFzZTY0ID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBnJyk7XHJcbiAgICAgIHRoaXMuYm90dG9tTWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLk1hdGVyaWFsKHtcclxuICAgICAgICBmYWJyaWM6IHtcclxuICAgICAgICAgIHR5cGU6IFwiSW1hZ2VcIixcclxuICAgICAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgICAgIGltYWdlOiBiYXNlNjQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy5ib3R0b21TdXJmYWNlKSB7XHJcbiAgICAgICAgdGhpcy5ib3R0b21TdXJmYWNlLmFwcGVhcmFuY2UubWF0ZXJpYWwgPSB0aGlzLmJvdHRvbU1hdGVyaWFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3YWxsQm90dG9tLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdhbGxCb3R0b20ud2lkdGg7XHJcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB3YWxsQm90dG9tLmhlaWdodDtcclxuICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBjb250ZXh0LmRyYXdJbWFnZSh3YWxsQm90dG9tLCAwLCAwLCB3YWxsQm90dG9tLndpZHRoLCB3YWxsQm90dG9tLmhlaWdodCk7XHJcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZycpO1xyXG4gICAgICB0aGlzLndhbGxNYXRlcmlhbCA9IG5ldyBDZXNpdW0uTWF0ZXJpYWwoe1xyXG4gICAgICAgIGZhYnJpYzoge1xyXG4gICAgICAgICAgdHlwZTogXCJJbWFnZVwiLFxyXG4gICAgICAgICAgdW5pZm9ybXM6IHtcclxuICAgICAgICAgICAgaW1hZ2U6IGJhc2U2NCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLndlbGxXYWxsKSB7XHJcbiAgICAgICAgdGhpcy53ZWxsV2FsbC5hcHBlYXJhbmNlLm1hdGVyaWFsID0gdGhpcy53YWxsTWF0ZXJpYWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcbiAgc2V0IHNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSB2O1xyXG4gICAgdGhpcy5zd2l0Y2hFeGNhdmF0ZSh2KTtcclxuICB9XHJcbiAgZ2V0IGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IHY7XHJcbiAgICAvLyB0aGlzLnVwZGF0ZUV4Y2F2YXRlRGVwdGgodik7XHJcbiAgfVxyXG4gIGluaXQoKSB7XHJcbiAgICBUZXJyYWluRXhjYXZhdGlvbi5lZGl0KHRoaXMsIHRydWUpXHJcbiAgfVxyXG4gIHN0YXRpYyBhc3luYyBlZGl0KHRoYXQsIHN0YXRlKSB7XHJcbiAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGF0LnNkay52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgICAgIHRpdGxlOiAn5Zyw5b2i5byA5oyWJyxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgYXdhaXQgdGhhdC5fRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHRlcnJhaW4tZXhjYXZhdGlvbidcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICAgICAgLy8g5byA5aeLXHJcbiAgICAgIGxldCBlX3N0YXJ0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGFydC1leGNhdmF0aW9uJylbMF1cclxuICAgICAgZV9zdGFydC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICB0aGF0LnN0YXJ0Q3JlYXRlKClcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIOa4hemZpFxyXG4gICAgICBsZXQgZV9jbGVhbiA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2xlYW4tZXhjYXZhdGlvbicpWzBdXHJcbiAgICAgIGVfY2xlYW4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgdGhhdC5jbGVhcigpXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g6auY5bqm5YC8XHJcbiAgICAgIGxldCBlX2hlaWdodCA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J2hlaWdodCddXCIpXHJcbiAgICAgIGVfaGVpZ2h0LnZhbHVlID0gdGhhdC5oZWlnaHRcclxuICAgICAgZV9oZWlnaHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAuMDEpIHtcclxuICAgICAgICAgIHZhbHVlID0gMC4wMVxyXG4gICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgdGhhdC5oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGVfaGVpZ2h0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMC4wMSkge1xyXG4gICAgICAgICAgdmFsdWUgPSAwLjAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICB0aGF0LmhlaWdodCA9IHZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXJ0Q3JlYXRlKCkge1xyXG4gICAgdGhpcy5EcmF3LnN0YXJ0KChlLCBwb3NpdGlvbnMpID0+IHtcclxuICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6Iez5bCR5oul5pyJ5LiJ5Liq5Z2Q5qCH5L2N572u77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMuaXNDb252ZXgocG9zaXRpb25zKSkge1xyXG4gICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbWVzc2FnZTogJ+S4jeaUr+aMgeWHueWkmui+ueW9oicsXHJcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfkuI3mlK/mjIHlh7nlpJrovrnlvaInKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YShwb3NpdGlvbnMpXHJcbiAgICB9KVxyXG4gIH1cclxuICB1cGRhdGVEYXRhKGFjdGl2ZVBvaW50cykge1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgbGV0IGNsaXBwaW5nUGxhbmVzTGlzdCA9IFtdO1xyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGFycmF5LnB1c2goW2FjdGl2ZVBvaW50c1tpXS5sbmcsIGFjdGl2ZVBvaW50c1tpXS5sYXRdKVxyXG4gICAgfVxyXG4gICAgYXJyYXkucHVzaChbYWN0aXZlUG9pbnRzWzBdLmxuZywgYWN0aXZlUG9pbnRzWzBdLmxhdF0pXHJcbiAgICBsZXQgY2xvY2t3aXNlUmluZyA9IHR1cmYubGluZVN0cmluZyhhcnJheSk7XHJcbiAgICAvLyDmmK/lkKbpobrml7bpkohcclxuICAgIGxldCBib29sRGlmZiA9IHR1cmYuYm9vbGVhbkNsb2Nrd2lzZShjbG9ja3dpc2VSaW5nKTtcclxuICAgIHRoaXMuZXhjYXZhdGVNaW5IZWlnaHQgPSA5OTk5O1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGl2ZVBvaW50cy5sZW5ndGg7ICsraW5kZXgpIHtcclxuICAgICAgbGV0IHMgPSAoaW5kZXggKyAxKSAlIGFjdGl2ZVBvaW50cy5sZW5ndGg7XHJcbiAgICAgIGxldCBwb3NpdGlvbjEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhhY3RpdmVQb2ludHNbaW5kZXhdLmxuZywgYWN0aXZlUG9pbnRzW2luZGV4XS5sYXQsIGFjdGl2ZVBvaW50c1tpbmRleF0uYWx0KVxyXG4gICAgICBsZXQgcG9zaXRpb24yID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoYWN0aXZlUG9pbnRzW3NdLmxuZywgYWN0aXZlUG9pbnRzW3NdLmxhdCwgYWN0aXZlUG9pbnRzW3NdLmFsdClcclxuICAgICAgbGV0IGN1ck1pZFBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMubWlkcG9pbnQoXHJcbiAgICAgICAgcG9zaXRpb24xLFxyXG4gICAgICAgIHBvc2l0aW9uMixcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApO1xyXG4gICAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHBvc2l0aW9uMSk7XHJcbiAgICAgIGxldCBjdXJIZWlnaHQgPVxyXG4gICAgICAgIHZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoY2FydG9ncmFwaGljKSB8fCBjYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG4gICAgICBpZiAoY3VySGVpZ2h0IDwgdGhpcy5leGNhdmF0ZU1pbkhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuZXhjYXZhdGVNaW5IZWlnaHQgPSBjdXJIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGN1ck1pZFBvaW50Tm9ybWFsID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKFxyXG4gICAgICAgIGN1ck1pZFBvaW50LFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBjdXJNaWRQb2ludERpZmZlcmVuY2UgPSBib29sRGlmZlxyXG4gICAgICAgID8gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgICAgICBwb3NpdGlvbjEsXHJcbiAgICAgICAgICBjdXJNaWRQb2ludCxcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgICAgICBwb3NpdGlvbjIsXHJcbiAgICAgICAgICBjdXJNaWRQb2ludCxcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKTtcclxuICAgICAgY3VyTWlkUG9pbnREaWZmZXJlbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKFxyXG4gICAgICAgIGN1ck1pZFBvaW50RGlmZmVyZW5jZSxcclxuICAgICAgICBjdXJNaWRQb2ludERpZmZlcmVuY2VcclxuICAgICAgKTtcclxuICAgICAgbGV0IGN1ck1pZFBvaW50Q3Jvc3MgPSBDZXNpdW0uQ2FydGVzaWFuMy5jcm9zcyhcclxuICAgICAgICBjdXJNaWRQb2ludERpZmZlcmVuY2UsXHJcbiAgICAgICAgY3VyTWlkUG9pbnROb3JtYWwsXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgKTtcclxuICAgICAgY3VyTWlkUG9pbnRDcm9zcyA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShcclxuICAgICAgICBjdXJNaWRQb2ludENyb3NzLFxyXG4gICAgICAgIGN1ck1pZFBvaW50Q3Jvc3NcclxuICAgICAgKTtcclxuICAgICAgbGV0IHBsYW5lID0gbmV3IENlc2l1bS5QbGFuZShjdXJNaWRQb2ludENyb3NzLCAwKTtcclxuICAgICAgbGV0IGRpc3RhbmNlID0gQ2VzaXVtLlBsYW5lLmdldFBvaW50RGlzdGFuY2UocGxhbmUsIGN1ck1pZFBvaW50KTtcclxuICAgICAgY2xpcHBpbmdQbGFuZXNMaXN0LnB1c2goXHJcbiAgICAgICAgbmV3IENlc2l1bS5DbGlwcGluZ1BsYW5lKGN1ck1pZFBvaW50Q3Jvc3MsIGRpc3RhbmNlKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmUuZ2xvYmUuY2xpcHBpbmdQbGFuZXMgPSBuZXcgQ2VzaXVtLkNsaXBwaW5nUGxhbmVDb2xsZWN0aW9uKFxyXG4gICAgICB7XHJcbiAgICAgICAgcGxhbmVzOiBjbGlwcGluZ1BsYW5lc0xpc3QsXHJcbiAgICAgICAgZWRnZVdpZHRoOiAxLFxyXG4gICAgICAgIGVkZ2VDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnByZXBhcmVXZWxsKGFjdGl2ZVBvaW50cyk7XHJcbiAgICB0aGlzLmNyZWF0ZVdlbGwodGhpcy53ZWxsRGF0YSk7XHJcbiAgICAvLyB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5kcmF3R2VvbXRyeSk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIGlmICh0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5jbGlwcGluZ1BsYW5lcykge1xyXG4gICAgICB0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5jbGlwcGluZ1BsYW5lcy5yZW1vdmVBbGwoKTtcclxuICAgICAgdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5ib3R0b21TdXJmYWNlKTtcclxuICAgICAgdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy53ZWxsV2FsbCk7XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IEV4Y2F2YXRpb25GYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZShFeGNhdmF0aW9uRmFjZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgRXhjYXZhdGlvbkZhY2VzID0gW11cclxuICAgIHRoaXMuRHJhdyAmJiB0aGlzLkRyYXcuZW5kKClcclxuICB9XHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKVxyXG4gIH1cclxuICAvL+iuoeeul+W5tuabtOaWsHdlbGxEYXRhXHJcbiAgcHJlcGFyZVdlbGwoYWN0aXZlUG9pbnRzKSB7XHJcbiAgICBsZXQgcG9pbnRMZW5ndGggPSBhY3RpdmVQb2ludHMubGVuZ3RoO1xyXG4gICAgbGV0IGhlaWdodERpZmYgPSB0aGlzLmV4Y2F2YXRlTWluSGVpZ2h0IC0gdGhpcy5oZWlnaHQ7XHJcbiAgICBsZXQgbm9faGVpZ2h0X3RvcCA9IFtdLFxyXG4gICAgICBib3R0b21fcG9zID0gW10sXHJcbiAgICAgIGxlcnBfcG9zID0gW107XHJcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHBvaW50TGVuZ3RoOyBsKyspIHtcclxuICAgICAgbGV0IHUgPSBsID09IHBvaW50TGVuZ3RoIC0gMSA/IDAgOiBsICsgMTtcclxuICAgICAgbGV0IHBvaW50MCA9IFtcclxuICAgICAgICBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGFjdGl2ZVBvaW50c1tsXS5sbmcsIGFjdGl2ZVBvaW50c1tsXS5sYXQsIGFjdGl2ZVBvaW50c1tsXS5hbHQpLmxvbmdpdHVkZSxcclxuICAgICAgICBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGFjdGl2ZVBvaW50c1tsXS5sbmcsIGFjdGl2ZVBvaW50c1tsXS5sYXQsIGFjdGl2ZVBvaW50c1tsXS5hbHQpLmxhdGl0dWRlLFxyXG4gICAgICBdO1xyXG4gICAgICBsZXQgcG9pbnQxID0gW1xyXG4gICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoYWN0aXZlUG9pbnRzW3VdLmxuZywgYWN0aXZlUG9pbnRzW3VdLmxhdCwgYWN0aXZlUG9pbnRzW3VdLmFsdCkubG9uZ2l0dWRlLFxyXG4gICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoYWN0aXZlUG9pbnRzW3VdLmxuZywgYWN0aXZlUG9pbnRzW3VdLmxhdCwgYWN0aXZlUG9pbnRzW3VdLmFsdCkubGF0aXR1ZGUsXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICgwID09IGwpIHtcclxuICAgICAgICBsZXJwX3Bvcy5wdXNoKG5ldyBDZXNpdW0uQ2FydG9ncmFwaGljKHBvaW50MFswXSwgcG9pbnQwWzFdKSk7XHJcbiAgICAgICAgYm90dG9tX3Bvcy5wdXNoKFxyXG4gICAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbVJhZGlhbnMocG9pbnQwWzBdLCBwb2ludDBbMV0sIGhlaWdodERpZmYpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBub19oZWlnaHRfdG9wLnB1c2goXHJcbiAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tUmFkaWFucyhwb2ludDBbMF0sIHBvaW50MFsxXSwgMClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IHAgPSAxOyBwIDw9IHRoaXMuc3BsaXROdW07IHArKykge1xyXG4gICAgICAgIGxldCBtID0gQ2VzaXVtLk1hdGgubGVycChwb2ludDBbMF0sIHBvaW50MVswXSwgcCAvIHRoaXMuc3BsaXROdW0pO1xyXG4gICAgICAgIGxldCBnID0gQ2VzaXVtLk1hdGgubGVycChwb2ludDBbMV0sIHBvaW50MVsxXSwgcCAvIHRoaXMuc3BsaXROdW0pO1xyXG4gICAgICAgIChsID09IHBvaW50TGVuZ3RoIC0gMSAmJiBwID09IHRoaXMuc3BsaXROdW0pIHx8XHJcbiAgICAgICAgICAobGVycF9wb3MucHVzaChuZXcgQ2VzaXVtLkNhcnRvZ3JhcGhpYyhtLCBnKSksXHJcbiAgICAgICAgICAgIGJvdHRvbV9wb3MucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tUmFkaWFucyhtLCBnLCBoZWlnaHREaWZmKSksXHJcbiAgICAgICAgICAgIG5vX2hlaWdodF90b3AucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tUmFkaWFucyhtLCBnLCAwKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLndlbGxEYXRhID0ge1xyXG4gICAgICBsZXJwX3BvczogbGVycF9wb3MsXHJcbiAgICAgIGJvdHRvbV9wb3M6IGJvdHRvbV9wb3MsXHJcbiAgICAgIG5vX2hlaWdodF90b3A6IG5vX2hlaWdodF90b3AsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvL+W8gOWni+WIm+W7uuW6lemdouWSjOS+p+mdolxyXG4gIGNyZWF0ZVdlbGwod2FsbERhdGEpIHtcclxuICAgIGxldCAkdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAodGhpcy52aWV3ZXIudGVycmFpblByb3ZpZGVyLl9sYXllcnMpIHtcclxuICAgICAgdGhpcy5jcmVhdGVCb3R0b21TdXJmYWNlKHdhbGxEYXRhLmJvdHRvbV9wb3MpO1xyXG4gICAgICBsZXQgcG9zaXRpb25zID0gQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQoXHJcbiAgICAgICAgdGhpcy52aWV3ZXIudGVycmFpblByb3ZpZGVyLFxyXG4gICAgICAgIHdhbGxEYXRhLmxlcnBfcG9zXHJcbiAgICAgICk7XHJcbiAgICAgIHBvc2l0aW9ucy50aGVuKChwb3MpID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwb3NbaW5kZXhdO1xyXG4gICAgICAgICAgbGV0IGN1clBvcyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21SYWRpYW5zKFxyXG4gICAgICAgICAgICBlbGVtZW50LmxvbmdpdHVkZSxcclxuICAgICAgICAgICAgZWxlbWVudC5sYXRpdHVkZSxcclxuICAgICAgICAgICAgZWxlbWVudC5oZWlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwb3NpdGlvbkxpc3QucHVzaChjdXJQb3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkdGhpcy5jcmVhdGVXZWxsV2FsbCh3YWxsRGF0YS5ib3R0b21fcG9zLCBwb3NpdGlvbkxpc3QpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQm90dG9tU3VyZmFjZSh3YWxsRGF0YS5ib3R0b21fcG9zKTtcclxuICAgICAgdGhpcy5jcmVhdGVXZWxsV2FsbCh3YWxsRGF0YS5ib3R0b21fcG9zLCB3YWxsRGF0YS5ub19oZWlnaHRfdG9wKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy/lnZDmoIfovazmjaLvvIzovazlh7rnu4/nuqzluqbmoLzlvI9cclxuICBlbGxpcHNvaWRUb0RlZ3JlZShwb3MpIHtcclxuICAgIGxldCBjYXJ0ZXNpYW4zID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKHBvcy54LCBwb3MueSwgcG9zLnopO1xyXG4gICAgbGV0IGNhcnRvZ3JhcGhpYyA9XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjYXJ0ZXNpYW4zKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxvbmdpdHVkZTogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpLFxyXG4gICAgICBsYXRpdHVkZTogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSksXHJcbiAgICAgIGFsdGl0dWRlOiBjYXJ0b2dyYXBoaWMuaGVpZ2h0LFxyXG4gICAgfTtcclxuICB9XHJcbiAgLy/liJvlu7rlnLDlvaLlvIDmjJbnmoTlupXpnaLlr7nosaFcclxuICBjcmVhdGVCb3R0b21TdXJmYWNlKHBvaW50cykge1xyXG4gICAgaWYgKHBvaW50cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IG1pbkhlaWdodCA9IHRoaXMuZ2V0TWluSGVpZ2h0KHBvaW50cyk7XHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY3VyUG9pbnQgPSB0aGlzLmVsbGlwc29pZFRvRGVncmVlKHBvaW50c1tpXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goY3VyUG9pbnQubG9uZ2l0dWRlLCBjdXJQb2ludC5sYXRpdHVkZSwgbWluSGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9seWdvbiA9IG5ldyBDZXNpdW0uUG9seWdvbkdlb21ldHJ5KHtcclxuICAgICAgICBwb2x5Z29uSGllcmFyY2h5OiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoXHJcbiAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhwb3NpdGlvbnMpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgYXBwZWFyYW5jZSA9IG5ldyBDZXNpdW0uTWF0ZXJpYWxBcHBlYXJhbmNlKHtcclxuICAgICAgICB0cmFuc2x1Y2VudDogZmFsc2UsXHJcbiAgICAgICAgZmxhdDogdHJ1ZSxcclxuICAgICAgICBtYXRlcmlhbDogdGhpcy5ib3R0b21NYXRlcmlhbCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYm90dG9tU3VyZmFjZSA9IG5ldyBDZXNpdW0uUHJpbWl0aXZlKHtcclxuICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICAgIGdlb21ldHJ5OiBDZXNpdW0uUG9seWdvbkdlb21ldHJ5LmNyZWF0ZUdlb21ldHJ5KHBvbHlnb24pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6IGFwcGVhcmFuY2UsXHJcbiAgICAgICAgYXN5bmNocm9ub3VzOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIEV4Y2F2YXRpb25GYWNlcy5wdXNoKHRoaXMuYm90dG9tU3VyZmFjZSk7XHJcbiAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoaXMuYm90dG9tU3VyZmFjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOWIm+W7uuWcsOW9ouW8gOaMlueahOS+p+mdouWimeWvueixoVxyXG4gIGNyZWF0ZVdlbGxXYWxsKGJvdHRvbVBvcywgcG9zaXRpb25MaXN0KSB7XHJcbiAgICBsZXQgbWluSGVpZ2h0ID0gdGhpcy5nZXRNaW5IZWlnaHQoYm90dG9tUG9zKTtcclxuICAgIGxldCBtYXhIZWlnaHRzID0gW10sXHJcbiAgICAgIG1pbkhlaWdodHMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIG1heEhlaWdodHMucHVzaCh0aGlzLmVsbGlwc29pZFRvRGVncmVlKHBvc2l0aW9uTGlzdFtpXSkuYWx0aXR1ZGUpO1xyXG4gICAgICBtaW5IZWlnaHRzLnB1c2gobWluSGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGxldCB3YWxsID0gbmV3IENlc2l1bS5XYWxsR2VvbWV0cnkoe1xyXG4gICAgICBwb3NpdGlvbnM6IHBvc2l0aW9uTGlzdCxcclxuICAgICAgbWF4aW11bUhlaWdodHM6IG1heEhlaWdodHMsXHJcbiAgICAgIG1pbmltdW1IZWlnaHRzOiBtaW5IZWlnaHRzLFxyXG4gICAgfSk7XHJcbiAgICBsZXQgZ2VvbWV0cnkgPSBDZXNpdW0uV2FsbEdlb21ldHJ5LmNyZWF0ZUdlb21ldHJ5KHdhbGwpO1xyXG4gICAgbGV0IGFwcGVhcmFuY2UgPSBuZXcgQ2VzaXVtLk1hdGVyaWFsQXBwZWFyYW5jZSh7XHJcbiAgICAgIHRyYW5zbHVjZW50OiBmYWxzZSxcclxuICAgICAgZmxhdDogdHJ1ZSxcclxuICAgICAgbWF0ZXJpYWw6IHRoaXMud2FsbE1hdGVyaWFsLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLndlbGxXYWxsID0gbmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICBnZW9tZXRyeUluc3RhbmNlczogbmV3IENlc2l1bS5HZW9tZXRyeUluc3RhbmNlKHtcclxuICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKFxyXG4gICAgICAgICAgICBDZXNpdW0uQ29sb3IuR1JFWVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlkOiBcIlBpdFdhbGxcIixcclxuICAgICAgfSksXHJcbiAgICAgIGFwcGVhcmFuY2U6IGFwcGVhcmFuY2UsXHJcbiAgICAgIGFzeW5jaHJvbm91czogZmFsc2UsXHJcbiAgICB9KTtcclxuICAgIEV4Y2F2YXRpb25GYWNlcy5wdXNoKHRoaXMud2VsbFdhbGwpO1xyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQodGhpcy53ZWxsV2FsbCk7XHJcbiAgfVxyXG4gIC8v6I635Y+W5Zyw5b2i5byA5oyW5pyA5L2O54K56auY56iL5YC8XHJcbiAgZ2V0TWluSGVpZ2h0KHBvaW50cykge1xyXG4gICAgbGV0IG1pbkhlaWdodCA9IDUwMDAwMDA7XHJcbiAgICBsZXQgbWluUG9pbnQgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGhlaWdodCA9IHBvaW50c1tpXVtcInpcIl07XHJcbiAgICAgIGlmIChoZWlnaHQgPCBtaW5IZWlnaHQpIHtcclxuICAgICAgICBtaW5IZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgbWluUG9pbnQgPSB0aGlzLmVsbGlwc29pZFRvRGVncmVlKHBvaW50c1tpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtaW5Qb2ludC5hbHRpdHVkZTtcclxuICB9XHJcbiAgc3dpdGNoRXhjYXZhdGUoc2hvdykge1xyXG4gICAgaWYgKHNob3cpIHtcclxuICAgICAgdGhpcy52aWV3ZXIuc2NlbmUuZ2xvYmUubWF0ZXJpYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLndlbGxXYWxsLnNob3cgPSB0cnVlO1xyXG4gICAgICB0aGlzLmJvdHRvbVN1cmZhY2Uuc2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdlci5zY2VuZS5nbG9iZS5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2VsbFdhbGwuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmJvdHRvbVN1cmZhY2Uuc2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRXhjYXZhdGVEZXB0aChoZWlnaHQpIHtcclxuICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuYm90dG9tU3VyZmFjZSk7XHJcbiAgICB0aGlzLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLndlbGxXYWxsKTtcclxuICAgIGlmICghdGhpcy53ZWxsRGF0YSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBsZXJwX3BvcyA9IHRoaXMud2VsbERhdGEubGVycF9wb3M7XHJcbiAgICBsZXQgcG9zTGlzdCA9IFtdO1xyXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBsZXJwX3Bvcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICBwb3NMaXN0LnB1c2goXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbVJhZGlhbnMoXHJcbiAgICAgICAgICBsZXJwX3Bvc1tuXS5sb25naXR1ZGUsXHJcbiAgICAgICAgICBsZXJwX3Bvc1tuXS5sYXRpdHVkZSxcclxuICAgICAgICAgIHRoaXMuZXhjYXZhdGVNaW5IZWlnaHQgLSBoZWlnaHRcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLndlbGxEYXRhLmJvdHRvbV9wb3MgPSBwb3NMaXN0O1xyXG4gICAgdGhpcy5jcmVhdGVXZWxsKHRoaXMud2VsbERhdGEpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBUZXJyYWluRXhjYXZhdGlvbjtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQVdBO0FBSUE7QUFLQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTVXQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFKQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQTNEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE4V0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/TerrainExcavation/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/ViewShed/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Analysis/ViewShed/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u4F4D\\u7F6E\\u62FE\\u53D6(\\u8D77\\u70B9\\u3001\\u7EC8\\u70B9)\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u89C6\\u70B9\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u89C6\\u57DF\\u5939\\u89D2\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n 0\\xB0\\n 45\\xB0\\n 90\\xB0\\n 135\\xB0\\n 180\\xB0\\n
0\\xB0
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1ZpZXdTaGVkL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9WaWV3U2hlZC9fZWxlbWVudC5qcz9jNDgxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuS9jee9ruaLvuWPlijotbfngrnjgIHnu4jngrkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIj48c3ZnIGNsYXNzPVwiaWNvbi1lZGl0XCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tZWRpdFwiPjwvdXNlPjwvc3ZnPuaLvuWPljwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI1cHg7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7op4bngrnpq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTlcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwidmlld1BvaW50SGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc3VidGl0bGUtYm94XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj7op4bln5/lpLnop5I8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPiAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWJnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYW5nZS1wcm9jZXNzLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLXByb2Nlc3NcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLW5vZGUtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFuZ2Utbm9kZS10ZXh0XCI+MMKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhbmdlLW5vZGUtdGV4dFwiPjQ1wrA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFuZ2Utbm9kZS10ZXh0XCI+OTDCsDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZS1ub2RlLXRleHRcIj4xMzXCsDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZS1ub2RlLXRleHRcIj4xODDCsDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLW5vZGUtYWN0aXZlXCI+PHNwYW4gY2xhc3M9XCJyYW5nZS1ub2RlLWFjdGl2ZS10ZXh0XCI+MMKwPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxODBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBuYW1lPVwiaG9yaXpvbnRhbFZpZXdBbmdsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBa0RBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/ViewShed/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/ViewShed/glsl.js": /*!*******************************************!*\ !*** ./src/Obj/Analysis/ViewShed/glsl.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n #define USE_CUBE_MAP_SHADOW true\\n uniform sampler2D colorTexture;\\n uniform sampler2D depthTexture;\\n varying vec2 v_textureCoordinates;\\n uniform mat4 camera_projection_matrix;\\n uniform mat4 camera_view_matrix;\\n uniform samplerCube shadowMap_textureCube;\\n uniform mat4 shadowMap_matrix;\\n uniform vec4 shadowMap_lightPositionEC;\\n uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness;\\n uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth;\\n uniform float helsing_viewDistance;\\n uniform vec4 helsing_visibleAreaColor;\\n uniform vec4 helsing_invisibleAreaColor;\\n\\n struct zx_shadowParameters\\n {\\n vec3 texCoords;\\n float depthBias;\\n float depth;\\n float nDotL;\\n vec2 texelStepSize;\\n float normalShadingSmooth;\\n float darkness;\\n };\\n\\n float czm_shadowVisibility(samplerCube shadowMap, zx_shadowParameters shadowParameters)\\n {\\n float depthBias = shadowParameters.depthBias;\\n float depth = shadowParameters.depth;\\n float nDotL = shadowParameters.nDotL;\\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n float darkness = shadowParameters.darkness;\\n vec3 uvw = shadowParameters.texCoords;\\n depth -= depthBias;\\n float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);\\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n }\\n\\n vec4 getPositionEC(){\\n return czm_windowToEyeCoordinates(gl_FragCoord);\\n }\\n\\n vec3 getNormalEC(){\\n return vec3(1.);\\n }\\n\\n vec4 toEye(in vec2 uv,in float depth){\\n vec2 xy=vec2((uv.x*2.-1.),(uv.y*2.-1.));\\n vec4 posInCamera=czm_inverseProjection*vec4(xy,depth,1.);\\n posInCamera=posInCamera/posInCamera.w;\\n return posInCamera;\\n }\\n\\n vec3 pointProjectOnPlane(in vec3 planeNormal,in vec3 planeOrigin,in vec3 point){\\n vec3 v01=point-planeOrigin;\\n float d=dot(planeNormal,v01);\\n return(point-planeNormal*d);\\n }\\n\\n float getDepth(in vec4 depth){\\n float z_window=czm_unpackDepth(depth);\\n z_window=czm_reverseLogDepth(z_window);\\n float n_range=czm_depthRange.near;\\n float f_range=czm_depthRange.far;\\n return(2.*z_window-n_range-f_range)/(f_range-n_range);\\n }\\n\\n float shadow(in vec4 positionEC){\\n vec3 normalEC=getNormalEC();\\n zx_shadowParameters shadowParameters;\\n shadowParameters.texelStepSize=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy;\\n shadowParameters.depthBias=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z;\\n shadowParameters.normalShadingSmooth=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w;\\n shadowParameters.darkness=shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w;\\n vec3 directionEC=positionEC.xyz-shadowMap_lightPositionEC.xyz;\\n float distance=length(directionEC);\\n directionEC=normalize(directionEC);\\n float radius=shadowMap_lightPositionEC.w;\\n if(distance>radius)\\n {\\n return 2.0;\\n }\\n vec3 directionWC=czm_inverseViewRotation*directionEC;\\n shadowParameters.depth=distance/radius-0.0003;\\n shadowParameters.nDotL=clamp(dot(normalEC,-directionEC),0.,1.);\\n shadowParameters.texCoords=directionWC;\\n float visibility=czm_shadowVisibility(shadowMap_textureCube,shadowParameters);\\n return visibility;\\n }\\n\\n bool visible(in vec4 result)\\n {\\n result.x/=result.w;\\n result.y/=result.w;\\n result.z/=result.w;\\n return result.x>=-1.&&result.x<=1.\\n &&result.y>=-1.&&result.y<=1.\\n &&result.z>=-1.&&result.z<=1.;\\n }\\n\\n void main(){\\n // \\u91C9\\u8272 = \\u7ED3\\u6784\\u4E8C\\u7EF4(\\u989C\\u8272\\u7EB9\\u7406, \\u7EB9\\u7406\\u5750\\u6807)\\n gl_FragColor = texture2D(colorTexture, v_textureCoordinates);\\n // \\u6DF1\\u5EA6 = \\u83B7\\u53D6\\u6DF1\\u5EA6(\\u7ED3\\u6784\\u4E8C\\u7EF4(\\u6DF1\\u5EA6\\u7EB9\\u7406, \\u7EB9\\u7406\\u5750\\u6807))\\n float depth = getDepth(texture2D(depthTexture, v_textureCoordinates));\\n // \\u89C6\\u89D2 = (\\u7EB9\\u7406\\u5750\\u6807, \\u6DF1\\u5EA6)\\n vec4 viewPos = toEye(v_textureCoordinates, depth);\\n // \\u4E16\\u754C\\u5750\\u6807\\n vec4 wordPos = czm_inverseView * viewPos;\\n // \\u865A\\u62DF\\u76F8\\u673A\\u4E2D\\u5750\\u6807\\n vec4 vcPos = camera_view_matrix * wordPos;\\n float near = .001 * helsing_viewDistance;\\n float dis = length(vcPos.xyz);\\n if(dis > near && dis < helsing_viewDistance){\\n // \\u900F\\u89C6\\u6295\\u5F71\\n vec4 posInEye = camera_projection_matrix * vcPos;\\n // \\u53EF\\u89C6\\u533A\\u989C\\u8272\\n // vec4 helsing_visibleAreaColor=vec4(0.,1.,0.,.5);\\n // vec4 helsing_invisibleAreaColor=vec4(1.,0.,0.,.5);\\n if(visible(posInEye)){\\n float vis = shadow(viewPos);\\n if(vis > 0.3){\\n gl_FragColor = mix(gl_FragColor,helsing_visibleAreaColor,.5);\\n } else{\\n gl_FragColor = mix(gl_FragColor,helsing_invisibleAreaColor,.5);\\n }\\n }\\n }\\n }\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1ZpZXdTaGVkL2dsc2wuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1ZpZXdTaGVkL2dsc2wuanM/NDIyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBgXHJcbiAjZGVmaW5lIFVTRV9DVUJFX01BUF9TSEFET1cgdHJ1ZVxyXG4gdW5pZm9ybSBzYW1wbGVyMkQgY29sb3JUZXh0dXJlO1xyXG4gdW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhUZXh0dXJlO1xyXG4gdmFyeWluZyB2ZWMyIHZfdGV4dHVyZUNvb3JkaW5hdGVzO1xyXG4gdW5pZm9ybSBtYXQ0IGNhbWVyYV9wcm9qZWN0aW9uX21hdHJpeDtcclxuIHVuaWZvcm0gbWF0NCBjYW1lcmFfdmlld19tYXRyaXg7XHJcbiB1bmlmb3JtIHNhbXBsZXJDdWJlIHNoYWRvd01hcF90ZXh0dXJlQ3ViZTtcclxuIHVuaWZvcm0gbWF0NCBzaGFkb3dNYXBfbWF0cml4O1xyXG4gdW5pZm9ybSB2ZWM0IHNoYWRvd01hcF9saWdodFBvc2l0aW9uRUM7XHJcbiB1bmlmb3JtIHZlYzQgc2hhZG93TWFwX25vcm1hbE9mZnNldFNjYWxlRGlzdGFuY2VNYXhEaXN0YW5jZUFuZERhcmtuZXNzO1xyXG4gdW5pZm9ybSB2ZWM0IHNoYWRvd01hcF90ZXhlbFNpemVEZXB0aEJpYXNBbmROb3JtYWxTaGFkaW5nU21vb3RoO1xyXG4gdW5pZm9ybSBmbG9hdCBoZWxzaW5nX3ZpZXdEaXN0YW5jZTtcclxuIHVuaWZvcm0gdmVjNCBoZWxzaW5nX3Zpc2libGVBcmVhQ29sb3I7XHJcbiB1bmlmb3JtIHZlYzQgaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3I7XHJcblxyXG4gc3RydWN0IHp4X3NoYWRvd1BhcmFtZXRlcnNcclxuIHtcclxuICAgICB2ZWMzIHRleENvb3JkcztcclxuICAgICBmbG9hdCBkZXB0aEJpYXM7XHJcbiAgICAgZmxvYXQgZGVwdGg7XHJcbiAgICAgZmxvYXQgbkRvdEw7XHJcbiAgICAgdmVjMiB0ZXhlbFN0ZXBTaXplO1xyXG4gICAgIGZsb2F0IG5vcm1hbFNoYWRpbmdTbW9vdGg7XHJcbiAgICAgZmxvYXQgZGFya25lc3M7XHJcbiB9O1xyXG5cclxuIGZsb2F0IGN6bV9zaGFkb3dWaXNpYmlsaXR5KHNhbXBsZXJDdWJlIHNoYWRvd01hcCwgenhfc2hhZG93UGFyYW1ldGVycyBzaGFkb3dQYXJhbWV0ZXJzKVxyXG4ge1xyXG4gICAgIGZsb2F0IGRlcHRoQmlhcyA9IHNoYWRvd1BhcmFtZXRlcnMuZGVwdGhCaWFzO1xyXG4gICAgIGZsb2F0IGRlcHRoID0gc2hhZG93UGFyYW1ldGVycy5kZXB0aDtcclxuICAgICBmbG9hdCBuRG90TCA9IHNoYWRvd1BhcmFtZXRlcnMubkRvdEw7XHJcbiAgICAgZmxvYXQgbm9ybWFsU2hhZGluZ1Ntb290aCA9IHNoYWRvd1BhcmFtZXRlcnMubm9ybWFsU2hhZGluZ1Ntb290aDtcclxuICAgICBmbG9hdCBkYXJrbmVzcyA9IHNoYWRvd1BhcmFtZXRlcnMuZGFya25lc3M7XHJcbiAgICAgdmVjMyB1dncgPSBzaGFkb3dQYXJhbWV0ZXJzLnRleENvb3JkcztcclxuICAgICBkZXB0aCAtPSBkZXB0aEJpYXM7XHJcbiAgICAgZmxvYXQgdmlzaWJpbGl0eSA9IGN6bV9zaGFkb3dEZXB0aENvbXBhcmUoc2hhZG93TWFwLCB1dncsIGRlcHRoKTtcclxuICAgICByZXR1cm4gY3ptX3ByaXZhdGVfc2hhZG93VmlzaWJpbGl0eSh2aXNpYmlsaXR5LCBuRG90TCwgbm9ybWFsU2hhZGluZ1Ntb290aCwgZGFya25lc3MpO1xyXG4gfVxyXG5cclxuIHZlYzQgZ2V0UG9zaXRpb25FQygpe1xyXG4gICAgIHJldHVybiBjem1fd2luZG93VG9FeWVDb29yZGluYXRlcyhnbF9GcmFnQ29vcmQpO1xyXG4gfVxyXG5cclxuIHZlYzMgZ2V0Tm9ybWFsRUMoKXtcclxuICAgICByZXR1cm4gdmVjMygxLik7XHJcbiB9XHJcblxyXG4gdmVjNCB0b0V5ZShpbiB2ZWMyIHV2LGluIGZsb2F0IGRlcHRoKXtcclxuICAgICB2ZWMyIHh5PXZlYzIoKHV2LngqMi4tMS4pLCh1di55KjIuLTEuKSk7XHJcbiAgICAgdmVjNCBwb3NJbkNhbWVyYT1jem1faW52ZXJzZVByb2plY3Rpb24qdmVjNCh4eSxkZXB0aCwxLik7XHJcbiAgICAgcG9zSW5DYW1lcmE9cG9zSW5DYW1lcmEvcG9zSW5DYW1lcmEudztcclxuICAgICByZXR1cm4gcG9zSW5DYW1lcmE7XHJcbiB9XHJcblxyXG4gdmVjMyBwb2ludFByb2plY3RPblBsYW5lKGluIHZlYzMgcGxhbmVOb3JtYWwsaW4gdmVjMyBwbGFuZU9yaWdpbixpbiB2ZWMzIHBvaW50KXtcclxuICAgICB2ZWMzIHYwMT1wb2ludC1wbGFuZU9yaWdpbjtcclxuICAgICBmbG9hdCBkPWRvdChwbGFuZU5vcm1hbCx2MDEpO1xyXG4gICAgIHJldHVybihwb2ludC1wbGFuZU5vcm1hbCpkKTtcclxuIH1cclxuXHJcbiBmbG9hdCBnZXREZXB0aChpbiB2ZWM0IGRlcHRoKXtcclxuICAgICBmbG9hdCB6X3dpbmRvdz1jem1fdW5wYWNrRGVwdGgoZGVwdGgpO1xyXG4gICAgIHpfd2luZG93PWN6bV9yZXZlcnNlTG9nRGVwdGgoel93aW5kb3cpO1xyXG4gICAgIGZsb2F0IG5fcmFuZ2U9Y3ptX2RlcHRoUmFuZ2UubmVhcjtcclxuICAgICBmbG9hdCBmX3JhbmdlPWN6bV9kZXB0aFJhbmdlLmZhcjtcclxuICAgICByZXR1cm4oMi4qel93aW5kb3ctbl9yYW5nZS1mX3JhbmdlKS8oZl9yYW5nZS1uX3JhbmdlKTtcclxuIH1cclxuXHJcbiBmbG9hdCBzaGFkb3coaW4gdmVjNCBwb3NpdGlvbkVDKXtcclxuICAgICB2ZWMzIG5vcm1hbEVDPWdldE5vcm1hbEVDKCk7XHJcbiAgICAgenhfc2hhZG93UGFyYW1ldGVycyBzaGFkb3dQYXJhbWV0ZXJzO1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMudGV4ZWxTdGVwU2l6ZT1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC54eTtcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLmRlcHRoQmlhcz1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC56O1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMubm9ybWFsU2hhZGluZ1Ntb290aD1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC53O1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMuZGFya25lc3M9c2hhZG93TWFwX25vcm1hbE9mZnNldFNjYWxlRGlzdGFuY2VNYXhEaXN0YW5jZUFuZERhcmtuZXNzLnc7XHJcbiAgICAgdmVjMyBkaXJlY3Rpb25FQz1wb3NpdGlvbkVDLnh5ei1zaGFkb3dNYXBfbGlnaHRQb3NpdGlvbkVDLnh5ejtcclxuICAgICBmbG9hdCBkaXN0YW5jZT1sZW5ndGgoZGlyZWN0aW9uRUMpO1xyXG4gICAgIGRpcmVjdGlvbkVDPW5vcm1hbGl6ZShkaXJlY3Rpb25FQyk7XHJcbiAgICAgZmxvYXQgcmFkaXVzPXNoYWRvd01hcF9saWdodFBvc2l0aW9uRUMudztcclxuICAgICBpZihkaXN0YW5jZT5yYWRpdXMpXHJcbiAgICAge1xyXG4gICAgICAgICByZXR1cm4gMi4wO1xyXG4gICAgIH1cclxuICAgICB2ZWMzIGRpcmVjdGlvbldDPWN6bV9pbnZlcnNlVmlld1JvdGF0aW9uKmRpcmVjdGlvbkVDO1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMuZGVwdGg9ZGlzdGFuY2UvcmFkaXVzLTAuMDAwMztcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLm5Eb3RMPWNsYW1wKGRvdChub3JtYWxFQywtZGlyZWN0aW9uRUMpLDAuLDEuKTtcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLnRleENvb3Jkcz1kaXJlY3Rpb25XQztcclxuICAgICBmbG9hdCB2aXNpYmlsaXR5PWN6bV9zaGFkb3dWaXNpYmlsaXR5KHNoYWRvd01hcF90ZXh0dXJlQ3ViZSxzaGFkb3dQYXJhbWV0ZXJzKTtcclxuICAgICByZXR1cm4gdmlzaWJpbGl0eTtcclxuIH1cclxuXHJcbiBib29sIHZpc2libGUoaW4gdmVjNCByZXN1bHQpXHJcbiB7XHJcbiAgICAgcmVzdWx0LngvPXJlc3VsdC53O1xyXG4gICAgIHJlc3VsdC55Lz1yZXN1bHQudztcclxuICAgICByZXN1bHQuei89cmVzdWx0Lnc7XHJcbiAgICAgcmV0dXJuIHJlc3VsdC54Pj0tMS4mJnJlc3VsdC54PD0xLlxyXG4gICAgICYmcmVzdWx0Lnk+PS0xLiYmcmVzdWx0Lnk8PTEuXHJcbiAgICAgJiZyZXN1bHQuej49LTEuJiZyZXN1bHQuejw9MS47XHJcbiB9XHJcblxyXG4gdm9pZCBtYWluKCl7XHJcbiAgICAgLy8g6YeJ6ImyID0g57uT5p6E5LqM57u0KOminOiJsue6ueeQhiwg57q555CG5Z2Q5qCHKVxyXG4gICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChjb2xvclRleHR1cmUsIHZfdGV4dHVyZUNvb3JkaW5hdGVzKTtcclxuICAgICAvLyDmt7HluqYgPSDojrflj5bmt7HluqYo57uT5p6E5LqM57u0KOa3seW6pue6ueeQhiwg57q555CG5Z2Q5qCHKSlcclxuICAgICBmbG9hdCBkZXB0aCA9IGdldERlcHRoKHRleHR1cmUyRChkZXB0aFRleHR1cmUsIHZfdGV4dHVyZUNvb3JkaW5hdGVzKSk7XHJcbiAgICAgLy8g6KeG6KeSID0gKOe6ueeQhuWdkOaghywg5rex5bqmKVxyXG4gICAgIHZlYzQgdmlld1BvcyA9IHRvRXllKHZfdGV4dHVyZUNvb3JkaW5hdGVzLCBkZXB0aCk7XHJcbiAgICAgLy8g5LiW55WM5Z2Q5qCHXHJcbiAgICAgdmVjNCB3b3JkUG9zID0gY3ptX2ludmVyc2VWaWV3ICogdmlld1BvcztcclxuICAgICAvLyDomZrmi5/nm7jmnLrkuK3lnZDmoIdcclxuICAgICB2ZWM0IHZjUG9zID0gY2FtZXJhX3ZpZXdfbWF0cml4ICogd29yZFBvcztcclxuICAgICBmbG9hdCBuZWFyID0gLjAwMSAqIGhlbHNpbmdfdmlld0Rpc3RhbmNlO1xyXG4gICAgIGZsb2F0IGRpcyA9IGxlbmd0aCh2Y1Bvcy54eXopO1xyXG4gICAgIGlmKGRpcyA+IG5lYXIgJiYgZGlzIDwgaGVsc2luZ192aWV3RGlzdGFuY2Upe1xyXG4gICAgICAgICAvLyDpgI/op4bmipXlvbFcclxuICAgICAgICAgdmVjNCBwb3NJbkV5ZSA9IGNhbWVyYV9wcm9qZWN0aW9uX21hdHJpeCAqIHZjUG9zO1xyXG4gICAgICAgICAvLyDlj6/op4bljLrpopzoibJcclxuICAgICAgICAgLy8gdmVjNCBoZWxzaW5nX3Zpc2libGVBcmVhQ29sb3I9dmVjNCgwLiwxLiwwLiwuNSk7XHJcbiAgICAgICAgIC8vIHZlYzQgaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3I9dmVjNCgxLiwwLiwwLiwuNSk7XHJcbiAgICAgICAgIGlmKHZpc2libGUocG9zSW5FeWUpKXtcclxuICAgICAgICAgICAgIGZsb2F0IHZpcyA9IHNoYWRvdyh2aWV3UG9zKTtcclxuICAgICAgICAgICAgIGlmKHZpcyA+IDAuMyl7XHJcbiAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGdsX0ZyYWdDb2xvcixoZWxzaW5nX3Zpc2libGVBcmVhQ29sb3IsLjUpO1xyXG4gICAgICAgICAgICAgfSBlbHNle1xyXG4gICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChnbF9GcmFnQ29sb3IsaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3IsLjUpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgfVxyXG4gfWA7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/ViewShed/glsl.js\n"); /***/ }), /***/ "./src/Obj/Analysis/ViewShed/glsl2.js": /*!********************************************!*\ !*** ./src/Obj/Analysis/ViewShed/glsl2.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n #define USE_CUBE_MAP_SHADOW true\\n uniform sampler2D colorTexture;\\n uniform sampler2D depthTexture;\\n in vec2 v_textureCoordinates;\\n uniform mat4 camera_projection_matrix;\\n uniform mat4 camera_view_matrix;\\n uniform samplerCube shadowMap_textureCube;\\n uniform mat4 shadowMap_matrix;\\n uniform vec4 shadowMap_lightPositionEC;\\n uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness;\\n uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth;\\n uniform float helsing_viewDistance;\\n uniform vec4 helsing_visibleAreaColor;\\n uniform vec4 helsing_invisibleAreaColor;\\n\\n struct zx_shadowParameters\\n {\\n vec3 texCoords;\\n float depthBias;\\n float depth;\\n float nDotL;\\n vec2 texelStepSize;\\n float normalShadingSmooth;\\n float darkness;\\n };\\n\\n float czm_shadowVisibility(samplerCube shadowMap, zx_shadowParameters shadowParameters)\\n {\\n float depthBias = shadowParameters.depthBias;\\n float depth = shadowParameters.depth;\\n float nDotL = shadowParameters.nDotL;\\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n float darkness = shadowParameters.darkness;\\n vec3 uvw = shadowParameters.texCoords;\\n depth -= depthBias;\\n float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);\\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n }\\n\\n vec4 getPositionEC(){\\n return czm_windowToEyeCoordinates(gl_FragCoord);\\n }\\n\\n vec3 getNormalEC(){\\n return vec3(1.);\\n }\\n\\n vec4 toEye(in vec2 uv,in float depth){\\n vec2 xy=vec2((uv.x*2.-1.),(uv.y*2.-1.));\\n vec4 posInCamera=czm_inverseProjection*vec4(xy,depth,1.);\\n posInCamera=posInCamera/posInCamera.w;\\n return posInCamera;\\n }\\n\\n vec3 pointProjectOnPlane(in vec3 planeNormal,in vec3 planeOrigin,in vec3 point){\\n vec3 v01=point-planeOrigin;\\n float d=dot(planeNormal,v01);\\n return(point-planeNormal*d);\\n }\\n\\n float getDepth(in vec4 depth){\\n float z_window=czm_unpackDepth(depth);\\n z_window=czm_reverseLogDepth(z_window);\\n float n_range=czm_depthRange.near;\\n float f_range=czm_depthRange.far;\\n return(2.*z_window-n_range-f_range)/(f_range-n_range);\\n }\\n\\n float shadow(in vec4 positionEC){\\n vec3 normalEC=getNormalEC();\\n zx_shadowParameters shadowParameters;\\n shadowParameters.texelStepSize=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy;\\n shadowParameters.depthBias=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z;\\n shadowParameters.normalShadingSmooth=shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w;\\n shadowParameters.darkness=shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w;\\n vec3 directionEC=positionEC.xyz-shadowMap_lightPositionEC.xyz;\\n float distance=length(directionEC);\\n directionEC=normalize(directionEC);\\n float radius=shadowMap_lightPositionEC.w;\\n if(distance>radius)\\n {\\n return 2.0;\\n }\\n vec3 directionWC=czm_inverseViewRotation*directionEC;\\n shadowParameters.depth=distance/radius-0.0003;\\n shadowParameters.nDotL=clamp(dot(normalEC,-directionEC),0.,1.);\\n shadowParameters.texCoords=directionWC;\\n float visibility=czm_shadowVisibility(shadowMap_textureCube,shadowParameters);\\n return visibility;\\n }\\n\\n bool visible(in vec4 result)\\n {\\n result.x/=result.w;\\n result.y/=result.w;\\n result.z/=result.w;\\n return result.x>=-1.&&result.x<=1.\\n &&result.y>=-1.&&result.y<=1.\\n &&result.z>=-1.&&result.z<=1.;\\n }\\n\\n void main(){\\n // \\u91C9\\u8272 = \\u7ED3\\u6784\\u4E8C\\u7EF4(\\u989C\\u8272\\u7EB9\\u7406, \\u7EB9\\u7406\\u5750\\u6807)\\n out_FragColor = texture(colorTexture, v_textureCoordinates);\\n // \\u6DF1\\u5EA6 = \\u83B7\\u53D6\\u6DF1\\u5EA6(\\u7ED3\\u6784\\u4E8C\\u7EF4(\\u6DF1\\u5EA6\\u7EB9\\u7406, \\u7EB9\\u7406\\u5750\\u6807))\\n float depth = getDepth(texture(depthTexture, v_textureCoordinates));\\n // \\u89C6\\u89D2 = (\\u7EB9\\u7406\\u5750\\u6807, \\u6DF1\\u5EA6)\\n vec4 viewPos = toEye(v_textureCoordinates, depth);\\n // \\u4E16\\u754C\\u5750\\u6807\\n vec4 wordPos = czm_inverseView * viewPos;\\n // \\u865A\\u62DF\\u76F8\\u673A\\u4E2D\\u5750\\u6807\\n vec4 vcPos = camera_view_matrix * wordPos;\\n float near = .001 * helsing_viewDistance;\\n float dis = length(vcPos.xyz);\\n if(dis > near && dis < helsing_viewDistance){\\n // \\u900F\\u89C6\\u6295\\u5F71\\n vec4 posInEye = camera_projection_matrix * vcPos;\\n // \\u53EF\\u89C6\\u533A\\u989C\\u8272\\n // vec4 helsing_visibleAreaColor=vec4(0.,1.,0.,.5);\\n // vec4 helsing_invisibleAreaColor=vec4(1.,0.,0.,.5);\\n if(visible(posInEye)){\\n float vis = shadow(viewPos);\\n if(vis > 0.3){\\n out_FragColor = mix(out_FragColor,helsing_visibleAreaColor,.5);\\n } else{\\n out_FragColor = mix(out_FragColor,helsing_invisibleAreaColor,.5);\\n }\\n }\\n }\\n }\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1ZpZXdTaGVkL2dsc2wyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9WaWV3U2hlZC9nbHNsMi5qcz9hNjZmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGBcclxuICNkZWZpbmUgVVNFX0NVQkVfTUFQX1NIQURPVyB0cnVlXHJcbiB1bmlmb3JtIHNhbXBsZXIyRCBjb2xvclRleHR1cmU7XHJcbiB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aFRleHR1cmU7XHJcbiBpbiB2ZWMyIHZfdGV4dHVyZUNvb3JkaW5hdGVzO1xyXG4gdW5pZm9ybSBtYXQ0IGNhbWVyYV9wcm9qZWN0aW9uX21hdHJpeDtcclxuIHVuaWZvcm0gbWF0NCBjYW1lcmFfdmlld19tYXRyaXg7XHJcbiB1bmlmb3JtIHNhbXBsZXJDdWJlIHNoYWRvd01hcF90ZXh0dXJlQ3ViZTtcclxuIHVuaWZvcm0gbWF0NCBzaGFkb3dNYXBfbWF0cml4O1xyXG4gdW5pZm9ybSB2ZWM0IHNoYWRvd01hcF9saWdodFBvc2l0aW9uRUM7XHJcbiB1bmlmb3JtIHZlYzQgc2hhZG93TWFwX25vcm1hbE9mZnNldFNjYWxlRGlzdGFuY2VNYXhEaXN0YW5jZUFuZERhcmtuZXNzO1xyXG4gdW5pZm9ybSB2ZWM0IHNoYWRvd01hcF90ZXhlbFNpemVEZXB0aEJpYXNBbmROb3JtYWxTaGFkaW5nU21vb3RoO1xyXG4gdW5pZm9ybSBmbG9hdCBoZWxzaW5nX3ZpZXdEaXN0YW5jZTtcclxuIHVuaWZvcm0gdmVjNCBoZWxzaW5nX3Zpc2libGVBcmVhQ29sb3I7XHJcbiB1bmlmb3JtIHZlYzQgaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3I7XHJcblxyXG4gc3RydWN0IHp4X3NoYWRvd1BhcmFtZXRlcnNcclxuIHtcclxuICAgICB2ZWMzIHRleENvb3JkcztcclxuICAgICBmbG9hdCBkZXB0aEJpYXM7XHJcbiAgICAgZmxvYXQgZGVwdGg7XHJcbiAgICAgZmxvYXQgbkRvdEw7XHJcbiAgICAgdmVjMiB0ZXhlbFN0ZXBTaXplO1xyXG4gICAgIGZsb2F0IG5vcm1hbFNoYWRpbmdTbW9vdGg7XHJcbiAgICAgZmxvYXQgZGFya25lc3M7XHJcbiB9O1xyXG5cclxuIGZsb2F0IGN6bV9zaGFkb3dWaXNpYmlsaXR5KHNhbXBsZXJDdWJlIHNoYWRvd01hcCwgenhfc2hhZG93UGFyYW1ldGVycyBzaGFkb3dQYXJhbWV0ZXJzKVxyXG4ge1xyXG4gICAgIGZsb2F0IGRlcHRoQmlhcyA9IHNoYWRvd1BhcmFtZXRlcnMuZGVwdGhCaWFzO1xyXG4gICAgIGZsb2F0IGRlcHRoID0gc2hhZG93UGFyYW1ldGVycy5kZXB0aDtcclxuICAgICBmbG9hdCBuRG90TCA9IHNoYWRvd1BhcmFtZXRlcnMubkRvdEw7XHJcbiAgICAgZmxvYXQgbm9ybWFsU2hhZGluZ1Ntb290aCA9IHNoYWRvd1BhcmFtZXRlcnMubm9ybWFsU2hhZGluZ1Ntb290aDtcclxuICAgICBmbG9hdCBkYXJrbmVzcyA9IHNoYWRvd1BhcmFtZXRlcnMuZGFya25lc3M7XHJcbiAgICAgdmVjMyB1dncgPSBzaGFkb3dQYXJhbWV0ZXJzLnRleENvb3JkcztcclxuICAgICBkZXB0aCAtPSBkZXB0aEJpYXM7XHJcbiAgICAgZmxvYXQgdmlzaWJpbGl0eSA9IGN6bV9zaGFkb3dEZXB0aENvbXBhcmUoc2hhZG93TWFwLCB1dncsIGRlcHRoKTtcclxuICAgICByZXR1cm4gY3ptX3ByaXZhdGVfc2hhZG93VmlzaWJpbGl0eSh2aXNpYmlsaXR5LCBuRG90TCwgbm9ybWFsU2hhZGluZ1Ntb290aCwgZGFya25lc3MpO1xyXG4gfVxyXG5cclxuIHZlYzQgZ2V0UG9zaXRpb25FQygpe1xyXG4gICAgIHJldHVybiBjem1fd2luZG93VG9FeWVDb29yZGluYXRlcyhnbF9GcmFnQ29vcmQpO1xyXG4gfVxyXG5cclxuIHZlYzMgZ2V0Tm9ybWFsRUMoKXtcclxuICAgICByZXR1cm4gdmVjMygxLik7XHJcbiB9XHJcblxyXG4gdmVjNCB0b0V5ZShpbiB2ZWMyIHV2LGluIGZsb2F0IGRlcHRoKXtcclxuICAgICB2ZWMyIHh5PXZlYzIoKHV2LngqMi4tMS4pLCh1di55KjIuLTEuKSk7XHJcbiAgICAgdmVjNCBwb3NJbkNhbWVyYT1jem1faW52ZXJzZVByb2plY3Rpb24qdmVjNCh4eSxkZXB0aCwxLik7XHJcbiAgICAgcG9zSW5DYW1lcmE9cG9zSW5DYW1lcmEvcG9zSW5DYW1lcmEudztcclxuICAgICByZXR1cm4gcG9zSW5DYW1lcmE7XHJcbiB9XHJcblxyXG4gdmVjMyBwb2ludFByb2plY3RPblBsYW5lKGluIHZlYzMgcGxhbmVOb3JtYWwsaW4gdmVjMyBwbGFuZU9yaWdpbixpbiB2ZWMzIHBvaW50KXtcclxuICAgICB2ZWMzIHYwMT1wb2ludC1wbGFuZU9yaWdpbjtcclxuICAgICBmbG9hdCBkPWRvdChwbGFuZU5vcm1hbCx2MDEpO1xyXG4gICAgIHJldHVybihwb2ludC1wbGFuZU5vcm1hbCpkKTtcclxuIH1cclxuXHJcbiBmbG9hdCBnZXREZXB0aChpbiB2ZWM0IGRlcHRoKXtcclxuICAgICBmbG9hdCB6X3dpbmRvdz1jem1fdW5wYWNrRGVwdGgoZGVwdGgpO1xyXG4gICAgIHpfd2luZG93PWN6bV9yZXZlcnNlTG9nRGVwdGgoel93aW5kb3cpO1xyXG4gICAgIGZsb2F0IG5fcmFuZ2U9Y3ptX2RlcHRoUmFuZ2UubmVhcjtcclxuICAgICBmbG9hdCBmX3JhbmdlPWN6bV9kZXB0aFJhbmdlLmZhcjtcclxuICAgICByZXR1cm4oMi4qel93aW5kb3ctbl9yYW5nZS1mX3JhbmdlKS8oZl9yYW5nZS1uX3JhbmdlKTtcclxuIH1cclxuXHJcbiBmbG9hdCBzaGFkb3coaW4gdmVjNCBwb3NpdGlvbkVDKXtcclxuICAgICB2ZWMzIG5vcm1hbEVDPWdldE5vcm1hbEVDKCk7XHJcbiAgICAgenhfc2hhZG93UGFyYW1ldGVycyBzaGFkb3dQYXJhbWV0ZXJzO1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMudGV4ZWxTdGVwU2l6ZT1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC54eTtcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLmRlcHRoQmlhcz1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC56O1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMubm9ybWFsU2hhZGluZ1Ntb290aD1zaGFkb3dNYXBfdGV4ZWxTaXplRGVwdGhCaWFzQW5kTm9ybWFsU2hhZGluZ1Ntb290aC53O1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMuZGFya25lc3M9c2hhZG93TWFwX25vcm1hbE9mZnNldFNjYWxlRGlzdGFuY2VNYXhEaXN0YW5jZUFuZERhcmtuZXNzLnc7XHJcbiAgICAgdmVjMyBkaXJlY3Rpb25FQz1wb3NpdGlvbkVDLnh5ei1zaGFkb3dNYXBfbGlnaHRQb3NpdGlvbkVDLnh5ejtcclxuICAgICBmbG9hdCBkaXN0YW5jZT1sZW5ndGgoZGlyZWN0aW9uRUMpO1xyXG4gICAgIGRpcmVjdGlvbkVDPW5vcm1hbGl6ZShkaXJlY3Rpb25FQyk7XHJcbiAgICAgZmxvYXQgcmFkaXVzPXNoYWRvd01hcF9saWdodFBvc2l0aW9uRUMudztcclxuICAgICBpZihkaXN0YW5jZT5yYWRpdXMpXHJcbiAgICAge1xyXG4gICAgICAgICByZXR1cm4gMi4wO1xyXG4gICAgIH1cclxuICAgICB2ZWMzIGRpcmVjdGlvbldDPWN6bV9pbnZlcnNlVmlld1JvdGF0aW9uKmRpcmVjdGlvbkVDO1xyXG4gICAgIHNoYWRvd1BhcmFtZXRlcnMuZGVwdGg9ZGlzdGFuY2UvcmFkaXVzLTAuMDAwMztcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLm5Eb3RMPWNsYW1wKGRvdChub3JtYWxFQywtZGlyZWN0aW9uRUMpLDAuLDEuKTtcclxuICAgICBzaGFkb3dQYXJhbWV0ZXJzLnRleENvb3Jkcz1kaXJlY3Rpb25XQztcclxuICAgICBmbG9hdCB2aXNpYmlsaXR5PWN6bV9zaGFkb3dWaXNpYmlsaXR5KHNoYWRvd01hcF90ZXh0dXJlQ3ViZSxzaGFkb3dQYXJhbWV0ZXJzKTtcclxuICAgICByZXR1cm4gdmlzaWJpbGl0eTtcclxuIH1cclxuXHJcbiBib29sIHZpc2libGUoaW4gdmVjNCByZXN1bHQpXHJcbiB7XHJcbiAgICAgcmVzdWx0LngvPXJlc3VsdC53O1xyXG4gICAgIHJlc3VsdC55Lz1yZXN1bHQudztcclxuICAgICByZXN1bHQuei89cmVzdWx0Lnc7XHJcbiAgICAgcmV0dXJuIHJlc3VsdC54Pj0tMS4mJnJlc3VsdC54PD0xLlxyXG4gICAgICYmcmVzdWx0Lnk+PS0xLiYmcmVzdWx0Lnk8PTEuXHJcbiAgICAgJiZyZXN1bHQuej49LTEuJiZyZXN1bHQuejw9MS47XHJcbiB9XHJcblxyXG4gdm9pZCBtYWluKCl7XHJcbiAgICAgLy8g6YeJ6ImyID0g57uT5p6E5LqM57u0KOminOiJsue6ueeQhiwg57q555CG5Z2Q5qCHKVxyXG4gICAgIG91dF9GcmFnQ29sb3IgPSB0ZXh0dXJlKGNvbG9yVGV4dHVyZSwgdl90ZXh0dXJlQ29vcmRpbmF0ZXMpO1xyXG4gICAgIC8vIOa3seW6piA9IOiOt+WPlua3seW6pijnu5PmnoTkuoznu7Qo5rex5bqm57q555CGLCDnurnnkIblnZDmoIcpKVxyXG4gICAgIGZsb2F0IGRlcHRoID0gZ2V0RGVwdGgodGV4dHVyZShkZXB0aFRleHR1cmUsIHZfdGV4dHVyZUNvb3JkaW5hdGVzKSk7XHJcbiAgICAgLy8g6KeG6KeSID0gKOe6ueeQhuWdkOaghywg5rex5bqmKVxyXG4gICAgIHZlYzQgdmlld1BvcyA9IHRvRXllKHZfdGV4dHVyZUNvb3JkaW5hdGVzLCBkZXB0aCk7XHJcbiAgICAgLy8g5LiW55WM5Z2Q5qCHXHJcbiAgICAgdmVjNCB3b3JkUG9zID0gY3ptX2ludmVyc2VWaWV3ICogdmlld1BvcztcclxuICAgICAvLyDomZrmi5/nm7jmnLrkuK3lnZDmoIdcclxuICAgICB2ZWM0IHZjUG9zID0gY2FtZXJhX3ZpZXdfbWF0cml4ICogd29yZFBvcztcclxuICAgICBmbG9hdCBuZWFyID0gLjAwMSAqIGhlbHNpbmdfdmlld0Rpc3RhbmNlO1xyXG4gICAgIGZsb2F0IGRpcyA9IGxlbmd0aCh2Y1Bvcy54eXopO1xyXG4gICAgIGlmKGRpcyA+IG5lYXIgJiYgZGlzIDwgaGVsc2luZ192aWV3RGlzdGFuY2Upe1xyXG4gICAgICAgICAvLyDpgI/op4bmipXlvbFcclxuICAgICAgICAgdmVjNCBwb3NJbkV5ZSA9IGNhbWVyYV9wcm9qZWN0aW9uX21hdHJpeCAqIHZjUG9zO1xyXG4gICAgICAgICAvLyDlj6/op4bljLrpopzoibJcclxuICAgICAgICAgLy8gdmVjNCBoZWxzaW5nX3Zpc2libGVBcmVhQ29sb3I9dmVjNCgwLiwxLiwwLiwuNSk7XHJcbiAgICAgICAgIC8vIHZlYzQgaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3I9dmVjNCgxLiwwLiwwLiwuNSk7XHJcbiAgICAgICAgIGlmKHZpc2libGUocG9zSW5FeWUpKXtcclxuICAgICAgICAgICAgIGZsb2F0IHZpcyA9IHNoYWRvdyh2aWV3UG9zKTtcclxuICAgICAgICAgICAgIGlmKHZpcyA+IDAuMyl7XHJcbiAgICAgICAgICAgICAgICBvdXRfRnJhZ0NvbG9yID0gbWl4KG91dF9GcmFnQ29sb3IsaGVsc2luZ192aXNpYmxlQXJlYUNvbG9yLC41KTtcclxuICAgICAgICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgICAgICAgIG91dF9GcmFnQ29sb3IgPSBtaXgob3V0X0ZyYWdDb2xvcixoZWxzaW5nX2ludmlzaWJsZUFyZWFDb2xvciwuNSk7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICB9XHJcbiB9YDsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/ViewShed/glsl2.js\n"); /***/ }), /***/ "./src/Obj/Analysis/ViewShed/index.js": /*!********************************************!*\ !*** ./src/Obj/Analysis/ViewShed/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/readOnlyError */ \"./node_modules/@babel/runtime/helpers/readOnlyError.js\");\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _glsl__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./glsl */ \"./src/Obj/Analysis/ViewShed/glsl.js\");\n/* harmony import */ var _glsl2__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./glsl2 */ \"./src/Obj/Analysis/ViewShed/glsl2.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Controller */ \"./src/Controller/index.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/ViewShed/_element.js\");\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n// ViewShed.js\n\n\n\n\n\n\n\n\n\n/**\r\n * @constructor\r\n * @description 可视域分析\r\n * @param sdk\r\n * @param {Object} options 选项。\r\n * @param {Cesium.Cartesian3} options.viewPosition 观测点位置。\r\n * @param {Cesium.Cartesian3} options.viewPositionEnd 最远观测点位置(如果设置了观测距离,这个属性可以不设置)。\r\n * @param {Number} options.viewPointHeight=1.8 视点高度(单位`米`)。\r\n * @param {Number} options.viewDistance 观测距离(单位`米`)。\r\n * @param {Number} options.viewHeading 航向角(单位`度`)。\r\n * @param {Number} options.viewPitch 俯仰角(单位`度`)。\r\n * @param {Number} options.horizontalViewAngle=90 可视域水平夹角(单位`度`)。\r\n * @param {Number} options.verticalViewAngle=60 可视域垂直夹角(单位`度`)。\r\n * @param {String} options.visibleAreaColor=#008000 可视区域颜色(默认值`绿色`)。\r\n * @param {String} options.invisibleAreaColor=#FF0000 不可视区域颜色(默认值`红色`)。\r\n */\nvar ViewShedStage = /*#__PURE__*/function (_Tools) {\n function ViewShedStage(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, ViewShedStage);\n _this2 = _callSuper(this, ViewShedStage, [sdk, options]);\n\n // if (Object.hasOwn(options.viewPosition, 'lng') && Object.hasOwn(options.viewPosition, 'lat') && Object.hasOwn(options.viewPosition, 'alt')) {\n // this.error = '请提供观测点位置!'\n // window.ELEMENT && window.ELEMENT.Message({\n // message: '请提供观测点位置!',\n // type: 'warning',\n // duration: 1500\n // });\n // return\n // }\n\n _this2.viewer = sdk.viewer;\n _this2.options = {};\n _this2.options.viewPosition = options.viewPosition;\n _this2.options.viewPositionEnd = options.viewPositionEnd;\n _this2.options.horizontalViewAngle = options.horizontalViewAngle || options.horizontalViewAngle === 0 ? options.horizontalViewAngle : 90.0;\n _this2.options.verticalViewAngle = options.verticalViewAngle || options.verticalViewAngle === 0 ? options.verticalViewAngle : 60.0;\n _this2.options.visibleAreaColor = options.visibleAreaColor || '#008000';\n _this2.options.invisibleAreaColor = options.invisibleAreaColor || '#FF0000';\n _this2._elms = {};\n _this2.viewPointHeight = options.viewPointHeight;\n // this.enabled = (typeof options.enabled === \"boolean\") ? options.enabled : true;\n // this.softShadows = (typeof options.softShadows === \"boolean\") ? options.softShadows : true;\n // this.size = options.size || 10240; // 2048\n _this2.ids = [];\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"]();\n _this2.html = null;\n YJ.Analysis.AnalysesResults.push(_this2);\n ViewShedStage.edit(_this2);\n // ViewShedStage.edit(this)\n // this.update();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(ViewShedStage, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(ViewShedStage, [{\n key: \"viewPointHeight\",\n get: function get() {\n return this.options.viewPointHeight;\n },\n set: function set(v) {\n var viewPointHeight = Math.floor(Number(v) * 10) / 10;\n if (isNaN(viewPointHeight)) {\n viewPointHeight = 1.8;\n }\n if (viewPointHeight < 0) {\n viewPointHeight = 0;\n }\n this.options.viewPointHeight = viewPointHeight;\n this._elms.viewPointHeight && this._elms.viewPointHeight.forEach(function (item) {\n item.value = viewPointHeight;\n });\n }\n }, {\n key: \"viewPosition\",\n get: function get() {\n return this.options.viewPosition;\n },\n set: function set(v) {\n this.options.viewPosition = v;\n this.ids[0] && (this.viewer.entities.getById(this.ids[0]).position = new Cesium.Cartesian3.fromDegrees(v.lng, v.lat, v.alt));\n this.update();\n // let viewPosition3 = Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt)\n }\n }, {\n key: \"viewPositionEnd\",\n get: function get() {\n return this.options.viewPositionEnd;\n },\n set: function set(v) {\n this.options.viewPositionEnd = v;\n this.ids[1] && (this.viewer.entities.getById(this.ids[1]).position = new Cesium.Cartesian3.fromDegrees(v.lng, v.lat, v.alt));\n this.update();\n // let viewPositionEnd3 = Cesium.Cartesian3.fromDegrees(this.options.viewPositionEnd.lng, this.options.viewPositionEnd.lat, this.options.viewPositionEnd.alt)\n // this.viewDistance = this.viewPositionEnd ? Cesium.Cartesian3.distance(this.viewPosition, this.viewPositionEnd) : (options.viewDistance || 100.0);\n }\n }, {\n key: \"horizontalViewAngle\",\n get: function get() {\n return this.options.horizontalViewAngle;\n },\n set: function set(v) {\n this.options.horizontalViewAngle = v;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var contentElm = this._DialogObject._element.content;\n var e_horizontalViewAngle = contentElm.querySelector(\"input[name='horizontalViewAngle']\");\n e_horizontalViewAngle.value = v;\n var rangeNodeActive = contentElm.getElementsByClassName('range-node-active')[0];\n var rangeNodeActiveText = rangeNodeActive.getElementsByClassName('range-node-active-text')[0];\n rangeNodeActiveText.innerHTML = v + '°';\n var rangeProcess = contentElm.getElementsByClassName('range-process')[0];\n rangeProcess.style.width = v / 180 * 100 + '%';\n }\n this.update();\n }\n }, {\n key: \"visibleAreaColor\",\n get: function get() {\n return this.options.visibleAreaColor;\n },\n set: function set(v) {\n this.options.visibleAreaColor = v;\n this.update();\n }\n }, {\n key: \"invisibleAreaColor\",\n get: function get() {\n return this.options.invisibleAreaColor;\n },\n set: function set(v) {\n this.options.invisibleAreaColor = v;\n this.update();\n }\n }, {\n key: \"verticalViewAngle\",\n get: function get() {\n return this.options.verticalViewAngle;\n },\n set: function set(v) {\n this.options.verticalViewAngle = v;\n this.update();\n }\n }, {\n key: \"viewDistance\",\n get: function get() {\n var viewPosition3 = Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight);\n var viewPositionEnd3 = Cesium.Cartesian3.fromDegrees(this.options.viewPositionEnd.lng, this.options.viewPositionEnd.lat, this.options.viewPositionEnd.alt);\n var distance = Cesium.Cartesian3.distance(viewPosition3, viewPositionEnd3);\n return distance;\n }\n }, {\n key: \"viewHeading\",\n get: function get() {\n var viewPosition3 = Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight);\n var viewPositionEnd3 = Cesium.Cartesian3.fromDegrees(this.options.viewPositionEnd.lng, this.options.viewPositionEnd.lat, this.options.viewPositionEnd.alt);\n var heading = getHeading(viewPosition3, viewPositionEnd3);\n return heading;\n }\n }, {\n key: \"viewPitch\",\n get: function get() {\n var viewPosition3 = Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight);\n var viewPositionEnd3 = Cesium.Cartesian3.fromDegrees(this.options.viewPositionEnd.lng, this.options.viewPositionEnd.lat, this.options.viewPositionEnd.alt);\n var pitch = getPitch(viewPosition3, viewPositionEnd3);\n return pitch;\n }\n }, {\n key: \"add\",\n value: function add() {\n this.createLightCamera();\n this.createShadowMap();\n this.createPostStage();\n // this.drawFrustumOutline();\n this.drawSketch();\n ViewShedStage.getcanvas(this);\n }\n }, {\n key: \"update\",\n value: function update() {\n this.clear();\n this.add();\n }\n }, {\n key: \"clear\",\n value: function clear() {\n YJ.Measure.SetMeasureStatus(false);\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.tip = null;\n this.event = null;\n if (this.sketch) {\n this.viewer.entities.removeById(this.sketch.id);\n this.sketch = null;\n }\n if (this.frustumOutline) {\n // this.frustumOutline.destroy();\n this.viewer.entities.removeById(this.frustumOutline.id);\n this.frustumOutline = null;\n }\n if (this.postStage) {\n this.viewer.scene.postProcessStages.remove(this.postStage);\n this.postStage = null;\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this3 = this;\n this.clear();\n this.editevent && this.editevent.destroy();\n this.ControllerObject && this.ControllerObject.destroy();\n this.ids.forEach(function (id) {\n _this3.viewer.entities.removeById(id);\n });\n this.ids = [];\n if (this.viewBillboardPrimitive) {\n this.viewer.scene.primitives.remove(this.viewBillboardPrimitive);\n }\n this.viewBillboardPrimitive = null;\n this.options.viewPosition = null;\n this.options.viewPositionEnd = null;\n YJ.Measure.SetMeasureStatus(false);\n if (this._originalShadowMap) {\n this.viewer.scene.shadowMap = this._originalShadowMap;\n this._originalShadowMap = null;\n }\n this.viewer.shadows = this.viewer._shadows;\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit() {\n var _this4 = this;\n if (YJ.Measure.GetMeasureStatus()) {\n console.log('上一次测量未结束');\n } else {\n this.editevent && this.editevent.destroy();\n this.ids.forEach(function (id) {\n var entity = _this4.viewer.entities.getById(id);\n entity.show = true;\n });\n var selectPoint;\n YJ.Measure.SetMeasureStatus(true);\n // this.tip = new MouseTip('左键选择要操作的观测点,右键取消', this.sdk)\n this.editevent = new _Event__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk);\n this.editevent.mouse_left(function (movement, cartesian) {\n var pick = _this4.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.id && _this4.ids.indexOf(pick.id.id) != -1 && (!selectPoint || selectPoint.id != pick.id.id)) {\n selectPoint = pick.id;\n // this.event.destroy()\n // this.tip.destroy()\n _this4.viewer.entities.getById(_this4.ids[0]).position = new Cesium.Cartesian3.fromDegrees(_this4.viewPosition.lng, _this4.viewPosition.lat, _this4.viewPosition.alt);\n _this4.viewer.entities.getById(_this4.ids[1]).position = new Cesium.Cartesian3.fromDegrees(_this4.viewPositionEnd.lng, _this4.viewPositionEnd.lat, _this4.viewPositionEnd.alt);\n _this4.ControllerObject && _this4.ControllerObject.destroy();\n _this4.ControllerObject = new _Controller__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this4.sdk, {\n position: _objectSpread({}, _this4.cartesian3Towgs84(selectPoint.position._value, _this4.sdk.viewer))\n });\n _this4.ControllerObject.controllerCallBack = function (params, status) {\n if (params.position.alt < 0) {\n params.position.alt = 0;\n }\n selectPoint.position = new Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt);\n if (status) {\n if (_this4.ids.indexOf(pick.id.id) == 0) {\n _this4.viewPosition = params.position;\n } else {\n _this4.viewPositionEnd = params.position;\n }\n YJ.Measure.SetMeasureStatus(true);\n }\n };\n _this4.ControllerObject.editTranslational();\n }\n });\n this.editevent.mouse_right(function (movement, cartesian) {\n YJ.Measure.SetMeasureStatus(false);\n _this4.editevent && _this4.editevent.destroy();\n _this4.ControllerObject && _this4.ControllerObject.destroy();\n _this4.ids.forEach(function (id) {\n var entity = _this4.viewer.entities.getById(id);\n entity.show = false;\n });\n selectPoint = null;\n });\n this.editevent.mouse_move(function (movement, cartesian) {\n // this.tip.setPosition(\n // cartesian,\n // movement.endPosition.x,\n // movement.endPosition.y\n // )\n });\n this.editevent.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this4.editevent.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n YJ.Measure.SetMeasureStatus(false);\n _this4.editevent && _this4.editevent.destroy();\n _this4.ControllerObject && _this4.ControllerObject.destroy();\n _this4.ids.forEach(function (id) {\n var entity = _this4.viewer.entities.getById(id);\n entity.show = false;\n });\n selectPoint = null;\n }\n });\n });\n }\n }\n }, {\n key: \"createLightCamera\",\n value: function createLightCamera() {\n if (!this.options.viewPosition) {\n return;\n }\n var _this = this;\n this.lightCamera = new Cesium.Camera(this.viewer.scene);\n this.lightCamera.position = Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight);\n // if (this.viewPositionEnd) {\n // let direction = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(this.viewPositionEnd, this.viewPosition, new Cesium.Cartesian3()), new Cesium.Cartesian3());\n // this.lightCamera.direction = direction; // direction是相机面向的方向\n // }\n this.lightCamera.frustum.near = this.viewDistance * 0.001;\n this.lightCamera.frustum.far = this.viewDistance;\n var hr = Cesium.Math.toRadians(this.horizontalViewAngle);\n var vr = Cesium.Math.toRadians(this.verticalViewAngle);\n var aspectRatio = this.viewDistance * Math.tan(hr / 2) * 2 / (this.viewDistance * Math.tan(vr / 2) * 2);\n this.lightCamera.frustum.aspectRatio = aspectRatio;\n if (hr > vr) {\n this.lightCamera.frustum.fov = hr;\n } else {\n this.lightCamera.frustum.fov = vr;\n }\n this.lightCamera.setView({\n destination: Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight),\n orientation: {\n heading: Cesium.Math.toRadians(this.viewHeading || 0),\n pitch: Cesium.Math.toRadians(this.viewPitch || 0),\n roll: 0\n }\n });\n }\n }, {\n key: \"createShadowMap\",\n value: function createShadowMap() {\n this.shadowMap = new Cesium.ShadowMap({\n context: this.viewer.scene.context,\n lightCamera: this.lightCamera,\n enabled: true,\n isPointLight: true,\n pointLightRadius: this.viewDistance,\n cascadesEnabled: false,\n size: 2048,\n // 2048\n softShadows: true,\n normalOffset: false,\n fromLightSource: false\n });\n if (!this._originalShadowMap) {\n this._originalShadowMap = this.viewer.scene.shadowMap;\n }\n this.viewer.scene.shadowMap = this.shadowMap;\n // setTimeout(() => {\n // this.viewer.shadows = this.viewer._shadows\n // }, 0);\n }\n }, {\n key: \"createPostStage\",\n value: function createPostStage() {\n var _this5 = this;\n var fs = _glsl__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n if (Number(Cesium.VERSION.split('.')[1]) >= 102) {\n _glsl2__WEBPACK_IMPORTED_MODULE_10__[\"default\"], _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1___default()(\"fs\");\n }\n var postStage = new Cesium.PostProcessStage({\n fragmentShader: fs,\n uniforms: {\n shadowMap_textureCube: function shadowMap_textureCube() {\n _this5.shadowMap.update(Reflect.get(_this5.viewer.scene, \"_frameState\"));\n return Reflect.get(_this5.shadowMap, \"_shadowMapTexture\");\n },\n shadowMap_matrix: function shadowMap_matrix() {\n _this5.shadowMap.update(Reflect.get(_this5.viewer.scene, \"_frameState\"));\n return Reflect.get(_this5.shadowMap, \"_shadowMapMatrix\");\n },\n shadowMap_lightPositionEC: function shadowMap_lightPositionEC() {\n _this5.shadowMap.update(Reflect.get(_this5.viewer.scene, \"_frameState\"));\n return Reflect.get(_this5.shadowMap, \"_lightPositionEC\");\n },\n shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness: function shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness() {\n _this5.shadowMap.update(Reflect.get(_this5.viewer.scene, \"_frameState\"));\n var bias = _this5.shadowMap._pointBias;\n return Cesium.Cartesian4.fromElements(bias.normalOffsetScale, _this5.shadowMap._distance, _this5.shadowMap.maximumDistance, 0.0, new Cesium.Cartesian4());\n },\n shadowMap_texelSizeDepthBiasAndNormalShadingSmooth: function shadowMap_texelSizeDepthBiasAndNormalShadingSmooth() {\n _this5.shadowMap.update(Reflect.get(_this5.viewer.scene, \"_frameState\"));\n var bias = _this5.shadowMap._pointBias;\n var scratchTexelStepSize = new Cesium.Cartesian2();\n var texelStepSize = scratchTexelStepSize;\n texelStepSize.x = 1.0 / _this5.shadowMap._textureSize.x;\n texelStepSize.y = 1.0 / _this5.shadowMap._textureSize.y;\n return Cesium.Cartesian4.fromElements(texelStepSize.x, texelStepSize.y, bias.depthBias, bias.normalShadingSmooth, new Cesium.Cartesian4());\n },\n camera_projection_matrix: this.lightCamera.frustum.projectionMatrix,\n camera_view_matrix: this.lightCamera.viewMatrix,\n helsing_viewDistance: function helsing_viewDistance() {\n return _this5.viewDistance;\n },\n helsing_visibleAreaColor: Cesium.Color.fromCssColorString(this.visibleAreaColor),\n helsing_invisibleAreaColor: Cesium.Color.fromCssColorString(this.invisibleAreaColor)\n }\n });\n this.postStage = this.viewer.scene.postProcessStages.add(postStage);\n }\n }, {\n key: \"drawFrustumOutline\",\n value: function drawFrustumOutline() {\n var scratchRight = new Cesium.Cartesian3();\n var scratchRotation = new Cesium.Matrix3();\n var scratchOrientation = new Cesium.Quaternion();\n var position = this.lightCamera.positionWC;\n var direction = this.lightCamera.directionWC;\n var up = this.lightCamera.upWC;\n var right = this.lightCamera.rightWC;\n right = Cesium.Cartesian3.negate(right, scratchRight);\n var rotation = scratchRotation;\n Cesium.Matrix3.setColumn(rotation, 0, right, rotation);\n Cesium.Matrix3.setColumn(rotation, 1, up, rotation);\n Cesium.Matrix3.setColumn(rotation, 2, direction, rotation);\n var orientation = Cesium.Quaternion.fromRotationMatrix(rotation, scratchOrientation);\n var instance = new Cesium.GeometryInstance({\n geometry: new Cesium.FrustumOutlineGeometry({\n frustum: this.lightCamera.frustum,\n origin: Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight),\n orientation: orientation\n }),\n id: Math.random().toString(36).substr(2),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOWGREEN //new Cesium.Color(0.0, 1.0, 0.0, 1.0)\n ),\n show: new Cesium.ShowGeometryInstanceAttribute(true)\n }\n });\n this.frustumOutline = this.viewer.scene.primitives.add(new Cesium.Primitive({\n geometryInstances: [instance],\n appearance: new Cesium.PerInstanceColorAppearance({\n flat: true,\n translucent: false\n })\n }));\n }\n }, {\n key: \"drawSketch\",\n value: function drawSketch() {\n this.sketch = this.viewer.entities.add({\n name: 'sketch',\n position: Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight),\n orientation: Cesium.Transforms.headingPitchRollQuaternion(Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight), Cesium.HeadingPitchRoll.fromDegrees(this.viewHeading - 90, this.viewPitch, 0.0)),\n ellipsoid: {\n radii: new Cesium.Cartesian3(this.viewDistance, this.viewDistance, this.viewDistance),\n // innerRadii: new Cesium.Cartesian3(2.0, 2.0, 2.0),\n minimumClock: Cesium.Math.toRadians(-this.horizontalViewAngle / 2),\n maximumClock: Cesium.Math.toRadians(this.horizontalViewAngle / 2),\n minimumCone: Cesium.Math.toRadians(90 - this.verticalViewAngle / 2),\n maximumCone: Cesium.Math.toRadians(90 + this.verticalViewAngle / 2),\n fill: false,\n outline: true,\n subdivisions: 256,\n stackPartitions: 64,\n slicePartitions: 64,\n outlineColor: Cesium.Color.YELLOWGREEN\n }\n });\n this.frustumOutline = this.viewer.entities.add({\n name: 'sketch',\n position: Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight),\n orientation: Cesium.Transforms.headingPitchRollQuaternion(Cesium.Cartesian3.fromDegrees(this.options.viewPosition.lng, this.options.viewPosition.lat, this.options.viewPosition.alt + this.viewPointHeight), Cesium.HeadingPitchRoll.fromDegrees(this.viewHeading - 90, this.viewPitch, 0.0)),\n ellipsoid: {\n radii: new Cesium.Cartesian3(this.viewDistance, this.viewDistance, this.viewDistance),\n innerRadii: new Cesium.Cartesian3(0.0001, 0.0001, 0.0001),\n minimumClock: Cesium.Math.toRadians(-this.horizontalViewAngle / 2),\n maximumClock: Cesium.Math.toRadians(this.horizontalViewAngle / 2),\n minimumCone: Cesium.Math.toRadians(90 - this.verticalViewAngle / 2),\n maximumCone: Cesium.Math.toRadians(90 + this.verticalViewAngle / 2),\n fill: false,\n outline: true,\n subdivisions: 256,\n stackPartitions: 1,\n slicePartitions: 1,\n outlineColor: Cesium.Color.YELLOWGREEN\n }\n });\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n that.destroy();\n var count = 0;\n if (!YJ.Measure.GetMeasureStatus()) {\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_11__[\"default\"](that.sdk);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('左键选择观测点位置,右键取消', that.sdk);\n YJ.Measure.SetMeasureStatus(true);\n that.event.mouse_left(function (movement, cartesian) {\n if (!that.viewPosition) {\n that.options.viewPosition = that.cartesian3Towgs84(cartesian, that.viewer);\n that.ids.push(ViewShedStage.create_point(that, cartesian));\n that.tip.set_text(\"左键选择最远观测点位置,右键取消\");\n }\n count++;\n if (count === 2) {\n that.options.viewPositionEnd = that.cartesian3Towgs84(cartesian, that.viewer);\n that.ids.push(ViewShedStage.create_point(that, cartesian));\n end();\n that.update();\n }\n });\n that.event.mouse_move(function (movement, cartesian) {\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right(function (movement, cartesian) {\n that.ids.forEach(function (id) {\n that.viewer.entities.removeById(id);\n });\n that.ids = [];\n end();\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n that.ids.forEach(function (id) {\n that.viewer.entities.removeById(id);\n });\n that.ids = [];\n end();\n }\n });\n });\n } else {\n console.log('上一次测量未结束');\n }\n function end() {\n that.ids.forEach(function (id) {\n var entity = that.viewer.entities.getById(id);\n entity.show = false;\n });\n YJ.Measure.SetMeasureStatus(false);\n that.tip.destroy();\n that.event.destroy();\n that.tip = null;\n that.event = null;\n }\n }\n }, {\n key: \"create_point\",\n value: function create_point(that, cartesian) {\n var id = that.randomString();\n var p = that.cartesian3Towgs84(cartesian, that.viewer);\n var params = {\n id: id,\n position: Cesium.Cartesian3.fromDegrees(p.lng, p.lat, p.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n };\n that.viewer.entities.add(new Cesium.Entity(params));\n return id;\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(that) {\n var contentElm, resetBtn, drawElm, all_elm, e_horizontalViewAngle, rangeNodeActive, rangeNodeActiveText, rangeProcess, percentage, timeout;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_16__[\"default\"](that.sdk.viewer._container, {\n title: '可视域分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n YJ.Measure.SetMeasureStatus(false);\n that.editevent && that.editevent.destroy();\n that.ControllerObject && that.ControllerObject.destroy();\n that.ids.forEach(function (id) {\n that.viewer.entities.removeById(id);\n });\n }\n });\n case 3:\n that._DialogObject = _context.sent;\n _context.next = 6;\n return that._DialogObject.init();\n case 6:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' view-shed';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_17__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n resetBtn = that._DialogObject._element.body.getElementsByClassName('edit')[0];\n resetBtn.addEventListener('click', function () {\n that.nodeEdit();\n });\n drawElm = document.createElement('button');\n drawElm.innerHTML = '绘制';\n drawElm.addEventListener('click', function () {\n ViewShedStage.create(that);\n });\n that._DialogObject.footAppChild(drawElm);\n that.html = contentElm;\n all_elm = contentElm.getElementsByTagName(\"*\");\n that._EventBinding.on(that, all_elm);\n that._elms = that._EventBinding.element;\n // //经度值\n // let e_lng = contentElm.querySelector(\"span[name='lng']\")\n // e_lng.innerHTML = Number(that.options.viewPosition.lng.toFixed(8))\n\n // //纬度值\n // let e_lat = contentElm.querySelector(\"span[name='lat']\")\n // e_lat.innerHTML = Number(that.options.viewPosition.lat.toFixed(8))\n\n // //高度值\n // let e_alt = contentElm.querySelector(\"span[name='alt']\")\n // e_alt.innerHTML = Number(that.options.viewPosition.alt.toFixed(8))\n\n // //偏航角\n // let e_viewHeading = contentElm.querySelector(\"span[name='viewHeading']\")\n // e_viewHeading.innerHTML = Number(that.viewHeading.toFixed(8))\n\n // //俯仰角\n // let e_viewPitch = contentElm.querySelector(\"span[name='viewPitch']\")\n // e_viewPitch.innerHTML = Number(that.viewPitch.toFixed(8))\n\n //视域夹角\n e_horizontalViewAngle = contentElm.querySelector(\"input[name='horizontalViewAngle']\");\n e_horizontalViewAngle.value = that.options.horizontalViewAngle;\n rangeNodeActive = contentElm.getElementsByClassName('range-node-active')[0];\n rangeNodeActiveText = rangeNodeActive.getElementsByClassName('range-node-active-text')[0];\n rangeProcess = contentElm.getElementsByClassName('range-process')[0];\n percentage = that.horizontalViewAngle / 180 * 100;\n rangeNodeActive.style.left = percentage + '%';\n rangeProcess.style.width = percentage + '%';\n rangeNodeActiveText.innerHTML = that.horizontalViewAngle + '°';\n e_horizontalViewAngle.addEventListener('input', function () {\n var percentage = e_horizontalViewAngle.value / 180 * 100;\n rangeNodeActive.style.left = percentage + '%';\n rangeProcess.style.width = percentage + '%';\n rangeNodeActiveText.innerHTML = e_horizontalViewAngle.value + '°';\n });\n e_horizontalViewAngle.addEventListener('change', function () {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n that.horizontalViewAngle = e_horizontalViewAngle.value;\n }, 300);\n });\n case 31:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"getcanvas\",\n value: function getcanvas(that) {\n if (!that.viewPosition) {\n return;\n }\n if (that.viewBillboardPrimitive) {\n that.viewer.scene.primitives.remove(that.viewBillboardPrimitive);\n that.viewBillboardPrimitive = null;\n }\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n canvas.width = 220;\n canvas.height = 180;\n canvas.style.background = \"#000000\";\n var img = new Image();\n var data = [{\n images: that.getSourceRootPath() + '/img/bubble/lng.png',\n text: '经度:' + parseFloat(that.viewPosition.lng.toFixed(10)) + '°'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/lat.png',\n text: '纬度:' + parseFloat(that.viewPosition.lat.toFixed(10)) + '°'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/h.png',\n text: '高度:' + Number((parseFloat(that.viewPosition.alt.toFixed(2)) + Number(that.viewPointHeight)).toFixed(2)) + ' m'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/heading.png',\n text: '偏航角:' + parseFloat(that.viewHeading.toFixed(10)) + '°'\n }, {\n images: that.getSourceRootPath() + '/img/bubble/pitch.png',\n text: '俯仰角:' + parseFloat(that.viewPitch.toFixed(10)) + '°'\n }];\n img.src = that.getSourceRootPath() + '/img/bubble/bubble.png';\n var imagesLoaded = 0;\n img.onload = function () {\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n data.forEach(function (item, index) {\n var img = new Image();\n img.src = item.images;\n img.onload = function () {\n ctx.drawImage(img, 12, 12 + index * 26);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"12px Arial\";\n ctx.fillText(item.text, 44, 28 + index * 26);\n imagesLoaded++;\n if (imagesLoaded === data.length) {\n that.viewBillboardPrimitive = that.viewer.scene.primitives.add(new Cesium.BillboardCollection());\n that.viewBillboardPrimitive.add({\n position: Cesium.Cartesian3.fromDegrees(that.viewPosition.lng, that.viewPosition.lat, that.viewPosition.alt + that.viewPointHeight),\n image: canvas,\n width: 200,\n height: 180,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n });\n }\n };\n });\n };\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\nfunction getHeading(fromPosition, toPosition) {\n var finalPosition = new Cesium.Cartesian3();\n var matrix4 = Cesium.Transforms.eastNorthUpToFixedFrame(fromPosition);\n Cesium.Matrix4.inverse(matrix4, matrix4);\n Cesium.Matrix4.multiplyByPoint(matrix4, toPosition, finalPosition);\n Cesium.Cartesian3.normalize(finalPosition, finalPosition);\n return Cesium.Math.toDegrees(Math.atan2(finalPosition.x, finalPosition.y));\n}\nfunction getPitch(fromPosition, toPosition) {\n var finalPosition = new Cesium.Cartesian3();\n var matrix4 = Cesium.Transforms.eastNorthUpToFixedFrame(fromPosition);\n Cesium.Matrix4.inverse(matrix4, matrix4);\n Cesium.Matrix4.multiplyByPoint(matrix4, toPosition, finalPosition);\n Cesium.Cartesian3.normalize(finalPosition, finalPosition);\n return Cesium.Math.toDegrees(Math.asin(finalPosition.z));\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (ViewShedStage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1ZpZXdTaGVkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9WaWV3U2hlZC9pbmRleC5qcz9hNzdhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFZpZXdTaGVkLmpzXHJcbmltcG9ydCBnbHNsIGZyb20gJy4vZ2xzbCdcclxuaW1wb3J0IGdsc2wyIGZyb20gJy4vZ2xzbDInXHJcbmltcG9ydCBFdmVudCBmcm9tIFwiLi4vLi4vLi4vRXZlbnRcIjtcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gXCIuLi8uLi8uLi9Nb3VzZVRpcFwiO1xyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uLy4uL1Rvb2xzXCI7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi9CYXNlRGlhbG9nJztcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGRlc2NyaXB0aW9uIOWPr+inhuWfn+WIhuaekFxyXG4gKiBAcGFyYW0gc2RrXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIOmAiemhueOAglxyXG4gKiBAcGFyYW0ge0Nlc2l1bS5DYXJ0ZXNpYW4zfSBvcHRpb25zLnZpZXdQb3NpdGlvbiDop4LmtYvngrnkvY3nva7jgIJcclxuICogQHBhcmFtIHtDZXNpdW0uQ2FydGVzaWFuM30gb3B0aW9ucy52aWV3UG9zaXRpb25FbmQg5pyA6L+c6KeC5rWL54K55L2N572u77yI5aaC5p6c6K6+572u5LqG6KeC5rWL6Led56a777yM6L+Z5Liq5bGe5oCn5Y+v5Lul5LiN6K6+572u77yJ44CCXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnZpZXdQb2ludEhlaWdodD0xLjgg6KeG54K56auY5bqm77yI5Y2V5L2NYOexs2DvvInjgIJcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMudmlld0Rpc3RhbmNlIOingua1i+i3neemu++8iOWNleS9jWDnsbNg77yJ44CCXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnZpZXdIZWFkaW5nIOiIquWQkeinku+8iOWNleS9jWDluqZg77yJ44CCXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnZpZXdQaXRjaCDkv6/ku7Dop5LvvIjljZXkvY1g5bqmYO+8ieOAglxyXG4gKiBAcGFyYW0ge051bWJlcn0gb3B0aW9ucy5ob3Jpem9udGFsVmlld0FuZ2xlPTkwIOWPr+inhuWfn+awtOW5s+Wkueinku+8iOWNleS9jWDluqZg77yJ44CCXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnZlcnRpY2FsVmlld0FuZ2xlPTYwIOWPr+inhuWfn+WeguebtOWkueinku+8iOWNleS9jWDluqZg77yJ44CCXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnZpc2libGVBcmVhQ29sb3I9IzAwODAwMCDlj6/op4bljLrln5/popzoibLvvIjpu5jorqTlgLxg57u/6ImyYO+8ieOAglxyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5pbnZpc2libGVBcmVhQ29sb3I9I0ZGMDAwMCDkuI3lj6/op4bljLrln5/popzoibLvvIjpu5jorqTlgLxg57qi6ImyYO+8ieOAglxyXG4gKi9cclxuY2xhc3MgVmlld1NoZWRTdGFnZSBleHRlbmRzIFRvb2xzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG5cclxuICAgICAgICAvLyBpZiAoT2JqZWN0Lmhhc093bihvcHRpb25zLnZpZXdQb3NpdGlvbiwgJ2xuZycpICYmIE9iamVjdC5oYXNPd24ob3B0aW9ucy52aWV3UG9zaXRpb24sICdsYXQnKSAmJiBPYmplY3QuaGFzT3duKG9wdGlvbnMudmlld1Bvc2l0aW9uLCAnYWx0JykpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5lcnJvciA9ICfor7fmj5Dkvpvop4LmtYvngrnkvY3nva7vvIEnXHJcbiAgICAgICAgLy8gICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ+ivt+aPkOS+m+ingua1i+eCueS9jee9ru+8gScsXHJcbiAgICAgICAgLy8gICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgLy8gICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXI7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge31cclxuICAgICAgICB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uID0gb3B0aW9ucy52aWV3UG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZCA9IG9wdGlvbnMudmlld1Bvc2l0aW9uRW5kO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5ob3Jpem9udGFsVmlld0FuZ2xlID0gKG9wdGlvbnMuaG9yaXpvbnRhbFZpZXdBbmdsZSB8fCBvcHRpb25zLmhvcml6b250YWxWaWV3QW5nbGUgPT09IDApID8gb3B0aW9ucy5ob3Jpem9udGFsVmlld0FuZ2xlIDogOTAuMDtcclxuICAgICAgICB0aGlzLm9wdGlvbnMudmVydGljYWxWaWV3QW5nbGUgPSAob3B0aW9ucy52ZXJ0aWNhbFZpZXdBbmdsZSB8fCBvcHRpb25zLnZlcnRpY2FsVmlld0FuZ2xlID09PSAwKSA/IG9wdGlvbnMudmVydGljYWxWaWV3QW5nbGUgOiA2MC4wO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy52aXNpYmxlQXJlYUNvbG9yID0gb3B0aW9ucy52aXNpYmxlQXJlYUNvbG9yIHx8ICcjMDA4MDAwJztcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaW52aXNpYmxlQXJlYUNvbG9yID0gb3B0aW9ucy5pbnZpc2libGVBcmVhQ29sb3IgfHwgJyNGRjAwMDAnO1xyXG4gICAgICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgICAgICB0aGlzLnZpZXdQb2ludEhlaWdodCA9IG9wdGlvbnMudmlld1BvaW50SGVpZ2h0XHJcbiAgICAgICAgLy8gdGhpcy5lbmFibGVkID0gKHR5cGVvZiBvcHRpb25zLmVuYWJsZWQgPT09IFwiYm9vbGVhblwiKSA/IG9wdGlvbnMuZW5hYmxlZCA6IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zb2Z0U2hhZG93cyA9ICh0eXBlb2Ygb3B0aW9ucy5zb2Z0U2hhZG93cyA9PT0gXCJib29sZWFuXCIpID8gb3B0aW9ucy5zb2Z0U2hhZG93cyA6IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zaXplID0gb3B0aW9ucy5zaXplIHx8IDEwMjQwOyAvLyAyMDQ4XHJcbiAgICAgICAgdGhpcy5pZHMgPSBbXVxyXG4gICAgICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgICAgIHRoaXMuaHRtbCA9IG51bGxcclxuICAgICAgICBZSi5BbmFseXNpcy5BbmFseXNlc1Jlc3VsdHMucHVzaCh0aGlzKVxyXG4gICAgICAgIFZpZXdTaGVkU3RhZ2UuZWRpdCh0aGlzKVxyXG4gICAgICAgIC8vIFZpZXdTaGVkU3RhZ2UuZWRpdCh0aGlzKVxyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpZXdQb2ludEhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdQb2ludEhlaWdodFxyXG4gICAgfVxyXG5cclxuICAgIHNldCB2aWV3UG9pbnRIZWlnaHQodikge1xyXG4gICAgICAgIGxldCB2aWV3UG9pbnRIZWlnaHQgPSBNYXRoLmZsb29yKE51bWJlcih2KSAqIDEwKSAvIDEwXHJcbiAgICAgICAgaWYgKGlzTmFOKHZpZXdQb2ludEhlaWdodCkpIHtcclxuICAgICAgICAgICAgdmlld1BvaW50SGVpZ2h0ID0gMS44XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3UG9pbnRIZWlnaHQgPCAwKSB7XHJcbiAgICAgICAgICAgIHZpZXdQb2ludEhlaWdodCA9IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdQb2ludEhlaWdodCA9IHZpZXdQb2ludEhlaWdodFxyXG4gICAgICAgIHRoaXMuX2VsbXMudmlld1BvaW50SGVpZ2h0ICYmIHRoaXMuX2VsbXMudmlld1BvaW50SGVpZ2h0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHZpZXdQb2ludEhlaWdodFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpZXdQb3NpdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvblxyXG4gICAgfVxyXG5cclxuICAgIHNldCB2aWV3UG9zaXRpb24odikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24gPSB2XHJcbiAgICAgICAgdGhpcy5pZHNbMF0gJiYgKHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5pZHNbMF0pLnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHYubG5nLCB2LmxhdCwgdi5hbHQpKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgICAvLyBsZXQgdmlld1Bvc2l0aW9uMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5hbHQpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpZXdQb3NpdGlvbkVuZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZFxyXG4gICAgfVxyXG5cclxuICAgIHNldCB2aWV3UG9zaXRpb25FbmQodikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb25FbmQgPSB2XHJcbiAgICAgICAgdGhpcy5pZHNbMV0gJiYgKHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5pZHNbMV0pLnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHYubG5nLCB2LmxhdCwgdi5hbHQpKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgICAvLyBsZXQgdmlld1Bvc2l0aW9uRW5kMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb25FbmQubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uRW5kLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZC5hbHQpXHJcbiAgICAgICAgLy8gdGhpcy52aWV3RGlzdGFuY2UgPSB0aGlzLnZpZXdQb3NpdGlvbkVuZCA/IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHRoaXMudmlld1Bvc2l0aW9uLCB0aGlzLnZpZXdQb3NpdGlvbkVuZCkgOiAob3B0aW9ucy52aWV3RGlzdGFuY2UgfHwgMTAwLjApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBob3Jpem9udGFsVmlld0FuZ2xlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbFZpZXdBbmdsZVxyXG4gICAgfVxyXG5cclxuICAgIHNldCBob3Jpem9udGFsVmlld0FuZ2xlKHYpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbFZpZXdBbmdsZSA9IHZcclxuICAgICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgICAgICBsZXQgY29udGVudEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIGxldCBlX2hvcml6b250YWxWaWV3QW5nbGUgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdob3Jpem9udGFsVmlld0FuZ2xlJ11cIilcclxuICAgICAgICAgICAgZV9ob3Jpem9udGFsVmlld0FuZ2xlLnZhbHVlID0gdlxyXG4gICAgICAgICAgICBsZXQgcmFuZ2VOb2RlQWN0aXZlID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyYW5nZS1ub2RlLWFjdGl2ZScpWzBdXHJcbiAgICAgICAgICAgIGxldCByYW5nZU5vZGVBY3RpdmVUZXh0ID0gcmFuZ2VOb2RlQWN0aXZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JhbmdlLW5vZGUtYWN0aXZlLXRleHQnKVswXVxyXG4gICAgICAgICAgICByYW5nZU5vZGVBY3RpdmVUZXh0LmlubmVySFRNTCA9IHYgKyAnwrAnO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VQcm9jZXNzID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyYW5nZS1wcm9jZXNzJylbMF1cclxuICAgICAgICAgICAgcmFuZ2VQcm9jZXNzLnN0eWxlLndpZHRoID0gdiAvIDE4MCAqIDEwMCArICclJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpc2libGVBcmVhQ29sb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy52aXNpYmxlQXJlYUNvbG9yXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHZpc2libGVBcmVhQ29sb3Iodikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy52aXNpYmxlQXJlYUNvbG9yID0gdlxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW52aXNpYmxlQXJlYUNvbG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW52aXNpYmxlQXJlYUNvbG9yXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGludmlzaWJsZUFyZWFDb2xvcih2KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmludmlzaWJsZUFyZWFDb2xvciA9IHZcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZlcnRpY2FsVmlld0FuZ2xlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudmVydGljYWxWaWV3QW5nbGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdmVydGljYWxWaWV3QW5nbGUodikge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy52ZXJ0aWNhbFZpZXdBbmdsZSA9IHZcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpZXdEaXN0YW5jZSgpIHtcclxuICAgICAgICBsZXQgdmlld1Bvc2l0aW9uMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5hbHQgKyB0aGlzLnZpZXdQb2ludEhlaWdodClcclxuICAgICAgICBsZXQgdmlld1Bvc2l0aW9uRW5kMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb25FbmQubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uRW5kLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZC5hbHQpXHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2Uodmlld1Bvc2l0aW9uMywgdmlld1Bvc2l0aW9uRW5kMylcclxuICAgICAgICByZXR1cm4gZGlzdGFuY2VcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmlld0hlYWRpbmcoKSB7XHJcbiAgICAgICAgbGV0IHZpZXdQb3NpdGlvbjMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpXHJcbiAgICAgICAgbGV0IHZpZXdQb3NpdGlvbkVuZDMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uRW5kLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZC5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb25FbmQuYWx0KVxyXG4gICAgICAgIGxldCBoZWFkaW5nID0gZ2V0SGVhZGluZyh2aWV3UG9zaXRpb24zLCB2aWV3UG9zaXRpb25FbmQzKVxyXG4gICAgICAgIHJldHVybiBoZWFkaW5nXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpZXdQaXRjaCgpIHtcclxuICAgICAgICBsZXQgdmlld1Bvc2l0aW9uMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5hbHQgKyB0aGlzLnZpZXdQb2ludEhlaWdodClcclxuICAgICAgICBsZXQgdmlld1Bvc2l0aW9uRW5kMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb25FbmQubG5nLCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uRW5kLmxhdCwgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZC5hbHQpXHJcbiAgICAgICAgbGV0IHBpdGNoID0gZ2V0UGl0Y2godmlld1Bvc2l0aW9uMywgdmlld1Bvc2l0aW9uRW5kMylcclxuICAgICAgICByZXR1cm4gcGl0Y2hcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgICAgICB0aGF0LmRlc3Ryb3koKVxyXG4gICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgaWYgKCFZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICAgICAgICB0aGF0LmV2ZW50ID0gbmV3IEV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICAgICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu6YCJ5oup6KeC5rWL54K55L2N572u77yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhhdC52aWV3UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMudmlld1Bvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQudmlld2VyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuaWRzLnB1c2goVmlld1NoZWRTdGFnZS5jcmVhdGVfcG9pbnQodGhhdCwgY2FydGVzaWFuKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LnRpcC5zZXRfdGV4dChcIuW3pumUrumAieaLqeacgOi/nOingua1i+eCueS9jee9ru+8jOWPs+mUruWPlua2iFwiKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnQrK1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnZpZXdlcilcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Lmlkcy5wdXNoKFZpZXdTaGVkU3RhZ2UuY3JlYXRlX3BvaW50KHRoYXQsIGNhcnRlc2lhbikpXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kKClcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LnVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oY2FydGVzaWFuLCBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LCBtb3ZlbWVudC5lbmRQb3NpdGlvbi55KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lmlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5yZW1vdmVCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHRoYXQuaWRzID0gW11cclxuICAgICAgICAgICAgICAgIGVuZCgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Lmlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQudmlld2VyLmVudGl0aWVzLnJlbW92ZUJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaWRzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kKClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBlbmQoKSB7XHJcbiAgICAgICAgICAgIHRoYXQuaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQudmlld2VyLmVudGl0aWVzLmdldEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgICAgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgICAgIHRoYXQudGlwID0gbnVsbFxyXG4gICAgICAgICAgICB0aGF0LmV2ZW50ID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY3JlYXRlX3BvaW50KHRoYXQsIGNhcnRlc2lhbikge1xyXG4gICAgICAgIGxldCBpZCA9IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgICAgICBsZXQgcCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnZpZXdlcilcclxuICAgICAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwLmxuZywgcC5sYXQsIHAuYWx0KSxcclxuICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQudmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgICAgICAgbmV3IENlc2l1bS5FbnRpdHkocGFyYW1zKVxyXG4gICAgICAgIClcclxuICAgICAgICByZXR1cm4gaWRcclxuICAgIH1cclxuXHJcblxyXG4gICAgYWRkKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTGlnaHRDYW1lcmEoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVNoYWRvd01hcCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlUG9zdFN0YWdlKCk7XHJcbiAgICAgICAgLy8gdGhpcy5kcmF3RnJ1c3R1bU91dGxpbmUoKTtcclxuICAgICAgICB0aGlzLmRyYXdTa2V0Y2goKTtcclxuICAgICAgICBWaWV3U2hlZFN0YWdlLmdldGNhbnZhcyh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hZGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZWRpdCh0aGF0KSB7XHJcbiAgICAgICAgaWYgKHRoYXQuX0RpYWxvZ09iamVjdCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0Ll9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoYXQuc2RrLnZpZXdlci5fY29udGFpbmVyLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn5Y+v6KeG5Z+f5YiG5p6QJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoYXQuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgdGhhdC5lZGl0ZXZlbnQgJiYgdGhhdC5lZGl0ZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgICAgICAgICB0aGF0LkNvbnRyb2xsZXJPYmplY3QgJiYgdGhhdC5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgICAgdGhhdC5pZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC52aWV3ZXIuZW50aXRpZXMucmVtb3ZlQnlJZChpZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICBhd2FpdCB0aGF0Ll9EaWFsb2dPYmplY3QuaW5pdCgpXHJcbiAgICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyB2aWV3LXNoZWQnXHJcbiAgICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgICBsZXQgcmVzZXRCdG4gPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlZGl0JylbMF07XHJcbiAgICAgICAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoYXQubm9kZUVkaXQoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGRyYXdFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKVxyXG4gICAgICAgIGRyYXdFbG0uaW5uZXJIVE1MID0gJ+e7mOWItidcclxuICAgICAgICBkcmF3RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBWaWV3U2hlZFN0YWdlLmNyZWF0ZSh0aGF0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0LmZvb3RBcHBDaGlsZChkcmF3RWxtKVxyXG4gICAgICAgIHRoYXQuaHRtbCA9IGNvbnRlbnRFbG1cclxuICAgICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgICAgdGhhdC5fRXZlbnRCaW5kaW5nLm9uKHRoYXQsIGFsbF9lbG0pXHJcbiAgICAgICAgdGhhdC5fZWxtcyA9IHRoYXQuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgICAgLy8gLy/nu4/luqblgLxcclxuICAgICAgICAvLyBsZXQgZV9sbmcgPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J2xuZyddXCIpXHJcbiAgICAgICAgLy8gZV9sbmcuaW5uZXJIVE1MID0gTnVtYmVyKHRoYXQub3B0aW9ucy52aWV3UG9zaXRpb24ubG5nLnRvRml4ZWQoOCkpXHJcblxyXG4gICAgICAgIC8vIC8v57qs5bqm5YC8XHJcbiAgICAgICAgLy8gbGV0IGVfbGF0ID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwic3BhbltuYW1lPSdsYXQnXVwiKVxyXG4gICAgICAgIC8vIGVfbGF0LmlubmVySFRNTCA9IE51bWJlcih0aGF0Lm9wdGlvbnMudmlld1Bvc2l0aW9uLmxhdC50b0ZpeGVkKDgpKVxyXG5cclxuICAgICAgICAvLyAvL+mrmOW6puWAvFxyXG4gICAgICAgIC8vIGxldCBlX2FsdCA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcInNwYW5bbmFtZT0nYWx0J11cIilcclxuICAgICAgICAvLyBlX2FsdC5pbm5lckhUTUwgPSBOdW1iZXIodGhhdC5vcHRpb25zLnZpZXdQb3NpdGlvbi5hbHQudG9GaXhlZCg4KSlcclxuXHJcbiAgICAgICAgLy8gLy/lgY/oiKrop5JcclxuICAgICAgICAvLyBsZXQgZV92aWV3SGVhZGluZyA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcInNwYW5bbmFtZT0ndmlld0hlYWRpbmcnXVwiKVxyXG4gICAgICAgIC8vIGVfdmlld0hlYWRpbmcuaW5uZXJIVE1MID0gTnVtYmVyKHRoYXQudmlld0hlYWRpbmcudG9GaXhlZCg4KSlcclxuXHJcbiAgICAgICAgLy8gLy/kv6/ku7Dop5JcclxuICAgICAgICAvLyBsZXQgZV92aWV3UGl0Y2ggPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuW25hbWU9J3ZpZXdQaXRjaCddXCIpXHJcbiAgICAgICAgLy8gZV92aWV3UGl0Y2guaW5uZXJIVE1MID0gTnVtYmVyKHRoYXQudmlld1BpdGNoLnRvRml4ZWQoOCkpXHJcblxyXG4gICAgICAgIC8v6KeG5Z+f5aS56KeSXHJcbiAgICAgICAgbGV0IGVfaG9yaXpvbnRhbFZpZXdBbmdsZSA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J2hvcml6b250YWxWaWV3QW5nbGUnXVwiKVxyXG4gICAgICAgIGVfaG9yaXpvbnRhbFZpZXdBbmdsZS52YWx1ZSA9IHRoYXQub3B0aW9ucy5ob3Jpem9udGFsVmlld0FuZ2xlXHJcbiAgICAgICAgbGV0IHJhbmdlTm9kZUFjdGl2ZSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmFuZ2Utbm9kZS1hY3RpdmUnKVswXVxyXG4gICAgICAgIGxldCByYW5nZU5vZGVBY3RpdmVUZXh0ID0gcmFuZ2VOb2RlQWN0aXZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JhbmdlLW5vZGUtYWN0aXZlLXRleHQnKVswXVxyXG4gICAgICAgIGxldCByYW5nZVByb2Nlc3MgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JhbmdlLXByb2Nlc3MnKVswXVxyXG4gICAgICAgIGxldCBwZXJjZW50YWdlID0gdGhhdC5ob3Jpem9udGFsVmlld0FuZ2xlIC8gMTgwICogMTAwXHJcbiAgICAgICAgcmFuZ2VOb2RlQWN0aXZlLnN0eWxlLmxlZnQgPSBwZXJjZW50YWdlICsgJyUnO1xyXG4gICAgICAgIHJhbmdlUHJvY2Vzcy5zdHlsZS53aWR0aCA9IHBlcmNlbnRhZ2UgKyAnJSdcclxuICAgICAgICByYW5nZU5vZGVBY3RpdmVUZXh0LmlubmVySFRNTCA9IHRoYXQuaG9yaXpvbnRhbFZpZXdBbmdsZSArICfCsCc7XHJcbiAgICAgICAgbGV0IHRpbWVvdXRcclxuICAgICAgICBlX2hvcml6b250YWxWaWV3QW5nbGUuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwZXJjZW50YWdlID0gZV9ob3Jpem9udGFsVmlld0FuZ2xlLnZhbHVlIC8gMTgwICogMTAwXHJcbiAgICAgICAgICAgIHJhbmdlTm9kZUFjdGl2ZS5zdHlsZS5sZWZ0ID0gcGVyY2VudGFnZSArICclJztcclxuICAgICAgICAgICAgcmFuZ2VQcm9jZXNzLnN0eWxlLndpZHRoID0gcGVyY2VudGFnZSArICclJztcclxuICAgICAgICAgICAgcmFuZ2VOb2RlQWN0aXZlVGV4dC5pbm5lckhUTUwgPSBlX2hvcml6b250YWxWaWV3QW5nbGUudmFsdWUgKyAnwrAnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZV9ob3Jpem9udGFsVmlld0FuZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoYXQuaG9yaXpvbnRhbFZpZXdBbmdsZSA9IGVfaG9yaXpvbnRhbFZpZXdBbmdsZS52YWx1ZTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0Y2FudmFzKHRoYXQpIHtcclxuICAgICAgICBpZiAoIXRoYXQudmlld1Bvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhhdC52aWV3QmlsbGJvYXJkUHJpbWl0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoYXQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoYXQudmlld0JpbGxib2FyZFByaW1pdGl2ZSlcclxuICAgICAgICAgICAgdGhhdC52aWV3QmlsbGJvYXJkUHJpbWl0aXZlID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDIyMFxyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxODBcclxuICAgICAgICBjYW52YXMuc3R5bGUuYmFja2dyb3VuZCA9IFwiIzAwMDAwMFwiXHJcbiAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGltYWdlczogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYnViYmxlL2xuZy5wbmcnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogJ+e7j+W6pu+8micgKyBwYXJzZUZsb2F0KHRoYXQudmlld1Bvc2l0aW9uLmxuZy50b0ZpeGVkKDEwKSkgKyAnwrAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGltYWdlczogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYnViYmxlL2xhdC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogJ+e6rOW6pu+8micgKyBwYXJzZUZsb2F0KHRoYXQudmlld1Bvc2l0aW9uLmxhdC50b0ZpeGVkKDEwKSkgKyAnwrAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGltYWdlczogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYnViYmxlL2gucG5nJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6ICfpq5jluqbvvJonICsgTnVtYmVyKCgocGFyc2VGbG9hdCh0aGF0LnZpZXdQb3NpdGlvbi5hbHQudG9GaXhlZCgyKSkgKyBOdW1iZXIodGhhdC52aWV3UG9pbnRIZWlnaHQpKSkudG9GaXhlZCgyKSkgKyAnIG0nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGltYWdlczogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYnViYmxlL2hlYWRpbmcucG5nJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6ICflgY/oiKrop5LvvJonICsgcGFyc2VGbG9hdCh0aGF0LnZpZXdIZWFkaW5nLnRvRml4ZWQoMTApKSArICfCsCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvcGl0Y2gucG5nJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6ICfkv6/ku7Dop5LvvJonICsgcGFyc2VGbG9hdCh0aGF0LnZpZXdQaXRjaC50b0ZpeGVkKDEwKSkgKyAnwrAnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgaW1nLnNyYyA9IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2J1YmJsZS9idWJibGUucG5nJztcclxuICAgICAgICBsZXQgaW1hZ2VzTG9hZGVkID0gMFxyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgICAgIGltZy5zcmMgPSBpdGVtLmltYWdlcztcclxuICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDEyLCAxMiArIChpbmRleCAqIDI2KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwiI2ZmZlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5mb250ID0gXCIxMnB4IEFyaWFsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGl0ZW0udGV4dCwgNDQsIDI4ICsgKGluZGV4ICogMjYpKTtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZXNMb2FkZWQrKztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VzTG9hZGVkID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnZpZXdCaWxsYm9hcmRQcmltaXRpdmUgPSB0aGF0LnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChuZXcgQ2VzaXVtLkJpbGxib2FyZENvbGxlY3Rpb24oKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC52aWV3QmlsbGJvYXJkUHJpbWl0aXZlLmFkZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC52aWV3UG9zaXRpb24ubG5nLCB0aGF0LnZpZXdQb3NpdGlvbi5sYXQsIHRoYXQudmlld1Bvc2l0aW9uLmFsdCArIHRoYXQudmlld1BvaW50SGVpZ2h0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxODAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMudGlwID0gbnVsbFxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBudWxsXHJcbiAgICAgICAgaWYgKHRoaXMuc2tldGNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLmVudGl0aWVzLnJlbW92ZUJ5SWQodGhpcy5za2V0Y2guaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnNrZXRjaCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZydXN0dW1PdXRsaW5lKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZnJ1c3R1bU91dGxpbmUuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmVCeUlkKHRoaXMuZnJ1c3R1bU91dGxpbmUuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmZydXN0dW1PdXRsaW5lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucG9zdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLnNjZW5lLnBvc3RQcm9jZXNzU3RhZ2VzLnJlbW92ZSh0aGlzLnBvc3RTdGFnZSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9zdFN0YWdlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgdGhpcy5lZGl0ZXZlbnQgJiYgdGhpcy5lZGl0ZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLmlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuZW50aXRpZXMucmVtb3ZlQnlJZChpZClcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuaWRzID0gW11cclxuICAgICAgICBpZiAodGhpcy52aWV3QmlsbGJvYXJkUHJpbWl0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMudmlld0JpbGxib2FyZFByaW1pdGl2ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3QmlsbGJvYXJkUHJpbWl0aXZlID0gbnVsbFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24gPSBudWxsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbkVuZCA9IG51bGxcclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgaWYgKHRoaXMuX29yaWdpbmFsU2hhZG93TWFwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLnNjZW5lLnNoYWRvd01hcCA9IHRoaXMuX29yaWdpbmFsU2hhZG93TWFwXHJcbiAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsU2hhZG93TWFwID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdlci5zaGFkb3dzID0gdGhpcy52aWV3ZXIuX3NoYWRvd3NcclxuICAgIH1cclxuXHJcbiAgICBub2RlRWRpdCgpIHtcclxuICAgICAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRldmVudCAmJiB0aGlzLmVkaXRldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhpcy5pZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZChpZClcclxuICAgICAgICAgICAgICAgIGVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAgICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgICAgICAgIC8vIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCflt6bplK7pgInmi6nopoHmk43kvZznmoTop4LmtYvngrnvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgICAgICAgdGhpcy5lZGl0ZXZlbnQgPSBuZXcgRXZlbnQodGhpcy5zZGspXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdGV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwaWNrID0gdGhpcy52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQuaWQgJiYgdGhpcy5pZHMuaW5kZXhPZihwaWNrLmlkLmlkKSAhPSAtMSAmJiAoIXNlbGVjdFBvaW50IHx8IHNlbGVjdFBvaW50LmlkICE9IHBpY2suaWQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSBwaWNrLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMuaWRzWzBdKS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLnZpZXdQb3NpdGlvbi5sbmcsIHRoaXMudmlld1Bvc2l0aW9uLmxhdCwgdGhpcy52aWV3UG9zaXRpb24uYWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5pZHNbMV0pLnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMudmlld1Bvc2l0aW9uRW5kLmxuZywgdGhpcy52aWV3UG9zaXRpb25FbmQubGF0LCB0aGlzLnZpZXdQb3NpdGlvbkVuZC5hbHQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgPSBuZXcgQ29udHJvbGxlcih0aGlzLnNkaywgeyBwb3NpdGlvbjogeyAuLi50aGlzLmNhcnRlc2lhbjNUb3dnczg0KHNlbGVjdFBvaW50LnBvc2l0aW9uLl92YWx1ZSwgdGhpcy5zZGsudmlld2VyKSB9IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmNvbnRyb2xsZXJDYWxsQmFjayA9IChwYXJhbXMsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBvc2l0aW9uLmFsdCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wb3NpdGlvbi5hbHQgPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UG9pbnQucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW1zLnBvc2l0aW9uLmxuZywgcGFyYW1zLnBvc2l0aW9uLmxhdCwgcGFyYW1zLnBvc2l0aW9uLmFsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaWRzLmluZGV4T2YocGljay5pZC5pZCkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1Bvc2l0aW9uID0gcGFyYW1zLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdQb3NpdGlvbkVuZCA9IHBhcmFtcy5wb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmVkaXRUcmFuc2xhdGlvbmFsKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5lZGl0ZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGV2ZW50ICYmIHRoaXMuZWRpdGV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IG51bGxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5lZGl0ZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZGl0ZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRldmVudCAmJiB0aGlzLmVkaXRldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZChpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVMaWdodENhbWVyYSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgICAgICB0aGlzLmxpZ2h0Q2FtZXJhID0gbmV3IENlc2l1bS5DYW1lcmEodGhpcy52aWV3ZXIuc2NlbmUpO1xyXG4gICAgICAgIHRoaXMubGlnaHRDYW1lcmEucG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpO1xyXG4gICAgICAgIC8vIGlmICh0aGlzLnZpZXdQb3NpdGlvbkVuZCkge1xyXG4gICAgICAgIC8vICAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHRoaXMudmlld1Bvc2l0aW9uRW5kLCB0aGlzLnZpZXdQb3NpdGlvbiwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMubGlnaHRDYW1lcmEuZGlyZWN0aW9uID0gZGlyZWN0aW9uOyAvLyBkaXJlY3Rpb27mmK/nm7jmnLrpnaLlkJHnmoTmlrnlkJFcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5saWdodENhbWVyYS5mcnVzdHVtLm5lYXIgPSB0aGlzLnZpZXdEaXN0YW5jZSAqIDAuMDAxO1xyXG4gICAgICAgIHRoaXMubGlnaHRDYW1lcmEuZnJ1c3R1bS5mYXIgPSB0aGlzLnZpZXdEaXN0YW5jZTtcclxuICAgICAgICBjb25zdCBociA9IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLmhvcml6b250YWxWaWV3QW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IHZyID0gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMudmVydGljYWxWaWV3QW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID1cclxuICAgICAgICAgICAgKHRoaXMudmlld0Rpc3RhbmNlICogTWF0aC50YW4oaHIgLyAyKSAqIDIpIC9cclxuICAgICAgICAgICAgKHRoaXMudmlld0Rpc3RhbmNlICogTWF0aC50YW4odnIgLyAyKSAqIDIpO1xyXG4gICAgICAgIHRoaXMubGlnaHRDYW1lcmEuZnJ1c3R1bS5hc3BlY3RSYXRpbyA9IGFzcGVjdFJhdGlvO1xyXG4gICAgICAgIGlmIChociA+IHZyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRDYW1lcmEuZnJ1c3R1bS5mb3YgPSBocjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Q2FtZXJhLmZydXN0dW0uZm92ID0gdnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlnaHRDYW1lcmEuc2V0Vmlldyh7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMudmlld0hlYWRpbmcgfHwgMCksXHJcbiAgICAgICAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMudmlld1BpdGNoIHx8IDApLFxyXG4gICAgICAgICAgICAgICAgcm9sbDogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2hhZG93TWFwKCkge1xyXG4gICAgICAgIHRoaXMuc2hhZG93TWFwID0gbmV3IENlc2l1bS5TaGFkb3dNYXAoe1xyXG4gICAgICAgICAgICBjb250ZXh0OiAodGhpcy52aWV3ZXIuc2NlbmUpLmNvbnRleHQsXHJcbiAgICAgICAgICAgIGxpZ2h0Q2FtZXJhOiB0aGlzLmxpZ2h0Q2FtZXJhLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBpc1BvaW50TGlnaHQ6IHRydWUsXHJcbiAgICAgICAgICAgIHBvaW50TGlnaHRSYWRpdXM6IHRoaXMudmlld0Rpc3RhbmNlLFxyXG4gICAgICAgICAgICBjYXNjYWRlc0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaXplOiAyMDQ4LCAvLyAyMDQ4XHJcbiAgICAgICAgICAgIHNvZnRTaGFkb3dzOiB0cnVlLFxyXG4gICAgICAgICAgICBub3JtYWxPZmZzZXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBmcm9tTGlnaHRTb3VyY2U6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vcmlnaW5hbFNoYWRvd01hcCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFNoYWRvd01hcCA9IHRoaXMudmlld2VyLnNjZW5lLnNoYWRvd01hcFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdlci5zY2VuZS5zaGFkb3dNYXAgPSB0aGlzLnNoYWRvd01hcDtcclxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy52aWV3ZXIuc2hhZG93cyA9IHRoaXMudmlld2VyLl9zaGFkb3dzXHJcbiAgICAgICAgLy8gfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUG9zdFN0YWdlKCkge1xyXG4gICAgICAgIGNvbnN0IGZzID0gZ2xzbFxyXG4gICAgICAgIGlmIChOdW1iZXIoQ2VzaXVtLlZFUlNJT04uc3BsaXQoJy4nKVsxXSkgPj0gMTAyKSB7XHJcbiAgICAgICAgICAgIGZzID0gZ2xzbDJcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcG9zdFN0YWdlID0gbmV3IENlc2l1bS5Qb3N0UHJvY2Vzc1N0YWdlKHtcclxuICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IGZzLFxyXG4gICAgICAgICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgICAgICAgICAgc2hhZG93TWFwX3RleHR1cmVDdWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXAudXBkYXRlKFJlZmxlY3QuZ2V0KHRoaXMudmlld2VyLnNjZW5lLCBcIl9mcmFtZVN0YXRlXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGhpcy5zaGFkb3dNYXAsIFwiX3NoYWRvd01hcFRleHR1cmVcIik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hhZG93TWFwX21hdHJpeDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwLnVwZGF0ZShSZWZsZWN0LmdldCh0aGlzLnZpZXdlci5zY2VuZSwgXCJfZnJhbWVTdGF0ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMuc2hhZG93TWFwLCBcIl9zaGFkb3dNYXBNYXRyaXhcIik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hhZG93TWFwX2xpZ2h0UG9zaXRpb25FQzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwLnVwZGF0ZShSZWZsZWN0LmdldCh0aGlzLnZpZXdlci5zY2VuZSwgXCJfZnJhbWVTdGF0ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMuc2hhZG93TWFwLCBcIl9saWdodFBvc2l0aW9uRUNcIik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hhZG93TWFwX25vcm1hbE9mZnNldFNjYWxlRGlzdGFuY2VNYXhEaXN0YW5jZUFuZERhcmtuZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXAudXBkYXRlKFJlZmxlY3QuZ2V0KHRoaXMudmlld2VyLnNjZW5lLCBcIl9mcmFtZVN0YXRlXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiaWFzID0gdGhpcy5zaGFkb3dNYXAuX3BvaW50QmlhcztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjQuZnJvbUVsZW1lbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaWFzLm5vcm1hbE9mZnNldFNjYWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcC5fZGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwLm1heGltdW1EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgMC4wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjQoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hhZG93TWFwX3RleGVsU2l6ZURlcHRoQmlhc0FuZE5vcm1hbFNoYWRpbmdTbW9vdGg6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcC51cGRhdGUoUmVmbGVjdC5nZXQodGhpcy52aWV3ZXIuc2NlbmUsIFwiX2ZyYW1lU3RhdGVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpYXMgPSB0aGlzLnNoYWRvd01hcC5fcG9pbnRCaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcmF0Y2hUZXhlbFN0ZXBTaXplID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4ZWxTdGVwU2l6ZSA9IHNjcmF0Y2hUZXhlbFN0ZXBTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsU3RlcFNpemUueCA9IDEuMCAvIHRoaXMuc2hhZG93TWFwLl90ZXh0dXJlU2l6ZS54O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsU3RlcFNpemUueSA9IDEuMCAvIHRoaXMuc2hhZG93TWFwLl90ZXh0dXJlU2l6ZS55O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjQuZnJvbUVsZW1lbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhlbFN0ZXBTaXplLngsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleGVsU3RlcFNpemUueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmlhcy5kZXB0aEJpYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMubm9ybWFsU2hhZGluZ1Ntb290aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW40KClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNhbWVyYV9wcm9qZWN0aW9uX21hdHJpeDogdGhpcy5saWdodENhbWVyYS5mcnVzdHVtLnByb2plY3Rpb25NYXRyaXgsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFfdmlld19tYXRyaXg6IHRoaXMubGlnaHRDYW1lcmEudmlld01hdHJpeCxcclxuICAgICAgICAgICAgICAgIGhlbHNpbmdfdmlld0Rpc3RhbmNlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld0Rpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhlbHNpbmdfdmlzaWJsZUFyZWFDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLnZpc2libGVBcmVhQ29sb3IpLFxyXG4gICAgICAgICAgICAgICAgaGVsc2luZ19pbnZpc2libGVBcmVhQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5pbnZpc2libGVBcmVhQ29sb3IpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wb3N0U3RhZ2UgPSB0aGlzLnZpZXdlci5zY2VuZS5wb3N0UHJvY2Vzc1N0YWdlcy5hZGQocG9zdFN0YWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBkcmF3RnJ1c3R1bU91dGxpbmUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2NyYXRjaFJpZ2h0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICAgICAgY29uc3Qgc2NyYXRjaFJvdGF0aW9uID0gbmV3IENlc2l1bS5NYXRyaXgzKCk7XHJcbiAgICAgICAgY29uc3Qgc2NyYXRjaE9yaWVudGF0aW9uID0gbmV3IENlc2l1bS5RdWF0ZXJuaW9uKCk7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmxpZ2h0Q2FtZXJhLnBvc2l0aW9uV0M7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5saWdodENhbWVyYS5kaXJlY3Rpb25XQztcclxuICAgICAgICBjb25zdCB1cCA9IHRoaXMubGlnaHRDYW1lcmEudXBXQztcclxuICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLmxpZ2h0Q2FtZXJhLnJpZ2h0V0M7XHJcbiAgICAgICAgcmlnaHQgPSBDZXNpdW0uQ2FydGVzaWFuMy5uZWdhdGUocmlnaHQsIHNjcmF0Y2hSaWdodCk7XHJcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gc2NyYXRjaFJvdGF0aW9uO1xyXG4gICAgICAgIENlc2l1bS5NYXRyaXgzLnNldENvbHVtbihyb3RhdGlvbiwgMCwgcmlnaHQsIHJvdGF0aW9uKTtcclxuICAgICAgICBDZXNpdW0uTWF0cml4My5zZXRDb2x1bW4ocm90YXRpb24sIDEsIHVwLCByb3RhdGlvbik7XHJcbiAgICAgICAgQ2VzaXVtLk1hdHJpeDMuc2V0Q29sdW1uKHJvdGF0aW9uLCAyLCBkaXJlY3Rpb24sIHJvdGF0aW9uKTtcclxuICAgICAgICBsZXQgb3JpZW50YXRpb24gPSBDZXNpdW0uUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXgocm90YXRpb24sIHNjcmF0Y2hPcmllbnRhdGlvbik7XHJcblxyXG4gICAgICAgIGxldCBpbnN0YW5jZSA9IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBuZXcgQ2VzaXVtLkZydXN0dW1PdXRsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICAgICAgZnJ1c3R1bTogdGhpcy5saWdodENhbWVyYS5mcnVzdHVtLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBpZDogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIpLFxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNvbG9yLllFTExPV0dSRUVOLy9uZXcgQ2VzaXVtLkNvbG9yKDAuMCwgMS4wLCAwLjAsIDEuMClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzaG93OiBuZXcgQ2VzaXVtLlNob3dHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlKHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcnVzdHVtT3V0bGluZSA9IHRoaXMudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICAgICAgICBuZXcgQ2VzaXVtLlByaW1pdGl2ZSh7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogW2luc3RhbmNlXSxcclxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uUGVySW5zdGFuY2VDb2xvckFwcGVhcmFuY2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZsYXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZHJhd1NrZXRjaCgpIHtcclxuICAgICAgICB0aGlzLnNrZXRjaCA9IHRoaXMudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICdza2V0Y2gnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmFsdCArIHRoaXMudmlld1BvaW50SGVpZ2h0KSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246IENlc2l1bS5UcmFuc2Zvcm1zLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uKFxyXG4gICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmFsdCArIHRoaXMudmlld1BvaW50SGVpZ2h0KSxcclxuICAgICAgICAgICAgICAgIENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKHRoaXMudmlld0hlYWRpbmcgLSA5MCwgdGhpcy52aWV3UGl0Y2gsIDAuMClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZWxsaXBzb2lkOiB7XHJcbiAgICAgICAgICAgICAgICByYWRpaTogbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0Rpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0Rpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0Rpc3RhbmNlXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgLy8gaW5uZXJSYWRpaTogbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKDIuMCwgMi4wLCAyLjApLFxyXG4gICAgICAgICAgICAgICAgbWluaW11bUNsb2NrOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLXRoaXMuaG9yaXpvbnRhbFZpZXdBbmdsZSAvIDIpLFxyXG4gICAgICAgICAgICAgICAgbWF4aW11bUNsb2NrOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5ob3Jpem9udGFsVmlld0FuZ2xlIC8gMiksXHJcbiAgICAgICAgICAgICAgICBtaW5pbXVtQ29uZTogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDkwIC0gKHRoaXMudmVydGljYWxWaWV3QW5nbGUgLyAyKSksXHJcbiAgICAgICAgICAgICAgICBtYXhpbXVtQ29uZTogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDkwICsgKHRoaXMudmVydGljYWxWaWV3QW5nbGUgLyAyKSksXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG91dGxpbmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbnM6IDI1NixcclxuICAgICAgICAgICAgICAgIHN0YWNrUGFydGl0aW9uczogNjQsXHJcbiAgICAgICAgICAgICAgICBzbGljZVBhcnRpdGlvbnM6IDY0LFxyXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuWUVMTE9XR1JFRU5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZydXN0dW1PdXRsaW5lID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgbmFtZTogJ3NrZXRjaCcsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjogQ2VzaXVtLlRyYW5zZm9ybXMuaGVhZGluZ1BpdGNoUm9sbFF1YXRlcm5pb24oXHJcbiAgICAgICAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMudmlld1Bvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnZpZXdQb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy52aWV3UG9zaXRpb24uYWx0ICsgdGhpcy52aWV3UG9pbnRIZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXModGhpcy52aWV3SGVhZGluZyAtIDkwLCB0aGlzLnZpZXdQaXRjaCwgMC4wKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBlbGxpcHNvaWQ6IHtcclxuICAgICAgICAgICAgICAgIHJhZGlpOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGlzdGFuY2VcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBpbm5lclJhZGlpOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMC4wMDAxLCAwLjAwMDEsIDAuMDAwMSksXHJcbiAgICAgICAgICAgICAgICBtaW5pbXVtQ2xvY2s6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtdGhpcy5ob3Jpem9udGFsVmlld0FuZ2xlIC8gMiksXHJcbiAgICAgICAgICAgICAgICBtYXhpbXVtQ2xvY2s6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLmhvcml6b250YWxWaWV3QW5nbGUgLyAyKSxcclxuICAgICAgICAgICAgICAgIG1pbmltdW1Db25lOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoOTAgLSAodGhpcy52ZXJ0aWNhbFZpZXdBbmdsZSAvIDIpKSxcclxuICAgICAgICAgICAgICAgIG1heGltdW1Db25lOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoOTAgKyAodGhpcy52ZXJ0aWNhbFZpZXdBbmdsZSAvIDIpKSxcclxuICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgb3V0bGluZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uczogMjU2LFxyXG4gICAgICAgICAgICAgICAgc3RhY2tQYXJ0aXRpb25zOiAxLFxyXG4gICAgICAgICAgICAgICAgc2xpY2VQYXJ0aXRpb25zOiAxLFxyXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuWUVMTE9XR1JFRU5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEhlYWRpbmcoZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKSB7XHJcbiAgICBsZXQgZmluYWxQb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpO1xyXG4gICAgbGV0IG1hdHJpeDQgPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShmcm9tUG9zaXRpb24pO1xyXG4gICAgQ2VzaXVtLk1hdHJpeDQuaW52ZXJzZShtYXRyaXg0LCBtYXRyaXg0KTtcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlQb2ludChtYXRyaXg0LCB0b1Bvc2l0aW9uLCBmaW5hbFBvc2l0aW9uKTtcclxuICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShmaW5hbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uKTtcclxuICAgIHJldHVybiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoTWF0aC5hdGFuMihmaW5hbFBvc2l0aW9uLngsIGZpbmFsUG9zaXRpb24ueSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQaXRjaChmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24pIHtcclxuICAgIGxldCBmaW5hbFBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICBsZXQgbWF0cml4NCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGZyb21Qb3NpdGlvbik7XHJcbiAgICBDZXNpdW0uTWF0cml4NC5pbnZlcnNlKG1hdHJpeDQsIG1hdHJpeDQpO1xyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KG1hdHJpeDQsIHRvUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pO1xyXG4gICAgcmV0dXJuIENlc2l1bS5NYXRoLnRvRGVncmVlcyhNYXRoLmFzaW4oZmluYWxQb3NpdGlvbi56KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZXdTaGVkU3RhZ2U7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWtCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBcUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBcUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBamtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUEvRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQXNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/ViewShed/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Visibility/_element.js": /*!*************************************************!*\ !*** ./src/Obj/Analysis/Visibility/_element.js ***! \*************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u89C6\\u70B9\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1Zpc2liaWxpdHkvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1Zpc2liaWxpdHkvX2VsZW1lbnQuanM/NGQ2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7op4bngrnpq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTlcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwidmlld1BvaW50SGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFlQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Visibility/_element.js\n"); /***/ }), /***/ "./src/Obj/Analysis/Visibility/index.js": /*!**********************************************!*\ !*** ./src/Obj/Analysis/Visibility/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Analysis/Visibility/_element.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/*\n *通视分析\n * @Author: Wang jianLei\n * @Date: 2022-04-17 22:04:52\n * @Last Modified by: Wang JianLei\n * @Last Modified time: 2022-04-17 22:05:13\n */\n\n\n\n\n\n\nvar VisibilityAnalysis = /*#__PURE__*/function (_Tools) {\n function VisibilityAnalysis(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, VisibilityAnalysis);\n _this = _callSuper(this, VisibilityAnalysis, [sdk, options]);\n _this.viewer = sdk.viewer;\n _this.resultObject = {\n viewPoint: undefined,\n //通视分析起点\n targetPoints: [],\n //通视分析目标点集合\n targetPoint: undefined,\n //当前目标点\n objectExclude: [],\n //射线排除集合\n entities: [] //创建的Entity对象\n };\n _this.options = {};\n _this._elms = {};\n _this.viewPointHeight = options.viewPointHeight;\n _this.Dialog = _Dialog;\n _this._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n YJ.Analysis.AnalysesResults.push(_this);\n // VisibilityAnalysis.edit(this)\n VisibilityAnalysis.create(_this);\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(VisibilityAnalysis, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(VisibilityAnalysis, [{\n key: \"viewPointHeight\",\n get: function get() {\n return this.options.viewPointHeight;\n },\n set: function set(v) {\n var viewPointHeight = Math.floor(Number(v) * 10) / 10;\n if (isNaN(viewPointHeight)) {\n viewPointHeight = 1.8;\n }\n if (viewPointHeight < 0) {\n viewPointHeight = 0;\n }\n this.options.viewPointHeight = viewPointHeight;\n this._elms.viewPointHeight && this._elms.viewPointHeight.forEach(function (item) {\n item.value = viewPointHeight;\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var _this2 = this;\n this.resultObject.entities.forEach(function (element) {\n _this2.viewer.entities.remove(element);\n });\n this.resultObject = {\n viewPoint: undefined,\n //通视分析起点\n targetPoints: [],\n //通视分析目标点集合\n targetPoint: undefined,\n //当前目标点\n objectExclude: [],\n //射线排除集合\n entities: [] //创建的Entity对象\n };\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.tip = null;\n this.event = null;\n YJ.Measure.SetMeasureStatus(false);\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n if (!YJ.Measure.GetMeasureStatus()) {\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_8__[\"default\"](that.sdk);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('左键点击创建视角起点', that.sdk);\n YJ.Measure.SetMeasureStatus(true);\n var count = 0;\n that.event.mouse_left(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(movement, cartesian) {\n var pos84, positions, pos, pointEntity, _pointEntity, direction, ray, pickedObjects, result, i, dis0, dis1, dis2, _poly0, _poly1, _poly2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n that.tip.set_text(\"左键创建视角终点,右键结束通视分析\");\n if (that.resultObject.viewPoint) {\n _context.next = 16;\n break;\n }\n pos84 = that.cartesian3Towgs84(cartesian, that.viewer);\n if (!that.sdk.viewer.terrainProvider.availability) {\n _context.next = 7;\n break;\n }\n _context.next = 6;\n return Cesium.sampleTerrainMostDetailed(that.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat)]);\n case 6:\n positions = _context.sent;\n case 7:\n if (positions && positions[0].height > pos84.alt) {\n pos84.alt = positions[0].height;\n }\n pos84.alt = pos84.alt + that.viewPointHeight;\n pos = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, pos84.alt);\n that.resultObject.viewPoint = pos;\n pointEntity = that.viewer.entities.add({\n position: pos,\n point: {\n color: Cesium.Color.YELLOW,\n pixelSize: 5\n }\n });\n that.resultObject.objectExclude.push(pointEntity);\n that.resultObject.entities.push(pointEntity);\n _context.next = 33;\n break;\n case 16:\n that.resultObject.targetPoint = cartesian;\n _pointEntity = that.viewer.entities.add({\n position: cartesian,\n point: {\n color: Cesium.Color.YELLOW,\n pixelSize: 5\n }\n });\n that.resultObject.objectExclude.push(_pointEntity);\n that.resultObject.entities.push(_pointEntity);\n direction = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(that.resultObject.targetPoint, that.resultObject.viewPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());\n ray = new Cesium.Ray(that.resultObject.viewPoint, direction);\n pickedObjects = that.viewer.scene.drillPickFromRay(ray);\n result = {};\n i = 0;\n case 25:\n if (!(i < pickedObjects.length)) {\n _context.next = 32;\n break;\n }\n if (!pickedObjects[i].position) {\n _context.next = 29;\n break;\n }\n result = pickedObjects[i];\n return _context.abrupt(\"break\", 32);\n case 29:\n i++;\n _context.next = 25;\n break;\n case 32:\n // let result = that.viewer.scene.pickFromRay(\n // ray,\n // that.resultObject.objectExclude\n // ); // 计算交互点,返回第一个\n if (result) {\n dis0 = VisibilityAnalysis.distance(that.resultObject.viewPoint, that.resultObject.targetPoint);\n dis1 = VisibilityAnalysis.distance(that.resultObject.viewPoint, result.position || cartesian);\n dis2 = VisibilityAnalysis.distance(result.position || cartesian, that.resultObject.targetPoint);\n if (dis0 > dis1) {\n _poly0 = that.viewer.entities.add({\n polyline: {\n positions: [that.resultObject.viewPoint, result.position],\n material: Cesium.Color.GREEN,\n width: 3,\n zIndex: 99999999\n }\n });\n that.resultObject.entities.push(_poly0);\n _poly1 = that.viewer.entities.add({\n polyline: {\n positions: [result.position, that.resultObject.targetPoint],\n material: Cesium.Color.RED,\n width: 3,\n zIndex: 99999999\n }\n });\n that.resultObject.entities.push(_poly1);\n that.resultObject.targetPoints.push({\n targetPoint: cartesian,\n visual: false,\n //如果dis2足够小,其实他是可视的\n distance: [dis0, dis1, dis2] //[初始点和终点,初始点和交点,交点和终点]\n });\n } else {\n _poly2 = that.viewer.entities.add({\n polyline: {\n positions: [that.resultObject.viewPoint, that.resultObject.targetPoint],\n material: Cesium.Color.GREEN,\n width: 3,\n zIndex: 99999999\n }\n });\n that.resultObject.entities.push(_poly2);\n that.resultObject.targetPoints.push({\n targetPoint: cartesian,\n visual: true,\n //如果dis2足够小,其实他是可视的\n distance: [dis0, dis1, dis2] //[初始点和终点,初始点和交点,交点和终点]\n });\n }\n }\n case 33:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n that.event.mouse_move(function (movement, cartesian) {\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right(function (movement, cartesian) {\n end();\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n end();\n }\n });\n });\n } else {\n console.log('上一次测量未结束');\n }\n function end() {\n YJ.Measure.SetMeasureStatus(false);\n that.tip.destroy();\n that.event.destroy();\n that.tip = null;\n that.event = null;\n }\n }\n\n // static update(that) {\n // if (!that.resultObject.viewPoint) {\n // return\n // }\n // for (let i = that.resultObject.entities.length - 1; i >= 0; i--) {\n // if (that.resultObject.entities[i].point) {\n // that.viewer.entities.remove(that.resultObject.entities[i]);\n // that.resultObject.entities.splice(i, 1)\n // }\n // }\n // setTimeout(() => {\n // for (let i = 0; i < that.resultObject.targetPoints.length; i++) {\n // that.resultObject.targetPoint = that.resultObject.targetPoints[i].targetPoint;\n // let direction = Cesium.Cartesian3.normalize(\n // Cesium.Cartesian3.subtract(\n // that.resultObject.targetPoint,\n // that.resultObject.viewPoint,\n // new Cesium.Cartesian3()\n // ),\n // new Cesium.Cartesian3()\n // );\n // let ray = new Cesium.Ray(that.resultObject.viewPoint, direction);\n // let pickedObjects = that.viewer.scene.drillPickFromRay(ray);\n // let result = {}\n // for (let i = 0; i < pickedObjects.length; i++) {\n // if (pickedObjects[i].position) {\n // result = pickedObjects[i]\n // break\n // }\n // }\n // // let result = that.viewer.scene.pickFromRay(\n // // ray,\n // // that.resultObject.objectExclude\n // // ); // 计算交互点,返回第一个\n // if (result) {\n // let dis0 = VisibilityAnalysis.distance(\n // that.resultObject.viewPoint,\n // that.resultObject.targetPoint\n // );\n // let dis1 = VisibilityAnalysis.distance(\n // that.resultObject.viewPoint,\n // result.position || cartesian\n // );\n // let dis2 = VisibilityAnalysis.distance(\n // result.position || cartesian,\n // that.resultObject.targetPoint\n // );\n // if (dis0 > dis1) {\n // let _poly0 = that.viewer.entities.add({\n // polyline: {\n // positions: [that.resultObject.viewPoint, result.position],\n // material: Cesium.Color.GREEN,\n // width: 3,\n // zIndex: 99999999\n // },\n // });\n // that.resultObject.entities.push(_poly0);\n // let _poly1 = that.viewer.entities.add({\n // polyline: {\n // positions: [result.position, that.resultObject.targetPoint],\n // material: Cesium.Color.RED,\n // width: 3,\n // zIndex: 99999999\n // },\n // });\n // that.resultObject.entities.push(_poly1);\n // } else {\n // let _poly2 = that.viewer.entities.add({\n // polyline: {\n // positions: [\n // that.resultObject.viewPoint,\n // that.resultObject.targetPoint,\n // ],\n // material: Cesium.Color.GREEN,\n // width: 3,\n // zIndex: 99999999\n // },\n // });\n // that.resultObject.entities.push(_poly2);\n // }\n // }\n // }\n // }, 1000);\n // }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee2(that) {\n var contentElm, drawElm, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n _context2.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](that.sdk.viewer._container, {\n title: '多点视线分析',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n that.Dialog.closeCallBack && that.Dialog.closeCallBack();\n YJ.Measure.SetMeasureStatus(false);\n }\n });\n case 3:\n that._DialogObject = _context2.sent;\n _context2.next = 6;\n return that._DialogObject.init();\n case 6:\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' visibility';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n drawElm = document.createElement('button');\n drawElm.innerHTML = '绘制';\n drawElm.addEventListener('click', function () {\n VisibilityAnalysis.create(that);\n });\n that._DialogObject.footAppChild(drawElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n that._EventBinding.on(that, all_elm);\n that._elms = that._EventBinding.element;\n case 17:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }() //空间两点间距离\n }, {\n key: \"distance\",\n value: function distance(point1, point2) {\n var point1cartographic = Cesium.Cartographic.fromCartesian(point1);\n var point2cartographic = Cesium.Cartographic.fromCartesian(point2);\n /**根据经纬度计算出距离**/\n var geodesic = new Cesium.EllipsoidGeodesic();\n geodesic.setEndPoints(point1cartographic, point2cartographic);\n var s = geodesic.surfaceDistance;\n //返回两点之间的距离\n s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2));\n return s;\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (VisibilityAnalysis);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL1Zpc2liaWxpdHkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0FuYWx5c2lzL1Zpc2liaWxpdHkvaW5kZXguanM/ODM2NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICrpgJrop4bliIbmnpBcbiAqIEBBdXRob3I6IFdhbmcgamlhbkxlaVxuICogQERhdGU6IDIwMjItMDQtMTcgMjI6MDQ6NTJcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBXYW5nIEppYW5MZWlcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjItMDQtMTcgMjI6MDU6MTNcbiAqL1xuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi8uLi8uLi9Ub29sc1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCIuLi8uLi8uLi9FdmVudFwiO1xuaW1wb3J0IE1vdXNlVGlwIGZyb20gXCIuLi8uLi8uLi9Nb3VzZVRpcFwiO1xuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi9CYXNlRGlhbG9nJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xuY2xhc3MgVmlzaWJpbGl0eUFuYWx5c2lzIGV4dGVuZHMgVG9vbHMge1xuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlcjtcbiAgICB0aGlzLnJlc3VsdE9iamVjdCA9IHtcbiAgICAgIHZpZXdQb2ludDogdW5kZWZpbmVkLCAvL+mAmuinhuWIhuaekOi1t+eCuVxuICAgICAgdGFyZ2V0UG9pbnRzOiBbXSwgLy/pgJrop4bliIbmnpDnm67moIfngrnpm4blkIhcbiAgICAgIHRhcmdldFBvaW50OiB1bmRlZmluZWQsIC8v5b2T5YmN55uu5qCH54K5XG4gICAgICBvYmplY3RFeGNsdWRlOiBbXSwgLy/lsITnur/mjpLpmaTpm4blkIhcbiAgICAgIGVudGl0aWVzOiBbXSwgLy/liJvlu7rnmoRFbnRpdHnlr7nosaFcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucyA9IHt9XG4gICAgdGhpcy5fZWxtcyA9IHt9O1xuICAgIHRoaXMudmlld1BvaW50SGVpZ2h0ID0gb3B0aW9ucy52aWV3UG9pbnRIZWlnaHRcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcbiAgICBZSi5BbmFseXNpcy5BbmFseXNlc1Jlc3VsdHMucHVzaCh0aGlzKVxuICAgIC8vIFZpc2liaWxpdHlBbmFseXNpcy5lZGl0KHRoaXMpXG4gICAgVmlzaWJpbGl0eUFuYWx5c2lzLmNyZWF0ZSh0aGlzKVxuICB9XG5cbiAgZ2V0IHZpZXdQb2ludEhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdQb2ludEhlaWdodFxuICB9XG5cbiAgc2V0IHZpZXdQb2ludEhlaWdodCh2KSB7XG4gICAgbGV0IHZpZXdQb2ludEhlaWdodCA9IE1hdGguZmxvb3IoTnVtYmVyKHYpICogMTApIC8gMTBcbiAgICBpZiAoaXNOYU4odmlld1BvaW50SGVpZ2h0KSkge1xuICAgICAgdmlld1BvaW50SGVpZ2h0ID0gMS44XG4gICAgfVxuICAgIGlmICh2aWV3UG9pbnRIZWlnaHQgPCAwKSB7XG4gICAgICB2aWV3UG9pbnRIZWlnaHQgPSAwXG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy52aWV3UG9pbnRIZWlnaHQgPSB2aWV3UG9pbnRIZWlnaHRcbiAgICB0aGlzLl9lbG1zLnZpZXdQb2ludEhlaWdodCAmJiB0aGlzLl9lbG1zLnZpZXdQb2ludEhlaWdodC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnZhbHVlID0gdmlld1BvaW50SGVpZ2h0XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xuICAgIGlmICghWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcbiAgICAgIGlmICh0aGF0Ll9EaWFsb2dPYmplY3QgJiYgdGhhdC5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XG4gICAgICAgIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSgpXG4gICAgICAgIHRoYXQuX0RpYWxvZ09iamVjdCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgRXZlbnQodGhhdC5zZGspXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu54K55Ye75Yib5bu66KeG6KeS6LW354K5JywgdGhhdC5zZGspXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoYXN5bmMgKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcbiAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoXCLlt6bplK7liJvlu7rop4bop5Lnu4jngrnvvIzlj7PplK7nu5PmnZ/pgJrop4bliIbmnpBcIilcbiAgICAgICAgaWYgKCF0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQpIHtcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC52aWV3ZXIpXG4gICAgICAgICAgbGV0IHBvc2l0aW9uc1xuICAgICAgICAgIGlmICh0aGF0LnNkay52aWV3ZXIudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgcG9zaXRpb25zID0gYXdhaXQgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQoXG4gICAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci50ZXJyYWluUHJvdmlkZXIsXG4gICAgICAgICAgICAgIFtDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0KV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3NpdGlvbnMgJiYgcG9zaXRpb25zWzBdLmhlaWdodCA+IHBvczg0LmFsdCkge1xuICAgICAgICAgICAgcG9zODQuYWx0ID0gcG9zaXRpb25zWzBdLmhlaWdodFxuICAgICAgICAgIH1cbiAgICAgICAgICBwb3M4NC5hbHQgPSBwb3M4NC5hbHQgKyB0aGF0LnZpZXdQb2ludEhlaWdodFxuICAgICAgICAgIGxldCBwb3MgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3M4NC5sbmcsIHBvczg0LmxhdCwgcG9zODQuYWx0KVxuICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCA9IHBvcztcbiAgICAgICAgICBsZXQgcG9pbnRFbnRpdHkgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xuICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcbiAgICAgICAgICAgIHBvaW50OiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuWUVMTE9XLFxuICAgICAgICAgICAgICBwaXhlbFNpemU6IDUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0Lm9iamVjdEV4Y2x1ZGUucHVzaChwb2ludEVudGl0eSk7XG4gICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QuZW50aXRpZXMucHVzaChwb2ludEVudGl0eSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnQgPSBjYXJ0ZXNpYW47XG4gICAgICAgICAgbGV0IHBvaW50RW50aXR5ID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBjYXJ0ZXNpYW4sXG4gICAgICAgICAgICBwb2ludDoge1xuICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLllFTExPVyxcbiAgICAgICAgICAgICAgcGl4ZWxTaXplOiA1LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC5vYmplY3RFeGNsdWRlLnB1c2gocG9pbnRFbnRpdHkpO1xuICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzLnB1c2gocG9pbnRFbnRpdHkpO1xuICAgICAgICAgIGxldCBkaXJlY3Rpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoXG4gICAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChcbiAgICAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCxcbiAgICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsZXQgcmF5ID0gbmV3IENlc2l1bS5SYXkodGhhdC5yZXN1bHRPYmplY3Qudmlld1BvaW50LCBkaXJlY3Rpb24pO1xuICAgICAgICAgIGxldCBwaWNrZWRPYmplY3RzID0gdGhhdC52aWV3ZXIuc2NlbmUuZHJpbGxQaWNrRnJvbVJheShyYXkpO1xuICAgICAgICAgIGxldCByZXN1bHQgPSB7fVxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGlja2VkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBpY2tlZE9iamVjdHNbaV0ucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gcGlja2VkT2JqZWN0c1tpXVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBsZXQgcmVzdWx0ID0gdGhhdC52aWV3ZXIuc2NlbmUucGlja0Zyb21SYXkoXG4gICAgICAgICAgLy8gICByYXksXG4gICAgICAgICAgLy8gICB0aGF0LnJlc3VsdE9iamVjdC5vYmplY3RFeGNsdWRlXG4gICAgICAgICAgLy8gKTsgLy8g6K6h566X5Lqk5LqS54K577yM6L+U5Zue56ys5LiA5LiqXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgbGV0IGRpczAgPSBWaXNpYmlsaXR5QW5hbHlzaXMuZGlzdGFuY2UoXG4gICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCxcbiAgICAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgZGlzMSA9IFZpc2liaWxpdHlBbmFseXNpcy5kaXN0YW5jZShcbiAgICAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3Qudmlld1BvaW50LFxuICAgICAgICAgICAgICByZXN1bHQucG9zaXRpb24gfHwgY2FydGVzaWFuXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IGRpczIgPSBWaXNpYmlsaXR5QW5hbHlzaXMuZGlzdGFuY2UoXG4gICAgICAgICAgICAgIHJlc3VsdC5wb3NpdGlvbiB8fCBjYXJ0ZXNpYW4sXG4gICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnRhcmdldFBvaW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGRpczAgPiBkaXMxKSB7XG4gICAgICAgICAgICAgIGxldCBfcG9seTAgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xuICAgICAgICAgICAgICAgIHBvbHlsaW5lOiB7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IFt0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsIHJlc3VsdC5wb3NpdGlvbl0sXG4gICAgICAgICAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLkdSRUVOLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDMsXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzLnB1c2goX3BvbHkwKTtcbiAgICAgICAgICAgICAgbGV0IF9wb2x5MSA9IHRoYXQudmlld2VyLmVudGl0aWVzLmFkZCh7XG4gICAgICAgICAgICAgICAgcG9seWxpbmU6IHtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczogW3Jlc3VsdC5wb3NpdGlvbiwgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnRdLFxuICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5SRUQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMyxcbiAgICAgICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QuZW50aXRpZXMucHVzaChfcG9seTEpO1xuICAgICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC50YXJnZXRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0UG9pbnQ6IGNhcnRlc2lhbixcbiAgICAgICAgICAgICAgICB2aXN1YWw6IGZhbHNlLCAvL+WmguaenGRpczLotrPlpJ/lsI/vvIzlhbblrp7ku5bmmK/lj6/op4bnmoRcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogW2RpczAsIGRpczEsIGRpczJdLCAvL1vliJ3lp4vngrnlkoznu4jngrnvvIzliJ3lp4vngrnlkozkuqTngrnvvIzkuqTngrnlkoznu4jngrldXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGV0IF9wb2x5MiA9IHRoYXQudmlld2VyLmVudGl0aWVzLmFkZCh7XG4gICAgICAgICAgICAgICAgcG9seWxpbmU6IHtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnRhcmdldFBvaW50LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuR1JFRU4sXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMyxcbiAgICAgICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QuZW50aXRpZXMucHVzaChfcG9seTIpO1xuICAgICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC50YXJnZXRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0UG9pbnQ6IGNhcnRlc2lhbixcbiAgICAgICAgICAgICAgICB2aXN1YWw6IHRydWUsIC8v5aaC5p6cZGlzMui2s+Wkn+Wwj++8jOWFtuWunuS7luaYr+WPr+inhueahFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBbZGlzMCwgZGlzMSwgZGlzMl0sIC8vW+WIneWni+eCueWSjOe7iOeCue+8jOWIneWni+eCueWSjOS6pOeCue+8jOS6pOeCueWSjOe7iOeCuV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XG4gICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKGNhcnRlc2lhbiwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCwgbW92ZW1lbnQuZW5kUG9zaXRpb24ueSlcbiAgICAgIH0pXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XG4gICAgICAgIGVuZCgpXG4gICAgICB9KVxuICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xuICAgICAgICAgICAgZW5kKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZCgpIHtcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcbiAgICAgIHRoYXQudGlwLmRlc3Ryb3koKVxuICAgICAgdGhhdC5ldmVudC5kZXN0cm95KClcbiAgICAgIHRoYXQudGlwID0gbnVsbFxuICAgICAgdGhhdC5ldmVudCA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBzdGF0aWMgdXBkYXRlKHRoYXQpIHtcbiAgLy8gICBpZiAoIXRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCkge1xuICAvLyAgICAgcmV0dXJuXG4gIC8vICAgfVxuICAvLyAgIGZvciAobGV0IGkgPSB0aGF0LnJlc3VsdE9iamVjdC5lbnRpdGllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAvLyAgICAgaWYgKHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzW2ldLnBvaW50KSB7XG4gIC8vICAgICAgIHRoYXQudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0LnJlc3VsdE9iamVjdC5lbnRpdGllc1tpXSk7XG4gIC8vICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzLnNwbGljZShpLCAxKVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnRhcmdldFBvaW50ID0gdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnRzW2ldLnRhcmdldFBvaW50O1xuICAvLyAgICAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKFxuICAvLyAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KFxuICAvLyAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnQsXG4gIC8vICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsXG4gIC8vICAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxuICAvLyAgICAgICAgICksXG4gIC8vICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgbGV0IHJheSA9IG5ldyBDZXNpdW0uUmF5KHRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCwgZGlyZWN0aW9uKTtcbiAgLy8gICAgICAgbGV0IHBpY2tlZE9iamVjdHMgPSB0aGF0LnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSk7XG4gIC8vICAgICAgIGxldCByZXN1bHQgPSB7fVxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgICAgICBpZiAocGlja2VkT2JqZWN0c1tpXS5wb3NpdGlvbikge1xuICAvLyAgICAgICAgICAgcmVzdWx0ID0gcGlja2VkT2JqZWN0c1tpXVxuICAvLyAgICAgICAgICAgYnJlYWtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgLy8gbGV0IHJlc3VsdCA9IHRoYXQudmlld2VyLnNjZW5lLnBpY2tGcm9tUmF5KFxuICAvLyAgICAgICAvLyAgIHJheSxcbiAgLy8gICAgICAgLy8gICB0aGF0LnJlc3VsdE9iamVjdC5vYmplY3RFeGNsdWRlXG4gIC8vICAgICAgIC8vICk7IC8vIOiuoeeul+S6pOS6kueCue+8jOi/lOWbnuesrOS4gOS4qlxuICAvLyAgICAgICBpZiAocmVzdWx0KSB7XG4gIC8vICAgICAgICAgbGV0IGRpczAgPSBWaXNpYmlsaXR5QW5hbHlzaXMuZGlzdGFuY2UoXG4gIC8vICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsXG4gIC8vICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC50YXJnZXRQb2ludFxuICAvLyAgICAgICAgICk7XG4gIC8vICAgICAgICAgbGV0IGRpczEgPSBWaXNpYmlsaXR5QW5hbHlzaXMuZGlzdGFuY2UoXG4gIC8vICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsXG4gIC8vICAgICAgICAgICByZXN1bHQucG9zaXRpb24gfHwgY2FydGVzaWFuXG4gIC8vICAgICAgICAgKTtcbiAgLy8gICAgICAgICBsZXQgZGlzMiA9IFZpc2liaWxpdHlBbmFseXNpcy5kaXN0YW5jZShcbiAgLy8gICAgICAgICAgIHJlc3VsdC5wb3NpdGlvbiB8fCBjYXJ0ZXNpYW4sXG4gIC8vICAgICAgICAgICB0aGF0LnJlc3VsdE9iamVjdC50YXJnZXRQb2ludFxuICAvLyAgICAgICAgICk7XG4gIC8vICAgICAgICAgaWYgKGRpczAgPiBkaXMxKSB7XG4gIC8vICAgICAgICAgICBsZXQgX3BvbHkwID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcbiAgLy8gICAgICAgICAgICAgcG9seWxpbmU6IHtcbiAgLy8gICAgICAgICAgICAgICBwb3NpdGlvbnM6IFt0aGF0LnJlc3VsdE9iamVjdC52aWV3UG9pbnQsIHJlc3VsdC5wb3NpdGlvbl0sXG4gIC8vICAgICAgICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5HUkVFTixcbiAgLy8gICAgICAgICAgICAgICB3aWR0aDogMyxcbiAgLy8gICAgICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICB9KTtcbiAgLy8gICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzLnB1c2goX3BvbHkwKTtcbiAgLy8gICAgICAgICAgIGxldCBfcG9seTEgPSB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xuICAvLyAgICAgICAgICAgICBwb2x5bGluZToge1xuICAvLyAgICAgICAgICAgICAgIHBvc2l0aW9uczogW3Jlc3VsdC5wb3NpdGlvbiwgdGhhdC5yZXN1bHRPYmplY3QudGFyZ2V0UG9pbnRdLFxuICAvLyAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuUkVELFxuICAvLyAgICAgICAgICAgICAgIHdpZHRoOiAzLFxuICAvLyAgICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5OTlcbiAgLy8gICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgIH0pO1xuICAvLyAgICAgICAgICAgdGhhdC5yZXN1bHRPYmplY3QuZW50aXRpZXMucHVzaChfcG9seTEpO1xuICAvLyAgICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgICBsZXQgX3BvbHkyID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKHtcbiAgLy8gICAgICAgICAgICAgcG9seWxpbmU6IHtcbiAgLy8gICAgICAgICAgICAgICBwb3NpdGlvbnM6IFtcbiAgLy8gICAgICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnZpZXdQb2ludCxcbiAgLy8gICAgICAgICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LnRhcmdldFBvaW50LFxuICAvLyAgICAgICAgICAgICAgIF0sXG4gIC8vICAgICAgICAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5HUkVFTixcbiAgLy8gICAgICAgICAgICAgICB3aWR0aDogMyxcbiAgLy8gICAgICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICB9KTtcbiAgLy8gICAgICAgICAgIHRoYXQucmVzdWx0T2JqZWN0LmVudGl0aWVzLnB1c2goX3BvbHkyKTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9LCAxMDAwKTtcbiAgLy8gfVxuXG4gIHN0YXRpYyBhc3luYyBlZGl0KHRoYXQpIHtcbiAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0LmNsb3NlKClcbiAgICAgIHRoYXQuX0RpYWxvZ09iamVjdCA9IG51bGxcbiAgICB9XG4gICAgdGhhdC5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGF0LnNkay52aWV3ZXIuX2NvbnRhaW5lciwge1xuICAgICAgdGl0bGU6ICflpJrngrnop4bnur/liIbmnpAnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXG4gICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoYXQuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhhdC5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcbiAgICAgIH0sXG4gICAgfSlcbiAgICBhd2FpdCB0aGF0Ll9EaWFsb2dPYmplY3QuaW5pdCgpXG4gICAgdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyB2aXNpYmlsaXR5J1xuICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXG5cbiAgICBsZXQgZHJhd0VsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpXG4gICAgZHJhd0VsbS5pbm5lckhUTUwgPSAn57uY5Yi2J1xuICAgIGRyYXdFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBWaXNpYmlsaXR5QW5hbHlzaXMuY3JlYXRlKHRoYXQpXG4gICAgfSlcbiAgICB0aGF0Ll9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGRyYXdFbG0pXG5cbiAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXG4gICAgdGhhdC5fRXZlbnRCaW5kaW5nLm9uKHRoYXQsIGFsbF9lbG0pXG4gICAgdGhhdC5fZWxtcyA9IHRoYXQuX0V2ZW50QmluZGluZy5lbGVtZW50XG4gIH1cblxuICAvL+epuumXtOS4pOeCuemXtOi3neemu1xuICBzdGF0aWMgZGlzdGFuY2UocG9pbnQxLCBwb2ludDIpIHtcbiAgICBsZXQgcG9pbnQxY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHBvaW50MSk7XG4gICAgbGV0IHBvaW50MmNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb2ludDIpO1xuICAgIC8qKuagueaNrue7j+e6rOW6puiuoeeul+WHuui3neemuyoqL1xuICAgIGxldCBnZW9kZXNpYyA9IG5ldyBDZXNpdW0uRWxsaXBzb2lkR2VvZGVzaWMoKTtcbiAgICBnZW9kZXNpYy5zZXRFbmRQb2ludHMocG9pbnQxY2FydG9ncmFwaGljLCBwb2ludDJjYXJ0b2dyYXBoaWMpO1xuICAgIGxldCBzID0gZ2VvZGVzaWMuc3VyZmFjZURpc3RhbmNlO1xuICAgIC8v6L+U5Zue5Lik54K55LmL6Ze055qE6Led56a7XG4gICAgcyA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KHMsIDIpICtcbiAgICAgIE1hdGgucG93KHBvaW50MmNhcnRvZ3JhcGhpYy5oZWlnaHQgLSBwb2ludDFjYXJ0b2dyYXBoaWMuaGVpZ2h0LCAyKVxuICAgICk7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc3VsdE9iamVjdC5lbnRpdGllcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXN1bHRPYmplY3QgPSB7XG4gICAgICB2aWV3UG9pbnQ6IHVuZGVmaW5lZCwgLy/pgJrop4bliIbmnpDotbfngrlcbiAgICAgIHRhcmdldFBvaW50czogW10sIC8v6YCa6KeG5YiG5p6Q55uu5qCH54K56ZuG5ZCIXG4gICAgICB0YXJnZXRQb2ludDogdW5kZWZpbmVkLCAvL+W9k+WJjeebruagh+eCuVxuICAgICAgb2JqZWN0RXhjbHVkZTogW10sIC8v5bCE57q/5o6S6Zmk6ZuG5ZCIXG4gICAgICBlbnRpdGllczogW10sIC8v5Yib5bu655qERW50aXR55a+56LGhXG4gICAgfTtcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXG4gICAgdGhpcy50aXAgPSBudWxsXG4gICAgdGhpcy5ldmVudCA9IG51bGxcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzaWJpbGl0eUFuYWx5c2lzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWlTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE5U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFIQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE1QkE7QUFBQTtBQUFBO0FBQUE7QUE4QkE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBb0JBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/Visibility/index.js\n"); /***/ }), /***/ "./src/Obj/Analysis/clear.js": /*!***********************************!*\ !*** ./src/Obj/Analysis/clear.js ***! \***********************************/ /*! exports provided: AnalysisClear, SectionClear */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnalysisClear\", function() { return AnalysisClear; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SectionClear\", function() { return SectionClear; });\nfunction AnalysisClear() {\n YJ.Analysis.AnalysesResults.forEach(function (m) {\n m.destroy();\n });\n // YJ.Analysis.AnalysesResults = []\n}\nfunction SectionClear() {\n YJ.Analysis.SectionResults.forEach(function (m) {\n m.destroy();\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0FuYWx5c2lzL2NsZWFyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9BbmFseXNpcy9jbGVhci5qcz9hZTZkIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIEFuYWx5c2lzQ2xlYXIoKSB7XHJcbiAgWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzLmZvckVhY2gobSA9PiB7XHJcbiAgICBtLmRlc3Ryb3koKVxyXG4gIH0pXHJcbiAgLy8gWUouQW5hbHlzaXMuQW5hbHlzZXNSZXN1bHRzID0gW11cclxufVxyXG5cclxuZnVuY3Rpb24gU2VjdGlvbkNsZWFyKCkge1xyXG4gIFlKLkFuYWx5c2lzLlNlY3Rpb25SZXN1bHRzLmZvckVhY2gobSA9PiB7XHJcbiAgICBtLmRlc3Ryb3koKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7QW5hbHlzaXNDbGVhciwgU2VjdGlvbkNsZWFyfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Analysis/clear.js\n"); /***/ }), /***/ "./src/Obj/Base/AssembleObject/_element.js": /*!*************************************************!*\ !*** ./src/Obj/Base/AssembleObject/_element.js ***! \*************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQXNzZW1ibGVPYmplY3QvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQXNzZW1ibGVPYmplY3QvX2VsZW1lbnQuanM/NjU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4O1wiPuaKleW9semdouenrzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGlucHV0LXRleHRcIiByZWFkb25seT1cInJlYWRvbmx5XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJhcmVhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWxlY3QtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFicyBpZD1cImFzc2VtYmxlLW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLlsZ7mgKfkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuepuumXtOS/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBoZWlnaHQtbW9kZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPumrmOW6puaooeW8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWlnaHQtbW9kZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlrlgLznu5/kuIDlop7liqA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGhlaWdodFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmlybSBoZWlnaHQtY29uZmlybVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUgc3BhdGlhbC1pbmZvLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57uP5bqm77yIWO+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nuqzluqbvvIhZ77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumrmOW6pu+8iFrvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIumdoumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumdouminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui+uee6v+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovrnnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5XCIgQG1vZGVsPVwibGluZVdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+azqOmjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTEoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+etvumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTIoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQXVGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/AssembleObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/AssembleObject/index.js": /*!**********************************************!*\ !*** ./src/Obj/Base/AssembleObject/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/AssembleObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 集结地\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n// import EditParticle from \"../../ModelController/EditParticle\";\nvar AssembleObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 集结地\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color='rgba(255, 0, 0, 0.5)' {string} 颜色\r\n * @param options.height {number} 高度\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function AssembleObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, AssembleObject);\n _this2 = _callSuper(this, AssembleObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"#ff000080\";\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.positions = options.positions || [];\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n _this2.entity;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.operate = {};\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.nodePoints = [];\n if (!_this2.options.positions || _this2.options.positions.length < 3) {\n _this2._error = '集结地最少需要三个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n if (!_this2.options.height && _this2.options.height !== 0) {\n var height = _this2.options.positions[0].alt;\n for (var i = 1; i < _this2.options.positions.length; i++) {\n if (height < _this2.options.positions[i].alt) {\n height = _this2.options.positions[i].alt;\n }\n }\n _this2.options.height = height;\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n AssembleObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(AssembleObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(AssembleObject, [{\n key: \"type\",\n get: function get() {\n return 'AssembleObject';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this4.options.heightMode = v || v == 0 ? v : 2;\n _this4.positionEditing = false;\n if (!_this4.entity) {\n return;\n }\n var heightModeName = '';\n AssembleObject.closeNodeEdit(_this4);\n var ground = false;\n var disabled = false;\n _this4.renewPositions();\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positionsH), [_this4.positionsH[0], _this4.positionsH[1]]);\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positionsH);\n switch (_this4.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this4.previous = null;\n _this4.label.ground = ground;\n _this4.entity.polyline.clampToGround = ground;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4._elms.heightMode && (_this4._elms.heightMode.value = heightModeName);\n _this4._elms.heightModeObject && _this4._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this5 = this;\n if (!v || isNaN(Number(v))) {\n this.options.height = 0;\n } else {\n this.options.height = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this5.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this5.positionsH);\n _this5.entity.polygon.perPositionHeight = !ground ? true : false;\n _this5.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this5.positionsH), [_this5.positionsH[0], _this5.positionsH[1]]);\n _this5.entity.polyline.clampToGround = !ground ? false : true;\n _this5.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this5.options.height;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineColor && this._elms.lineColor.forEach(function (item) {\n item.value = _this7.options.line.width;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this12.options.attribute.link.content;\n case 2:\n _this12.attributeLink = _context3.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this12.options.attribute.link.content.splice(i, 1);\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this12.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this13.options.attribute.vr.content;\n case 2:\n _this13.attributeVr = _context6.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this13.options.attribute.vr.content.splice(i, 1);\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this13.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this14 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, heightBoxElm, heightElm, heightConfirmElm, heightModeData, heightModeObject, heightModeDataLegpElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!this._error) {\n _context7.next = 2;\n break;\n }\n return _context7.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 61;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var _loop9 = function _loop9(i) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(i + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.positions[i].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.positions[i].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AssembleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.positions[i].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AssembleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.positions[i].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AssembleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var i = 0; i < _this.options.positions.length; i++) {\n _loop9(i);\n }\n };\n _context7.next = 9;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '集结地属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this14.name = _this14.name.trim();\n if (!_this14.name) {\n _this14.name = '未命名对象';\n }\n _this14.options.label.position = {\n lng: _this14.label.position[0],\n lat: _this14.label.position[1],\n alt: _this14.label.position[2]\n };\n _this14.originalOptions = _this14.deepCopyObj(_this14.options);\n _this14._DialogObject.close();\n _this14.Dialog.confirmCallBack && _this14.Dialog.confirmCallBack(_this14.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this14.reset();\n _this14.Dialog.resetCallBack && _this14.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this14.Dialog.removeCallBack && _this14.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this14.reset();\n _this14.positionEditing = false;\n _this14.Dialog.closeCallBack && _this14.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this14.options.show = show;\n _this14.originalOptions.show = show;\n _this14.show = show;\n _this14.Dialog.showCallBack && _this14.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this14.positionEditing = !_this14.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n AssembleObject.nodeEdit(_this14, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 9:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' assemble';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('assemble-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n AssembleObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightConfirmElm = this._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (this.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 58;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = this._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n i = 0;\n case 42:\n if (!(i < heightModeData.length)) {\n _context7.next = 50;\n break;\n }\n if (!(heightModeData[i].key == this.heightMode)) {\n _context7.next = 47;\n break;\n }\n heightModeDataLegpElm.value = heightModeData[i].value;\n heightModeObject.legp_searchActive(heightModeData[i].value);\n return _context7.abrupt(\"break\", 50);\n case 47:\n i++;\n _context7.next = 42;\n break;\n case 50:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < heightModeData.length; _i5++) {\n if (heightModeData[_i5].value === heightModeDataLegpElm.value) {\n _this14.heightMode = heightModeData[_i5].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this14.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n this._elms.height = heightElm;\n this._elms.heightBox = heightBoxElm;\n this._elms.heightMode = heightModeDataLegpElm;\n this._elms.heightConfirm = heightConfirmElm;\n this._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this14.operate.positionEditing) {\n _this14.positionEditing = false;\n _this14.height = _this14.height + Number(heightElm.value);\n } else {\n AssembleObject.closeNodeEdit(_this14);\n _this14.heightMode = _this14.heightMode;\n setTimeout(function () {\n _this14.height = _this14.height + Number(heightElm.value);\n }, 100);\n }\n });\n case 58:\n setTimeout(function () {\n _this14.attributeLink = _this14.options.attribute.link.content;\n _this14.attributeVr = _this14.options.attribute.vr.content;\n _this14.cameraSelect && _this14.cameraSelect();\n _this14.goodsSelect && _this14.goodsSelect();\n var tagData = _this14.attributeSelect;\n var attributeElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this14.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this14.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n createSpatialInfoTableContent();\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this14.options['area-unit'];\n for (var _i8 = 0; _i8 < unitData.length; _i8++) {\n if (unitData[_i8].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i8].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < unitData.length; _i9++) {\n if (unitData[_i9].value === unitDataLegpElm.value) {\n _this14.areaUnit = unitData[_i9].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this14.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this14.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this14._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context7.next = 62;\n break;\n case 61:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 62:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineColor = this.originalOptions.line.color;\n this.lineWidth = this.originalOptions.line.width;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n for (var i = 0; i < this.options.positions.length; i++) {\n if (this._elms.lng && this._elms.lng[i]) {\n this._elms.lng[i].innerHTML = this.options.positions[i].lng.toFixed(8);\n }\n if (this._elms.lat && this._elms.lat[i]) {\n this._elms.lat[i].innerHTML = this.options.positions[i].lat.toFixed(8);\n }\n if (this._elms.alt && this._elms.alt[i]) {\n this._elms.alt[i].innerHTML = Number(this.options.height.toFixed(2));\n }\n }\n this.heightMode = this.heightMode;\n for (var _i12 = 0; _i12 < this.nodePoints.length; _i12++) {\n this.sdk.viewer.entities.remove(this.nodePoints[_i12]);\n }\n this.previous = null;\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.sdk.viewer.entities.remove(this.entity);\n this.label && this.label.remove();\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0] && this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n ground,\n i,\n height,\n a,\n _i13,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n if (!this._error) {\n _context9.next = 3;\n break;\n }\n return _context9.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 18;\n break;\n }\n _context9.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context9.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 51;\n break;\n case 25:\n positionArray = [];\n _context9.t0 = this.heightMode;\n _context9.next = _context9.t0 === 0 ? 29 : _context9.t0 === '0' ? 29 : _context9.t0 === 1 ? 31 : _context9.t0 === '1' ? 31 : _context9.t0 === 2 ? 33 : _context9.t0 === '2' ? 33 : 35;\n break;\n case 29:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 31:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 33:\n ground = true;\n return _context9.abrupt(\"break\", 35);\n case 35:\n if (!ground) {\n _context9.next = 48;\n break;\n }\n i = 0;\n case 37:\n if (!(i < this.options.positions.length)) {\n _context9.next = 46;\n break;\n }\n _context9.next = 40;\n return this.getClampToHeight(this.options.positions[i]);\n case 40:\n height = _context9.sent;\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 43:\n i++;\n _context9.next = 37;\n break;\n case 46:\n _context9.next = 49;\n break;\n case 48:\n if (this.positionsH) {\n for (_i13 = 0; _i13 < this.positionsH.length; _i13++) {\n positionArray.push(this.positionsH[_i13].x, this.positionsH[_i13].y, this.positionsH[_i13].z);\n }\n }\n case 49:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 51:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this15 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this15.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this16 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n if (status === true) {\n var _Cesium$Cartesian;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var array = [];\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i14 = 0; _i14 < positions.length; _i14++) {\n center.x - positions[_i14].x;\n disparity.push({\n x: center.x - positions[_i14].x,\n y: center.y - positions[_i14].y,\n z: center.z - positions[_i14].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n var position84 = _this16.cartesian3Towgs84(cartesian, _this16.sdk.viewer);\n newpositions = [];\n for (var _i15 = 0; _i15 < disparity.length; _i15++) {\n newpositions.push({\n x: cartesian.x - disparity[_i15].x,\n y: cartesian.y - disparity[_i15].y,\n z: cartesian.z - disparity[_i15].z\n });\n }\n // this.label.position = [position84.lng, position84.lat, position84.alt]\n _this16.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i16 = 0; _i16 < disparity.length; _i16++) {\n var pos3 = {\n x: cartesian.x - disparity[_i16].x,\n y: cartesian.y - disparity[_i16].y,\n z: cartesian.z - disparity[_i16].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i16] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i16]) {\n _this16._elms.lng[_i16].innerHTML = _this16.options.positions[_i16].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i16]) {\n _this16._elms.lat[_i16].innerHTML = _this16.options.positions[_i16].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = null;\n _this16.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this16.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this16.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this16.positionEditing = false;\n } else {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i17 = 0; _i17 < disparity.length; _i17++) {\n var pos3 = {\n x: cartesian.x - disparity[_i17].x,\n y: cartesian.y - disparity[_i17].y,\n z: cartesian.z - disparity[_i17].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i17] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i17]) {\n _this16._elms.lng[_i17].innerHTML = _this16.options.positions[_i17].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i17]) {\n _this16._elms.lat[_i17].innerHTML = _this16.options.positions[_i17].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this16.positions)\n };\n _this16.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var position84 = [];\n if (newpositions.length > 0) {\n for (var _i18 = 0; _i18 < newpositions.length; _i18++) {\n position84.push(_this.cartesian3Towgs84(newpositions[_i18], _this.sdk.viewer));\n }\n } else {\n for (var _i19 = 0; _i19 < positions.length; _i19++) {\n position84.push(_this.cartesian3Towgs84(positions[_i19], _this.sdk.viewer));\n }\n }\n _this.renewPositions(position84);\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n if (!this.previous) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n } else {\n this.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.previous.positions);\n }\n var position84 = [];\n for (var _i20 = 0; _i20 < this.positions.length; _i20++) {\n position84.push(_this.cartesian3Towgs84(this.positions[_i20], _this.sdk.viewer));\n }\n this.renewPositions(position84);\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, true);\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n var _Cesium$Cartesian2;\n var cartesian = Cesium.Cartesian3.fromDegrees(v.position.lng, v.position.lat, v.position.alt);\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var array = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i21 = 0; _i21 < positions.length; _i21++) {\n disparity.push({\n x: center.x - positions[_i21].x,\n y: center.y - positions[_i21].y,\n z: center.z - positions[_i21].z\n });\n }\n var newpositions = [];\n for (var _i22 = 0; _i22 < disparity.length; _i22++) {\n newpositions.push({\n x: cartesian.x - disparity[_i22].x,\n y: cartesian.y - disparity[_i22].y,\n z: cartesian.z - disparity[_i22].z\n });\n }\n this.label.position = [v.position.lng, v.position.lat, v.position.alt];\n var positions84 = [];\n if (newpositions.length > 0) {\n for (var _i23 = 0; _i23 < newpositions.length; _i23++) {\n positions84.push(this.cartesian3Towgs84(newpositions[_i23], this.sdk.viewer));\n }\n }\n var arr = this.computeAssemble(positions84);\n if (arr.length == 0) {\n return;\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this17 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var positions = this.computeAssemble(this.options.positions);\n if (positions.length == 0) {\n return;\n }\n var points = [[]];\n for (var i = 0; i < positions.length; i++) {\n var _position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n points[0].push([_position.lng, _position.lat]);\n }\n var position = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this17.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(position84) {\n var _this18 = this;\n if (this._error || !this.sdk.viewer) {\n return;\n }\n var ground = false;\n var array = [];\n var positions = this.options.positions;\n if (position84) {\n positions = position84;\n }\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = this.computeAssemble(positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n var pos84 = [];\n for (var _i24 = 0; _i24 < positionsA.length; _i24++) {\n var _position2 = this.cartesian3Towgs84(positionsA[_i24], this.sdk.viewer);\n pos84.push(_position2);\n points[0].push([_position2.lng, _position2.lat]);\n }\n var position = this.cartesian3Towgs84(positionsA[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var height = 0;\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray2 = [];\n if (!ground && this.nodePoints.length == 0) {\n for (var _i25 = 0; _i25 < points[0].length; _i25++) {\n fromDegreesArray2.push(points[0][_i25][0], points[0][_i25][1], this.height + height);\n }\n this.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.height + height]);\n } else {\n this.positionsH = positionsA;\n setTimeout(function () {\n if (!_this18.sdk.viewer) {\n return;\n }\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this18.sdk.viewer.entities.values);\n _this18.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n _this18.label && (_this18.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n this.options.areaByMeter = this.computeArea(pos84);\n this.areaUnit = this.areaUnit;\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = that.computeAssemble(that.options.positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n for (var _i26 = 0; _i26 < positionsA.length; _i26++) {\n var _position3 = that.cartesian3Towgs84(positionsA[_i26], that.sdk.viewer);\n points[0].push([_position3.lng, _position3.lat]);\n }\n var position = that.cartesian3Towgs84(positionsA[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: that.height + height\n };\n }\n var fromDegreesArray2 = [];\n for (var _i27 = 0; _i27 < points[0].length; _i27++) {\n fromDegreesArray2.push(points[0][_i27][0], points[0][_i27][1], that.height + height);\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.options.label.ground = ground;\n that.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n that.entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n id: that.options.id,\n polygon: {\n hierarchy: !ground ? new Cesium.PolygonHierarchy(that.positionsH) : new Cesium.PolygonHierarchy(positionsA),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n AssembleObject.createLabel(that);\n var pos84 = [];\n for (var _i28 = 0; _i28 < positionsA.length; _i28++) {\n pos84.push(that.cartesian3Towgs84(positionsA[_i28], that.sdk.viewer));\n }\n that.options.areaByMeter = that.computeArea(pos84);\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineWidth: that.options.label.lineWidth,\n lineColor: that.options.label.lineColor,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop10 = function _loop10() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop11 = function _loop11() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop11();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop10()) continue;\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7() {\n var objectsToExclude, _i30, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _i30 = 0;\n case 2:\n if (!(_i30 < that.options.positions.length)) {\n _context11.next = 11;\n break;\n }\n _context11.next = 5;\n return that.getClampToHeight(that.options.positions[_i30], objectsToExclude);\n case 5:\n height = _context11.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i30,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i30].lng, that.options.positions[_i30].lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 8:\n _i30++;\n _context11.next = 2;\n break;\n case 11:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return function createNodePoints() {\n return _ref.apply(this, arguments);\n };\n }(); // for (let i = 0; i < that.options.positions.length; i++) {\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: Cesium.Cartesian3.fromDegrees(that.options.positions[i].lng, that.options.positions[i].lat),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // },\n // })\n // nodePoints.push(entity)\n // }\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var fromDegreesArray = [];\n for (var i = 0; i < that.options.positions.length; i++) {\n fromDegreesArray.push(that.options.positions[i].lng, that.options.positions[i].lat);\n }\n var moveEvent = function moveEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n that.renewPositions();\n }\n that.tip.setPosition(cartesian, movement.position ? movement.position.x : movement.endPosition.x, movement.position ? movement.position.y : movement.endPosition.y);\n };\n var leftEvent = function leftEvent(movement, cartesian) {\n moveEvent(movement, cartesian);\n var position84 = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n if (selectPoint) {\n var index = selectPoint.index;\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: index,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, position84.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n selectPoint = null;\n that.tip.set_text('请选择一个顶点,右键取消');\n } else {\n var _position4 = movement.position;\n if (!_position4) {\n _position4 = {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n };\n }\n var pick = that.sdk.viewer.scene.pick(_position4);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n originalPosition = that.cartesian3Towgs84(pick.id.position.getValue(), that.sdk.viewer);\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键确认,右键取消');\n }\n }\n that.renewPositions();\n };\n var rightEvent = function rightEvent() {\n that.event.mouse_move(function () {});\n that.event.mouse_left(function () {});\n that.event.mouse_right(function () {});\n that.event.gesture_pinck_start(function () {});\n if (selectPoint) {\n if (!originalPosition) {\n that.options.positions.pop();\n } else {\n that.options.positions[selectPoint.index] = originalPosition;\n }\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n }\n that.heightMode = that.heightMode;\n that.previous = null;\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var arr = that.computeAssemble(that.options.positions);\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n var arr = that.computeAssemble(that.options.positions);\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n var points = [[]];\n var pos84 = [];\n for (var _i29 = 0; _i29 < that.positionsH.length; _i29++) {\n var _position5 = that.cartesian3Towgs84(that.positionsH[_i29], that.sdk.viewer);\n pos84.push(_position5);\n points[0].push([_position5.lng, _position5.lat]);\n }\n var position = that.cartesian3Towgs84(that.positionsH[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n setTimeout(function () {\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(moveEvent);\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n rightEvent();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n createNodePoints();\n }, 200);\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (AssembleObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQXNzZW1ibGVPYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQXNzZW1ibGVPYmplY3QvaW5kZXguanM/MTRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog6ZuG57uT5ZywXHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbi8vIGltcG9ydCBFZGl0UGFydGljbGUgZnJvbSBcIi4uLy4uL01vZGVsQ29udHJvbGxlci9FZGl0UGFydGljbGVcIjtcclxuXHJcbmNsYXNzIEFzc2VtYmxlT2JqZWN0IGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDpm4bnu5PlnLBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPSdyZ2JhKDI1NSwgMCwgMCwgMC41KScge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodE1vZGU9MntudW1iZXJ9IOmrmOW6puaooeW8j++8iDDvvJrmtbfmi5Tpq5jluqbvvJsx77ya55u45a+55Zyw6KGo77ybMu+8muS+nemZhOaooeW8j++8iVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFyZWFVbml0PSflubPmlrnnsbMnIHtzdHJpbmd9IOmdouenr+WNleS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUge29iamVjdH0g6L655qGGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS53aWR0aD0yIHtzdHJpbmd9IOi+ueahhuWuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUuY29sb3I9XCJyZ2JhKDE1NSwgMTU1LCAxMjQsIDAuODkpXCIge3N0cmluZ30g6L655qGG6aKc6ImyXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge3N0cmluZ30g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30ge29iamVjdH0g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCBcIiNmZjAwMDA4MFwiXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZSA9IG9wdGlvbnMubGluZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHRoaXMub3B0aW9ucy5saW5lLndpZHRoIHx8IHRoaXMub3B0aW9ucy5saW5lLndpZHRoID09PSAwKSA/IHRoaXMub3B0aW9ucy5saW5lLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgfHwgJ3JnYmEoMjU1LCAwLCAwLCAxKSdcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSBvcHRpb25zWydhcmVhLXVuaXQnXSB8fCAn5bmz5pa557GzJ1xyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucG9zaXRpb25zIHx8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIDwgMykge1xyXG4gICAgICB0aGlzLl9lcnJvciA9ICfpm4bnu5PlnLDmnIDlsJHpnIDopoHkuInkuKrlnZDmoIfvvIEnXHJcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLl9lcnJvcilcclxuICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5fZXJyb3IsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmhlaWdodCAmJiB0aGlzLm9wdGlvbnMuaGVpZ2h0ICE9PSAwKSB7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGVpZ2h0IDwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcbiAgICAgIEFzc2VtYmxlT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ0Fzc2VtYmxlT2JqZWN0J1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdiB8fCAncmdiYSgyNTUsIDAsIDAsIDAuNSknXHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5Z29uKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gICAgaWYgKHRoaXMuX2VsbXMuY29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwwLDAsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPyB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA6IDBcclxuICB9XHJcbiAgc2V0IGhlaWdodE1vZGUodikge1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBbXVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKHYgfHwgdiA9PSAwKSA/IHYgOiAyXHJcbiAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHRNb2RlTmFtZSA9ICcnXHJcbiAgICAgIEFzc2VtYmxlT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wb3NpdGlvbnNILFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFswXSxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc0hbMV1cclxuICAgICAgXVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc0hcclxuICAgICAgKVxyXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5rW35ouU6auY5bqmJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfnm7jlr7nlnLDooagnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5L6d6ZmE5qih5Z6LJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgICB0aGlzLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlID0gaGVpZ2h0TW9kZU5hbWUpXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lXHJcbiAgICAgICkpXHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDIpKVxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9uc0gsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFsxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDXHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS5jb2xvclxyXG4gIH1cclxuICBzZXQgbGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdiB8fCAncmdiYSgyNTUsIDAsIDAsIDAuNSknXHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5bGluZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMubGluZS5jb2xvcilcclxuICAgIGlmICh0aGlzLl9lbG1zLmxpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMubGluZS5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICB9XHJcbiAgc2V0IGxpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9ICgodiB8fCB2ID09PSAwKSA/IHYgOiAzKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUud2lkdGggPSB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgJiYgdGhpcy5fZWxtcy5saW5lQ29sb3IuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXJlYVxyXG4gIH1cclxuXHJcbiAgc2V0IGFyZWEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWEgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWEgJiYgdGhpcy5fZWxtcy5hcmVhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYVVuaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gIH1cclxuICBzZXQgYXJlYVVuaXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYVVuaXQgJiYgdGhpcy5fZWxtcy5hcmVhVW5pdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlcikge1xyXG4gICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAhdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJiB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250RmFtaWx5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gdiB8fCAwXHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmZvbnRGYW1pbHkgPSB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSlcclxuXHJcbiAgICBsZXQgbmFtZSA9IGdldEZvbnRGYW1pbHlOYW1lKHRoaXMubGFiZWxGb250RmFtaWx5KSB8fCAnJ1xyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmFtZVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwuY29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3JbaV0gPSBsYWJlbENvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICB9XHJcbiAgc2V0IGxhYmVsRm9udFNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZSAmJiB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlICYmIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxMaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aCAmJiB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxQaXhlbE9mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICB9XHJcbiAgc2V0IGxhYmVsUGl4ZWxPZmZzZXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldCAmJiB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhYmVsTGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMCwyNTUsMjU1LDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt2LCB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXV1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSwgdl1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICB9XHJcbiAgICB0aGF0LnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIGxldCBwb3NpdGlvbnNBID0gdGhhdC5jb21wdXRlQXNzZW1ibGUodGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIGlmIChwb3NpdGlvbnNBLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHBvaW50cyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbaV0sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVswXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cyk7XHJcbiAgICAvLyBsZXQgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKTtcclxuXHJcblxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuXHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgbGF0OiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgYWx0OiB0aGF0LmhlaWdodCArIGhlaWdodCB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzWzBdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2goXHJcbiAgICAgICAgcG9pbnRzWzBdW2ldWzBdLFxyXG4gICAgICAgIHBvaW50c1swXVtpXVsxXSxcclxuICAgICAgICB0aGF0LmhlaWdodCArIGhlaWdodFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhhdC5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoYXQub3B0aW9ucy5sYWJlbC5ncm91bmQgPSBncm91bmRcclxuICAgIHRoYXQucG9zaXRpb25zSCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkyKVxyXG5cclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiAhZ3JvdW5kID8gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zSCkgOiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkocG9zaXRpb25zQSksXHJcbiAgICAgICAgcGVyUG9zaXRpb25IZWlnaHQ6ICFncm91bmQgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogWy4uLnRoYXQucG9zaXRpb25zSCwgdGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnBvc2l0aW9uc0hbMV1dLFxyXG4gICAgICAgIHdpZHRoOiB0aGF0Lm9wdGlvbnMubGluZS53aWR0aCxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMubGluZS5jb2xvciksXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogIWdyb3VuZCA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICBhcmNUeXBlOiAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgQXNzZW1ibGVPYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuXHJcbiAgICBsZXQgcG9zODQgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnNBLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvczg0LnB1c2godGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNBW2ldLCB0aGF0LnNkay52aWV3ZXIpKVxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyID0gdGhhdC5jb21wdXRlQXJlYShwb3M4NCk7XHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9uc1snYXJlYS11bml0J10pIHtcclxuICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgIH1cclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUxhYmVsKHRoYXQpIHtcclxuICAgIC8vIOagh+etvlxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6IHRoYXQub3B0aW9ucy5uYW1lLFxyXG4gICAgICBmb250U2l6ZTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5OiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSxcclxuICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgcGl4ZWxPZmZzZXQ6IHRoYXQub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMubGFiZWwubmVhcixcclxuICAgICAgZmFyOiB0aGF0Lm9wdGlvbnMubGFiZWwuZmFyLFxyXG4gICAgICBncm91bmQ6IHRoYXQub3B0aW9ucy5sYWJlbC5ncm91bmQsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g57yW6L6R5qGGXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgZnVuY3Rpb24gY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgbGV0IHRhYmxlRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzcGF0aWFsLWluZm8tdGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0Qm9keUVsbSA9IHRhYmxlRWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIHRCb2R5RWxtLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5sbmdJbnB1dCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5sYXRJbnB1dCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5hbHRJbnB1dCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgICAgIHRyLmNsYXNzTmFtZSA9ICd0cidcclxuICAgICAgICAgIHRyLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7aSArIDF9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbG5nIGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxhdCBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhbHQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgYFxyXG4gICAgICAgICAgbGV0IGxuZ0JveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xuZycpWzBdXHJcbiAgICAgICAgICBsZXQgbG5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsbmcuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZykudG9GaXhlZCg4KVxyXG4gICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICAgIGxldCBsbmdJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGxuZ0lucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGxuZ0lucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgbG5nSW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgbG5nSW5wdXQubWluID0gLTE4MFxyXG4gICAgICAgICAgbG5nSW5wdXQubWF4ID0gMTgwXHJcbiAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuXHJcbiAgICAgICAgICBsZXQgbGF0Qm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0JylbMF1cclxuICAgICAgICAgIGxldCBsYXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgICAgbGV0IGxhdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgbGF0SW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgbGF0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBsYXRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBsYXRJbnB1dC5taW4gPSAtOTBcclxuICAgICAgICAgIGxhdElucHV0Lm1heCA9IDkwXHJcbiAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOClcclxuXHJcbiAgICAgICAgICBsZXQgYWx0Qm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWx0JylbMF1cclxuICAgICAgICAgIGxldCBhbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgIGFsdC5pbm5lckhUTUwgPSAoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpXHJcbiAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgICAgbGV0IGFsdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgYWx0SW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgYWx0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBhbHRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBhbHRJbnB1dC5taW4gPSAtOTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQubWF4ID0gOTk5OTk5OTk5XHJcbiAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMilcclxuXHJcbiAgICAgICAgICBsbmdCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nSW5wdXQpXHJcbiAgICAgICAgICAgIGxuZ0lucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBBc3NlbWJsZU9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcgPSBOdW1iZXIoTnVtYmVyKGxuZ0lucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmcuaW5uZXJIVE1MID0gX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGxhdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXRJbnB1dClcclxuICAgICAgICAgICAgbGF0SW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEFzc2VtYmxlT2JqZWN0LmNsb3NlTm9kZUVkaXQoX3RoaXMpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodE1vZGUgPSBfdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCA9IE51bWJlcihOdW1iZXIobGF0SW5wdXQudmFsdWUpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBfdGhpcy5oZWlnaHRcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgYWx0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0SW5wdXQpXHJcbiAgICAgICAgICAgIGFsdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBBc3NlbWJsZU9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBOdW1iZXIoTnVtYmVyKGFsdElucHV0LnZhbHVlKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gTnVtYmVyKF90aGlzLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMubG5nLnB1c2gobG5nKVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQucHVzaChsbmdJbnB1dClcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxhdC5wdXNoKGxhdClcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0LnB1c2gobGF0SW5wdXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5hbHQucHVzaChhbHQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5hbHRJbnB1dC5wdXNoKGFsdElucHV0KVxyXG4gICAgICAgICAgdEJvZHlFbG0uYXBwZW5kQ2hpbGQodHIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+mbhue7k+WcsOWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSwgYWx0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzJdIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDkuozmrKHnvJbovpHlm57osINcclxuICAgICAgICBzZWNvbmRhcnlFZGl0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIEFzc2VtYmxlT2JqZWN0Lm5vZGVFZGl0KHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgYXNzZW1ibGUnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG5cclxuICAgICAgLy8g5Yib5bu65qCH562+6aG1XHJcbiAgICAgIGxldCB0YWJzRWxtID0gbmV3IGN5X3RhYnMoJ2Fzc2VtYmxlLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbExpbmVDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgQXNzZW1ibGVPYmplY3QuRXZlbnRCaW5kaW5nKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yID0gW2xpbmVjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2xhYmVsQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IgPSBbbGFiZWxsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgbGV0IGhlaWdodEJveEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1ib3gnKVswXVxyXG4gICAgICBsZXQgaGVpZ2h0RWxtID0gaGVpZ2h0Qm94RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodCcpWzBdXHJcbiAgICAgIGxldCBoZWlnaHRDb25maXJtRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWNvbmZpcm0nKVswXVxyXG4gICAgICBoZWlnaHRFbG0udmFsdWUgPSAxMFxyXG4gICAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgIGhlaWdodENvbmZpcm1FbG0gJiYgaGVpZ2h0Q29uZmlybUVsbS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaGVpZ2h0Qm94RWxtICYmIChoZWlnaHRCb3hFbG0uY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3gnKTtcclxuICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHRNb2RlRGF0YSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgIHZhbHVlOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgIGtleTogJzAnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICB2YWx1ZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICBrZXk6ICcxJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfkvp3pmYTmqKHlnosnLFxyXG4gICAgICAgICAgdmFsdWU6ICfkvp3pmYTmqKHlnosnLFxyXG4gICAgICAgICAga2V5OiAnMicsXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICAgIGxldCBoZWlnaHRNb2RlT2JqZWN0ID0gbGVncChcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2hlaWdodC1tb2RlLWJveCdcclxuICAgICAgICApWzBdLFxyXG4gICAgICAgICcuaGVpZ2h0LW1vZGUnXHJcbiAgICAgIClcclxuICAgICAgaWYgKGhlaWdodE1vZGVPYmplY3QpIHtcclxuICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoKGhlaWdodE1vZGVEYXRhKVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1tb2RlJylbMF1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS5rZXkgPT0gdGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS52YWx1ZSA9IGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZSA9PT0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGhlaWdodEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHQgPSBoZWlnaHRFbG1cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCA9IGhlaWdodEJveEVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSA9IGhlaWdodE1vZGVEYXRhTGVncEVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSA9IGhlaWdodENvbmZpcm1FbG1cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QgPSBoZWlnaHRNb2RlT2JqZWN0XHJcblxyXG4gICAgICAgIGhlaWdodENvbmZpcm1FbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIEFzc2VtYmxlT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sIFwiLmF0dHJpYnV0ZS1zZWxlY3RcIilcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG5cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbe1xyXG4gICAgICAgICAgbmFtZTogJ+W5s+aWueexsycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+W5s+aWueexsydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnljYPnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnljYPnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5LqpJyxcclxuICAgICAgICAgIHZhbHVlOiAn5LqpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+WFrOmhtycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+WFrOmhtydcclxuICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncCh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnKVswXSwgXCIuaW5wdXQtc2VsZWN0LXVuaXRcIilcclxuICAgICAgICBpZiAodW5pdERhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2godW5pdERhdGEpXHJcbiAgICAgICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh1bml0RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhVW5pdCA9IHVuaXREYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5hcmVhID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYXJlYVxyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nW2ldKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5sbmdbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcudG9GaXhlZCg4KVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdFtpXSkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMubGF0W2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHRbaV0pIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmFsdFtpXS5pbm5lckhUTUwgPSBOdW1iZXIodGhpcy5vcHRpb25zLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcblxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91cyA9IG51bGxcclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgX2FkZExpbmsoKSB7XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXSAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIOmjnuWIsFxyXG4qL1xyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICAgIGNsb3NlVmlld0ZvbGxvdyh0aGlzLnNkaylcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbVZpZXcgJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbikge1xyXG4gICAgICBsZXQgb3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcgfHwgMC4wKSxcclxuICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHx8IC02MC4wKSxcclxuICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB8fCAwLjApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZ1xyXG4gICAgICBsZXQgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXRcclxuICAgICAgbGV0IGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB7IGxuZzogMCwgbGF0OiAwIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsbmcnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubG5nID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsYXQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubGF0ID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24uYWx0ID0gdGhpcy5vcHRpb25zLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICBwb3NpdGlvbi5hbHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQocG9zaXRpb24pXHJcbiAgICAgIH1cclxuICAgICAgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcgKyBwb3NpdGlvbi5sbmdcclxuICAgICAgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQgKyBwb3NpdGlvbi5sYXRcclxuICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgZ3JvdW5kXHJcbiAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JvdW5kKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0pXHJcbiAgICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uc0gpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbnNILmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaCh0aGlzLnBvc2l0aW9uc0hbaV0ueCwgdGhpcy5wb3NpdGlvbnNIW2ldLnksIHRoaXMucG9zaXRpb25zSFtpXS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9uQXJyYXkpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgLy8gdmFyIHVlID0gVUUuZ2V0RWRpdG9yKCdhcHAnKTtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuXHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfngrnlh7vpvKDmoIflt6bplK7noa7orqTvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgyNTUsMjU1LDI1NSwwLjkpYCkpXHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBmaXJzdHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgICAgdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSk7XHJcbiAgICAgIHZhciBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54XHJcbiAgICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgICAgeDogY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueCxcclxuICAgICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbi55IC0gZGlzcGFyaXR5W2ldLnksXHJcbiAgICAgICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3Bvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdCwgcG9zaXRpb244NC5hbHRdXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3Bhcml0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHBvczMgPSB7XHJcbiAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbi55IC0gZGlzcGFyaXR5W2ldLnksXHJcbiAgICAgICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaChwb3MzKVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zMywgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nW2ldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdFtpXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3cG9zaXRpb25zXHJcbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IG51bGxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgcG9zMyA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2gocG9zMylcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZWxtcy5sYXRbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IG5ld3Bvc2l0aW9uc1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gW11cclxuICAgICAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3cG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChuZXdwb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcy5yZW5ld1Bvc2l0aW9ucyhwb3NpdGlvbjg0KVxyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zSClcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnNILCBfdGhpcy5wb3NpdGlvbnNIWzBdLCBfdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLmVudGl0eSAmJiB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDEpYClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgaWYgKCF0aGlzLnByZXZpb3VzKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFsuLi50aGlzLnByZXZpb3VzLnBvc2l0aW9uc11cclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9zaXRpb244NCA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwb3NpdGlvbjg0LnB1c2goX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5wb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJlbmV3UG9zaXRpb25zKHBvc2l0aW9uODQpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnNILCBfdGhpcy5wb3NpdGlvbnNIWzBdLCBfdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRXZlbnRCaW5kaW5nKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0Ll9lbG1zW20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKHZlbnRUeXBlLCAoZSkgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICBFdmVudFt0XShlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9kZUVkaXQodGhhdCwgY2IgPSAoKSA9PiB7IH0pIHtcclxuICAgIHRoYXQucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG1vdmVFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBpZiAodGhhdC5fZWxtcy5sbmcgJiYgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoYXQuX2VsbXMubG5nW3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sbmcudG9GaXhlZCg4KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQuX2VsbXMubGF0ICYmIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XSkge1xyXG4gICAgICAgICAgICB0aGF0Ll9lbG1zLmxhdFtzZWxlY3RQb2ludC5pbmRleF0uaW5uZXJIVE1MID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0LnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uID8gbW92ZW1lbnQucG9zaXRpb24ueCA6IG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbiA/IG1vdmVtZW50LnBvc2l0aW9uLnkgOiBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBtb3ZlRXZlbnQobW92ZW1lbnQsIGNhcnRlc2lhbilcclxuICAgICAgICBsZXQgcG9zaXRpb244NCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICBsZXQgaW5kZXggPSBzZWxlY3RQb2ludC5pbmRleFxyXG4gICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LCBwb3NpdGlvbjg0LmFsdCksXHJcbiAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gICAgICAgICAgc2VsZWN0UG9pbnQgPSBudWxsXHJcblxyXG4gICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+ivt+mAieaLqeS4gOS4qumhtueCue+8jOWPs+mUruWPlua2iCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uID0gbW92ZW1lbnQucG9zaXRpb25cclxuICAgICAgICAgIGlmICghcG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBwaWNrID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnBpY2socG9zaXRpb24pO1xyXG4gICAgICAgICAgaWYgKHBpY2sgJiYgcGljay5pZCAmJiBwaWNrLmlkLm5hbWUgJiYgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcpIHtcclxuICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSBwaWNrLmlkXHJcbiAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBpY2suaWQucG9zaXRpb24uZ2V0VmFsdWUoKSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMuc3BsaWNlKHBpY2suaWQuaW5kZXgsIDEpXHJcbiAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUocGljay5pZClcclxuICAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByaWdodEV2ZW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgaWYgKCFvcmlnaW5hbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IG9yaWdpbmFsUG9zaXRpb25cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0Ll9lbG1zLmxuZyAmJiB0aGF0Ll9lbG1zLmxuZ1tzZWxlY3RQb2ludC5pbmRleF0pIHtcclxuICAgICAgICAgICAgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdC5fZWxtcy5sYXQgJiYgdGhhdC5fZWxtcy5sYXRbc2VsZWN0UG9pbnQuaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICB0aGF0LnByZXZpb3VzID0gbnVsbFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZVxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5hcmNUeXBlID0gQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IGZhbHNlXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgYXJyID0gdGhhdC5jb21wdXRlQXNzZW1ibGUodGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGFycilcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFyciA9IHRoYXQuY29tcHV0ZUFzc2VtYmxlKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBbLi4uYXJyXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZmFsc2UpXHJcblxyXG5cclxuICAgICAgbGV0IHBvaW50cyA9IFtbXV1cclxuICAgICAgbGV0IHBvczg0ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LnBvc2l0aW9uc0gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHRoYXQucG9zaXRpb25zSFtpXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgIHBvczg0LnB1c2gocG9zaXRpb24pXHJcbiAgICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHRoYXQucG9zaXRpb25zSFswXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb2ludHMpXHJcbiAgICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbilcclxuICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgdGhhdFxyXG4gICAgICAgIC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIF1cclxuICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcblxyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQocmlnaHRFdmVudClcclxuXHJcbiAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKG1vdmVFdmVudClcclxuXHJcbiAgICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgICByaWdodEV2ZW50KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgY3JlYXRlTm9kZVBvaW50cygpXHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVQb2ludHMoKSB7XHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQodGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCwgaGVpZ2h0KSxcclxuICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgLy8gICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgLy8gICAgIGluZGV4OiBpLFxyXG4gICAgICAvLyAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCksXHJcbiAgICAgIC8vICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgLy8gICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgIC8vICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgLy8gICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgLy8gICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgIC8vICAgICB9LFxyXG4gICAgICAvLyAgIH0pXHJcbiAgICAgIC8vICAgbm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNsb3NlTm9kZUVkaXQodGhhdCkge1xyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICB0aGF0LnRpcCA9IG51bGxcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGF0LnBpY2tpbmcgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbih2KSB7XHJcbiAgICBsZXQgY2FydGVzaWFuID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModi5wb3NpdGlvbi5sbmcsIHYucG9zaXRpb24ubGF0LCB2LnBvc2l0aW9uLmFsdClcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgbGV0IGRpc3Bhcml0eSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBhcnJheS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgZmlyc3Rwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICBhcnJheS5wdXNoKFtmaXJzdHBvc2l0aW9uLmxuZywgZmlyc3Rwb3NpdGlvbi5sYXRdKVxyXG4gICAgdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSk7XHJcbiAgICB2YXIgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgbGV0IGNlbnRlciA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKC4uLmNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgIHg6IGNlbnRlci54IC0gcG9zaXRpb25zW2ldLngsXHJcbiAgICAgICAgeTogY2VudGVyLnkgLSBwb3NpdGlvbnNbaV0ueSxcclxuICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3Bhcml0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBuZXdwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YucG9zaXRpb24ubG5nLCB2LnBvc2l0aW9uLmxhdCwgdi5wb3NpdGlvbi5hbHRdXHJcblxyXG4gICAgbGV0IHBvc2l0aW9uczg0ID0gW11cclxuICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld3Bvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uczg0LnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChuZXdwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhcnIgPSB0aGlzLmNvbXB1dGVBc3NlbWJsZShwb3NpdGlvbnM4NClcclxuICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoYXJyKVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbLi4uYXJyXVxyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNvbXB1dGVBc3NlbWJsZSh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBwb2ludHMgPSBbW11dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgIHBvaW50c1swXS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb2ludHMpO1xyXG4gICAgLy8gbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbik7XHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pXHJcblxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnBvc3RSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcigocGVyY2VudGFnZSkgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhzaXRlSW5mb1Bvc2l0aW9uKTtcclxuICAgICAgICBpZiAod2lucG9zKSB7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5sZWZ0ID0gKHdpbnBvcy54ICsgb3B0aW9ucy54KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWdkOagh1xyXG4gIHJlbmV3UG9zaXRpb25zKHBvc2l0aW9uODQpIHtcclxuICAgIGlmICh0aGlzLl9lcnJvciB8fCAhdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBpZiAocG9zaXRpb244NCkge1xyXG4gICAgICBwb3NpdGlvbnMgPSBwb3NpdGlvbjg0XHJcbiAgICB9XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG5cclxuICAgIGxldCBwb3NpdGlvbnNBID0gdGhpcy5jb21wdXRlQXNzZW1ibGUocG9zaXRpb25zKVxyXG4gICAgaWYgKHBvc2l0aW9uc0EubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgbGV0IHBvczg0ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgcG9zODQucHVzaChwb3NpdGlvbilcclxuICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVswXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb2ludHMpXHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICBpZiAoIWdyb3VuZCAmJiB0aGlzLm5vZGVQb2ludHMubGVuZ3RoID09IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHNbMF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKFxyXG4gICAgICAgICAgcG9pbnRzWzBdW2ldWzBdLFxyXG4gICAgICAgICAgcG9pbnRzWzBdW2ldWzFdLFxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgKyBoZWlnaHRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3NpdGlvbnNIID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheTIpXHJcblxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvc2l0aW9uc0ggPSBwb3NpdGlvbnNBXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2RrLnZpZXdlcikge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSkudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSwgMTAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+aKleW9semdouenr1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyID0gdGhpcy5jb21wdXRlQXJlYShwb3M4NClcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLmFyZWFVbml0XHJcbiAgICByZXR1cm4gZnJvbURlZ3JlZXNBcnJheVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXNzZW1ibGVPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF3SUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpIQTtBQUFBO0FBQUE7QUEwSEE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBekNBO0FBMENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBeGVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMmVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFaQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFVQTtBQUFBO0FBUEE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBcEdBO0FBQUE7QUFBQTtBQUFBO0FBc0dBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFBQTtBQXdMQTtBQUNBO0FBQUE7QUFuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBaVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQS8vQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBazZCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJFQTtBQUFBO0FBQUE7QUFxRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVGQTtBQUFBO0FBS0E7QUF3RkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFzS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBO0FBbEJBO0FBQUE7QUFBQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWtDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBdUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/AssembleObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/AttackArrowObject/_element.js": /*!****************************************************!*\ !*** ./src/Obj/Base/AttackArrowObject/_element.js ***! \****************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u52A8\\u753B\\u65F6\\u957F\\n
\\n \\n ms\\n \\n
\\n
\\n
\\n
\\n
\\n \\u52A8\\u753B\\n \\n
\\n
\\n \\u52A8\\u753B\\u91CD\\u590D\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQXR0YWNrQXJyb3dPYmplY3QvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQXR0YWNrQXJyb3dPYmplY3QvX2VsZW1lbnQuanM/ZjU3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA2MCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCI+5oqV5b2x6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaW5wdXQtdGV4dFwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cImFyZWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlbGVjdC11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Yqo55S75pe26ZW/PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgYmx1clwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjUwMFwiIG1heD1cIjk5OTk5OTlcIiBAbW9kZWw9XCJzcHJlYWRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bXM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqjnlLs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzcHJlYWRTdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWKqOeUu+mHjeWkjTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cImxvb3BcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJhdHRhY2stYXJyb3ctb2JqZWN0LWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1tb2RlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1tb2RlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+WuWAvOe7n+S4gOWinuWKoDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maXJtIGhlaWdodC1jb25maXJtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBzcGF0aWFsLWluZm8tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nu4/luqbvvIhY77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue6rOW6pu+8iFnvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6auY5bqm77yIWu+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi6Z2i6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6Z2i6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVDb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui+uee6v+WuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJsaW5lV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBNkdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/AttackArrowObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/AttackArrowObject/index.js": /*!*************************************************!*\ !*** ./src/Obj/Base/AttackArrowObject/index.js ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/AttackArrowObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 箭头\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n// import EditParticle from \"../../ModelController/EditParticle\";\nvar AttackArrowObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 箭头面\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color='rgba(255, 0, 0, 0.5)' {string} 颜色\r\n * @param options.height {number} 高度\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.spreadState=false {boolean} 动画\r\n * @param options.loop=false {loop} 动画重复\r\n * @param options.spreadTime=3000 {number} 动画持续时长(毫秒)\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function AttackArrowObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, AttackArrowObject);\n _this2 = _callSuper(this, AttackArrowObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"#ff000080\";\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.positions = options.positions || [];\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n _this2.entity;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.operate = {};\n _this2._elms = {};\n _this2.nodePoints = [];\n _this2.Dialog = _Dialog;\n _this2.options.loop = options.loop || false;\n _this2.options.spreadState = options.spreadState || false;\n _this2.spreadTime = options.spreadTime;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n if (!_this2.options.positions || _this2.options.positions.length < 3) {\n _this2._error = '箭头面最少需要三个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n if (!_this2.options.height && _this2.options.height !== 0) {\n var height = _this2.options.positions[0].alt;\n for (var i = 1; i < _this2.options.positions.length; i++) {\n if (height < _this2.options.positions[i].alt) {\n height = _this2.options.positions[i].alt;\n }\n }\n _this2.options.height = height;\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n AttackArrowObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(AttackArrowObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(AttackArrowObject, [{\n key: \"type\",\n get: function get() {\n return 'AttackArrowObject';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this4.options.heightMode = v || v == 0 ? v : 2;\n _this4.positionEditing = false;\n if (!_this4.entity) {\n return;\n }\n var heightModeName = '';\n AttackArrowObject.closeNodeEdit(_this4);\n var ground = false;\n var disabled = false;\n _this4.renewPositions();\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positionsH), [_this4.positionsH[0], _this4.positionsH[1]]);\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positionsH);\n switch (_this4.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this4.previous = null;\n _this4.label.ground = ground;\n _this4.entity.polyline.clampToGround = ground;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4._elms.heightMode && (_this4._elms.heightMode.value = heightModeName);\n _this4._elms.heightModeObject && _this4._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this5 = this;\n if (!v || isNaN(Number(v))) {\n this.options.height = 0;\n } else {\n this.options.height = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this5.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this5.positionsH);\n _this5.entity.polygon.perPositionHeight = !ground ? true : false;\n _this5.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this5.positionsH), [_this5.positionsH[0], _this5.positionsH[1]]);\n _this5.entity.polyline.clampToGround = !ground ? false : true;\n _this5.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this5.options.height;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineColor && this._elms.lineColor.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this11 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this11.options.attribute.link.content;\n case 2:\n _this11.attributeLink = _context3.sent;\n table = _this11._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this11.options.attribute.link.content.splice(i, 1);\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this11.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this12.options.attribute.vr.content;\n case 2:\n _this12.attributeVr = _context6.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this12.options.attribute.vr.content.splice(i, 1);\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this12.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this13 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, heightBoxElm, heightElm, heightConfirmElm, heightModeData, heightModeObject, heightModeDataLegpElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!this._error) {\n _context7.next = 2;\n break;\n }\n return _context7.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n }\n if (!state) {\n _context7.next = 61;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var _loop9 = function _loop9(i) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(i + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.positions[i].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.positions[i].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AttackArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.positions[i].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AttackArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.positions[i].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n AttackArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var i = 0; i < _this.options.positions.length; i++) {\n _loop9(i);\n }\n };\n _context7.next = 9;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '箭头属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this13.name = _this13.name.trim();\n if (!_this13.name) {\n _this13.name = '未命名对象';\n }\n _this13.options.label.position = {\n lng: _this13.label.position[0],\n lat: _this13.label.position[1],\n alt: _this13.label.position[2]\n };\n _this13.originalOptions = _this13.deepCopyObj(_this13.options);\n _this13._DialogObject.close();\n _this13.Dialog.confirmCallBack && _this13.Dialog.confirmCallBack(_this13.originalOptions);\n },\n resetCallBack: function resetCallBack() {\n _this13.reset();\n _this13.Dialog.resetCallBack && _this13.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this13.Dialog.removeCallBack && _this13.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n var spreadState = _this13.options.spreadState;\n _this13.positionEditing = false;\n setTimeout(function () {\n _this13.options.spreadState = spreadState;\n _this13.reset();\n }, 10);\n _this13.Dialog.closeCallBack && _this13.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this13.options.show = show;\n _this13.originalOptions.show = show;\n _this13.show = show;\n _this13.Dialog.showCallBack && _this13.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this13.positionEditing = !_this13.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n AttackArrowObject.nodeEdit(_this13, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 9:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' attackArrow';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('attack-arrow-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n AttackArrowObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightConfirmElm = this._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (this.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 58;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = this._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n i = 0;\n case 42:\n if (!(i < heightModeData.length)) {\n _context7.next = 50;\n break;\n }\n if (!(heightModeData[i].key == this.heightMode)) {\n _context7.next = 47;\n break;\n }\n heightModeDataLegpElm.value = heightModeData[i].value;\n heightModeObject.legp_searchActive(heightModeData[i].value);\n return _context7.abrupt(\"break\", 50);\n case 47:\n i++;\n _context7.next = 42;\n break;\n case 50:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < heightModeData.length; _i5++) {\n if (heightModeData[_i5].value === heightModeDataLegpElm.value) {\n _this13.heightMode = heightModeData[_i5].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this13.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n this._elms.height = heightElm;\n this._elms.heightBox = heightBoxElm;\n this._elms.heightMode = heightModeDataLegpElm;\n this._elms.heightConfirm = heightConfirmElm;\n this._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this13.operate.positionEditing) {\n _this13.positionEditing = false;\n _this13.height = _this13.height + Number(heightElm.value);\n } else {\n AttackArrowObject.closeNodeEdit(_this13);\n _this13.heightMode = _this13.heightMode;\n setTimeout(function () {\n _this13.height = _this13.height + Number(heightElm.value);\n }, 100);\n }\n });\n case 58:\n setTimeout(function () {\n _this13.attributeLink = _this13.options.attribute.link.content;\n _this13.attributeVr = _this13.options.attribute.vr.content;\n _this13.cameraSelect && _this13.cameraSelect();\n _this13.goodsSelect && _this13.goodsSelect();\n var tagData = _this13.attributeSelect;\n var attributeElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this13.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this13.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this13.options['area-unit'];\n for (var _i8 = 0; _i8 < unitData.length; _i8++) {\n if (unitData[_i8].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i8].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < unitData.length; _i9++) {\n if (unitData[_i9].value === unitDataLegpElm.value) {\n _this13.areaUnit = unitData[_i9].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this13.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this13.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this13._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 62;\n break;\n case 61:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 62:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this14 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineColor = this.originalOptions.line.color;\n this.lineWidth = this.originalOptions.line.width;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n for (var i = 0; i < this.options.positions.length; i++) {\n if (this._elms.lng && this._elms.lng[i]) {\n this._elms.lng[i].innerHTML = this.options.positions[i].lng.toFixed(8);\n }\n if (this._elms.lat && this._elms.lat[i]) {\n this._elms.lat[i].innerHTML = this.options.positions[i].lat.toFixed(8);\n }\n if (this._elms.alt && this._elms.alt[i]) {\n this._elms.alt[i].innerHTML = Number(this.options.height.toFixed(2));\n }\n }\n this.heightMode = this.heightMode;\n for (var _i12 = 0; _i12 < this.nodePoints.length; _i12++) {\n this.sdk.viewer.entities.remove(this.nodePoints[_i12]);\n }\n this.previous = null;\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n var spreadState = this.options.spreadState;\n this.removeAnimate();\n setTimeout(function () {\n _this14.loop = _this14.options.loop;\n _this14.spreadState = spreadState;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n }, 200);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.removeAnimate();\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.entity && this.sdk.viewer.entities.remove(this.entity);\n this.label && this.label.remove();\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 9;\n return this.sdk.removeIncetance(this.options.id);\n case 9:\n _context8.next = 11;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 11:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0] && this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n ground,\n i,\n height,\n a,\n _i13,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n if (!this._error) {\n _context9.next = 3;\n break;\n }\n return _context9.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 18;\n break;\n }\n _context9.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context9.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 51;\n break;\n case 25:\n positionArray = [];\n _context9.t0 = this.heightMode;\n _context9.next = _context9.t0 === 0 ? 29 : _context9.t0 === '0' ? 29 : _context9.t0 === 1 ? 31 : _context9.t0 === '1' ? 31 : _context9.t0 === 2 ? 33 : _context9.t0 === '2' ? 33 : 35;\n break;\n case 29:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 31:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 33:\n ground = true;\n return _context9.abrupt(\"break\", 35);\n case 35:\n if (!ground) {\n _context9.next = 48;\n break;\n }\n i = 0;\n case 37:\n if (!(i < this.options.positions.length)) {\n _context9.next = 46;\n break;\n }\n _context9.next = 40;\n return this.getClampToHeight(this.options.positions[i]);\n case 40:\n height = _context9.sent;\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 43:\n i++;\n _context9.next = 37;\n break;\n case 46:\n _context9.next = 49;\n break;\n case 48:\n if (this.positionsH) {\n for (_i13 = 0; _i13 < this.positionsH.length; _i13++) {\n positionArray.push(this.positionsH[_i13].x, this.positionsH[_i13].y, this.positionsH[_i13].z);\n }\n }\n case 49:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 51:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this15 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this15.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this16 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.removeAnimate();\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n if (status === true) {\n var _Cesium$Cartesian;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var array = [];\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i14 = 0; _i14 < positions.length; _i14++) {\n center.x - positions[_i14].x;\n disparity.push({\n x: center.x - positions[_i14].x,\n y: center.y - positions[_i14].y,\n z: center.z - positions[_i14].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n newpositions = [];\n for (var _i15 = 0; _i15 < disparity.length; _i15++) {\n newpositions.push({\n x: cartesian.x - disparity[_i15].x,\n y: cartesian.y - disparity[_i15].y,\n z: cartesian.z - disparity[_i15].z\n });\n }\n // this.label.position = [position84.lng, position84.lat, position84.alt]\n _this16.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i16 = 0; _i16 < disparity.length; _i16++) {\n var pos3 = {\n x: cartesian.x - disparity[_i16].x,\n y: cartesian.y - disparity[_i16].y,\n z: cartesian.z - disparity[_i16].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i16] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i16]) {\n _this16._elms.lng[_i16].innerHTML = _this16.options.positions[_i16].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i16]) {\n _this16._elms.lat[_i16].innerHTML = _this16.options.positions[_i16].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this16.positions)\n };\n _this16.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this16.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this16.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this16.positionEditing = false;\n } else {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i17 = 0; _i17 < disparity.length; _i17++) {\n var pos3 = {\n x: cartesian.x - disparity[_i17].x,\n y: cartesian.y - disparity[_i17].y,\n z: cartesian.z - disparity[_i17].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i17] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i17]) {\n _this16._elms.lng[_i17].innerHTML = _this16.options.positions[_i17].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i17]) {\n _this16._elms.lat[_i17].innerHTML = _this16.options.positions[_i17].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this16.positions)\n };\n _this16.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var position84 = [];\n if (newpositions.length > 0) {\n for (var _i18 = 0; _i18 < newpositions.length; _i18++) {\n position84.push(_this.cartesian3Towgs84(newpositions[_i18], _this.sdk.viewer));\n }\n } else {\n for (var _i19 = 0; _i19 < positions.length; _i19++) {\n position84.push(_this.cartesian3Towgs84(positions[_i19], _this.sdk.viewer));\n }\n }\n _this.renewPositions(position84);\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n if (!this.previous) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n } else {\n this.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.previous.positions);\n }\n var position84 = [];\n for (var _i20 = 0; _i20 < this.positions.length; _i20++) {\n position84.push(_this.cartesian3Towgs84(this.positions[_i20], _this.sdk.viewer));\n }\n _this.renewPositions(position84);\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, true);\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n var _Cesium$Cartesian2;\n var cartesian = Cesium.Cartesian3.fromDegrees(v.position.lng, v.position.lat, v.position.alt);\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var array = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i21 = 0; _i21 < positions.length; _i21++) {\n disparity.push({\n x: center.x - positions[_i21].x,\n y: center.y - positions[_i21].y,\n z: center.z - positions[_i21].z\n });\n }\n var newpositions = [];\n for (var _i22 = 0; _i22 < disparity.length; _i22++) {\n newpositions.push({\n x: cartesian.x - disparity[_i22].x,\n y: cartesian.y - disparity[_i22].y,\n z: cartesian.z - disparity[_i22].z\n });\n }\n this.label.position = [v.position.lng, v.position.lat, v.position.alt];\n var positions84 = [];\n if (newpositions.length > 0) {\n for (var _i23 = 0; _i23 < newpositions.length; _i23++) {\n positions84.push(this.cartesian3Towgs84(newpositions[_i23], this.sdk.viewer));\n }\n }\n var arr = this.computeAttackArrow(positions84);\n if (arr.length == 0) {\n return;\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this17 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var positions = this.computeAttackArrow(this.options.positions);\n if (positions.length == 0) {\n return;\n }\n var points = [[]];\n for (var i = 0; i < positions.length; i++) {\n var _position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n points[0].push([_position.lng, _position.lat]);\n }\n var position = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this17.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }, {\n key: \"spreadTime\",\n get: function get() {\n return this.options.spreadTime;\n },\n set: function set(v) {\n var spreadTime = Number(v);\n if (isNaN(spreadTime)) {\n spreadTime = 3000;\n } else if (spreadTime < 500) {\n spreadTime = 500;\n } else if (spreadTime > 9999999) {\n spreadTime = 9999999;\n }\n this.options.spreadTime = spreadTime;\n if (this.spreadState) {\n this.setSpreadProgressByTime();\n }\n this._elms.spreadTime && this._elms.spreadTime.forEach(function (item) {\n item.value = spreadTime;\n });\n }\n }, {\n key: \"loop\",\n get: function get() {\n return this.options.loop;\n },\n set: function set(v) {\n this.options.loop = v;\n if (this.TweenAnimate) {\n if (v) {\n this.TweenAnimate.repeat(Infinity);\n } else {\n this.TweenAnimate.repeat();\n }\n }\n this._elms.loop && this._elms.loop.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"spreadState\",\n get: function get() {\n return this.options.spreadState;\n },\n set: function set(v) {\n this.options.spreadState = v;\n if (this.TweenAnimate) {\n if (v) {\n this.lineEdit = false;\n this.setSpreadProgressByTime(this.TweenAnimate._object.distance / this.TweenAnimate._valuesEnd.distance * this.spreadTime);\n } else {\n this.TweenAnimate.pause();\n }\n } else {\n if (v) {\n this.setSpreadProgressByTime();\n }\n }\n this._elms.spreadState && this._elms.spreadState.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"setSpreadProgressByTime\",\n value: function setSpreadProgressByTime() {\n var _this18 = this;\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (!this.entity) {\n return;\n }\n var that = this;\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n var AttackArrowArr = that.computeAttackArrow(that.options.positions);\n var arr;\n var lineArr;\n // if (arr.length >= 3) {\n // lineArr = [...arr, arr[0], arr[1]]\n // }\n // else {\n // lineArr = [...arr]\n // }\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n }\n var _getSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"getSdk\"])(),\n sdkP = _getSdk.sdkP,\n sdkD = _getSdk.sdkD;\n var thatP;\n if (sdkD && sdkP) {\n if (this.sdk === sdkD) {\n thatP = sdkP.entityMap.get(this.options.id);\n if (thatP && thatP.entity && thatP.entity.polygon && thatP.positionsH) {\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(thatP.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(thatP.positionsH), [thatP.positionsH[0], thatP.positionsH[1]]);\n }, false);\n }\n return;\n }\n }\n\n // this.entity.polygon.hierarchy = arr\n // this.entity.polyline.positions = lineArr\n\n var linePos84 = [[(that.options.positions[0].lng + that.options.positions[1].lng) / 2, (that.options.positions[0].lat + that.options.positions[1].lat) / 2]];\n for (var _i24 = 2; _i24 < that.options.positions.length; _i24++) {\n linePos84.push([that.options.positions[_i24].lng, that.options.positions[_i24].lat]);\n }\n var line = turf.lineString(linePos84);\n var distanceArray = [];\n for (var _i25 = 1; _i25 < linePos84.length; _i25++) {\n var from = turf.point(linePos84[_i25]);\n var to = turf.point(linePos84[_i25 - 1]);\n var d = turf.distance(from, to, {\n units: 'kilometers'\n });\n var od = distanceArray[distanceArray.length - 1] || 0;\n distanceArray.push(od + d);\n }\n var distance = turf.length(line, {\n units: 'kilometers'\n });\n var timeRatio = time / this.spreadTime;\n var m = 0;\n this.TweenAnimate = new TWEEN.Tween({\n distance: distance * timeRatio\n }).to({\n distance: distance\n }, this.spreadTime - time).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(function () {\n if (time) {\n _this18.setSpreadProgressByTime();\n } else {}\n }).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!(_this18.TweenAnimate._duration == Infinity)) {\n _context10.next = 2;\n break;\n }\n return _context10.abrupt(\"return\");\n case 2:\n m++;\n if (_this18.sdk.viewer) {\n _context10.next = 6;\n break;\n }\n _this18.removeAnimate();\n return _context10.abrupt(\"return\");\n case 6:\n setSpread(r);\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n return function (_x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }()).onStart(function () {\n _this18.options.spreadState = true;\n _this18._elms.spreadState && _this18._elms.spreadState.forEach(function (item) {\n item.checked = true;\n });\n }).onComplete(function (d) {\n _this18.removeAnimate();\n });\n if (this.spreadState) {\n this.TweenAnimate.start();\n } else {\n setSpread({\n distance: distance * timeRatio\n });\n }\n function setSpread(_x6) {\n return _setSpread.apply(this, arguments);\n }\n function _setSpread() {\n _setSpread = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(v) {\n var index, _i26, positions, _i27, sliced, coordinates;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (that.show) {\n _context11.next = 2;\n break;\n }\n return _context11.abrupt(\"return\");\n case 2:\n index = 2;\n _i26 = distanceArray.length - 2;\n case 4:\n if (!(_i26 >= 0)) {\n _context11.next = 12;\n break;\n }\n if (!(v.distance >= distanceArray[_i26])) {\n _context11.next = 9;\n break;\n }\n index = index + _i26 + 1;\n if (index > that.options.positions.length - 1) {\n index = that.options.positions.length - 1;\n }\n return _context11.abrupt(\"break\", 12);\n case 9:\n _i26--;\n _context11.next = 4;\n break;\n case 12:\n positions = [];\n for (_i27 = 0; _i27 < index; _i27++) {\n positions[_i27] = _objectSpread({}, that.options.positions[_i27]);\n }\n if (v.distance) {\n _context11.next = 18;\n break;\n }\n positions[index] = {\n lng: positions[1].lng,\n lat: positions[1].lat\n };\n _context11.next = 25;\n break;\n case 18:\n _context11.next = 20;\n return turf.lineSliceAlong(line, 0, v.distance, {\n units: 'kilometers'\n });\n case 20:\n sliced = _context11.sent;\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]);\n if (!positions[index]) {\n positions[index] = {};\n }\n positions[index].lng = coordinates[0];\n positions[index].lat = coordinates[1];\n case 25:\n // console.log('positions', positions)\n that.renewPositions(positions);\n case 26:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return _setSpread.apply(this, arguments);\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(that.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]);\n }, false);\n }\n\n // 移除动画\n }, {\n key: \"removeAnimate\",\n value: function removeAnimate() {\n this.spreadState = false;\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positionsH);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positionsH), [this.positionsH[0], this.positionsH[1]]);\n }\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(position84) {\n var _this19 = this;\n if (this._error || !this.sdk.viewer) {\n return;\n }\n var ground = false;\n var array = [];\n var positions = this.options.positions;\n if (position84) {\n positions = position84;\n }\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = this.computeAttackArrow(positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n var pos84 = [];\n for (var _i28 = 0; _i28 < positionsA.length; _i28++) {\n var _position2 = this.cartesian3Towgs84(positionsA[_i28], this.sdk.viewer);\n pos84.push(_position2);\n points[0].push([_position2.lng, _position2.lat]);\n }\n var position = this.cartesian3Towgs84(positionsA[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var height = 0;\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray2 = [];\n if (!ground && this.nodePoints.length == 0) {\n for (var _i29 = 0; _i29 < points[0].length; _i29++) {\n fromDegreesArray2.push(points[0][_i29][0], points[0][_i29][1], this.height + height);\n }\n this.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.height + height]);\n } else {\n this.positionsH = positionsA;\n setTimeout(function () {\n if (!_this19.sdk.viewer) {\n return;\n }\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this19.sdk.viewer.entities.values);\n _this19.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n _this19.label && (_this19.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n if (!this.spreadState) {\n this.options.areaByMeter = this.computeArea(pos84);\n this.areaUnit = this.areaUnit;\n }\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = that.computeAttackArrow(that.options.positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n for (var _i30 = 0; _i30 < positionsA.length; _i30++) {\n var _position3 = that.cartesian3Towgs84(positionsA[_i30], that.sdk.viewer);\n points[0].push([_position3.lng, _position3.lat]);\n }\n var position = that.cartesian3Towgs84(positionsA[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: that.height + height\n };\n }\n that.options.label.ground = ground;\n var fromDegreesArray2 = [];\n for (var _i31 = 0; _i31 < points[0].length; _i31++) {\n fromDegreesArray2.push(points[0][_i31][0], points[0][_i31][1], that.height + height);\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n that.entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n id: that.options.id,\n polygon: {\n hierarchy: !ground ? new Cesium.PolygonHierarchy(that.positionsH) : new Cesium.PolygonHierarchy(positionsA),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n AttackArrowObject.createLabel(that);\n var pos84 = [];\n for (var _i32 = 0; _i32 < positionsA.length; _i32++) {\n pos84.push(that.cartesian3Towgs84(positionsA[_i32], that.sdk.viewer));\n }\n that.options.areaByMeter = that.computeArea(pos84);\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n that.spreadState = that.options.spreadState;\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee8(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee8$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context12.stop();\n }\n }, _callee8);\n }));\n function createLabel(_x7) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop10 = function _loop10() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop11 = function _loop11() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop11();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n if (elements[i].className.indexOf('blur') !== -1) {\n ventType = 'blur';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop10()) continue;\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n setTimeout(function () {\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee9() {\n var objectsToExclude, _i33, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee9$(_context13) {\n while (1) switch (_context13.prev = _context13.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _i33 = 0;\n case 2:\n if (!(_i33 < that.options.positions.length)) {\n _context13.next = 11;\n break;\n }\n _context13.next = 5;\n return that.getClampToHeight(that.options.positions[_i33], objectsToExclude);\n case 5:\n height = _context13.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i33,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i33].lng, that.options.positions[_i33].lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 8:\n _i33++;\n _context13.next = 2;\n break;\n case 11:\n case \"end\":\n return _context13.stop();\n }\n }, _callee9);\n }));\n return function createNodePoints() {\n return _ref2.apply(this, arguments);\n };\n }(); // for (let i = 0; i < that.options.positions.length; i++) {\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: Cesium.Cartesian3.fromDegrees(that.options.positions[i].lng, that.options.positions[i].lat),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // },\n // })\n // nodePoints.push(entity)\n // }\n that.removeAnimate();\n YJ.Measure.SetMeasureStatus(true);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var moveEvent = function moveEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n that.renewPositions();\n }\n that.tip.setPosition(cartesian, movement.position ? movement.position.x : movement.endPosition.x, movement.position ? movement.position.y : movement.endPosition.y);\n };\n var leftEvent = function leftEvent(movement, cartesian) {\n moveEvent(movement, cartesian);\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n var index = selectPoint.index;\n if (selectPoint.index === that.options.positions.length - 1) {\n index = index + 1;\n }\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: index,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, that.options.positions[selectPoint.index].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n selectPoint = entity;\n originalPosition = that.options.positions[selectPoint.index];\n that.nodePoints.splice(selectPoint.index, 0, entity);\n if (index < that.options.positions.length) {\n selectPoint = null;\n that.tip.set_text('请选择一个顶点,右键取消');\n } else {\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n }\n that.renewPositions();\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position || movement.endPosition);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n originalPosition = that.cartesian3Towgs84(pick.id.position.getValue(), that.sdk.viewer);\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键确认,右键结束,CTRL+右键撤销');\n }\n }\n };\n var rightEvent = function rightEvent(movement, cartesian) {\n that.event.mouse_move(function () {});\n that.event.mouse_left(function () {});\n that.event.mouse_right(function () {});\n that.event.gesture_pinck_start(function () {});\n if (selectPoint) {\n if (!originalPosition) {\n that.options.positions.pop();\n } else {\n that.options.positions[selectPoint.index] = originalPosition;\n if (that.options.positions.length > 3 && selectPoint.index === that.options.positions.length - 1) {\n that.options.positions.splice(selectPoint.index + 1, 1);\n }\n }\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n }\n that.heightMode = that.heightMode;\n that.previous = null;\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(that.positionsH);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]);\n }, false);\n var points = [[]];\n var pos84 = [];\n for (var i = 0; i < that.positionsH.length; i++) {\n var _position4 = that.cartesian3Towgs84(that.positionsH[i], that.sdk.viewer);\n pos84.push(_position4);\n points[0].push([_position4.lng, _position4.lat]);\n }\n var position = that.cartesian3Towgs84(that.positionsH[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n setTimeout(function () {\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(moveEvent);\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions.pop();\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n that.nodePoints.pop();\n if (!selectPoint.index) {\n // selectPoint = null\n } else if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = selectPoint.index - 1;\n }\n }\n that.renewPositions();\n }\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n createNodePoints();\n }, 200);\n }\n }, 0);\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (AttackArrowObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQXR0YWNrQXJyb3dPYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQXR0YWNrQXJyb3dPYmplY3QvaW5kZXguanM/N2EyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog566t5aS0XHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgeyBodG1sLCBjc3MgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZGF0YWxpc3QnO1xyXG5pbXBvcnQgeyBnZXRGb250TGlzdCwgZ2V0Rm9udEZhbWlseU5hbWUgfSBmcm9tICcuLi8uLi9FbGVtZW50L2ZvbnRTZWxlY3QnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBnZXRTZGsgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbi8vIGltcG9ydCBFZGl0UGFydGljbGUgZnJvbSBcIi4uLy4uL01vZGVsQ29udHJvbGxlci9FZGl0UGFydGljbGVcIjtcclxuXHJcbmNsYXNzIEF0dGFja0Fycm93T2JqZWN0IGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDnrq3lpLTpnaJcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPSdyZ2JhKDI1NSwgMCwgMCwgMC41KScge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodE1vZGU9MntudW1iZXJ9IOmrmOW6puaooeW8j++8iDDvvJrmtbfmi5Tpq5jluqbvvJsx77ya55u45a+55Zyw6KGo77ybMu+8muS+nemZhOaooeW8j++8iVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFyZWFVbml0PSflubPmlrnnsbMnIHtzdHJpbmd9IOmdouenr+WNleS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUge29iamVjdH0g6L655qGGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS53aWR0aD0yIHtzdHJpbmd9IOi+ueahhuWuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUuY29sb3I9XCJyZ2JhKDE1NSwgMTU1LCAxMjQsIDAuODkpXCIge3N0cmluZ30g6L655qGG6aKc6ImyXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcHJlYWRTdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g5Yqo55S7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG9vcD1mYWxzZSB7bG9vcH0g5Yqo55S76YeN5aSNXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3ByZWFkVGltZT0zMDAwIHtudW1iZXJ9IOWKqOeUu+aMgee7reaXtumVvyjmr6vnp5IpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwudGV4dCB7c3RyaW5nfSDmoIfnrb7mlofmnKxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IHtvYmplY3R9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgXCIjZmYwMDAwODBcIlxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUgPSBvcHRpb25zLmxpbmUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gKCh0aGlzLm9wdGlvbnMubGluZS53aWR0aCB8fCB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9PT0gMCkgPyB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA6IDMpXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHRoaXMub3B0aW9ucy5saW5lLmNvbG9yIHx8ICdyZ2JhKDI1NSwgMCwgMCwgMSknXHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gb3B0aW9uc1snYXJlYS11bml0J10gfHwgJ+W5s+aWueexsydcclxuICAgIHRoaXMuZW50aXR5XHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLm9wZXJhdGUgPSB7fVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5vcHRpb25zLmxvb3AgPSBvcHRpb25zLmxvb3AgfHwgZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZSA9IG9wdGlvbnMuc3ByZWFkU3RhdGUgfHwgZmFsc2VcclxuICAgIHRoaXMuc3ByZWFkVGltZSA9IG9wdGlvbnMuc3ByZWFkVGltZVxyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCBvcHRpb25zLmxhYmVsLmZvbnRTaXplID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZm9udFNpemUgOiAyMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6IChvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA6IDQsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAob3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwKSA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMubGFiZWwubmVhciB8fCBvcHRpb25zLmxhYmVsLm5lYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wb3NpdGlvbnMgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHRoaXMuX2Vycm9yID0gJ+eureWktOmdouacgOWwkemcgOimgeS4ieS4quWdkOagh++8gSdcclxuICAgICAgY29uc29sZS53YXJuKHRoaXMuX2Vycm9yKVxyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLl9lcnJvcixcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaGVpZ2h0ICYmIHRoaXMub3B0aW9ucy5oZWlnaHQgIT09IDApIHtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHRcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChoZWlnaHQgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgICAgQXR0YWNrQXJyb3dPYmplY3QuY3JlYXRlKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnQXR0YWNrQXJyb3dPYmplY3QnXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMuZW50aXR5LnBvbHlnb24pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IFtdXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSAodiB8fCB2ID09IDApID8gdiA6IDJcclxuICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgICAgQXR0YWNrQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdCh0aGlzKVxyXG4gICAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9uc0gsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFsxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFxyXG4gICAgICApXHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfmtbfmi5Tpq5jluqYnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+ebuOWvueWcsOihqCdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfkvp3pmYTmqKHlnosnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgICB0aGlzLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlID0gaGVpZ2h0TW9kZU5hbWUpXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lXHJcbiAgICAgICkpXHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDIpKVxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9uc0gsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFsxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDXHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS5jb2xvclxyXG4gIH1cclxuICBzZXQgbGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdiB8fCAncmdiYSgyNTUsIDAsIDAsIDAuNSknXHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5bGluZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMubGluZS5jb2xvcilcclxuICAgIGlmICh0aGlzLl9lbG1zLmxpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMubGluZS5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICB9XHJcbiAgc2V0IGxpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9ICgodiB8fCB2ID09PSAwKSA/IHYgOiAzKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUud2lkdGggPSB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgJiYgdGhpcy5fZWxtcy5saW5lQ29sb3IuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hcmVhXHJcbiAgfVxyXG5cclxuICBzZXQgYXJlYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXJlYSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYSAmJiB0aGlzLl9lbG1zLmFyZWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhVW5pdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgfVxyXG4gIHNldCBhcmVhVW5pdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhVW5pdCAmJiB0aGlzLl9lbG1zLmFyZWFVbml0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyKSB7XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93ICYmICF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcbiAgc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB2ckRlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVHb29kcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVHb29kcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgIH1cclxuICAgIHRoYXQucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgbGV0IHBvc2l0aW9uc0EgPSB0aGF0LmNvbXB1dGVBdHRhY2tBcnJvdyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgaWYgKHBvc2l0aW9uc0EubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvaW50cyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbaV0sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVswXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cyk7XHJcbiAgICAvLyBsZXQgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKTtcclxuXHJcblxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuXHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgbGF0OiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgYWx0OiB0aGF0LmhlaWdodCArIGhlaWdodCB9XHJcbiAgICB9XHJcbiAgICB0aGF0Lm9wdGlvbnMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcblxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzWzBdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2goXHJcbiAgICAgICAgcG9pbnRzWzBdW2ldWzBdLFxyXG4gICAgICAgIHBvaW50c1swXVtpXVsxXSxcclxuICAgICAgICB0aGF0LmhlaWdodCArIGhlaWdodFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhhdC5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGF0LnBvc2l0aW9uc0ggPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5MilcclxuXHJcbiAgICB0aGF0LmVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgIGhpZXJhcmNoeTogIWdyb3VuZCA/IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0LnBvc2l0aW9uc0gpIDogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHBvc2l0aW9uc0EpLFxyXG4gICAgICAgIHBlclBvc2l0aW9uSGVpZ2h0OiAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgfSxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGF0LnBvc2l0aW9uc0gsIHRoYXQucG9zaXRpb25zSFswXSwgdGhhdC5wb3NpdGlvbnNIWzFdXSxcclxuICAgICAgICB3aWR0aDogdGhhdC5vcHRpb25zLmxpbmUud2lkdGgsXHJcbiAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5vcHRpb25zLmxpbmUuY29sb3IpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6ICFncm91bmQgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgYXJjVHlwZTogIWdyb3VuZCA/IENlc2l1bS5BcmNUeXBlLk5PTkUgOiBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQyxcclxuICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgICB0aGF0LnNkay5fZW50aXR5WkluZGV4KytcclxuICAgIEF0dGFja0Fycm93T2JqZWN0LmNyZWF0ZUxhYmVsKHRoYXQpXHJcblxyXG4gICAgbGV0IHBvczg0ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3M4NC5wdXNoKHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVtpXSwgdGhhdC5zZGsudmlld2VyKSlcclxuICAgIH1cclxuICAgIHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciA9IHRoYXQuY29tcHV0ZUFyZWEocG9zODQpO1xyXG4gICAgc3dpdGNoICh0aGF0Lm9wdGlvbnNbJ2FyZWEtdW5pdCddKSB7XHJcbiAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5bmz5pa55Y2D57GzJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICB9XHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcblxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5zcHJlYWRTdGF0ZSA9IHRoYXQub3B0aW9ucy5zcHJlYWRTdGF0ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUxhYmVsKHRoYXQpIHtcclxuICAgIC8vIOagh+etvlxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6IHRoYXQub3B0aW9ucy5uYW1lLFxyXG4gICAgICBmb250U2l6ZTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5OiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSxcclxuICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgcGl4ZWxPZmZzZXQ6IHRoYXQub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICBsaW5lQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IsXHJcbiAgICAgIGxpbmVXaWR0aDogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMubGFiZWwubmVhcixcclxuICAgICAgZmFyOiB0aGF0Lm9wdGlvbnMubGFiZWwuZmFyLFxyXG4gICAgICBncm91bmQ6IHRoYXQub3B0aW9ucy5sYWJlbC5ncm91bmQsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g57yW6L6R5qGGXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KCkge1xyXG4gICAgICAgIGxldCB0YWJsZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3BhdGlhbC1pbmZvLXRhYmxlJylbMF1cclxuICAgICAgICBsZXQgdEJvZHlFbG0gPSB0YWJsZUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICB0Qm9keUVsbS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZyA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgICB0ci5jbGFzc05hbWUgPSAndHInXHJcbiAgICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2kgKyAxfTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxuZyBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsYXQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWx0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgIGBcclxuICAgICAgICAgIGxldCBsbmdCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmcnKVswXVxyXG4gICAgICAgICAgbGV0IGxuZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgbG5nLmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgICBsZXQgbG5nSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsbmdJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxuZ0lucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxuZ0lucHV0Lm1pbiA9IC0xODBcclxuICAgICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGxhdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhdCcpWzBdXHJcbiAgICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KVxyXG4gICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICAgIGxldCBsYXRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGxhdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGxhdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgbGF0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgbGF0SW5wdXQubWluID0gLTkwXHJcbiAgICAgICAgICBsYXRJbnB1dC5tYXggPSA5MFxyXG4gICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGFsdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsdCcpWzBdXHJcbiAgICAgICAgICBsZXQgYWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIGxldCBhbHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGFsdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICAgIGFsdElucHV0Lm1heCA9IDk5OTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSAoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpXHJcblxyXG4gICAgICAgICAgbG5nQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZ0lucHV0KVxyXG4gICAgICAgICAgICBsbmdJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQXR0YWNrQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nID0gTnVtYmVyKE51bWJlcihsbmdJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nLmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodCA9IF90aGlzLmhlaWdodFxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBsYXRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0SW5wdXQpXHJcbiAgICAgICAgICAgIGxhdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBBdHRhY2tBcnJvd09iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQgPSBOdW1iZXIoTnVtYmVyKGxhdElucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGFsdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdElucHV0KVxyXG4gICAgICAgICAgICBhbHRJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQXR0YWNrQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcihhbHRJbnB1dC52YWx1ZSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0LmlubmVySFRNTCA9IE51bWJlcihfdGhpcy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZy5wdXNoKGxuZylcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXQucHVzaChsYXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXRJbnB1dC5wdXNoKGxhdElucHV0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQucHVzaChhbHRJbnB1dClcclxuICAgICAgICAgIHRCb2R5RWxtLmFwcGVuZENoaWxkKHRyKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfnrq3lpLTlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLmxhYmVsLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMubGFiZWwucG9zaXRpb25bMV0sIGFsdDogdGhpcy5sYWJlbC5wb3NpdGlvblsyXSB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHNwcmVhZFN0YXRlID0gdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlID0gc3ByZWFkU3RhdGVcclxuICAgICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDkuozmrKHnvJbovpHlm57osINcclxuICAgICAgICBzZWNvbmRhcnlFZGl0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIEF0dGFja0Fycm93T2JqZWN0Lm5vZGVFZGl0KHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgYXR0YWNrQXJyb3cnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG5cclxuICAgICAgLy8g5Yib5bu65qCH562+6aG1XHJcbiAgICAgIGxldCB0YWJzRWxtID0gbmV3IGN5X3RhYnMoJ2F0dGFjay1hcnJvdy1vYmplY3QtZWRpdC10YWJzJywgdW5kZWZpbmVkLCB0aGlzLnNkaylcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuY29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxpbmVDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5saW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxMaW5lQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0XCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yRW5kXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIEF0dGFja0Fycm93T2JqZWN0LkV2ZW50QmluZGluZyh0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvciA9IFtsaW5lY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xhYmVsbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIGxldCBoZWlnaHRCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtYm94JylbMF1cclxuICAgICAgbGV0IGhlaWdodEVsbSA9IGhlaWdodEJveEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICBsZXQgaGVpZ2h0Q29uZmlybUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1jb25maXJtJylbMF1cclxuICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gMTBcclxuICAgICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgaGVpZ2h0Qm94RWxtICYmIChoZWlnaHRCb3hFbG0uY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3ggZGlzYWJsZWQnKTtcclxuICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgaGVpZ2h0TW9kZURhdGEgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICB2YWx1ZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICBrZXk6ICcwJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAgdmFsdWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAga2V5OiAnMScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgIGtleTogJzInLFxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgICBsZXQgaGVpZ2h0TW9kZU9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdoZWlnaHQtbW9kZS1ib3gnXHJcbiAgICAgICAgKVswXSxcclxuICAgICAgICAnLmhlaWdodC1tb2RlJ1xyXG4gICAgICApXHJcbiAgICAgIGlmIChoZWlnaHRNb2RlT2JqZWN0KSB7XHJcbiAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaChoZWlnaHRNb2RlRGF0YSlcclxuICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtbW9kZScpWzBdXHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGVpZ2h0TW9kZURhdGFbaV0ua2V5ID09IHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgICAgICAgIGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGVpZ2h0TW9kZURhdGFbaV0udmFsdWUgPT09IGhlaWdodE1vZGVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IGhlaWdodE1vZGVEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBoZWlnaHRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0ID0gaGVpZ2h0RWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggPSBoZWlnaHRCb3hFbG1cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gPSBoZWlnaHRDb25maXJtRWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0ID0gaGVpZ2h0TW9kZU9iamVjdFxyXG5cclxuICAgICAgICBoZWlnaHRDb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBBdHRhY2tBcnJvd09iamVjdC5jbG9zZU5vZGVFZGl0KHRoaXMpXHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgICAgICBsZXQgdGFnRGF0YSA9IHRoaXMuYXR0cmlidXRlU2VsZWN0XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QtYm94JylbMF1cclxuICAgICAgICBpZiAoYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgICBsZXQgbGVncE9iamVjdCA9IGxlZ3AoYXR0cmlidXRlRWxtLCBcIi5hdHRyaWJ1dGUtc2VsZWN0XCIpXHJcbiAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0ua2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSkge1xyXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSA9IHRhZ0RhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHRhZ0RhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGFnRGF0YVtpXS52YWx1ZSA9PT0gYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0YWdEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW3tcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5bmz5pa55Y2D57GzJyxcclxuICAgICAgICAgIHZhbHVlOiAn5bmz5pa55Y2D57GzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S6qScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S6qSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflhazpobcnLFxyXG4gICAgICAgICAgdmFsdWU6ICflhazpobcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQtYm94JylbMF0sIFwiLmlucHV0LXNlbGVjdC11bml0XCIpXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodW5pdERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJlYVVuaXQgPSB1bml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG5cclxuICAgICAgfSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5hcmVhID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYXJlYVxyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmdbaV0pIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0W2ldKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYXRbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdFtpXSkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuYWx0W2ldLmlubmVySFRNTCA9IE51bWJlcih0aGlzLm9wdGlvbnMuaGVpZ2h0LnRvRml4ZWQoMikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXMgPSBudWxsXHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcblxyXG4gICAgbGV0IHNwcmVhZFN0YXRlID0gdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlXHJcbiAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9vcCA9IHRoaXMub3B0aW9ucy5sb29wXHJcbiAgICAgIHRoaXMuc3ByZWFkU3RhdGUgPSBzcHJlYWRTdGF0ZVxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZW50aXR5ICYmIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0gJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluaygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rKGxpbmspIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgdXJsOiBsaW5rXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIF9hZGRScigpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgdXJsOiB2clxyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiDpo57liLBcclxuKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGdyb3VuZFxyXG4gICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyb3VuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldKVxyXG4gICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnNIKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zaXRpb25zSC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2godGhpcy5wb3NpdGlvbnNIW2ldLngsIHRoaXMucG9zaXRpb25zSFtpXS55LCB0aGlzLnBvc2l0aW9uc0hbaV0ueilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIC8vIHZhciB1ZSA9IFVFLmdldEVkaXRvcignYXBwJyk7XHJcbiAgICByaWNoVGV4dC5vcGVuKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLm5hbWUsIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQpXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSAoY29udGVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMC45KWApKVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICBsZXQgZGlzcGFyaXR5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlyc3Rwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgIGFycmF5LnB1c2goW2ZpcnN0cG9zaXRpb24ubG5nLCBmaXJzdHBvc2l0aW9uLmxhdF0pXHJcbiAgICAgIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFthcnJheV0pO1xyXG4gICAgICB2YXIgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgICBsZXQgY2VudGVyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoLi4uY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueFxyXG4gICAgICAgIGRpc3Bhcml0eS5wdXNoKHtcclxuICAgICAgICAgIHg6IGNlbnRlci54IC0gcG9zaXRpb25zW2ldLngsXHJcbiAgICAgICAgICB5OiBjZW50ZXIueSAtIHBvc2l0aW9uc1tpXS55LFxyXG4gICAgICAgICAgejogY2VudGVyLnogLSBwb3NpdGlvbnNbaV0ueixcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbi55IC0gZGlzcGFyaXR5W2ldLnksXHJcbiAgICAgICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3Bvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdCwgcG9zaXRpb244NC5hbHRdXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3Bhcml0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHBvczMgPSB7XHJcbiAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbi55IC0gZGlzcGFyaXR5W2ldLnksXHJcbiAgICAgICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaChwb3MzKVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zMywgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nW2ldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdFtpXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3cG9zaXRpb25zXHJcbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgcG9zMyA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2gocG9zMylcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZWxtcy5sYXRbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IG5ld3Bvc2l0aW9uc1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gW11cclxuICAgICAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3cG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChuZXdwb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcy5yZW5ld1Bvc2l0aW9ucyhwb3NpdGlvbjg0KVxyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zSClcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnNILCBfdGhpcy5wb3NpdGlvbnNIWzBdLCBfdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLmVudGl0eSAmJiB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDEpYClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcblxyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gWy4uLnRoaXMucHJldmlvdXMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpdGlvbjg0ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGlzLnBvc2l0aW9uc1tpXSwgX3RoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgIH1cclxuICAgICAgX3RoaXMucmVuZXdQb3NpdGlvbnMocG9zaXRpb244NClcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnNILCBfdGhpcy5wb3NpdGlvbnNIWzBdLCBfdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRXZlbnRCaW5kaW5nKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0Ll9lbG1zW20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2JsdXInKSAhPT0gLTEpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2JsdXInXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50Lmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgIEV2ZW50W3RdKGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBub2RlRWRpdCh0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoYXQucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAgICAgICB0aGF0LmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAgICAgICBsZXQgb3JpZ2luYWxQb3NpdGlvblxyXG5cclxuICAgICAgICBsZXQgbW92ZUV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoYXQucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24gPyBtb3ZlbWVudC5wb3NpdGlvbi54IDogbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24gPyBtb3ZlbWVudC5wb3NpdGlvbi55IDogbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIG1vdmVFdmVudChtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gc2VsZWN0UG9pbnQuaW5kZXhcclxuICAgICAgICAgICAgaWYgKHNlbGVjdFBvaW50LmluZGV4ID09PSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxhdCwgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0uYWx0KSxcclxuICAgICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IGVudGl0eVxyXG5cclxuICAgICAgICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdXHJcbiAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIGVudGl0eSlcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+ivt+mAieaLqeS4gOS4qumhtueCue+8jOWPs+mUruWPlua2iCcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdKVxyXG4gICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0LnJlbmV3UG9zaXRpb25zKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcGljayA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uIHx8IG1vdmVtZW50LmVuZFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHBpY2sgJiYgcGljay5pZCAmJiBwaWNrLmlkLm5hbWUgJiYgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwaWNrLmlkLnBvc2l0aW9uLmdldFZhbHVlKCksIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMuc3BsaWNlKHBpY2suaWQuaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZShwaWNrLmlkKVxyXG4gICAgICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCflt6bplK7noa7orqTvvIzlj7PplK7nu5PmnZ/vvIxDVFJMK+WPs+mUruaSpOmUgCcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJpZ2h0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFvcmlnaW5hbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gb3JpZ2luYWxQb3NpdGlvblxyXG4gICAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA+IDMgJiYgc2VsZWN0UG9pbnQuaW5kZXggPT09IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXggKyAxLCAxKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhhdC5fZWxtcy5sbmcgJiYgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXMubGF0ICYmIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XSkge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICAgIHRoYXQucHJldmlvdXMgPSBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSBmYWxzZVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnNIKVxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gWy4uLnRoYXQucG9zaXRpb25zSCwgdGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnBvc2l0aW9uc0hbMV1dXHJcbiAgICAgICAgfSwgZmFsc2UpXHJcblxyXG5cclxuICAgICAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgICAgIGxldCBwb3M4NCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LnBvc2l0aW9uc0gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQodGhhdC5wb3NpdGlvbnNIW2ldLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBwb3M4NC5wdXNoKHBvc2l0aW9uKVxyXG4gICAgICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGF0LnBvc2l0aW9uc0hbMF0sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cylcclxuICAgICAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pXHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICB0aGF0XHJcbiAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodChyaWdodEV2ZW50KVxyXG5cclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZShtb3ZlRXZlbnQpXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodF9rZXlib2FyZF9jdHJsKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1t0aGF0Lm5vZGVQb2ludHMubGVuZ3RoIC0gMV0pXHJcbiAgICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnBvcCgpXHJcbiAgICAgICAgICAgICAgaWYgKCFzZWxlY3RQb2ludC5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0UG9pbnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdFBvaW50LmluZGV4ID09PSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gdGhhdC5ub2RlUG9pbnRzW3NlbGVjdFBvaW50LmluZGV4IC0gMV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RQb2ludC5pbmRleCA9IHNlbGVjdFBvaW50LmluZGV4IC0gMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhhdC5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgICAgICByaWdodEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxlZnRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY3JlYXRlTm9kZVBvaW50cygpXHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKCkge1xyXG4gICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCwgaGVpZ2h0KSxcclxuICAgICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgIC8vICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgLy8gICAgIGluZGV4OiBpLFxyXG4gICAgICAgIC8vICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KSxcclxuICAgICAgICAvLyAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgLy8gICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgLy8gICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgIC8vICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgLy8gICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgLy8gICAgIH0sXHJcbiAgICAgICAgLy8gICB9KVxyXG4gICAgICAgIC8vICAgbm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNsb3NlTm9kZUVkaXQodGhhdCkge1xyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICB0aGF0LnRpcCA9IG51bGxcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGF0LnBpY2tpbmcgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbih2KSB7XHJcbiAgICBsZXQgY2FydGVzaWFuID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModi5wb3NpdGlvbi5sbmcsIHYucG9zaXRpb24ubGF0LCB2LnBvc2l0aW9uLmFsdClcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgbGV0IGRpc3Bhcml0eSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBhcnJheS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgZmlyc3Rwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICBhcnJheS5wdXNoKFtmaXJzdHBvc2l0aW9uLmxuZywgZmlyc3Rwb3NpdGlvbi5sYXRdKVxyXG4gICAgdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSk7XHJcbiAgICB2YXIgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgbGV0IGNlbnRlciA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKC4uLmNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgIHg6IGNlbnRlci54IC0gcG9zaXRpb25zW2ldLngsXHJcbiAgICAgICAgeTogY2VudGVyLnkgLSBwb3NpdGlvbnNbaV0ueSxcclxuICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3Bhcml0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBuZXdwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YucG9zaXRpb24ubG5nLCB2LnBvc2l0aW9uLmxhdCwgdi5wb3NpdGlvbi5hbHRdXHJcblxyXG4gICAgbGV0IHBvc2l0aW9uczg0ID0gW11cclxuICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld3Bvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uczg0LnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChuZXdwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhcnIgPSB0aGlzLmNvbXB1dGVBdHRhY2tBcnJvdyhwb3NpdGlvbnM4NClcclxuICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoYXJyKVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbLi4uYXJyXVxyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNvbXB1dGVBdHRhY2tBcnJvdyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBwb2ludHMgPSBbW11dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgIHBvaW50c1swXS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb2ludHMpO1xyXG4gICAgLy8gbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbik7XHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pXHJcblxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnBvc3RSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcigocGVyY2VudGFnZSkgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhzaXRlSW5mb1Bvc2l0aW9uKTtcclxuICAgICAgICBpZiAod2lucG9zKSB7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5sZWZ0ID0gKHdpbnBvcy54ICsgb3B0aW9ucy54KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBzcHJlYWRUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zcHJlYWRUaW1lXHJcbiAgfVxyXG5cclxuICBzZXQgc3ByZWFkVGltZSh2KSB7XHJcbiAgICBsZXQgc3ByZWFkVGltZSA9IE51bWJlcih2KVxyXG4gICAgaWYgKGlzTmFOKHNwcmVhZFRpbWUpKSB7XHJcbiAgICAgIHNwcmVhZFRpbWUgPSAzMDAwXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzcHJlYWRUaW1lIDwgNTAwKSB7XHJcbiAgICAgIHNwcmVhZFRpbWUgPSA1MDBcclxuICAgIH0gZWxzZSBpZiAoc3ByZWFkVGltZSA+IDk5OTk5OTkpIHtcclxuICAgICAgc3ByZWFkVGltZSA9IDk5OTk5OTlcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5zcHJlYWRUaW1lID0gc3ByZWFkVGltZVxyXG4gICAgaWYgKHRoaXMuc3ByZWFkU3RhdGUpIHtcclxuICAgICAgdGhpcy5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZSgpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnNwcmVhZFRpbWUgJiYgdGhpcy5fZWxtcy5zcHJlYWRUaW1lLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHNwcmVhZFRpbWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbG9vcCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG9vcFxyXG4gIH1cclxuICBzZXQgbG9vcCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubG9vcCA9IHZcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnJlcGVhdChJbmZpbml0eSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5yZXBlYXQoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxvb3AgJiYgdGhpcy5fZWxtcy5sb29wLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBzcHJlYWRTdGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGVcclxuICB9XHJcbiAgc2V0IHNwcmVhZFN0YXRlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZSA9IHZcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUodGhpcy5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSAvIHRoaXMuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2UgKiB0aGlzLnNwcmVhZFRpbWUpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucGF1c2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5zcHJlYWRTdGF0ZSAmJiB0aGlzLl9lbG1zLnNwcmVhZFN0YXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRpbWUgPSAwKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuXHJcblxyXG5cclxuICAgIGxldCBBdHRhY2tBcnJvd0FyciA9IHRoYXQuY29tcHV0ZUF0dGFja0Fycm93KHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICBsZXQgYXJyXHJcbiAgICBsZXQgbGluZUFyclxyXG4gICAgLy8gaWYgKGFyci5sZW5ndGggPj0gMykge1xyXG4gICAgLy8gICBsaW5lQXJyID0gWy4uLmFyciwgYXJyWzBdLCBhcnJbMV1dXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgbGluZUFyciA9IFsuLi5hcnJdXHJcbiAgICAvLyB9XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuVHdlZW5BbmltYXRlKVxyXG4gICAgICB0aGlzLlR3ZWVuQW5pbWF0ZSA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeyBzZGtQLCBzZGtEIH0gPSBnZXRTZGsoKVxyXG4gICAgbGV0IHRoYXRQXHJcbiAgICBpZiAoc2RrRCAmJiBzZGtQKSB7XHJcbiAgICAgIGlmICh0aGlzLnNkayA9PT0gc2RrRCkge1xyXG4gICAgICAgIHRoYXRQID0gc2RrUC5lbnRpdHlNYXAuZ2V0KHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICBpZiAodGhhdFAgJiYgdGhhdFAuZW50aXR5ICYmIHRoYXRQLmVudGl0eS5wb2x5Z29uICYmIHRoYXRQLnBvc2l0aW9uc0gpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0UC5wb3NpdGlvbnNIKVxyXG4gICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoYXRQLnBvc2l0aW9uc0gsIHRoYXRQLnBvc2l0aW9uc0hbMF0sIHRoYXRQLnBvc2l0aW9uc0hbMV1dXHJcbiAgICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IGFyclxyXG4gICAgLy8gdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbGluZUFyclxyXG5cclxuICAgIGxldCBsaW5lUG9zODQgPSBbWyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyArIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMV0ubG5nKSAvIDIsICh0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCArIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMV0ubGF0KSAvIDJdXVxyXG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxpbmVQb3M4NC5wdXNoKFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRdKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhsaW5lUG9zODQpO1xyXG5cclxuICAgIGxldCBkaXN0YW5jZUFycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZVBvczg0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmcm9tID0gdHVyZi5wb2ludChsaW5lUG9zODRbaV0pO1xyXG4gICAgICBsZXQgdG8gPSB0dXJmLnBvaW50KGxpbmVQb3M4NFtpIC0gMV0pO1xyXG4gICAgICBsZXQgZCA9IHR1cmYuZGlzdGFuY2UoZnJvbSwgdG8sIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgbGV0IG9kID0gZGlzdGFuY2VBcnJheVtkaXN0YW5jZUFycmF5Lmxlbmd0aCAtIDFdIHx8IDBcclxuICAgICAgZGlzdGFuY2VBcnJheS5wdXNoKG9kICsgZClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlzdGFuY2UgPSB0dXJmLmxlbmd0aChsaW5lLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICBsZXQgdGltZVJhdGlvID0gdGltZSAvIHRoaXMuc3ByZWFkVGltZVxyXG4gICAgbGV0IG0gPSAwXHJcbiAgICB0aGlzLlR3ZWVuQW5pbWF0ZSA9IG5ldyBUV0VFTi5Ud2Vlbih7IGRpc3RhbmNlOiBkaXN0YW5jZSAqIHRpbWVSYXRpbyB9KS50byh7IGRpc3RhbmNlOiBkaXN0YW5jZSB9LCB0aGlzLnNwcmVhZFRpbWUgLSB0aW1lKS5lYXNpbmcoVFdFRU4uRWFzaW5nLkxpbmVhci5Ob25lKS5yZXBlYXQodGhpcy5vcHRpb25zLmxvb3AgPyBJbmZpbml0eSA6IDApLm9uUmVwZWF0KCgpID0+IHtcclxuICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKClcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pLm9uVXBkYXRlKGFzeW5jIChyLCBhKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZS5fZHVyYXRpb24gPT0gSW5maW5pdHkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBtKytcclxuICAgICAgaWYgKCF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHNldFNwcmVhZChyKVxyXG4gICAgfSkub25TdGFydCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZSA9IHRydWVcclxuICAgICAgdGhpcy5fZWxtcy5zcHJlYWRTdGF0ZSAmJiB0aGlzLl9lbG1zLnNwcmVhZFN0YXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9KS5vbkNvbXBsZXRlKChkKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICB9KVxyXG4gICAgaWYgKHRoaXMuc3ByZWFkU3RhdGUpIHtcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUuc3RhcnQoKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNldFNwcmVhZCh7IGRpc3RhbmNlOiBkaXN0YW5jZSAqIHRpbWVSYXRpbyB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNldFNwcmVhZCh2KSB7XHJcbiAgICAgIGlmICghdGhhdC5zaG93KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluZGV4ID0gMlxyXG4gICAgICBmb3IgKGxldCBpID0gZGlzdGFuY2VBcnJheS5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh2LmRpc3RhbmNlID49IGRpc3RhbmNlQXJyYXlbaV0pIHtcclxuICAgICAgICAgIGluZGV4ID0gaW5kZXggKyBpICsgMVxyXG4gICAgICAgICAgaWYgKGluZGV4ID4gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggLSAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW2ldID0geyAuLi50aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXYuZGlzdGFuY2UpIHtcclxuICAgICAgICBwb3NpdGlvbnNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgbG5nOiBwb3NpdGlvbnNbMV0ubG5nLFxyXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbnNbMV0ubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzbGljZWQgPSBhd2FpdCB0dXJmLmxpbmVTbGljZUFsb25nKGxpbmUsIDAsIHYuZGlzdGFuY2UsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZXMgPSBbLi4uc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW3NsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXV1cclxuICAgICAgICBpZiAoIXBvc2l0aW9uc1tpbmRleF0pIHtcclxuICAgICAgICAgIHBvc2l0aW9uc1tpbmRleF0gPSB7fVxyXG4gICAgICAgIH1cclxuICAgICAgICBwb3NpdGlvbnNbaW5kZXhdLmxuZyA9IGNvb3JkaW5hdGVzWzBdXHJcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XS5sYXQgPSBjb29yZGluYXRlc1sxXVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjb25zb2xlLmxvZygncG9zaXRpb25zJywgcG9zaXRpb25zKVxyXG4gICAgICB0aGF0LnJlbmV3UG9zaXRpb25zKHBvc2l0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnNIKVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gWy4uLnRoYXQucG9zaXRpb25zSCwgdGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnBvc2l0aW9uc0hbMV1dXHJcbiAgICB9LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIC8vIOenu+mZpOWKqOeUu1xyXG4gIHJlbW92ZUFuaW1hdGUoKSB7XHJcbiAgICB0aGlzLnNwcmVhZFN0YXRlID0gZmFsc2VcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBUV0VFTi5yZW1vdmUodGhpcy5Ud2VlbkFuaW1hdGUpXHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlID0gbnVsbFxyXG4gICAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhpcy5wb3NpdGlvbnNIKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbLi4udGhpcy5wb3NpdGlvbnNILCB0aGlzLnBvc2l0aW9uc0hbMF0sIHRoaXMucG9zaXRpb25zSFsxXV1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWdkOagh1xyXG4gIHJlbmV3UG9zaXRpb25zKHBvc2l0aW9uODQpIHtcclxuICAgIGlmICh0aGlzLl9lcnJvciB8fCAhdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBpZiAocG9zaXRpb244NCkge1xyXG4gICAgICBwb3NpdGlvbnMgPSBwb3NpdGlvbjg0XHJcbiAgICB9XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG5cclxuICAgIGxldCBwb3NpdGlvbnNBID0gdGhpcy5jb21wdXRlQXR0YWNrQXJyb3cocG9zaXRpb25zKVxyXG4gICAgaWYgKHBvc2l0aW9uc0EubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgbGV0IHBvczg0ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgcG9zODQucHVzaChwb3NpdGlvbilcclxuICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVswXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb2ludHMpXHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0pKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICBpZiAoIWdyb3VuZCAmJiB0aGlzLm5vZGVQb2ludHMubGVuZ3RoID09IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHNbMF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKFxyXG4gICAgICAgICAgcG9pbnRzWzBdW2ldWzBdLFxyXG4gICAgICAgICAgcG9pbnRzWzBdW2ldWzFdLFxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgKyBoZWlnaHRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3NpdGlvbnNIID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheTIpXHJcblxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvc2l0aW9uc0ggPSBwb3NpdGlvbnNBXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2RrLnZpZXdlcikge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSkudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSwgMTAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+aKleW9semdouenr1xyXG4gICAgaWYgKCF0aGlzLnNwcmVhZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciA9IHRoaXMuY29tcHV0ZUFyZWEocG9zODQpXHJcbiAgICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLmFyZWFVbml0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJvbURlZ3JlZXNBcnJheVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXR0YWNrQXJyb3dPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQXVCQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBNklBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekhBO0FBQUE7QUFBQTtBQTBIQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBM0NBO0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBM2VBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNmVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFVQTtBQUFBO0FBUEE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBcEdBO0FBQUE7QUFBQTtBQUFBO0FBc0dBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFBQTtBQXlMQTtBQUNBO0FBQUE7QUFwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFtVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFyd0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBKzZCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJFQTtBQUFBO0FBQUE7QUFxRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQS9GQTtBQUFBO0FBS0E7QUEyRkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQW1MQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFkQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFsQkE7QUFBQTtBQUFBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWtDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF5WkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/AttackArrowObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseLayer/ArcgisImagery/index.js": /*!******************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseLayer/ArcgisImagery/index.js ***! \******************************************************************/ /*! exports provided: ArcgisWXImagery, ArcgisBLUEImagery, ArcgisLWImagery */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArcgisWXImagery\", function() { return ArcgisWXImagery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArcgisBLUEImagery\", function() { return ArcgisBLUEImagery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArcgisLWImagery\", function() { return ArcgisLWImagery; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseLayer/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 19:00\r\n * @description:index\r\n * @update: 2023-11-20 19:00\r\n */\n\n\n\nvar ArcgisLayer = /*#__PURE__*/function (_BaseLayer) {\n function ArcgisLayer(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, ArcgisLayer);\n return _callSuper(this, ArcgisLayer, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(ArcgisLayer, _BaseLayer);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(ArcgisLayer, [{\n key: \"type\",\n get: function get() {\n return \"layer\";\n }\n }, {\n key: \"createArcGis\",\n value: function () {\n var _createArcGis = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(url) {\n var imageryProvider, i, layer;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context.next = 6;\n break;\n }\n _context.next = 3;\n return Cesium.ArcGisMapServerImageryProvider.fromUrl(url);\n case 3:\n imageryProvider = _context.sent;\n _context.next = 7;\n break;\n case 6:\n imageryProvider = new Cesium.ArcGisMapServerImageryProvider({\n url: url\n });\n case 7:\n if (this.options.hasOwnProperty(\"layer_index\")) {\n this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider, this.options.layer_index);\n } else {\n this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider);\n }\n this.entity._id = this.options.id;\n for (i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(layer);\n }\n }\n this.show = this.options.show;\n this.alpha = this.options.alpha;\n this.brightness = this.options.brightness;\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_8__[\"setSplitDirection\"])(0, this.options.id);\n }\n case 14:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function createArcGis(_x) {\n return _createArcGis.apply(this, arguments);\n }\n return createArcGis;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\nvar ArcgisWXImagery = /*#__PURE__*/function (_ArcgisLayer) {\n function ArcgisWXImagery(sdk, options) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, ArcgisWXImagery);\n _this = _callSuper(this, ArcgisWXImagery, [sdk, options]);\n _this.createArcGis(\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\");\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(ArcgisWXImagery, _ArcgisLayer);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(ArcgisWXImagery);\n}(ArcgisLayer);\nvar ArcgisBLUEImagery = /*#__PURE__*/function (_ArcgisLayer2) {\n function ArcgisBLUEImagery(sdk, options) {\n var _this2;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, ArcgisBLUEImagery);\n _this2 = _callSuper(this, ArcgisBLUEImagery, [sdk, options]);\n _this2.createArcGis(\"https://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer\");\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(ArcgisBLUEImagery, _ArcgisLayer2);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(ArcgisBLUEImagery);\n}(ArcgisLayer);\nvar ArcgisLWImagery = /*#__PURE__*/function (_ArcgisLayer3) {\n function ArcgisLWImagery(sdk, options) {\n var _this3;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, ArcgisLWImagery);\n _this3 = _callSuper(this, ArcgisLWImagery, [sdk, options]);\n _this3.createArcGis(\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\");\n return _this3;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(ArcgisLWImagery, _ArcgisLayer3);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(ArcgisLWImagery);\n}(ArcgisLayer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvQXJjZ2lzSW1hZ2VyeS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXNlU291cmNlL0Jhc2VMYXllci9BcmNnaXNJbWFnZXJ5L2luZGV4LmpzPzMxMGEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTExLTIwIDE5OjAwXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMTEtMjAgMTk6MDBcclxuICovXHJcblxyXG5pbXBvcnQgQmFzZUxheWVyIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcblxyXG5jbGFzcyBBcmNnaXNMYXllciBleHRlbmRzIEJhc2VMYXllciB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiBcImxheWVyXCJcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZUFyY0dpcyh1cmwpIHtcclxuICAgIGxldCBpbWFnZXJ5UHJvdmlkZXJcclxuICAgIGlmIChOdW1iZXIoQ2VzaXVtLlZFUlNJT04uc3BsaXQoJy4nKVsxXSkgPj0gMTA3KSB7XHJcbiAgICAgIGltYWdlcnlQcm92aWRlciA9IGF3YWl0IENlc2l1bS5BcmNHaXNNYXBTZXJ2ZXJJbWFnZXJ5UHJvdmlkZXIuZnJvbVVybCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGltYWdlcnlQcm92aWRlciA9IG5ldyBDZXNpdW0uQXJjR2lzTWFwU2VydmVySW1hZ2VyeVByb3ZpZGVyKHtcclxuICAgICAgICB1cmxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KFwibGF5ZXJfaW5kZXhcIikpIHtcclxuICAgICAgdGhpcy5lbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5hZGRJbWFnZXJ5UHJvdmlkZXIoaW1hZ2VyeVByb3ZpZGVyLCB0aGlzLm9wdGlvbnMubGF5ZXJfaW5kZXgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmFkZEltYWdlcnlQcm92aWRlcihpbWFnZXJ5UHJvdmlkZXIsKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkuX2lkID0gdGhpcy5vcHRpb25zLmlkXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlciAmJiB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgJiYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSA9PT0gJ2ZsdycgfHwgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnand3JykpIHtcclxuICAgICAgICBsZXQgbGF5ZXIgPSB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldXHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMucmFpc2VUb1RvcChsYXllcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIHRoaXMuYWxwaGEgPSB0aGlzLm9wdGlvbnMuYWxwaGFcclxuICAgIHRoaXMuYnJpZ2h0bmVzcyA9IHRoaXMub3B0aW9ucy5icmlnaHRuZXNzXHJcblxyXG4gICAgaWYodGhpcy5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQXJjZ2lzV1hJbWFnZXJ5IGV4dGVuZHMgQXJjZ2lzTGF5ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucykge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY3JlYXRlQXJjR2lzKFwiaHR0cHM6Ly9zZXJ2aWNlcy5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL1dvcmxkX0ltYWdlcnkvTWFwU2VydmVyXCIpXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBBcmNnaXNCTFVFSW1hZ2VyeSBleHRlbmRzIEFyY2dpc0xheWVyIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMpIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLmNyZWF0ZUFyY0dpcyhcImh0dHBzOi8vbWFwLmdlb3EuY24vYXJjZ2lzL3Jlc3Qvc2VydmljZXMvQ2hpbmFPbmxpbmVTdHJlZXRQdXJwbGlzaEJsdWUvTWFwU2VydmVyXCIpXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBBcmNnaXNMV0ltYWdlcnkgZXh0ZW5kcyBBcmNnaXNMYXllciB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zKSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5jcmVhdGVBcmNHaXMoXCJodHRwczovL3NlcnZpY2VzLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvV29ybGRfU3RyZWV0X01hcC9NYXBTZXJ2ZXJcIilcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7QXJjZ2lzV1hJbWFnZXJ5LCBBcmNnaXNCTFVFSW1hZ2VyeSwgQXJjZ2lzTFdJbWFnZXJ5fVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE3QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVEE7QUEwQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseLayer/ArcgisImagery/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseLayer/GdImagery/index.js": /*!**************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseLayer/GdImagery/index.js ***! \**************************************************************/ /*! exports provided: GDLWImagery, GDWXImagery, GDSLImagery */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GDLWImagery\", function() { return GDLWImagery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GDWXImagery\", function() { return GDWXImagery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GDSLImagery\", function() { return GDSLImagery; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseLayer/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 19:18\r\n * @description:index\r\n * @update: 2023-11-20 19:18\r\n */\nvar GdImagery = /*#__PURE__*/function (_BaseLayer) {\n function GdImagery(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, GdImagery);\n return _callSuper(this, GdImagery, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(GdImagery, _BaseLayer);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(GdImagery, [{\n key: \"type\",\n get: function get() {\n return \"layer\";\n }\n }, {\n key: \"createGD\",\n value: function createGD(url) {\n var gdLayer = new Cesium.UrlTemplateImageryProvider({\n url: url,\n minimumLevel: 3,\n maximumLevel: 18,\n tilingScheme: this.amapMercatorTilingScheme()\n });\n if (this.options.hasOwnProperty(\"layer_index\")) {\n this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer, this.options.layer_index);\n } else {\n this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer);\n }\n this.entity._id = this.options.id;\n for (var i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n var layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(layer);\n }\n }\n this.show = this.options.show;\n this.alpha = this.options.alpha;\n this.brightness = this.options.brightness;\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_6__[\"setSplitDirection\"])(0, this.options.id);\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\nvar GDLWImagery = /*#__PURE__*/function (_GdImagery) {\n function GDLWImagery(earth) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, GDLWImagery);\n _this = _callSuper(this, GDLWImagery, [earth, options]);\n _this.createGD(\"https://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8\");\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(GDLWImagery, _GdImagery);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(GDLWImagery);\n}(GdImagery);\nvar GDWXImagery = /*#__PURE__*/function (_GdImagery2) {\n function GDWXImagery(earth) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, GDWXImagery);\n _this2 = _callSuper(this, GDWXImagery, [earth, options]);\n _this2.createGD(\"https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}\");\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(GDWXImagery, _GdImagery2);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(GDWXImagery);\n}(GdImagery);\nvar GDSLImagery = /*#__PURE__*/function (_GdImagery3) {\n function GDSLImagery(earth) {\n var _this3;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, GDSLImagery);\n _this3 = _callSuper(this, GDSLImagery, [earth, options]);\n _this3.createGD(\"https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}\");\n return _this3;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(GDSLImagery, _GdImagery3);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(GDSLImagery);\n}(GdImagery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvR2RJbWFnZXJ5L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZUxheWVyL0dkSW1hZ2VyeS9pbmRleC5qcz80OTc0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlTGF5ZXIgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuXHJcbi8qKlxyXG4gKiBAbmFtZTogaW5kZXhcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMy0xMS0yMCAxOToxOFxyXG4gKiBAZGVzY3JpcHRpb27vvJppbmRleFxyXG4gKiBAdXBkYXRlOiAyMDIzLTExLTIwIDE5OjE4XHJcbiAqL1xyXG5jbGFzcyBHZEltYWdlcnkgZXh0ZW5kcyBCYXNlTGF5ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gXCJsYXllclwiXHJcbiAgfVxyXG5cclxuICBjcmVhdGVHRCh1cmwpIHtcclxuICAgIGxldCBnZExheWVyID0gbmV3IENlc2l1bS5VcmxUZW1wbGF0ZUltYWdlcnlQcm92aWRlcih7XHJcbiAgICAgIHVybCxcclxuICAgICAgbWluaW11bUxldmVsOiAzLFxyXG4gICAgICBtYXhpbXVtTGV2ZWw6IDE4LFxyXG4gICAgICB0aWxpbmdTY2hlbWU6IHRoaXMuYW1hcE1lcmNhdG9yVGlsaW5nU2NoZW1lKClcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImxheWVyX2luZGV4XCIpKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKGdkTGF5ZXIsIHRoaXMub3B0aW9ucy5sYXllcl9pbmRleClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuYWRkSW1hZ2VyeVByb3ZpZGVyKGdkTGF5ZXIsKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkuX2lkID0gdGhpcy5vcHRpb25zLmlkXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlciAmJiB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgJiYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSA9PT0gJ2ZsdycgfHwgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnand3JykpIHtcclxuICAgICAgICBsZXQgbGF5ZXIgPSB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldXHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMucmFpc2VUb1RvcChsYXllcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIHRoaXMuYWxwaGEgPSB0aGlzLm9wdGlvbnMuYWxwaGFcclxuICAgIHRoaXMuYnJpZ2h0bmVzcyA9IHRoaXMub3B0aW9ucy5icmlnaHRuZXNzXHJcblxyXG4gICAgaWYodGhpcy5vcHRpb25zLnNob3cpIHtcclxuICAgICAgIFxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBHRExXSW1hZ2VyeSBleHRlbmRzIEdkSW1hZ2VyeSB7XHJcbiAgY29uc3RydWN0b3IoZWFydGgsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoZWFydGgsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5jcmVhdGVHRChcImh0dHBzOi8vd2Vic3QwMi5pcy5hdXRvbmF2aS5jb20vYXBwbWFwdGlsZT94PXt4fSZ5PXt5fSZ6PXt6fSZsYW5nPXpoX2NuJnNpemU9MSZzY2FsZT0xJnN0eWxlPThcIilcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEdEV1hJbWFnZXJ5IGV4dGVuZHMgR2RJbWFnZXJ5IHtcclxuICBjb25zdHJ1Y3RvcihlYXJ0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihlYXJ0aCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLmNyZWF0ZUdEKFwiaHR0cHM6Ly93ZWJzdDAyLmlzLmF1dG9uYXZpLmNvbS9hcHBtYXB0aWxlP3N0eWxlPTYmeD17eH0meT17eX0mej17en1cIilcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEdEU0xJbWFnZXJ5IGV4dGVuZHMgR2RJbWFnZXJ5IHtcclxuICBjb25zdHJ1Y3RvcihlYXJ0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihlYXJ0aCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLmNyZWF0ZUdEKFwiaHR0cHM6Ly93ZWJyZDAyLmlzLmF1dG9uYXZpLmNvbS9hcHBtYXB0aWxlP2xhbmc9emhfY24mc2l6ZT0xJnNjYWxlPTEmc3R5bGU9OCZ4PXt4fSZ5PXt5fSZ6PXt6fVwiKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtHRExXSW1hZ2VyeSwgR0RXWEltYWdlcnksIEdEU0xJbWFnZXJ5fVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFyQ0E7QUF5Q0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseLayer/GdImagery/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseLayer/Layer/index.js": /*!**********************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseLayer/Layer/index.js ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseLayer/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 15:51\r\n * @description:index\r\n * @update: 2023-11-20 15:51\r\n */\n\n\n\n\nvar Layer = /*#__PURE__*/function (_BaseLayer) {\n function Layer(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Layer);\n _this = _callSuper(this, Layer, [sdk, options]);\n _this.object = {};\n _this.options.host = _this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_8__[\"getHost\"])();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(Layer, _BaseLayer);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Layer, [{\n key: \"type\",\n get: function get() {\n return \"layer\";\n }\n }, {\n key: \"on\",\n value: function on() {\n return this.add();\n }\n }, {\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var res, text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.requestResource();\n case 2:\n res = _context.sent;\n _context.next = 5;\n return res.text();\n case 5:\n text = _context.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context.next = 11;\n break;\n }\n return _context.abrupt(\"return\", this.loadLayer(text.data));\n case 11:\n return _context.abrupt(\"return\", new Promise(function (res, reject) {\n reject(text.msg || text.message);\n }));\n case 12:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"loadLayer\",\n value: function () {\n var _loadLayer = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(data) {\n var url, o, params, layer, arr, _url, i, _layer;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n this.object = _objectSpread({}, data);\n url = \"\";\n if (this.object.url.startsWith(\"http\")) url = this.object.url;else {\n if (this.options.host) {\n o = new URL(this.object.url, this.options.host);\n url = o.href;\n } else url = this.object.url;\n }\n params = {\n url: url,\n mimmumLevel: this.object.minimumLevel,\n maximumLevel: this.object.maximumLevel,\n rectangle: new Cesium.Rectangle(Cesium.Math.toRadians(this.object.west), Cesium.Math.toRadians(this.object.south), Cesium.Math.toRadians(this.object.east), Cesium.Math.toRadians(this.object.north))\n }; // if (this.object.scheme_name === \"GeographicTilingScheme\") {\n // console.log(\"添加GeographicTilingScheme\")\n // params.tilingScheme = new Cesium.GeographicTilingScheme()\n // }\n // if (this.object.scheme_name === \"amapMercatorTilingScheme\") {\n // console.log(\"添加amapMercatorTilingScheme\")\n // params.tilingScheme = this.amapMercatorTilingScheme()\n // }\n _context2.t0 = this.object.scheme_name;\n _context2.next = _context2.t0 === \"amapMercatorTilingScheme\" ? 7 : _context2.t0 === \"\" ? 9 : 10;\n break;\n case 7:\n params.tilingScheme = this.amapMercatorTilingScheme();\n return _context2.abrupt(\"break\", 12);\n case 9:\n return _context2.abrupt(\"break\", 12);\n case 10:\n params.tilingScheme = new Cesium[this.object.scheme_name]();\n return _context2.abrupt(\"break\", 12);\n case 12:\n _context2.t1 = this.object.load_method;\n _context2.next = _context2.t1 === \"tms\" ? 15 : _context2.t1 === \"xyz\" ? 24 : _context2.t1 === \"wmts\" ? 26 : 28;\n break;\n case 15:\n if (this.object.url.endsWith(\"tilemapresource.xml\")) {\n arr = this.object.url.split(\"/\");\n arr.pop();\n _url = arr.join(\"/\");\n params.url = _url;\n }\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context2.next = 22;\n break;\n }\n _context2.next = 19;\n return Cesium.TileMapServiceImageryProvider.fromUrl(params.url, params);\n case 19:\n layer = _context2.sent;\n _context2.next = 23;\n break;\n case 22:\n layer = new Cesium.TileMapServiceImageryProvider(params);\n case 23:\n return _context2.abrupt(\"break\", 30);\n case 24:\n layer = new Cesium.UrlTemplateImageryProvider(params);\n return _context2.abrupt(\"break\", 30);\n case 26:\n layer = new Cesium.WebMapTileServiceImageryProvider(params);\n return _context2.abrupt(\"break\", 30);\n case 28:\n layer = new Cesium.UrlTemplateImageryProvider(params);\n return _context2.abrupt(\"break\", 30);\n case 30:\n if (!(!this.sdk || !this.sdk.viewer)) {\n _context2.next = 32;\n break;\n }\n return _context2.abrupt(\"return\");\n case 32:\n if (this.options.hasOwnProperty(\"layer_index\")) {\n this.entity = this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layer_index);\n } else {\n this.entity = this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer);\n }\n this.entity._id = this.options.id;\n for (i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n _layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(_layer);\n }\n }\n this.show = this.options.show;\n this.alpha = this.options.alpha;\n this.brightness = this.options.brightness;\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_11__[\"setSplitDirection\"])(0, this.options.id);\n }\n case 39:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function loadLayer(_x) {\n return _loadLayer.apply(this, arguments);\n }\n return loadLayer;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Layer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvTGF5ZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvTGF5ZXIvaW5kZXguanM/Y2QwMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMTEtMjAgMTU6NTFcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMy0xMS0yMCAxNTo1MVxyXG4gKi9cclxuaW1wb3J0IHsgZ2V0SG9zdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9vblwiO1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IEJhc2VMYXllciBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5cclxuXHJcbmNsYXNzIExheWVyIGV4dGVuZHMgQmFzZUxheWVyIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5vYmplY3QgPSB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmhvc3QgPSB0aGlzLm9wdGlvbnMuaG9zdCB8fCBnZXRIb3N0KClcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiBcImxheWVyXCJcclxuICB9XHJcblxyXG4gIG9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkKClcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBhZGQoKSB7XHJcbiAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5yZXF1ZXN0UmVzb3VyY2UoKVxyXG4gICAgbGV0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpXHJcbiAgICB0ZXh0ID0gSlNPTi5wYXJzZSh0ZXh0KVxyXG4gICAgaWYgKFswLCAyMDBdLmluY2x1ZGVzKHRleHQuY29kZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9hZExheWVyKHRleHQuZGF0YSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWplY3QpID0+IHtcclxuICAgICAgICByZWplY3QodGV4dC5tc2cgfHwgdGV4dC5tZXNzYWdlKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZExheWVyKGRhdGEpIHtcclxuICAgIHRoaXMub2JqZWN0ID0geyAuLi5kYXRhIH1cclxuICAgIGxldCB1cmwgPSBcIlwiXHJcbiAgICBpZiAodGhpcy5vYmplY3QudXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKVxyXG4gICAgICB1cmwgPSB0aGlzLm9iamVjdC51cmxcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QpIHtcclxuICAgICAgICBsZXQgbyA9IG5ldyBVUkwodGhpcy5vYmplY3QudXJsLCB0aGlzLm9wdGlvbnMuaG9zdClcclxuICAgICAgICB1cmwgPSBvLmhyZWZcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdXJsID0gdGhpcy5vYmplY3QudXJsXHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgbWltbXVtTGV2ZWw6IHRoaXMub2JqZWN0Lm1pbmltdW1MZXZlbCxcclxuICAgICAgbWF4aW11bUxldmVsOiB0aGlzLm9iamVjdC5tYXhpbXVtTGV2ZWwsXHJcbiAgICAgIHJlY3RhbmdsZTogbmV3IENlc2l1bS5SZWN0YW5nbGUoXHJcbiAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub2JqZWN0Lndlc3QpLFxyXG4gICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9iamVjdC5zb3V0aCksXHJcbiAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub2JqZWN0LmVhc3QpLFxyXG4gICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9iamVjdC5ub3J0aClcclxuICAgICAgKSxcclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLm9iamVjdC5zY2hlbWVfbmFtZSA9PT0gXCJHZW9ncmFwaGljVGlsaW5nU2NoZW1lXCIpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCLmt7vliqBHZW9ncmFwaGljVGlsaW5nU2NoZW1lXCIpXHJcbiAgICAvLyAgIHBhcmFtcy50aWxpbmdTY2hlbWUgPSBuZXcgQ2VzaXVtLkdlb2dyYXBoaWNUaWxpbmdTY2hlbWUoKVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHRoaXMub2JqZWN0LnNjaGVtZV9uYW1lID09PSBcImFtYXBNZXJjYXRvclRpbGluZ1NjaGVtZVwiKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwi5re75YqgYW1hcE1lcmNhdG9yVGlsaW5nU2NoZW1lXCIpXHJcbiAgICAvLyAgIHBhcmFtcy50aWxpbmdTY2hlbWUgPSB0aGlzLmFtYXBNZXJjYXRvclRpbGluZ1NjaGVtZSgpXHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IGxheWVyXHJcbiAgICAvLyBpZiAodGhpcy5vYmplY3QudGlsZXRyYW5zID09PSAndG1zJykge1xyXG4gICAgLy8gICBwYXJhbXMudXJsID0gcGFyYW1zLnVybC5zdWJzdHIoMCwgcGFyYW1zLnVybC5pbmRleE9mKCd7JykpXHJcbiAgICAvLyAgIHRtcyA9IG5ldyBDZXNpdW0uVGlsZU1hcFNlcnZpY2VJbWFnZXJ5UHJvdmlkZXIocGFyYW1zKVxyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdG1zID0gbmV3IENlc2l1bS5VcmxUZW1wbGF0ZUltYWdlcnlQcm92aWRlcihwYXJhbXMpXHJcbiAgICAvLyB9XHJcbiAgICBzd2l0Y2ggKHRoaXMub2JqZWN0LnNjaGVtZV9uYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJhbWFwTWVyY2F0b3JUaWxpbmdTY2hlbWVcIjpcclxuICAgICAgICBwYXJhbXMudGlsaW5nU2NoZW1lID0gdGhpcy5hbWFwTWVyY2F0b3JUaWxpbmdTY2hlbWUoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiXCI6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGFyYW1zLnRpbGluZ1NjaGVtZSA9IG5ldyBDZXNpdW1bdGhpcy5vYmplY3Quc2NoZW1lX25hbWVdKClcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5vYmplY3QubG9hZF9tZXRob2QpIHtcclxuICAgICAgY2FzZSBcInRtc1wiOlxyXG4gICAgICAgIGlmKHRoaXMub2JqZWN0LnVybC5lbmRzV2l0aChcInRpbGVtYXByZXNvdXJjZS54bWxcIikpe1xyXG4gICAgICAgICAgbGV0IGFyciA9IHRoaXMub2JqZWN0LnVybC5zcGxpdChcIi9cIilcclxuICAgICAgICAgIGFyci5wb3AoKVxyXG4gICAgICAgICAgbGV0IHVybCA9IGFyci5qb2luKFwiL1wiKVxyXG4gICAgICAgICAgcGFyYW1zLnVybCA9IHVybFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICAgICAgbGF5ZXIgPSBhd2FpdCBDZXNpdW0uVGlsZU1hcFNlcnZpY2VJbWFnZXJ5UHJvdmlkZXIuZnJvbVVybChwYXJhbXMudXJsLCBwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxheWVyID0gbmV3IENlc2l1bS5UaWxlTWFwU2VydmljZUltYWdlcnlQcm92aWRlcihwYXJhbXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwieHl6XCI6XHJcbiAgICAgICAgbGF5ZXIgPSBuZXcgQ2VzaXVtLlVybFRlbXBsYXRlSW1hZ2VyeVByb3ZpZGVyKHBhcmFtcylcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIndtdHNcIjpcclxuICAgICAgICBsYXllciA9IG5ldyBDZXNpdW0uV2ViTWFwVGlsZVNlcnZpY2VJbWFnZXJ5UHJvdmlkZXIocGFyYW1zKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGxheWVyID0gbmV3IENlc2l1bS5VcmxUZW1wbGF0ZUltYWdlcnlQcm92aWRlcihwYXJhbXMpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KFwibGF5ZXJfaW5kZXhcIikpIHtcclxuICAgICAgdGhpcy5lbnRpdHkgPVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5pbWFnZXJ5TGF5ZXJzLmFkZEltYWdlcnlQcm92aWRlcihsYXllciwgdGhpcy5vcHRpb25zLmxheWVyX2luZGV4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHkgPVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5pbWFnZXJ5TGF5ZXJzLmFkZEltYWdlcnlQcm92aWRlcihsYXllciwpXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5faWQgPSB0aGlzLm9wdGlvbnMuaWRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyICYmIHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSAmJiAodGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnZmx3JyB8fCB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgPT09ICdqd3cnKSkge1xyXG4gICAgICAgIGxldCBsYXllciA9IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV1cclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5yYWlzZVRvVG9wKGxheWVyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3cgPSB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gICAgdGhpcy5hbHBoYSA9IHRoaXMub3B0aW9ucy5hbHBoYVxyXG4gICAgdGhpcy5icmlnaHRuZXNzID0gdGhpcy5vcHRpb25zLmJyaWdodG5lc3NcclxuXHJcbiAgICBpZih0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFTQTtBQUlBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQWtCQTtBQUFBO0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseLayer/Layer/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseLayer/Layer3rdparty/index.js": /*!******************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseLayer/Layer3rdparty/index.js ***! \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseLayer/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 15:51\r\n * @description:index\r\n * @update: 2023-11-20 15:51\r\n */\n\n\nvar Layer3rdparty = /*#__PURE__*/function (_BaseLayer) {\n function Layer3rdparty(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Layer3rdparty);\n _this = _callSuper(this, Layer3rdparty, [sdk, options]);\n _this.loadLayer();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Layer3rdparty, _BaseLayer);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Layer3rdparty, [{\n key: \"type\",\n get: function get() {\n return \"layer\";\n }\n }, {\n key: \"loadLayer\",\n value: function loadLayer(data) {\n var params = {\n url: this.options.url,\n mimmumLevel: this.options.minimumLevel || 0,\n maximumLevel: this.options.maximumLevel || 20,\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7']\n };\n var layer;\n layer = new Cesium.UrlTemplateImageryProvider(params);\n if (this.options.hasOwnProperty(\"layer_index\")) {\n this.entity = this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layer_index);\n } else {\n this.entity = this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer);\n }\n this.entity._id = this.options.id;\n for (var i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n var _layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(_layer);\n }\n }\n this.show = this.options.show;\n this.alpha = this.options.alpha;\n this.brightness = this.options.brightness;\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_6__[\"setSplitDirection\"])(0, this.options.id);\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Layer3rdparty);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvTGF5ZXIzcmRwYXJ0eS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXNlU291cmNlL0Jhc2VMYXllci9MYXllcjNyZHBhcnR5L2luZGV4LmpzPzVkMjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTExLTIwIDE1OjUxXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMTEtMjAgMTU6NTFcclxuICovXHJcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuXHJcblxyXG5jbGFzcyBMYXllcjNyZHBhcnR5IGV4dGVuZHMgQmFzZUxheWVyIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5sb2FkTGF5ZXIoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gXCJsYXllclwiXHJcbiAgfVxyXG5cclxuICBsb2FkTGF5ZXIoZGF0YSkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxyXG4gICAgICBtaW1tdW1MZXZlbDogdGhpcy5vcHRpb25zLm1pbmltdW1MZXZlbCB8fCAwLFxyXG4gICAgICBtYXhpbXVtTGV2ZWw6IHRoaXMub3B0aW9ucy5tYXhpbXVtTGV2ZWwgfHwgMjAsXHJcbiAgICAgIHN1YmRvbWFpbnM6IFsnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnXSxcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbGF5ZXJcclxuXHJcbiAgICBsYXllciA9IG5ldyBDZXNpdW0uVXJsVGVtcGxhdGVJbWFnZXJ5UHJvdmlkZXIocGFyYW1zKVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImxheWVyX2luZGV4XCIpKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ID1cclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUuaW1hZ2VyeUxheWVycy5hZGRJbWFnZXJ5UHJvdmlkZXIobGF5ZXIsIHRoaXMub3B0aW9ucy5sYXllcl9pbmRleClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ID1cclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUuaW1hZ2VyeUxheWVycy5hZGRJbWFnZXJ5UHJvdmlkZXIobGF5ZXIsKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkuX2lkID0gdGhpcy5vcHRpb25zLmlkXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlciAmJiB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgJiYgKHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSA9PT0gJ2ZsdycgfHwgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnand3JykpIHtcclxuICAgICAgICBsZXQgbGF5ZXIgPSB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldXHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMucmFpc2VUb1RvcChsYXllcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIHRoaXMuYWxwaGEgPSB0aGlzLm9wdGlvbnMuYWxwaGFcclxuICAgIHRoaXMuYnJpZ2h0bmVzcyA9IHRoaXMub3B0aW9ucy5icmlnaHRuZXNzXHJcblxyXG4gICAgaWYodGhpcy5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExheWVyM3JkcGFydHlcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseLayer/Layer3rdparty/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseLayer/index.js": /*!****************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseLayer/index.js ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _transform_CoordTransform__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../../transform/CoordTransform */ \"./src/transform/CoordTransform.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 18:06\r\n * @description:index\r\n * @update: 2023-11-20 18:06\r\n */\n\n\n\n\n\n\n\nvar BaseLayer = /*#__PURE__*/function (_BaseSource) {\n function BaseLayer(sdk, options) {\n var _this;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, BaseLayer);\n _this = _callSuper(this, BaseLayer, [sdk, options]);\n _this.options.name = options.name || '未命名对象';\n _this.Dialog = _Dialog;\n _this._elms = {};\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(BaseLayer, _BaseSource);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(BaseLayer, [{\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n var _this$options$alpha, _this$options$brightn;\n _superPropGet(BaseLayer, \"setDefaultValue\", this, 3)([]);\n this.options.alpha = (_this$options$alpha = this.options.alpha) !== null && _this$options$alpha !== void 0 ? _this$options$alpha : 1;\n this.options.brightness = (_this$options$brightn = this.options.brightness) !== null && _this$options$brightn !== void 0 ? _this$options$brightn : 1;\n }\n }, {\n key: \"layerIndex\",\n get: function get() {\n return this.entity ? this.entity._layerIndex : undefined;\n }\n }, {\n key: \"layer_index\",\n get: function get() {\n return this.entity ? this.entity._layerIndex : undefined;\n }\n }, {\n key: \"brightness\",\n get: function get() {\n return this.options.brightness;\n },\n set: function set(v) {\n this.options.brightness = v;\n this.entity.brightness = v;\n }\n }, {\n key: \"alpha\",\n get: function get() {\n return this.options.alpha;\n },\n set: function set(v) {\n if (Number(v) > 1) v = 1;\n if (Number(v) < 0) v = 0;\n this.entity.alpha = v;\n this.options.alpha = v;\n this._elms.alpha && this._elms.alpha.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**@description 提高图层的一层层级\r\n * @method layerRaise\r\n * @param id {string} 图层id\r\n *@memberOf Layer\r\n * */\n }, {\n key: \"layerRaise\",\n value: function layerRaise(id) {\n this.sdk.viewer.imageryLayers.raise(this.entity);\n for (var i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n var layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(layer);\n }\n }\n this.options.layer_index = this.entity._layerIndex;\n return this.entity._layerIndex;\n }\n\n /**@description 降低图层的一层层级\r\n * @method layerLower\r\n * @memberOf Layer\r\n * */\n }, {\n key: \"layerLower\",\n value: function layerLower() {\n this.sdk.viewer.imageryLayers.lower(this.entity);\n this.options.layer_index = this.entity._layerIndex;\n return this.entity._layerIndex;\n }\n\n /**@description 置顶\r\n * @method layerToTop\r\n * @memberOf Layer\r\n * */\n }, {\n key: \"layerToTop\",\n value: function layerToTop() {\n this.sdk.viewer.imageryLayers.raiseToTop(this.entity);\n for (var i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) {\n if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) {\n var layer = this.sdk.viewer.imageryLayers._layers[i];\n this.sdk.viewer.imageryLayers.raiseToTop(layer);\n }\n }\n this.options.layer_index = this.entity._layerIndex;\n return this.entity._layerIndex;\n }\n\n /**@description 置底\r\n * @method lowerToBottom\r\n * @memberOf Layer\r\n * */\n }, {\n key: \"layerToBottom\",\n value: function layerToBottom() {\n this.sdk.viewer.imageryLayers.lowerToBottom(this.entity);\n this.options.layer_index = this.entity._layerIndex;\n return this.entity._layerIndex;\n }\n }, {\n key: \"remove\",\n value: function remove() {\n _superPropGet(BaseLayer, \"remove\", this, 3)([]);\n this.sdk.viewer.scene.imageryLayers.remove(this.entity);\n this.entity = null;\n }\n\n /**@description 定位\r\n * @method flyTo\r\n * @memberOf Layer\r\n * */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};\n if (!this._error) {\n _context.next = 3;\n break;\n }\n return _context.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context.next = 18;\n break;\n }\n _context.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context.next = 26;\n break;\n case 25:\n this.sdk.viewer.flyTo(this.entity);\n case 26:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }() /*高德的纠偏*/)\n }, {\n key: \"amapMercatorTilingScheme\",\n value: function amapMercatorTilingScheme(options) {\n var AmapMercatorTilingScheme = /*#__PURE__*/function (_Cesium$WebMercatorTi) {\n function AmapMercatorTilingScheme(options) {\n var _this2;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, AmapMercatorTilingScheme);\n _this2 = _callSuper(this, AmapMercatorTilingScheme, [options]);\n var projection = new Cesium.WebMercatorProjection();\n _this2._projection.project = function (cartographic, result) {\n result = _transform_CoordTransform__WEBPACK_IMPORTED_MODULE_10__[\"default\"].WGS84ToGCJ02(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude));\n result = projection.project(new Cesium.Cartographic(Cesium.Math.toRadians(result[0]), Cesium.Math.toRadians(result[1])));\n return new Cesium.Cartesian2(result.x, result.y);\n };\n _this2._projection.unproject = function (cartesian, result) {\n var cartographic = projection.unproject(cartesian);\n result = _transform_CoordTransform__WEBPACK_IMPORTED_MODULE_10__[\"default\"].GCJ02ToWGS84(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude));\n return new Cesium.Cartographic(Cesium.Math.toRadians(result[0]), Cesium.Math.toRadians(result[1]));\n };\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(AmapMercatorTilingScheme, _Cesium$WebMercatorTi);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(AmapMercatorTilingScheme);\n }(Cesium.WebMercatorTilingScheme);\n return new AmapMercatorTilingScheme(options);\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var _this3 = this;\n var state,\n contentElm,\n html,\n nameElm,\n alphaElm,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n state = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context2.next = 5;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '底图属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this3.name = _this3.name.trim();\n if (!_this3.name) {\n _this3.name = '未命名对象';\n }\n _this3.originalOptions = _this3.deepCopyObj(_this3.options);\n _this3._DialogObject.close();\n _this3.Dialog.confirmCallBack && _this3.Dialog.confirmCallBack(_this3.originalOptions);\n // syncData(this.sdk, this.options.id)\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(_this3.sdk, _this3.options.id);\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"get2DView\"])();\n if (sdk2D && sdk2D != _this3.sdk) {\n for (var i = 0; i < sdk2D.viewer.imageryLayers._layers.length; i++) {\n var layer = sdk2D.viewer.imageryLayers._layers[i];\n if (layer._id && layer._id == _this3.options.id) {\n layer.alpha = _this3.options.alpha;\n break;\n }\n }\n }\n },\n closeCallBack: function closeCallBack() {\n _this3.reset();\n _this3.Dialog.closeCallBack && _this3.Dialog.closeCallBack();\n },\n // resetCallBack: () => {\n // this.name = this.originalOptions.name\n // this.alpha = this.originalOptions.alpha\n // this.Dialog.resetCallBack && this.Dialog.resetCallBack()\n // },\n removeCallBack: function removeCallBack() {\n _this3.Dialog.removeCallBack && _this3.Dialog.removeCallBack();\n }\n }, true);\n case 5:\n this._DialogObject = _context2.sent;\n contentElm = document.createElement('div');\n contentElm.style.width = '300px';\n html = \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\uFF1A\\n \\n
\\n
\\n
\\n
\\n \\u900F\\u660E\\u5EA6\\uFF1A\\n \\n
\\n
\\n
\\n \";\n contentElm.innerHTML = html;\n nameElm = contentElm.getElementsByClassName('name')[0];\n alphaElm = contentElm.getElementsByClassName('alpha')[0];\n nameElm.value = this.name;\n alphaElm.value = this.alpha;\n nameElm.addEventListener('input', function () {\n _this3.name = nameElm.value;\n });\n alphaElm.addEventListener('input', function () {\n _this3.alpha = alphaElm.value;\n });\n this._DialogObject.contentAppChild(contentElm);\n this._elms.name = [nameElm];\n this._elms.alpha = [alphaElm];\n case 19:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity && !this._DialogObject) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.options.name;\n this.alpha = this.options.alpha;\n this.brightness = this.options.brightness;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseLayer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTGF5ZXIvaW5kZXguanM/ZDBjOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMTEtMjAgMTg6MDZcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMy0xMS0yMCAxODowNlxyXG4gKi9cclxuXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgQ29vcmRUcmFuc2Zvcm0gZnJvbSBcIi4uLy4uLy4uLy4uL3RyYW5zZm9ybS9Db29yZFRyYW5zZm9ybVwiO1xyXG5pbXBvcnQgQmFzZVNvdXJjZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IHsgc3luY0RhdGEsIGdldDJEVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBCYXNlTGF5ZXIgZXh0ZW5kcyBCYXNlU291cmNlIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSgpIHtcclxuICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgdGhpcy5vcHRpb25zLmFscGhhID0gdGhpcy5vcHRpb25zLmFscGhhID8/IDFcclxuICAgIHRoaXMub3B0aW9ucy5icmlnaHRuZXNzID0gdGhpcy5vcHRpb25zLmJyaWdodG5lc3MgPz8gMVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxheWVySW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbnRpdHkgPyB0aGlzLmVudGl0eS5fbGF5ZXJJbmRleCA6IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgZ2V0IGxheWVyX2luZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW50aXR5ID8gdGhpcy5lbnRpdHkuX2xheWVySW5kZXggOiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIGdldCBicmlnaHRuZXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5icmlnaHRuZXNzXHJcbiAgfVxyXG5cclxuICBzZXQgYnJpZ2h0bmVzcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYnJpZ2h0bmVzcyA9IHZcclxuICAgIHRoaXMuZW50aXR5LmJyaWdodG5lc3MgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYWxwaGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFscGhhXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0IGFscGhhKHYpIHtcclxuICAgIGlmIChOdW1iZXIodikgPiAxKSB2ID0gMVxyXG4gICAgaWYgKE51bWJlcih2KSA8IDApIHYgPSAwXHJcbiAgICB0aGlzLmVudGl0eS5hbHBoYSA9IHZcclxuICAgIHRoaXMub3B0aW9ucy5hbHBoYSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYWxwaGEgJiYgdGhpcy5fZWxtcy5hbHBoYS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2NyaXB0aW9uIOaPkOmrmOWbvuWxgueahOS4gOWxguWxgue6p1xyXG4gICAqIEBtZXRob2QgbGF5ZXJSYWlzZVxyXG4gICAqIEBwYXJhbSBpZCB7c3RyaW5nfSDlm77lsYJpZFxyXG4gICAqQG1lbWJlck9mIExheWVyXHJcbiAgICogKi9cclxuICBsYXllclJhaXNlKGlkKSB7XHJcbiAgICB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5yYWlzZSh0aGlzLmVudGl0eSlcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyICYmIHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSAmJiAodGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlID09PSAnZmx3JyB8fCB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgPT09ICdqd3cnKSkge1xyXG4gICAgICAgIGxldCBsYXllciA9IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV1cclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5yYWlzZVRvVG9wKGxheWVyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGF5ZXJfaW5kZXggPSB0aGlzLmVudGl0eS5fbGF5ZXJJbmRleFxyXG4gICAgcmV0dXJuIHRoaXMuZW50aXR5Ll9sYXllckluZGV4XHJcbiAgfVxyXG5cclxuICAvKipAZGVzY3JpcHRpb24g6ZmN5L2O5Zu+5bGC55qE5LiA5bGC5bGC57qnXHJcbiAgICogQG1ldGhvZCBsYXllckxvd2VyXHJcbiAgICogQG1lbWJlck9mIExheWVyXHJcblxyXG4gICAqICovXHJcbiAgbGF5ZXJMb3dlcigpIHtcclxuICAgIHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLmxvd2VyKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5vcHRpb25zLmxheWVyX2luZGV4ID0gdGhpcy5lbnRpdHkuX2xheWVySW5kZXhcclxuICAgIHJldHVybiB0aGlzLmVudGl0eS5fbGF5ZXJJbmRleFxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2NyaXB0aW9uIOe9rumhtlxyXG4gICAqIEBtZXRob2QgbGF5ZXJUb1RvcFxyXG4gICAqIEBtZW1iZXJPZiBMYXllclxyXG5cclxuICAgKiAqL1xyXG4gIGxheWVyVG9Ub3AoKSB7XHJcbiAgICB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5yYWlzZVRvVG9wKHRoaXMuZW50aXR5KVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIgJiYgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXS5faW1hZ2VyeVByb3ZpZGVyLl90eXBlICYmICh0aGlzLnNkay52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW2ldLl9pbWFnZXJ5UHJvdmlkZXIuX3R5cGUgPT09ICdmbHcnIHx8IHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV0uX2ltYWdlcnlQcm92aWRlci5fdHlwZSA9PT0gJ2p3dycpKSB7XHJcbiAgICAgICAgbGV0IGxheWVyID0gdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVyc1tpXVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5pbWFnZXJ5TGF5ZXJzLnJhaXNlVG9Ub3AobGF5ZXIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYXllcl9pbmRleCA9IHRoaXMuZW50aXR5Ll9sYXllckluZGV4XHJcbiAgICByZXR1cm4gdGhpcy5lbnRpdHkuX2xheWVySW5kZXhcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjcmlwdGlvbiDnva7lupVcclxuICAgKiBAbWV0aG9kIGxvd2VyVG9Cb3R0b21cclxuICAgKiBAbWVtYmVyT2YgTGF5ZXJcclxuXHJcbiAgICogKi9cclxuICBsYXllclRvQm90dG9tKCkge1xyXG4gICAgdGhpcy5zZGsudmlld2VyLmltYWdlcnlMYXllcnMubG93ZXJUb0JvdHRvbSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMub3B0aW9ucy5sYXllcl9pbmRleCA9IHRoaXMuZW50aXR5Ll9sYXllckluZGV4XHJcbiAgICByZXR1cm4gdGhpcy5lbnRpdHkuX2xheWVySW5kZXhcclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHN1cGVyLnJlbW92ZSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUuaW1hZ2VyeUxheWVycy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjcmlwdGlvbiDlrprkvY1cclxuICAgKiBAbWV0aG9kIGZseVRvXHJcbiAgICogQG1lbWJlck9mIExheWVyXHJcblxyXG4gICAqICovXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZmx5VG8odGhpcy5lbnRpdHkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKumrmOW+t+eahOe6oOWBjyovXHJcbiAgYW1hcE1lcmNhdG9yVGlsaW5nU2NoZW1lKG9wdGlvbnMpIHtcclxuICAgIGNsYXNzIEFtYXBNZXJjYXRvclRpbGluZ1NjaGVtZSBleHRlbmRzIENlc2l1bS5XZWJNZXJjYXRvclRpbGluZ1NjaGVtZSB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zKVxyXG4gICAgICAgIGxldCBwcm9qZWN0aW9uID0gbmV3IENlc2l1bS5XZWJNZXJjYXRvclByb2plY3Rpb24oKVxyXG4gICAgICAgIHRoaXMuX3Byb2plY3Rpb24ucHJvamVjdCA9IGZ1bmN0aW9uIChjYXJ0b2dyYXBoaWMsIHJlc3VsdCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gQ29vcmRUcmFuc2Zvcm0uV0dTODRUb0dDSjAyKFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSksXHJcbiAgICAgICAgICAgIENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICByZXN1bHQgPSBwcm9qZWN0aW9uLnByb2plY3QoXHJcbiAgICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydG9ncmFwaGljKFxyXG4gICAgICAgICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhyZXN1bHRbMF0pLFxyXG4gICAgICAgICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhyZXN1bHRbMV0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIocmVzdWx0LngsIHJlc3VsdC55KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcm9qZWN0aW9uLnVucHJvamVjdCA9IGZ1bmN0aW9uIChjYXJ0ZXNpYW4sIHJlc3VsdCkge1xyXG4gICAgICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IHByb2plY3Rpb24udW5wcm9qZWN0KGNhcnRlc2lhbilcclxuICAgICAgICAgIHJlc3VsdCA9IENvb3JkVHJhbnNmb3JtLkdDSjAyVG9XR1M4NChcclxuICAgICAgICAgICAgQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpLFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydG9ncmFwaGljKFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMocmVzdWx0WzBdKSxcclxuICAgICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHJlc3VsdFsxXSlcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEFtYXBNZXJjYXRvclRpbGluZ1NjaGVtZShvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIOe8lui+keahhlxyXG4gICAqIEBwYXJhbSBzdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g54q25oCBOiB0cnVl5omT5byALCBmYWxzZeWFs+mXrVxyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICB0aXRsZTogJ+W6leWbvuWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgLy8gc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgbGV0IHNkazJEID0gZ2V0MkRWaWV3KClcclxuICAgICAgICBpZiAoc2RrMkQgJiYgc2RrMkQgIT0gdGhpcy5zZGspIHtcclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8c2RrMkQudmlld2VyLmltYWdlcnlMYXllcnMuX2xheWVycy5sZW5ndGg7aSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXllciA9IHNkazJELnZpZXdlci5pbWFnZXJ5TGF5ZXJzLl9sYXllcnNbaV1cclxuICAgICAgICAgICAgaWYobGF5ZXIuX2lkICYmIGxheWVyLl9pZCA9PSB0aGlzLm9wdGlvbnMuaWQpIHtcclxuICAgICAgICAgICAgICBsYXllci5hbHBoYSA9IHRoaXMub3B0aW9ucy5hbHBoYVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgICAgLy8gcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgICAgLy8gICB0aGlzLmFscGhhID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYWxwaGFcclxuICAgICAgLy8gICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAvLyB9LFxyXG4gICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgIH0sIHRydWUpXHJcbiAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICBjb250ZW50RWxtLnN0eWxlLndpZHRoID0gJzMwMHB4J1xyXG4gICAgbGV0IGh0bWwgPSBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjBweDtcIj7lkI3np7DvvJo8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBuYW1lXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjBweDtcIj7pgI/mmI7luqbvvJo8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgY2xhc3M9XCJhbHBoYVwiIG1pbj1cIjBcIiBtYXg9XCIxXCIgc3RlcD1cIjAuMDFcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIGBcclxuICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgbGV0IG5hbWVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25hbWUnKVswXVxyXG4gICAgbGV0IGFscGhhRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbHBoYScpWzBdXHJcbiAgICBuYW1lRWxtLnZhbHVlID0gdGhpcy5uYW1lXHJcbiAgICBhbHBoYUVsbS52YWx1ZSA9IHRoaXMuYWxwaGFcclxuICAgIG5hbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG5hbWVFbG0udmFsdWVcclxuICAgIH0pXHJcbiAgICBhbHBoYUVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgdGhpcy5hbHBoYSA9IGFscGhhRWxtLnZhbHVlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgdGhpcy5fZWxtcy5uYW1lID0gW25hbWVFbG1dXHJcbiAgICB0aGlzLl9lbG1zLmFscGhhID0gW2FscGhhRWxtXVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5ICYmICF0aGlzLl9EaWFsb2dPYmplY3QpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWVcclxuICAgIHRoaXMuYWxwaGEgPSB0aGlzLm9wdGlvbnMuYWxwaGFcclxuICAgIHRoaXMuYnJpZ2h0bmVzcyA9IHRoaXMub3B0aW9ucy5icmlnaHRuZXNzXHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkgeyB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VMYXllclxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUE1REE7QUFBQTtBQUFBO0FBQUE7QUE4REE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFwQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTVFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQStFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseLayer/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseModel/Model/_element.js": /*!*************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseModel/Model/_element.js ***! \*************************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u6700\\u5927\\u6BD4\\u4F8B\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u6700\\u5C0F\\u50CF\\u7D20\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u56FA\\u5B9A\\u5927\\u5C0F\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n

\\u65CB\\u8F6C

\\n
\\n
\\n
\\n x \\u8F74\\n \\n
\\n \\n \\xB0\\n \\n
\\n
\\n
\\n
\\n
\\n y \\u8F74\\n \\n
\\n \\n \\xB0\\n \\n
\\n
\\n
\\n
\\n
\\n z \\u8F74\\n \\n
\\n \\n \\xB0\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\u7F29\\u653E\\n
\\n \\n \\u662F\\u5426\\u7B49\\u6BD4\\u4F8B\\u7F29\\u653E\\n
\\n
\\n
\\n
\\n
\\n
\\n x \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n y \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n z \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7B49\\u6BD4\\u4F8B\\u7F29\\u653E\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n

\\u9AD8\\u5EA6

\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n \\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwvX2VsZW1lbnQuanM/YmRkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgcmV0dXJuIGBcclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjBweDtcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwibG5nXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwcHg7XCI+5pyA5aSn5q+U5L6LPC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwLjFcIiBtYXg9XCI5OTk5OVwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJtYXhpbXVtU2NhbGVcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPuWAjTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57qs5bqmPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTkwXCIgbWF4PVwiOTBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjBweDtcIj7mnIDlsI/lg4/ntKA8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OVwiIEBtb2RlbD1cIm1pbmltdW1QaXhlbFNpemVcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pq5jluqY8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OVwiIG1heD1cIjk5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA2MHB4O1wiPuWbuuWumuWkp+Wwjzwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwic2NhbGVCeURpc3RhbmNlXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxESVYtY3ktdGFicyBpZD1cIm1vZGVsLWVkaXQtdGFic1wiPlxyXG4gICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLlsZ7mgKfkv6Hmga9cIj5cclxuICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5pa55ZCR5L+h5oGvXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJsZS1sZWZ0LWxpbmVcIj7ml4vovaw8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPngg6L20PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiMzYwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwicm90YXRlWFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIzNjBcIiBAbW9kZWw9XCJyb3RhdGVYXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPsKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnkg6L20PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiMzYwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwicm90YXRlWVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIzNjBcIiBAbW9kZWw9XCJyb3RhdGVZXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPsKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnog6L20PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiMzYwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwicm90YXRlWlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIzNjBcIiBAbW9kZWw9XCJyb3RhdGVaXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPsKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJsZS1sZWZ0LWxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPue8qeaUvjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj7mmK/lkKbnrYnmr5TkvovnvKnmlL48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbm8tZXF1YWxcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+eCDovbQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImZsZXg6IDE7bWFyZ2luLXJpZ2h0OiAxNXB4O1wiIHR5cGU9XCJyYW5nZVwiIG1heD1cIjk5OTk5XCIgbWluPVwiMFwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwic2NhbGVYXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OVwiIEBtb2RlbD1cInNjYWxlWFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPuWAjTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnkg6L20PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJmbGV4OiAxO21hcmdpbi1yaWdodDogMTVweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCI5OTk5OVwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cInNjYWxlWVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIiBzdHlsZT1cIndpZHRoOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5OTlcIiBAbW9kZWw9XCJzY2FsZVlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj56IOi9tDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiOTk5OTlcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzY2FsZVpcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5XCIgQG1vZGVsPVwic2NhbGVaXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+5YCNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGVxdWFsXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuetieavlOS+i+e8qeaUvjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiOTk5OTlcIiBtaW49XCIwXCIgc3RlcD1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5XCIgc3RlcD1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmxlLWxlZnQtbGluZVwiPumrmOW6pjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiOTk5OTk5XCIgbWluPVwiLTk5OTk5XCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTlcIiBtYXg9XCI5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+etvumjjuagvFwiPlxyXG4gICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBNkxBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseModel/Model/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseModel/Model/index.js": /*!**********************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseModel/Model/index.js ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BaseSource/BaseModel/Model/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _ModelController_EditGltf__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../ModelController/EditGltf */ \"./src/Obj/ModelController/EditGltf.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseModel/index.js\");\n/* harmony import */ var _Draw_drawPoint_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../../../Draw/drawPoint.js */ \"./src/Draw/drawPoint.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _timeoutEventObject = /*#__PURE__*/new WeakMap();\nvar Model = /*#__PURE__*/function (_BaseModel) {\n /**\r\n * @constructor\r\n * @description 加载模型\r\n * @param sdk {object} sdk\r\n * @param options {object} 模型参数\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 模型显隐\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 资源地址\r\n * @param options.position {object} 模型位置\r\n * @param options.position.lng {number} 经度\r\n * @param options.position.lat {number} 纬度\r\n * @param options.position.alt {number} 高度\r\n * @param options.scale {object} 比例\r\n * @param options.scale.x=1 {number} x轴比例\r\n * @param options.scale.y=1 {number} y轴比例\r\n * @param options.scale.z=1 {number} z轴比例\r\n * @param options.maximumScale=100 {number} 最大比例\r\n * @param options.minimumPixelSize=60 {number} 最小像素\r\n * @param options.scaleByDistance=true {boolean} 随视野缩放\r\n * @param options.rotate {object} 旋转角度\r\n * @param options.rotate.x {number} x轴旋转度数\r\n * @param options.rotate.y {number} y轴旋转度数\r\n * @param options.rotate.z {number} z轴旋转度数\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function Model(earth) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Model);\n _this2 = _callSuper(this, Model, [earth, options, _Dialog = {}]);\n _classPrivateFieldInitSpec(_this2, _timeoutEventObject, null);\n if (!options.position) {\n console.warn(\"position is required!\");\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(_this2);\n }\n if (!options.position.lng && options.position.lng !== 0) {\n console.warn(\"lng is required!\");\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(_this2);\n }\n if (!options.position.lat && options.position.lat !== 0) {\n console.warn(\"lat is required!\");\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(_this2);\n }\n if (_this2.options.earth) {\n delete _this2.options.earth;\n }\n _this2.picking = true;\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || '#ffffff';\n // this.options.scale = (options.scale || options.scale === 0) ? options.scale : 1\n if (typeof options.scale === 'number') {\n _this2.options.scale = {};\n _this2.options.scale.x = options.scale;\n _this2.options.scale.y = options.scale;\n _this2.options.scale.z = options.scale;\n } else {\n _this2.options.scale = options.scale || {};\n _this2.options.scale.x = _this2.options.scale.x || _this2.options.scale.x === 0 ? _this2.options.scale.x : 1;\n _this2.options.scale.y = _this2.options.scale.y || _this2.options.scale.y === 0 ? _this2.options.scale.y : 1;\n _this2.options.scale.z = _this2.options.scale.z || _this2.options.scale.z === 0 ? _this2.options.scale.z : 1;\n }\n _this2.options.url = options.url;\n _this2.options.maximumScale = options.maximumScale || options.maximumScale === 0 ? options.maximumScale : 100;\n _this2.options.minimumPixelSize = options.minimumPixelSize || options.minimumPixelSize === 0 ? options.minimumPixelSize : 60;\n _this2.options.position = options.position = options.position || {};\n _this2.options.position = {\n lng: options.position.lng,\n lat: options.position.lat,\n alt: options.position.alt\n };\n _this2.options.scaleByDistance = options.scaleByDistance || options.scaleByDistance === false ? options.scaleByDistance : true;\n _this2.options.rotate = options.rotate = options.rotate || {};\n _this2.options.rotate.x = options.rotate.x || 0;\n _this2.options.rotate.y = options.rotate.y || 0;\n _this2.options.rotate.z = options.rotate.z || 0;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2._elms = {};\n _this2.entity = {\n id: _this2.options.id\n };\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n _this2.on();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Model, _BaseModel);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Model, [{\n key: \"type\",\n get: function get() {\n return \"glb\";\n }\n }, {\n key: \"loadModel\",\n value: function () {\n var _loadModel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(url) {\n var _this3 = this;\n var _this, options, cartographic, position;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_21__[\"syncData\"])(this.sdk, this.options.id);\n if (!(!this.sdk || !this.sdk.viewer || !this.sdk.viewer.scene)) {\n _context.next = 3;\n break;\n }\n return _context.abrupt(\"return\");\n case 3:\n url = this.replaceHost(url, this.options.host);\n // this.handler = new Cesium.ScreenSpaceEventHandler(\n // this.sdk.viewer.canvas\n // )\n // this.handler.setInputAction((event) => {\n // let pickedObject = this.sdk.viewer.scene.pick(event.position);\n // // 判断是否拾取到模型\n // if (Cesium.defined(pickedObject)) {\n // let cartesian = this.sdk.viewer.scene.pickPosition(event.position);\n // // 是否获取到空间坐标\n // if (Cesium.defined(cartesian)) {\n // // // 空间坐标转世界坐标(弧度)\n // let cartographic = Cesium.Cartographic.fromCartesian(cartesian);\n // // 弧度转为角度(经纬度)\n // let lon = Cesium.Math.toDegrees(cartographic.longitude);\n // let lat = Cesium.Math.toDegrees(cartographic.latitude);\n // //模型高度\n // let height = cartographic.height;\n // // console.log(\"模型表面的经纬度高程是:\", {\n // // lng: lon,\n // // lat: lat,\n // // alt: height,\n // // });\n // }\n // }\n // }, Cesium.ScreenSpaceEventType.LEFT_CLICK)\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n options = {\n id: this.options.id,\n url: url,\n show: this.options.show,\n // 是否显示模型\n maximumScale: this.options.scaleByDistance ? undefined : this.options.maximumScale,\n minimumPixelSize: this.options.scaleByDistance ? undefined : this.options.minimumPixelSize\n // scale: this.options.scale,\n // minimumPixelSize: 1\n };\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context.next = 13;\n break;\n }\n _context.next = 10;\n return Cesium.Model.fromGltfAsync(options);\n case 10:\n this.entity = _context.sent;\n _context.next = 16;\n break;\n case 13:\n _context.next = 15;\n return Cesium.Model.fromGltf(options);\n case 15:\n this.entity = _context.sent;\n case 16:\n this.entity.imageBasedLighting.luminanceAtZenith = 0.6;\n this.entity.color = Cesium.Color.fromCssColorString(this.options.color);\n // this.entity.colorBlendMode = 1\n // 将模型添加到场景中\n _context.next = 20;\n return this.sdk.viewer.scene.primitives.add(this.entity);\n case 20:\n cartographic = Cesium.Cartographic.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt);\n position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.position = position;\n this.entity.rotate = _objectSpread({}, this.options.rotate);\n this.entity.customScale = this.options.scale;\n\n // 设置模型的旋转角度,使其水平放置于地面\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n // 模型大小比例\n // Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(this.options.scale, this.options.scale, this.options.scale), this.entity.modelMatrix)\n\n // Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(this.options.scale, this.options.scale, this.options.scale), this.entity.modelMatrix)\n if (Number(Cesium.VERSION.split('.')[1]) >= 107) {\n this.entity.readyEvent.addEventListener(function () {\n _this3.entity.originalBoundingSphereRadius = _this3.entity.boundingSphere.radius;\n _this3.editObj = new _ModelController_EditGltf__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_this3.sdk, _this3.entity);\n _this3.editObj.transformCallBack = _this3.rotationEditingCallBack;\n _this3.updateModel(_this3.options.position.lng, _this3.options.position.lat, _this3.options.position.alt, _this3.options.rotate.x, _this3.options.rotate.y, _this3.options.rotate.z, _this3.options.scale);\n // 标签\n if (!_this3.label) {\n _this3.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this3.sdk, {\n id: _this3.options.id,\n show: _this3.options.show ? _this3.options.label.show : false,\n position: [_this3.options.position.lng, _this3.options.position.lat, _this3.options.position.alt],\n text: _this3.options.name,\n fontSize: _this3.options.label.fontSize,\n fontFamily: _this3.options.label.fontFamily ? _this3.options.label.fontFamily : 0,\n color: _this3.options.label.color,\n pixelOffset: _this3.options.label.pixelOffset,\n backgroundColor: _this3.options.label.backgroundColor,\n lineColor: _this3.options.label.lineColor,\n lineWidth: _this3.options.label.lineWidth,\n scaleByDistance: _this3.options.label.scaleByDistance,\n near: _this3.options.label.near,\n far: _this3.options.label.far\n }, _this3.entity);\n }\n _this3.entity.isMove = true;\n clearTimeout(_classPrivateFieldGet(_timeoutEventObject, _this3));\n _classPrivateFieldSet(_timeoutEventObject, _this3, setTimeout(function () {\n _this3.entity && (_this3.entity.isMove = false);\n }, 500));\n });\n this.activeAnimate = this.options.activeAnimate;\n this.modelAnimations = this.entity.loader.components.animations;\n } else {\n this.entity.readyPromise.then(function (entity) {\n _this3.entity.originalBoundingSphereRadius = _this3.entity.boundingSphere.radius;\n _this3.editObj = new _ModelController_EditGltf__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_this3.sdk, _this3.entity);\n _this3.editObj.transformCallBack = _this3.rotationEditingCallBack;\n _this3.updateModel(_this3.options.position.lng, _this3.options.position.lat, _this3.options.position.alt, _this3.options.rotate.x, _this3.options.rotate.y, _this3.options.rotate.z, _this3.options.scale);\n\n // 标签\n if (!_this3.label) {\n _this3.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this3.sdk, {\n id: _this3.options.id,\n show: _this3.options.show ? _this3.options.label.show : false,\n position: [_this3.options.position.lng, _this3.options.position.lat, _this3.options.position.alt],\n text: _this3.options.name,\n fontSize: _this3.options.label.fontSize,\n fontFamily: _this3.options.label.fontFamily ? _this3.options.label.fontFamily : 0,\n color: _this3.options.label.color,\n pixelOffset: _this3.options.label.pixelOffset,\n backgroundColor: _this3.options.label.backgroundColor,\n lineColor: _this3.options.label.lineColor,\n lineWidth: _this3.options.label.lineWidth,\n scaleByDistance: _this3.options.label.scaleByDistance,\n near: _this3.options.label.near,\n far: _this3.options.label.far,\n ground: false\n }, _this3.entity);\n }\n _this3.entity.isMove = true;\n clearTimeout(_classPrivateFieldGet(_timeoutEventObject, _this3));\n _classPrivateFieldSet(_timeoutEventObject, _this3, setTimeout(function () {\n _this3.entity && (_this3.entity.isMove = false);\n }, 500));\n\n // 动画\n // entity.activeAnimations.add({\n // index: 1,\n // loop: Cesium.ModelAnimationLoop.REPEAT,\n // speedup: 2,\n // reverse: false\n // })\n\n _this3.activeAnimate = _this3.options.activeAnimate;\n _this3.modelAnimations = _this3.entity.loader.components.animations;\n });\n }\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"syncSplitData\"])(this.sdk, this.options.id);\n case 28:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function loadModel(_x) {\n return _loadModel.apply(this, arguments);\n }\n return loadModel;\n }()\n }, {\n key: \"getModelAnimations\",\n value: function () {\n var _getModelAnimations = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var _this4 = this;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n return _context2.abrupt(\"return\", new Promise(function (resolve, reject) {\n if (Number(Cesium.VERSION.split('.')[1]) >= 107) {\n _this4.entity.readyEvent.addEventListener(function () {\n _this4.modelAnimations = _this4.entity.loader.components.animations;\n resolve(_this4.modelAnimations);\n });\n } else {\n _this4.entity.readyPromise.then(function (entity) {\n _this4.modelAnimations = _this4.entity.loader.components.animations;\n resolve(_this4.modelAnimations);\n });\n }\n }));\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function getModelAnimations() {\n return _getModelAnimations.apply(this, arguments);\n }\n return getModelAnimations;\n }() // async loadModelBy2D(url) {\n // this.entity = this.sdk.viewer.entities.add({\n // show: this.options.show,\n // rectangle: {\n // coordinates: new Cesium.CallbackProperty(() => {\n // let gap = Math.abs(Math.cos(Math.PI / 180 * this.options.position.lat)) * (0.0001 * this.options.scale)\n // let fromDegreesArray = [\n // this.options.position.lng - (0.0001 * this.options.scale), this.options.position.lat - gap,\n // this.options.position.lng + (0.0001 * this.options.scale), this.options.position.lat + gap,\n // ]\n // return Cesium.Rectangle.fromDegrees(...fromDegreesArray)\n // }, false),\n // material: this.options.url,\n // rotation: new Cesium.CallbackProperty(() => {\n // return Cesium.Math.toRadians(this.options.angle)\n // }, false),\n // stRotation: new Cesium.CallbackProperty(() => {\n // return Cesium.Math.toRadians(this.options.angle)\n // }, false)\n // },\n // })\n // if (this.sdk.viewer._element.className === 'cesium-viewer 2d') {\n // this.entity.rectangle.height = 0\n // }\n // }\n }, {\n key: \"remove\",\n value: function remove() {\n _superPropGet(Model, \"remove\", this, 3)([]);\n this.label && this.label.remove();\n this.positionEditing = false;\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n var _this5 = this;\n var orientation, lng, lat, alt, destination, position, boundingSphere;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context3.next = 22;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context3.next = 15;\n break;\n }\n _context3.next = 14;\n return this.getClampToHeight(position);\n case 14:\n position.alt = _context3.sent;\n case 15:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context3.next = 23;\n break;\n case 22:\n if (Number(Cesium.VERSION.split('.')[1]) >= 107) {\n if (this.entity.ready) {\n boundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt), this.entity.originalBoundingSphereRadius * this.options.scale.z * 2);\n this.sdk.viewer.camera.flyToBoundingSphere(boundingSphere);\n }\n } else {\n this.entity.readyPromise.then(function () {\n var boundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(_this5.options.position.lng, _this5.options.position.lat, _this5.options.position.alt), (_this5.entity.originalBoundingSphereRadius || _this5.entity.boundingSphere.radius) * _this5.options.scale.z * 2);\n _this5.sdk.viewer.camera.flyToBoundingSphere(boundingSphere);\n });\n }\n case 23:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"on\",\n value: function on() {\n return this.add();\n }\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(Model, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getHost\"])();\n this.options.url = this.options.url || \"\";\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.color = v;\n this.entity.color = Cesium.Color.fromCssColorString(v);\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.position.lng;\n },\n set: function set(v) {\n this.options.position = {\n lng: v,\n lat: this.options.position.lat,\n alt: this.options.position.alt\n };\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label && (this.label.position = [this.options.position.lng, this.options.position.lat, this.options.position.alt]);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.position.lat;\n },\n set: function set(v) {\n this.options.position = {\n lng: this.options.position.lng,\n lat: v,\n alt: this.options.position.alt\n };\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label && (this.label.position = [this.options.position.lng, this.options.position.lat, this.options.position.alt]);\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.position.alt;\n },\n set: function set(v) {\n this.options.position = {\n lng: this.options.position.lng,\n lat: this.options.position.lat,\n alt: v\n };\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label && (this.label.position = [Number(this.options.position.lng), Number(this.options.position.lat), Number(this.options.position.alt)]);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumScale\",\n get: function get() {\n return this.options.maximumScale;\n },\n set: function set(v) {\n this.options.maximumScale = v;\n this.entity.maximumScale = this.scaleByDistance ? undefined : v;\n this._elms.maximumScale && this._elms.maximumScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"minimumPixelSize\",\n get: function get() {\n return this.options.minimumPixelSize;\n },\n set: function set(v) {\n this.options.minimumPixelSize = v;\n this.entity.minimumPixelSize = this.scaleByDistance ? undefined : this.options.minimumPixelSize;\n this._elms.minimumPixelSize && this._elms.minimumPixelSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scaleByDistance\",\n get: function get() {\n return this.options.scaleByDistance;\n },\n set: function set(v) {\n this.options.scaleByDistance = v;\n this.entity.maximumScale = v ? undefined : this.maximumScale;\n this.entity.minimumPixelSize = v ? undefined : this.options.minimumPixelSize;\n this._elms.scaleByDistance && this._elms.scaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"rotateX\",\n get: function get() {\n return this.options.rotate.x;\n },\n set: function set(v) {\n this.options.rotate.x = v;\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.rotateX && this._elms.rotateX.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"rotateY\",\n get: function get() {\n return this.options.rotate.y;\n },\n set: function set(v) {\n this.options.rotate.y = v;\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.rotateY && this._elms.rotateY.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"rotateZ\",\n get: function get() {\n return this.options.rotate.z;\n },\n set: function set(v) {\n this.options.rotate.z = v;\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.rotateZ && this._elms.rotateZ.forEach(function (item) {\n item.value = v;\n });\n }\n\n // get scale() {\n // return this.options.scale\n // }\n\n // set scale(v) {\n // this.options.scale = v\n // this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)\n // this._elms.scale && this._elms.scale.forEach((item) => {\n // item.value = v\n // })\n // }\n }, {\n key: \"scaleX\",\n get: function get() {\n return this.options.scale.x;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.scale.x = Number(Number(v).toFixed(2));\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.scaleX && this._elms.scaleX.forEach(function (item) {\n item.value = _this7.options.scale.x;\n });\n }\n }, {\n key: \"scaleY\",\n get: function get() {\n return this.options.scale.y;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.scale.y = Number(Number(v).toFixed(2));\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.scaleY && this._elms.scaleY.forEach(function (item) {\n item.value = _this8.options.scale.y;\n });\n }\n }, {\n key: \"scaleZ\",\n get: function get() {\n return this.options.scale.z;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.scale.z = Number(Number(v).toFixed(2));\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this._elms.scaleZ && this._elms.scaleZ.forEach(function (item) {\n item.value = _this9.options.scale.z;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label && (this.label.show = v);\n } else {\n this.label && (this.label.show = false);\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.color = v;\n this.label && (this.label.color = v);\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label && (this.label.fontSize = v);\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label && (this.label.scaleByDistance = v);\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label && (this.label.lineWidth = v);\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label && (this.label.pixelOffset = v);\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.lineColor = v;\n this.label && (this.label.lineColor = v);\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this12 = this;\n this.options.label.backgroundColor[0] = v;\n this.label && (this.label.backgroundColor = [v, this.label.backgroundColor[1]]);\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this12.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this12._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this13 = this;\n this.options.label.backgroundColor[1] = v;\n this.label && (this.label.backgroundColor = [this.label.backgroundColor[0], v]);\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this13.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this13._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this14 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this14.options.attribute.link.content;\n case 2:\n _this14.attributeLink = _context6.sent;\n table = _this14._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i)) {\n _context5.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this14.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this14.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee4);\n }));\n function linkEdit(_x2) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this14.options.attribute.link.content.splice(i, 1);\n _this14.attributeLink = _this14.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this14.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this14.attributeLink = _this14.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this14.attributeLink = _this14.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this15 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n _context9.next = 2;\n return _this15.options.attribute.vr.content;\n case 2:\n _this15.attributeVr = _context9.sent;\n table = _this15._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n if (!(index === _i3)) {\n _context8.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this15.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this15.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context8.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context8.next = 14;\n break;\n }\n return _context8.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context8.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context7.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context7.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context7.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context8.next = 24;\n break;\n }\n return _context8.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context8.t0) {\n _context8.next = 22;\n break;\n }\n return _context8.abrupt(\"break\", 24);\n case 22:\n _context8.next = 18;\n break;\n case 24:\n _context8.next = 29;\n break;\n case 26:\n _context8.prev = 26;\n _context8.t1 = _context8[\"catch\"](15);\n _iterator3.e(_context8.t1);\n case 29:\n _context8.prev = 29;\n _iterator3.f();\n return _context8.finish(29);\n case 32:\n n++;\n _context8.next = 11;\n break;\n case 35:\n return _context8.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context8.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context9.next = 15;\n break;\n }\n return _context9.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context9.t0) {\n _context9.next = 12;\n break;\n }\n return _context9.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context9.next = 8;\n break;\n case 15:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5);\n }));\n function vrEdit(_x3) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this15.options.attribute.vr.content.splice(i, 1);\n _this15.attributeVr = _this15.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this15.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this15.attributeVr = _this15.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this15.attributeVr = _this15.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n\n // get position() {\n // let cartographic = Cesium.Cartographic.fromCartesian(this.entity.position);\n // let lng = Cesium.Math.toDegrees(cartographic.longitude + 0.00000000663814);\n // let lat = Cesium.Math.toDegrees(cartographic.latitude + 0.00000025137835);\n // return { lng: lng, lat: lat, alt: cartographic.height - 2.19104611043234 }\n // }\n\n // set position(p) {\n\n // }\n\n /**\r\n * @desc 打开模型旋转功能\r\n * @param status {boolean}\r\n * @methodOf Source\r\n * */\n }, {\n key: \"rotationEditing\",\n get:\n /**\r\n * @desc 获取模型旋转状态\r\n * @method rotationEditing\r\n * @return boolean\r\n * @methodOf Source\r\n * */\n function get() {\n if (this.editObj.getActiveState() === 'rtation') {\n return true;\n }\n return false;\n }\n\n /**@desc 打开平移模型功能\r\n *\r\n * @memberOf Source\r\n *@param status {boolean}\r\n *\r\n * */,\n set: function set(status) {\n if (status) {\n this.editObj && this.editObj.editRtation();\n } else {\n this.editObj && this.editObj.destroy();\n }\n }\n }, {\n key: \"positionEditing\",\n get: function get() {\n if (this.editObj && this.editObj.getActiveState() === 'translational') {\n return true;\n }\n return false;\n }\n\n //平移时,坐标信息变化的回调\n ,\n set: function set(status) {\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n if (status) {\n this.leftClickState = Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_16__[\"getLeftClickState\"])();\n this.editObj && this.editObj.editTranslational();\n new _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_16__[\"closeLeftClick\"](this.sdk);\n } else {\n if (this.leftClickState && !Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_16__[\"getLeftClickState\"])()) {\n new _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_16__[\"openLeftClick\"](this.sdk);\n }\n this.editObj && this.editObj.destroy();\n }\n }\n }, {\n key: \"positionEditingCallBack\",\n get: function get() {}\n\n //旋转时,坐标信息变化的回调\n ,\n set: function set(callback) {\n return;\n }\n }, {\n key: \"rotationEditingCallBack\",\n get: function get() {\n var _this16 = this;\n return function (params) {\n // let params = this.editObj._params\n // this.options.position = {\n // lng: params.tx,\n // lat: params.ty,\n // alt: params.tz,\n // }\n _this16.lng = params.tx;\n _this16.lat = params.ty;\n _this16.alt = params.tz;\n _this16.rotateX = params.rx;\n _this16.rotateY = params.ry;\n _this16.rotateZ = params.rz;\n _this16._rotationEditingCallBack && _this16._rotationEditingCallBack(_this16.editObj._params);\n };\n },\n set: function set(callback) {\n this._rotationEditingCallBack = callback;\n }\n }, {\n key: \"activeAnimate\",\n get: function get() {\n return this.options.activeAnimate;\n },\n set: function set(v) {\n this.options.activeAnimate = v;\n if (!this.entity || !this.entity.loader.components || !this.modelAnimations) {\n return;\n }\n this.entity.activeAnimations.removeAll();\n if (this.modelAnimations && this.modelAnimations.length > 0) {\n for (var i = 0; i < this.modelAnimations.length; i++) {\n if (this.modelAnimations[i].name === v) {\n this.entity.activeAnimations.add({\n index: i,\n loop: Cesium.ModelAnimationLoop.REPEAT,\n speedup: 1,\n reverse: false\n });\n break;\n }\n }\n }\n }\n }, {\n key: \"resetAnimate\",\n value: function () {\n var _resetAnimate = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (this.entity) {\n _context10.next = 2;\n break;\n }\n return _context10.abrupt(\"return\");\n case 2:\n this.activeAnimate = undefined;\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.on();\n case 5:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6, this);\n }));\n function resetAnimate() {\n return _resetAnimate.apply(this, arguments);\n }\n return resetAnimate;\n }()\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7() {\n var _this17 = this;\n var state,\n _this,\n equal,\n contentElm,\n tabsElm,\n equalSwitchElm,\n equalBoxElm,\n noEqualBoxElm,\n equalElms,\n colorPicker,\n labelColorPicker,\n lineColorPicker,\n labelBackgroundColorStartPicker,\n labelBackgroundColorEndPicker,\n all_elm,\n _args11 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n state = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context11.next = 46;\n break;\n }\n equal = false;\n if (this.scaleX === this.scaleY && this.scaleX === this.scaleZ) {\n equal = true;\n }\n _context11.next = 9;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.originalOptions, {\n title: '模型属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this17.name = _this17.options.name || '未命名对象';\n _this17.originalOptions = _this17.deepCopyObj(_this17.options);\n _this17._DialogObject.close();\n var cdoptions = _this17.deepCopyObj(_this17.options);\n cdoptions.host = '';\n _this17.Dialog.confirmCallBack && _this17.Dialog.confirmCallBack(cdoptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_21__[\"syncData\"])(_this17.sdk, _this17.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"syncSplitData\"])(_this17.sdk, _this17.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this17.reset();\n _this17.Dialog.resetCallBack && _this17.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this17.Dialog.removeCallBack && _this17.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this17.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this17.positionEditing = false;\n _this17.editObj && _this17.editObj.destroy();\n _this17.Dialog.closeCallBack && _this17.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this17.show = show;\n _this17.Dialog.showCallBack && _this17.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n if (_this17.positionEditing) {\n _this17.positionEditing = false;\n } else {\n _this17.positionEditing = true;\n }\n }\n }, true);\n case 9:\n this._DialogObject = _context11.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' model';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('model-edit-tabs', undefined, this.sdk);\n equalSwitchElm = this._DialogObject._element.content.getElementsByClassName('checkbox-box')[0].querySelector('input');\n equalBoxElm = this._DialogObject._element.content.getElementsByClassName('equal')[0];\n noEqualBoxElm = this._DialogObject._element.content.getElementsByClassName('no-equal')[0];\n equalSwitchElm.checked = equal;\n equalSwitchElm.addEventListener('change', function (e) {\n equal = e.target.checked;\n if (equal) {\n equalBoxElm.style.display = 'flex';\n noEqualBoxElm.style.display = 'none';\n _this17.scaleY = _this17.scaleX;\n _this17.scaleZ = _this17.scaleX;\n } else {\n equalBoxElm.style.display = 'none';\n noEqualBoxElm.style.display = 'flex';\n }\n });\n equalElms = equalBoxElm.getElementsByTagName('input');\n equalElms[0].value = this.scaleX;\n equalElms[1].value = this.scaleX;\n equalElms[0].addEventListener('input', function (e) {\n _this17.scaleX = e.target.value;\n _this17.scaleY = e.target.value;\n _this17.scaleZ = e.target.value;\n });\n equalElms[1].addEventListener('input', function (e) {\n _this17.scaleX = e.target.value;\n _this17.scaleY = e.target.value;\n _this17.scaleZ = e.target.value;\n });\n if (equal) {\n equalBoxElm.style.display = 'flex';\n noEqualBoxElm.style.display = 'none';\n } else {\n equalBoxElm.style.display = 'none';\n noEqualBoxElm.style.display = 'flex';\n }\n\n // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this17.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this17.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this17.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this17.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this17.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this17.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this17.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this17.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this17.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this17.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n this._elms.scaleX.push(equalElms[0], equalElms[1]);\n setTimeout(function () {\n _this17.attributeLink = _this17.options.attribute.link.content;\n _this17.attributeVr = _this17.options.attribute.vr.content;\n _this17.ISCSelect && _this17.ISCSelect();\n _this17.goodsSelect && _this17.goodsSelect();\n _this17.cameraSelect && _this17.cameraSelect();\n var tagData = _this17.attributeSelect;\n var attributeElm = _this17._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this17._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this17.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this17.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this17._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this17._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this17.labelFontFamily].value;\n for (var _i6 = 0; _i6 < fontData.length; _i6++) {\n if (fontData[_i6].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i6].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < fontData.length; _i7++) {\n if (fontData[_i7].value === fontDataLegpElm.value) {\n _this17.labelFontFamily = fontData[_i7].key;\n break;\n }\n }\n });\n _this17._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context11.next = 46;\n break;\n case 46:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n this.options.position.lng = v.position.lng;\n this.options.position.lat = v.position.lat;\n this.options.position.alt = v.position.alt;\n this.options.rotate.z = -v.heading;\n this.options.rotate.x = -v.pitch;\n this.options.rotate.y = -v.roll;\n this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label && (this.label.position = [this.options.position.lng, this.options.position.lat, this.options.position.alt]);\n }\n\n //更新模型位置\n }, {\n key: \"updateModel\",\n value: function updateModel(_tx, _ty, _tz) {\n var _this18 = this;\n var _rx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var _ry = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var _rz = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var _scale = arguments.length > 6 ? arguments[6] : undefined;\n _tx = parseFloat(_tx);\n _ty = parseFloat(_ty);\n _tz = parseFloat(parseFloat(_tz).toFixed(2));\n _rx = parseFloat(_rx);\n _ry = parseFloat(_ry);\n _rz = parseFloat(_rz);\n _scale.x = parseFloat(_scale.x);\n _scale.y = parseFloat(_scale.y);\n _scale.z = parseFloat(_scale.z);\n // _scale = parseFloat(_scale)\n // this.label.position = [_tx, _ty, _tz]\n this.entity.position = new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz);\n this.entity.rotate = {\n x: _rx,\n y: _ry,\n z: _rz\n };\n this.entity.customScale = _scale;\n var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(_rx));\n var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(_ry));\n var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(_rz));\n // 平移\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz));\n // 旋转\n var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n var rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n var originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.multiply(m, rotationX, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationZ, this.entity.modelMatrix);\n // 缩放\n var scaleX = _scale.x;\n var scaleY = _scale.y;\n var scaleZ = _scale.z;\n if (scaleX === 0) {\n scaleX = 0.00001;\n }\n if (scaleY === 0) {\n scaleY = 0.00001;\n }\n if (scaleZ === 0) {\n scaleZ = 0.00001;\n }\n Cesium.Matrix4.multiplyByScale(this.entity.modelMatrix, new Cesium.Cartesian3(scaleX, scaleY, scaleZ), this.entity.modelMatrix);\n this.entity.minimumPixelSize = this.scaleByDistance ? undefined : this.options.minimumPixelSize;\n this.editObj && this.editObj.update();\n this.entity.isMove = true;\n clearTimeout(_classPrivateFieldGet(_timeoutEventObject, this));\n _classPrivateFieldSet(_timeoutEventObject, this, setTimeout(function () {\n _this18.entity && (_this18.entity.isMove = false);\n }, 500));\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n try {\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lng = this.originalOptions.position.lng;\n this.lat = this.originalOptions.position.lat;\n this.alt = this.originalOptions.position.alt;\n this.maximumScale = this.originalOptions.maximumScale;\n this.minimumPixelSize = this.originalOptions.minimumPixelSize;\n this.scaleByDistance = this.originalOptions.scaleByDistance;\n this.rotateX = this.originalOptions.rotate.x;\n this.rotateY = this.originalOptions.rotate.y;\n this.rotateZ = this.originalOptions.rotate.z;\n this.scaleX = this.originalOptions.scale.x;\n this.scaleY = this.originalOptions.scale.y;\n this.scaleZ = this.originalOptions.scale.z;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n } catch (error) {}\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_17__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Model);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwvaW5kZXguanM/NmQ3MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRIb3N0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tIFwiLi4vLi4vLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnNcIjtcclxuaW1wb3J0IEVkaXRHbHRmIGZyb20gXCIuLi8uLi8uLi8uLi9Nb2RlbENvbnRyb2xsZXIvRWRpdEdsdGZcIjtcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gXCIuLi8uLi8uLi9MYWJlbE9iamVjdFwiO1xyXG5pbXBvcnQgeyBvcGVuTGVmdENsaWNrLCBjbG9zZUxlZnRDbGljaywgb3BlblJpZ2h0Q2xpY2ssIGNsb3NlUmlnaHRDbGljaywgZ2V0TGVmdENsaWNrU3RhdGUsIGdldFJpZ2h0Q2xpY2tTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9HbG9iYWwvQ2xpY2tDYWxsYmFja1wiXHJcbmltcG9ydCBCYXNlTW9kZWwgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBEcmF3UG9pbnQgZnJvbSAnLi4vLi4vLi4vLi4vLi4vRHJhdy9kcmF3UG9pbnQuanMnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkLCBnZXRTZGsgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBNb2RlbCBleHRlbmRzIEJhc2VNb2RlbCB7XHJcbiAgI3RpbWVvdXRFdmVudE9iamVjdCA9IG51bGxcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAZGVzY3JpcHRpb24g5Yqg6L295qih5Z6LXHJcbiAgICogQHBhcmFtIHNkayB7b2JqZWN0fSBzZGtcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDmqKHlnovlj4LmlbBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaooeWei+aYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMudXJsIHtzdHJpbmd9IOi1hOa6kOWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uIHtvYmplY3R9IOaooeWei+S9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNjYWxlIHtvYmplY3R9IOavlOS+i1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNjYWxlLng9MSB7bnVtYmVyfSB46L205q+U5L6LXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2NhbGUueT0xIHtudW1iZXJ9IHnovbTmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zY2FsZS56PTEge251bWJlcn0geui9tOavlOS+i1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1heGltdW1TY2FsZT0xMDAge251bWJlcn0g5pyA5aSn5q+U5L6LXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubWluaW11bVBpeGVsU2l6ZT02MCB7bnVtYmVyfSDmnIDlsI/lg4/ntKBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2U9dHJ1ZSB7Ym9vbGVhbn0g6ZqP6KeG6YeO57yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMucm90YXRlIHtvYmplY3R9IOaXi+i9rOinkuW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJvdGF0ZS54IHtudW1iZXJ9IHjovbTml4vovazluqbmlbBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yb3RhdGUueSB7bnVtYmVyfSB56L205peL6L2s5bqm5pWwXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucm90YXRlLnoge251bWJlcn0geui9tOaXi+i9rOW6puaVsFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsIHtvYmplY3R9IOagh+etvuWvueixoVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnRleHQge3N0cmluZ30g5qCH562+5paH5pysXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2hvdyB7c3RyaW5nfSDmoIfnrb7mmL7pmpBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7c3RyaW5nfSDmoIfnrb7kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7b2JqZWN0fSDmoIfnrb7kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250U2l6ZT0yMCB7bnVtYmVyfSDlrZfkvZPlpKflsI9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5PTAge251bWJlcn0g5a2X5L2T6aG5IDDvvJrpu5HkvZPvvJsx77ya5oCd5rqQ6buR5L2T77ybMu+8muW6numXqOato+mBk+agh+mimOS9k++8mzPvvJrmlbDpu5HkvZNcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5jb2xvcj0jZmZmZmZmIHtzdHJpbmd9IOWtl+S9k+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aD00IHtudW1iZXJ9IOW8lee6v+WuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVDb2xvcj0jMDBmZmZmODAge3N0cmluZ30g5byV57q/6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQ9MjAge251bWJlcn0g5a2X5L2T5YGP56e7KOW8lee6v+mVv+W6pilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3I9WycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10ge2FycmF5fSDog4zmma/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2Uge2Jvb2xlYW59IOi3neemu+e8qeaUvlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLm5lYXI9MjAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5Hot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mYXI9MTAwMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/nOi3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZSB7b2JqZWN0fSDlsZ7mgKflhoXlrrlcclxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucy5hdHRyaWJ1dGUubGluaz17fSDpk77mjqVcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50PVtdXSB7YXJyYXl9IOmTvuaOpeWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS5uYW1lIHtzdHJpbmd9IOmTvuaOpeWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS51cmwge3N0cmluZ30g6ZO+5o6l5Zyw5Z2AXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmljaFRleHRDb250ZW50IHtzdHJpbmd9IOWvjOaWh+acrOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4qICovXHJcbiAgY29uc3RydWN0b3IoZWFydGgsIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihlYXJ0aCwgb3B0aW9ucywgX0RpYWxvZyA9IHt9KVxyXG4gICAgaWYgKCFvcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcInBvc2l0aW9uIGlzIHJlcXVpcmVkIVwiKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbi5sbmcgJiYgb3B0aW9ucy5wb3NpdGlvbi5sbmcgIT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwibG5nIGlzIHJlcXVpcmVkIVwiKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbi5sYXQgJiYgb3B0aW9ucy5wb3NpdGlvbi5sYXQgIT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwibGF0IGlzIHJlcXVpcmVkIVwiKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmKHRoaXMub3B0aW9ucy5lYXJ0aCkge1xyXG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmVhcnRoXHJcbiAgICB9XHJcbiAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCAnI2ZmZmZmZidcclxuICAgIC8vIHRoaXMub3B0aW9ucy5zY2FsZSA9IChvcHRpb25zLnNjYWxlIHx8IG9wdGlvbnMuc2NhbGUgPT09IDApID8gb3B0aW9ucy5zY2FsZSA6IDFcclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zY2FsZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlID0ge31cclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLnggPSBvcHRpb25zLnNjYWxlXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZS55ID0gb3B0aW9ucy5zY2FsZVxyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGUueiA9IG9wdGlvbnMuc2NhbGVcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGUgPSBvcHRpb25zLnNjYWxlIHx8IHt9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZS54ID0gKHRoaXMub3B0aW9ucy5zY2FsZS54IHx8IHRoaXMub3B0aW9ucy5zY2FsZS54ID09PSAwKSA/IHRoaXMub3B0aW9ucy5zY2FsZS54IDogMVxyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGUueSA9ICh0aGlzLm9wdGlvbnMuc2NhbGUueSB8fCB0aGlzLm9wdGlvbnMuc2NhbGUueSA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuc2NhbGUueSA6IDFcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLnogPSAodGhpcy5vcHRpb25zLnNjYWxlLnogfHwgdGhpcy5vcHRpb25zLnNjYWxlLnogPT09IDApID8gdGhpcy5vcHRpb25zLnNjYWxlLnogOiAxXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsXHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVNjYWxlID0gKG9wdGlvbnMubWF4aW11bVNjYWxlIHx8IG9wdGlvbnMubWF4aW11bVNjYWxlID09PSAwKSA/IG9wdGlvbnMubWF4aW11bVNjYWxlIDogMTAwXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSA9IChvcHRpb25zLm1pbmltdW1QaXhlbFNpemUgfHwgb3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplID09PSAwKSA/IG9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSA6IDYwXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uID0gKG9wdGlvbnMucG9zaXRpb24gfHwge30pXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB7XHJcbiAgICAgIGxuZzogb3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIGxhdDogb3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIGFsdDogb3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSAob3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgfHwgb3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlIDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZSA9IG9wdGlvbnMucm90YXRlID0gKG9wdGlvbnMucm90YXRlIHx8IHt9KVxyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZS54ID0gb3B0aW9ucy5yb3RhdGUueCB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnkgPSBvcHRpb25zLnJvdGF0ZS55IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueiA9IG9wdGlvbnMucm90YXRlLnogfHwgMFxyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCBvcHRpb25zLmxhYmVsLmZvbnRTaXplID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZm9udFNpemUgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6IChvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA6IDQsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAob3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwKSA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMubGFiZWwubmVhciB8fCBvcHRpb25zLmxhYmVsLm5lYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuZW50aXR5ID0ge1xyXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb3NpdGlvbkNhbGxCYWNrID0gbnVsbFxyXG4gICAgdGhpcy5yb3RhdGlvbkNhbGxiYWNrID0gbnVsbFxyXG4gICAgdGhpcy5vbkNsaWNrQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcblxyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuXHJcbiAgICB0aGlzLm9uKClcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIFwiZ2xiXCJcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBsb2FkTW9kZWwodXJsKSB7XHJcbiAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLnNkay52aWV3ZXIuc2NlbmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB1cmwgPSB0aGlzLnJlcGxhY2VIb3N0KHVybCwgdGhpcy5vcHRpb25zLmhvc3QpXHJcbiAgICAvLyB0aGlzLmhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKFxyXG4gICAgLy8gICB0aGlzLnNkay52aWV3ZXIuY2FudmFzXHJcbiAgICAvLyApXHJcbiAgICAvLyB0aGlzLmhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKGV2ZW50KSA9PiB7XHJcbiAgICAvLyAgIGxldCBwaWNrZWRPYmplY3QgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGljayhldmVudC5wb3NpdGlvbik7XHJcbiAgICAvLyAgIC8vIOWIpOaWreaYr+WQpuaLvuWPluWIsOaooeWei1xyXG4gICAgLy8gICBpZiAoQ2VzaXVtLmRlZmluZWQocGlja2VkT2JqZWN0KSkge1xyXG4gICAgLy8gICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKGV2ZW50LnBvc2l0aW9uKTtcclxuICAgIC8vICAgICAvLyDmmK/lkKbojrflj5bliLDnqbrpl7TlnZDmoIdcclxuICAgIC8vICAgICBpZiAoQ2VzaXVtLmRlZmluZWQoY2FydGVzaWFuKSkge1xyXG4gICAgLy8gICAgICAgLy8gLy8g56m66Ze05Z2Q5qCH6L2s5LiW55WM5Z2Q5qCHKOW8p+W6pilcclxuICAgIC8vICAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oY2FydGVzaWFuKTtcclxuICAgIC8vICAgICAgIC8vIOW8p+W6pui9rOS4uuinkuW6pu+8iOe7j+e6rOW6pu+8iVxyXG4gICAgLy8gICAgICAgbGV0IGxvbiA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubG9uZ2l0dWRlKTtcclxuICAgIC8vICAgICAgIGxldCBsYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKTtcclxuICAgIC8vICAgICAgIC8v5qih5Z6L6auY5bqmXHJcbiAgICAvLyAgICAgICBsZXQgaGVpZ2h0ID0gY2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgIC8vICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5qih5Z6L6KGo6Z2i55qE57uP57qs5bqm6auY56iL5piv77yaXCIsIHtcclxuICAgIC8vICAgICAgIC8vICAgbG5nOiBsb24sXHJcbiAgICAvLyAgICAgICAvLyAgIGxhdDogbGF0LFxyXG4gICAgLy8gICAgICAgLy8gICBhbHQ6IGhlaWdodCxcclxuICAgIC8vICAgICAgIC8vIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLkxFRlRfQ0xJQ0spXHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICBzaG93OiB0aGlzLm9wdGlvbnMuc2hvdywgLy8g5piv5ZCm5pi+56S65qih5Z6LXHJcbiAgICAgIG1heGltdW1TY2FsZTogdGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSA/IHVuZGVmaW5lZCA6IHRoaXMub3B0aW9ucy5tYXhpbXVtU2NhbGUsXHJcbiAgICAgIG1pbmltdW1QaXhlbFNpemU6IHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPyB1bmRlZmluZWQgOiB0aGlzLm9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSxcclxuICAgICAgLy8gc2NhbGU6IHRoaXMub3B0aW9ucy5zY2FsZSxcclxuICAgICAgLy8gbWluaW11bVBpeGVsU2l6ZTogMVxyXG4gICAgfVxyXG4gICAgaWYgKE51bWJlcihDZXNpdW0uVkVSU0lPTi5zcGxpdCgnLicpWzFdKSA+PSAxMDcpIHtcclxuICAgICAgdGhpcy5lbnRpdHkgPSBhd2FpdCBDZXNpdW0uTW9kZWwuZnJvbUdsdGZBc3luYyhvcHRpb25zKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ID0gYXdhaXQgQ2VzaXVtLk1vZGVsLmZyb21HbHRmKG9wdGlvbnMpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHkuaW1hZ2VCYXNlZExpZ2h0aW5nLmx1bWluYW5jZUF0WmVuaXRoID0gMC42XHJcbiAgICB0aGlzLmVudGl0eS5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgLy8gdGhpcy5lbnRpdHkuY29sb3JCbGVuZE1vZGUgPSAxXHJcbiAgICAvLyDlsIbmqKHlnovmt7vliqDliLDlnLrmma/kuK1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZCh0aGlzLmVudGl0eSk7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgICB0aGlzLmVudGl0eS5yb3RhdGUgPSB7IC4uLnRoaXMub3B0aW9ucy5yb3RhdGUgfTtcclxuICAgIHRoaXMuZW50aXR5LmN1c3RvbVNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxlO1xyXG5cclxuXHJcblxyXG4gICAgLy8g6K6+572u5qih5Z6L55qE5peL6L2s6KeS5bqm77yM5L2/5YW25rC05bmz5pS+572u5LqO5Zyw6Z2iXHJcbiAgICB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKVxyXG4gICAgLy8g5qih5Z6L5aSn5bCP5q+U5L6LXHJcbiAgICAvLyBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUobWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjModGhpcy5vcHRpb25zLnNjYWxlLCB0aGlzLm9wdGlvbnMuc2NhbGUsIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG5cclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMyh0aGlzLm9wdGlvbnMuc2NhbGUsIHRoaXMub3B0aW9ucy5zY2FsZSwgdGhpcy5vcHRpb25zLnNjYWxlKSwgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXgpXHJcbiAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICB0aGlzLmVudGl0eS5yZWFkeUV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZW50aXR5Lm9yaWdpbmFsQm91bmRpbmdTcGhlcmVSYWRpdXMgPSB0aGlzLmVudGl0eS5ib3VuZGluZ1NwaGVyZS5yYWRpdXNcclxuICAgICAgICB0aGlzLmVkaXRPYmogPSBuZXcgRWRpdEdsdGYodGhpcy5zZGssIHRoaXMuZW50aXR5KVxyXG4gICAgICAgIHRoaXMuZWRpdE9iai50cmFuc2Zvcm1DYWxsQmFjayA9IHRoaXMucm90YXRpb25FZGl0aW5nQ2FsbEJhY2tcclxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgICAgICAvLyDmoIfnrb5cclxuICAgICAgICBpZiAoIXRoaXMubGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhpcy5zZGssIHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgc2hvdzogdGhpcy5vcHRpb25zLnNob3cgPyB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogW3RoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRdLFxyXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPyB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgbGluZUNvbG9yOiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICAgICAgICBsaW5lV2lkdGg6IHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgICAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgICAgICAgbmVhcjogdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgICAgICAgIGZhcjogdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gICAgICAgICAgfSwgdGhpcy5lbnRpdHkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmlzTW92ZSA9IHRydWVcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dEV2ZW50T2JqZWN0KVxyXG4gICAgICAgIHRoaXMuI3RpbWVvdXRFdmVudE9iamVjdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LmlzTW92ZSA9IGZhbHNlKVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmFjdGl2ZUFuaW1hdGUgPSB0aGlzLm9wdGlvbnMuYWN0aXZlQW5pbWF0ZVxyXG4gICAgICB0aGlzLm1vZGVsQW5pbWF0aW9ucyA9IHRoaXMuZW50aXR5LmxvYWRlci5jb21wb25lbnRzLmFuaW1hdGlvbnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eS5yZWFkeVByb21pc2UudGhlbigoZW50aXR5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyA9IHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLnJhZGl1c1xyXG4gICAgICAgIHRoaXMuZWRpdE9iaiA9IG5ldyBFZGl0R2x0Zih0aGlzLnNkaywgdGhpcy5lbnRpdHkpXHJcbiAgICAgICAgdGhpcy5lZGl0T2JqLnRyYW5zZm9ybUNhbGxCYWNrID0gdGhpcy5yb3RhdGlvbkVkaXRpbmdDYWxsQmFja1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuXHJcbiAgICAgICAgLy8g5qCH562+XHJcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoaXMuc2RrLCB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93ID8gdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgICAgICAgcG9zaXRpb246IFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XSxcclxuICAgICAgICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgOiAwLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICAgICAgICBwaXhlbE9mZnNldDogdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgIGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgICAgICAgbGluZVdpZHRoOiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICAgICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgICAgICAgIG5lYXI6IHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICAgICAgICBmYXI6IHRoaXMub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgICAgICAgIGdyb3VuZDogZmFsc2UsXHJcbiAgICAgICAgICB9LCB0aGlzLmVudGl0eSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbnRpdHkuaXNNb3ZlID0gdHJ1ZVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLiN0aW1lb3V0RXZlbnRPYmplY3QpXHJcbiAgICAgICAgdGhpcy4jdGltZW91dEV2ZW50T2JqZWN0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuaXNNb3ZlID0gZmFsc2UpXHJcbiAgICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgICAgLy8g5Yqo55S7XHJcbiAgICAgICAgLy8gZW50aXR5LmFjdGl2ZUFuaW1hdGlvbnMuYWRkKHtcclxuICAgICAgICAvLyAgIGluZGV4OiAxLFxyXG4gICAgICAgIC8vICAgbG9vcDogQ2VzaXVtLk1vZGVsQW5pbWF0aW9uTG9vcC5SRVBFQVQsXHJcbiAgICAgICAgLy8gICBzcGVlZHVwOiAyLFxyXG4gICAgICAgIC8vICAgcmV2ZXJzZTogZmFsc2VcclxuICAgICAgICAvLyB9KVxyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUFuaW1hdGUgPSB0aGlzLm9wdGlvbnMuYWN0aXZlQW5pbWF0ZVxyXG4gICAgICAgIHRoaXMubW9kZWxBbmltYXRpb25zID0gdGhpcy5lbnRpdHkubG9hZGVyLmNvbXBvbmVudHMuYW5pbWF0aW9uc1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRNb2RlbEFuaW1hdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LnJlYWR5RXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsQW5pbWF0aW9ucyA9IHRoaXMuZW50aXR5LmxvYWRlci5jb21wb25lbnRzLmFuaW1hdGlvbnNcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5tb2RlbEFuaW1hdGlvbnMpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5yZWFkeVByb21pc2UudGhlbigoZW50aXR5KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsQW5pbWF0aW9ucyA9IHRoaXMuZW50aXR5LmxvYWRlci5jb21wb25lbnRzLmFuaW1hdGlvbnNcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5tb2RlbEFuaW1hdGlvbnMpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gYXN5bmMgbG9hZE1vZGVsQnkyRCh1cmwpIHtcclxuICAvLyAgIHRoaXMuZW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgLy8gICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93LFxyXG4gIC8vICAgICByZWN0YW5nbGU6IHtcclxuICAvLyAgICAgICBjb29yZGluYXRlczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAvLyAgICAgICAgIGxldCBnYXAgPSBNYXRoLmFicyhNYXRoLmNvcyhNYXRoLlBJIC8gMTgwICogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCkpICogKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAvLyAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW1xyXG4gIC8vICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgLSBnYXAsXHJcbiAgLy8gICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgKyAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIGdhcCxcclxuICAvLyAgICAgICAgIF1cclxuICAvLyAgICAgICAgIHJldHVybiBDZXNpdW0uUmVjdGFuZ2xlLmZyb21EZWdyZWVzKC4uLmZyb21EZWdyZWVzQXJyYXkpXHJcbiAgLy8gICAgICAgfSwgZmFsc2UpLFxyXG4gIC8vICAgICAgIG1hdGVyaWFsOiB0aGlzLm9wdGlvbnMudXJsLFxyXG4gIC8vICAgICAgIHJvdGF0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuYW5nbGUpXHJcbiAgLy8gICAgICAgfSwgZmFsc2UpLFxyXG4gIC8vICAgICAgIHN0Um90YXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgLy8gICAgICAgICByZXR1cm4gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5hbmdsZSlcclxuICAvLyAgICAgICB9LCBmYWxzZSlcclxuICAvLyAgICAgfSxcclxuICAvLyAgIH0pXHJcbiAgLy8gICBpZiAodGhpcy5zZGsudmlld2VyLl9lbGVtZW50LmNsYXNzTmFtZSA9PT0gJ2Nlc2l1bS12aWV3ZXIgMmQnKSB7XHJcbiAgLy8gICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5oZWlnaHQgPSAwXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICByZW1vdmUoKSB7XHJcbiAgICBzdXBlci5yZW1vdmUoKVxyXG4gICAgdGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLnJlbW92ZSgpXHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5lbnRpdHkpO1xyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGZseVRvKCkge1xyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICAgIGNsb3NlVmlld0ZvbGxvdyh0aGlzLnNkaylcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbVZpZXcgJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbikge1xyXG4gICAgICBsZXQgb3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcgfHwgMC4wKSxcclxuICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHx8IC02MC4wKSxcclxuICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB8fCAwLjApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZ1xyXG4gICAgICBsZXQgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXRcclxuICAgICAgbGV0IGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB7IGxuZzogMCwgbGF0OiAwIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsbmcnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubG5nID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsYXQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubGF0ID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24uYWx0ID0gdGhpcy5vcHRpb25zLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICBwb3NpdGlvbi5hbHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQocG9zaXRpb24pXHJcbiAgICAgIH1cclxuICAgICAgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcgKyBwb3NpdGlvbi5sbmdcclxuICAgICAgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQgKyBwb3NpdGlvbi5sYXRcclxuICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKE51bWJlcihDZXNpdW0uVkVSU0lPTi5zcGxpdCgnLicpWzFdKSA+PSAxMDcpIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRpdHkucmVhZHkpIHtcclxuICAgICAgICAgIGxldCBib3VuZGluZ1NwaGVyZSA9IG5ldyBDZXNpdW0uQm91bmRpbmdTcGhlcmUoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCksIHRoaXMuZW50aXR5Lm9yaWdpbmFsQm91bmRpbmdTcGhlcmVSYWRpdXMgKiB0aGlzLm9wdGlvbnMuc2NhbGUueiAqIDIpXHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoYm91bmRpbmdTcGhlcmUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LnJlYWR5UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGxldCBib3VuZGluZ1NwaGVyZSA9IG5ldyBDZXNpdW0uQm91bmRpbmdTcGhlcmUoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCksICh0aGlzLmVudGl0eS5vcmlnaW5hbEJvdW5kaW5nU3BoZXJlUmFkaXVzIHx8IHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLnJhZGl1cykgKiB0aGlzLm9wdGlvbnMuc2NhbGUueiAqIDIpXHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoYm91bmRpbmdTcGhlcmUpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe2Rlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0KX0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoKVxyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKCkge1xyXG4gICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCBcIlwiXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG5cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdlxyXG4gICAgdGhpcy5lbnRpdHkuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbG5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmdcclxuICB9XHJcblxyXG4gIHNldCBsbmcodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0ge1xyXG4gICAgICBsbmc6IHYsXHJcbiAgICAgIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgYWx0OiB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdF0pXHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IHtcclxuICAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICBsYXQ6IHYsXHJcbiAgICAgIGFsdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRdKVxyXG4gICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhbHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gIH1cclxuXHJcbiAgc2V0IGFsdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB7XHJcbiAgICAgIGxuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgbGF0OiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgICBhbHQ6IHZcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCwgdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyksIE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0KSwgTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQpXSlcclxuICAgIHRoaXMuX2VsbXMuYWx0ICYmIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWF4aW11bVNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tYXhpbXVtU2NhbGVcclxuICB9XHJcblxyXG4gIHNldCBtYXhpbXVtU2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1TY2FsZSA9IHZcclxuICAgIHRoaXMuZW50aXR5Lm1heGltdW1TY2FsZSA9IHRoaXMuc2NhbGVCeURpc3RhbmNlID8gdW5kZWZpbmVkIDogdlxyXG4gICAgdGhpcy5fZWxtcy5tYXhpbXVtU2NhbGUgJiYgdGhpcy5fZWxtcy5tYXhpbXVtU2NhbGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBtaW5pbXVtUGl4ZWxTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplXHJcbiAgfVxyXG5cclxuICBzZXQgbWluaW11bVBpeGVsU2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSA9IHZcclxuICAgIHRoaXMuZW50aXR5Lm1pbmltdW1QaXhlbFNpemUgPSB0aGlzLnNjYWxlQnlEaXN0YW5jZSA/IHVuZGVmaW5lZCA6IHRoaXMub3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplXHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1QaXhlbFNpemUgJiYgdGhpcy5fZWxtcy5taW5pbXVtUGl4ZWxTaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcblxyXG4gIHNldCBzY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuZW50aXR5Lm1heGltdW1TY2FsZSA9IHYgPyB1bmRlZmluZWQgOiB0aGlzLm1heGltdW1TY2FsZVxyXG4gICAgdGhpcy5lbnRpdHkubWluaW11bVBpeGVsU2l6ZSA9IHYgPyB1bmRlZmluZWQgOiB0aGlzLm9wdGlvbnMubWluaW11bVBpeGVsU2l6ZVxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvdGF0ZVgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJvdGF0ZS54XHJcbiAgfVxyXG5cclxuICBzZXQgcm90YXRlWCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnggPSB2XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMucm90YXRlWCAmJiB0aGlzLl9lbG1zLnJvdGF0ZVguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCByb3RhdGVZKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yb3RhdGUueVxyXG4gIH1cclxuXHJcbiAgc2V0IHJvdGF0ZVkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZS55ID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLnJvdGF0ZVkgJiYgdGhpcy5fZWxtcy5yb3RhdGVZLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcm90YXRlWigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucm90YXRlLnpcclxuICB9XHJcblxyXG4gIHNldCByb3RhdGVaKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueiA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCwgdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgdGhpcy5fZWxtcy5yb3RhdGVaICYmIHRoaXMuX2VsbXMucm90YXRlWi5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHNjYWxlKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHNjYWxlKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IHZcclxuICAvLyAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCwgdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gIC8vICAgdGhpcy5fZWxtcy5zY2FsZSAmJiB0aGlzLl9lbG1zLnNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAvLyAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICBnZXQgc2NhbGVYKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZS54XHJcbiAgfVxyXG5cclxuICBzZXQgc2NhbGVYKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZS54ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDIpKVxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlWCAmJiB0aGlzLl9lbG1zLnNjYWxlWC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuc2NhbGUueFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBzY2FsZVkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNjYWxlLnlcclxuICB9XHJcblxyXG4gIHNldCBzY2FsZVkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlLnkgPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoMikpXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMuc2NhbGVZICYmIHRoaXMuX2VsbXMuc2NhbGVZLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5zY2FsZS55XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlWigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbGUuelxyXG4gIH1cclxuXHJcbiAgc2V0IHNjYWxlWih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2NhbGUueiA9IE51bWJlcihOdW1iZXIodikudG9GaXhlZCgyKSlcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCwgdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZVogJiYgdGhpcy5fZWxtcy5zY2FsZVouZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnNjYWxlLnpcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuc2hvdyA9IHYpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJiB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250RmFtaWx5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gdiB8fCAwXHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmZvbnRGYW1pbHkgPSB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSlcclxuXHJcbiAgICBsZXQgbmFtZSA9IGdldEZvbnRGYW1pbHlOYW1lKHRoaXMubGFiZWxGb250RmFtaWx5KSB8fCAnJ1xyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmFtZVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuY29sb3IgPSB2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmZvbnRTaXplID0gdilcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZSAmJiB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2KVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbE5lYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLm5lYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsTmVhcih2KSB7XHJcbiAgICBsZXQgbmVhciA9IHZcclxuICAgIGlmIChuZWFyID4gdGhpcy5sYWJlbEZhcikge1xyXG4gICAgICBuZWFyID0gdGhpcy5sYWJlbEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTmVhciAmJiB0aGlzLl9lbG1zLmxhYmVsTmVhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBuZWFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsRmFyKHYpIHtcclxuICAgIGxldCBmYXIgPSB2XHJcbiAgICBpZiAoZmFyIDwgdGhpcy5sYWJlbE5lYXIpIHtcclxuICAgICAgZmFyID0gdGhpcy5sYWJlbE5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRmFyICYmIHRoaXMuX2VsbXMubGFiZWxGYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gZmFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmxpbmVXaWR0aCA9IHYpXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdilcclxuICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldCAmJiB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhYmVsTGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmxpbmVDb2xvciA9IHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dKVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XSlcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlSVNDKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVJU0Modikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBvc2l0aW9uKCkge1xyXG4gIC8vICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbih0aGlzLmVudGl0eS5wb3NpdGlvbik7XHJcbiAgLy8gICBsZXQgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUgKyAwLjAwMDAwMDAwNjYzODE0KTtcclxuICAvLyAgIGxldCBsYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlICsgMC4wMDAwMDAyNTEzNzgzNSk7XHJcbiAgLy8gICByZXR1cm4geyBsbmc6IGxuZywgbGF0OiBsYXQsIGFsdDogY2FydG9ncmFwaGljLmhlaWdodCAtIDIuMTkxMDQ2MTEwNDMyMzQgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHBvc2l0aW9uKHApIHtcclxuXHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDmiZPlvIDmqKHlnovml4vovazlip/og71cclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqIEBtZXRob2RPZiBTb3VyY2VcclxuICAgKiAqL1xyXG4gIHNldCByb3RhdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmouZWRpdFJ0YXRpb24oKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmouZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDojrflj5bmqKHlnovml4vovaznirbmgIFcclxuICAgKiBAbWV0aG9kIHJvdGF0aW9uRWRpdGluZ1xyXG4gICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAqIEBtZXRob2RPZiBTb3VyY2VcclxuXHJcbiAgICogKi9cclxuICBnZXQgcm90YXRpb25FZGl0aW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9iai5nZXRBY3RpdmVTdGF0ZSgpID09PSAncnRhdGlvbicpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75qih5Z6L5Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICpAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5sZWZ0Q2xpY2tTdGF0ZSA9IGdldExlZnRDbGlja1N0YXRlKClcclxuICAgICAgdGhpcy5lZGl0T2JqICYmIHRoaXMuZWRpdE9iai5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICAgIG5ldyBjbG9zZUxlZnRDbGljayh0aGlzLnNkaylcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sZWZ0Q2xpY2tTdGF0ZSAmJiAhZ2V0TGVmdENsaWNrU3RhdGUoKSkge1xyXG4gICAgICAgIG5ldyBvcGVuTGVmdENsaWNrKHRoaXMuc2RrKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmouZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmouZ2V0QWN0aXZlU3RhdGUoKSA9PT0gJ3RyYW5zbGF0aW9uYWwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8v5bmz56e75pe277yM5Z2Q5qCH5L+h5oGv5Y+Y5YyW55qE5Zue6LCDXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZ0NhbGxCYWNrKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmdDYWxsQmFjaygpIHtcclxuICB9XHJcblxyXG4gIC8v5peL6L2s5pe277yM5Z2Q5qCH5L+h5oGv5Y+Y5YyW55qE5Zue6LCDXHJcbiAgc2V0IHJvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9yb3RhdGlvbkVkaXRpbmdDYWxsQmFjayA9IGNhbGxiYWNrXHJcbiAgfVxyXG5cclxuICBnZXQgcm90YXRpb25FZGl0aW5nQ2FsbEJhY2soKSB7XHJcbiAgICByZXR1cm4gKHBhcmFtcykgPT4ge1xyXG4gICAgICAvLyBsZXQgcGFyYW1zID0gdGhpcy5lZGl0T2JqLl9wYXJhbXNcclxuICAgICAgLy8gdGhpcy5vcHRpb25zLnBvc2l0aW9uID0ge1xyXG4gICAgICAvLyAgIGxuZzogcGFyYW1zLnR4LFxyXG4gICAgICAvLyAgIGxhdDogcGFyYW1zLnR5LFxyXG4gICAgICAvLyAgIGFsdDogcGFyYW1zLnR6LFxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMubG5nID0gcGFyYW1zLnR4XHJcbiAgICAgIHRoaXMubGF0ID0gcGFyYW1zLnR5XHJcbiAgICAgIHRoaXMuYWx0ID0gcGFyYW1zLnR6XHJcbiAgICAgIHRoaXMucm90YXRlWCA9IHBhcmFtcy5yeFxyXG4gICAgICB0aGlzLnJvdGF0ZVkgPSBwYXJhbXMucnlcclxuICAgICAgdGhpcy5yb3RhdGVaID0gcGFyYW1zLnJ6XHJcbiAgICAgIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrICYmIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKHRoaXMuZWRpdE9iai5fcGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZUFuaW1hdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFjdGl2ZUFuaW1hdGVcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVBbmltYXRlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hY3RpdmVBbmltYXRlID0gdlxyXG4gICAgaWYgKCF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkubG9hZGVyLmNvbXBvbmVudHMgfHwgIXRoaXMubW9kZWxBbmltYXRpb25zKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkuYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmVBbGwoKVxyXG4gICAgaWYgKHRoaXMubW9kZWxBbmltYXRpb25zICYmIHRoaXMubW9kZWxBbmltYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1vZGVsQW5pbWF0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsQW5pbWF0aW9uc1tpXS5uYW1lID09PSB2KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5hY3RpdmVBbmltYXRpb25zLmFkZCh7XHJcbiAgICAgICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgICAgICBsb29wOiBDZXNpdW0uTW9kZWxBbmltYXRpb25Mb29wLlJFUEVBVCxcclxuICAgICAgICAgICAgc3BlZWR1cDogMSxcclxuICAgICAgICAgICAgcmV2ZXJzZTogZmFsc2VcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVzZXRBbmltYXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlQW5pbWF0ZSA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5vbigpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24g57yW6L6R5qGGXHJcbiAgICogQHBhcmFtIHN0YXRlPWZhbHNlIHtib29sZWFufSDnirbmgIE6IHRydWXmiZPlvIAsIGZhbHNl5YWz6ZetXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIGxldCBlcXVhbCA9IGZhbHNlXHJcbiAgICAgIGlmICh0aGlzLnNjYWxlWCA9PT0gdGhpcy5zY2FsZVkgJiYgdGhpcy5zY2FsZVggPT09IHRoaXMuc2NhbGVaKSB7XHJcbiAgICAgICAgZXF1YWwgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+aooeWei+WxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICBsZXQgY2RvcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICBjZG9wdGlvbnMuaG9zdCA9ICcnXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKGNkb3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmVkaXRPYmogJiYgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBtb2RlbCdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcblxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUlTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdtb2RlbC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG5cclxuICAgICAgbGV0IGVxdWFsU3dpdGNoRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2hlY2tib3gtYm94JylbMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG4gICAgICBsZXQgZXF1YWxCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlcXVhbCcpWzBdXHJcbiAgICAgIGxldCBub0VxdWFsQm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tZXF1YWwnKVswXVxyXG4gICAgICBlcXVhbFN3aXRjaEVsbS5jaGVja2VkID0gZXF1YWxcclxuICAgICAgZXF1YWxTd2l0Y2hFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICBlcXVhbCA9IGUudGFyZ2V0LmNoZWNrZWRcclxuICAgICAgICBpZiAoZXF1YWwpIHtcclxuICAgICAgICAgIGVxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgIG5vRXF1YWxCb3hFbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgdGhpcy5zY2FsZVkgPSB0aGlzLnNjYWxlWFxyXG4gICAgICAgICAgdGhpcy5zY2FsZVogPSB0aGlzLnNjYWxlWFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGVxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgIG5vRXF1YWxCb3hFbG0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBlcXVhbEVsbXMgPSBlcXVhbEJveEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVxyXG4gICAgICBlcXVhbEVsbXNbMF0udmFsdWUgPSB0aGlzLnNjYWxlWFxyXG4gICAgICBlcXVhbEVsbXNbMV0udmFsdWUgPSB0aGlzLnNjYWxlWFxyXG5cclxuICAgICAgZXF1YWxFbG1zWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLnNjYWxlWCA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIHRoaXMuc2NhbGVaID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgfSlcclxuICAgICAgZXF1YWxFbG1zWzFdLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLnNjYWxlWCA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIHRoaXMuc2NhbGVaID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmIChlcXVhbCkge1xyXG4gICAgICAgIGVxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICBub0VxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlcXVhbEJveEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgbm9FcXVhbEJveEVsbS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxMaW5lQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0XCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yRW5kXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICB0aGlzLl9FdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IHRoaXMuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMuc2NhbGVYLnB1c2goZXF1YWxFbG1zWzBdLCBlcXVhbEVsbXNbMV0pXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICB0aGlzLklTQ1NlbGVjdCAmJiB0aGlzLklTQ1NlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvbnREYXRhID0gZ2V0Rm9udExpc3QoKVxyXG4gICAgICAgIGxldCBmb250T2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdmb250LXNlbGVjdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5mb250LXNlbGVjdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGZvbnRPYmplY3QpIHtcclxuICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2goZm9udERhdGEpXHJcbiAgICAgICAgICBsZXQgZm9udERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZvbnQtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0udmFsdWUgPSBmb250RGF0YVt0aGlzLmxhYmVsRm9udEZhbWlseV0udmFsdWVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoZm9udERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gZm9udERhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ID0gW2ZvbnREYXRhTGVncEVsbV1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSB2LnBvc2l0aW9uLmxuZ1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHYucG9zaXRpb24ubGF0XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gdi5wb3NpdGlvbi5hbHRcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueiA9IC12LmhlYWRpbmdcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueCA9IC12LnBpdGNoXHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnkgPSAtdi5yb2xsXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdF0pXHJcbiAgfVxyXG5cclxuICAvL+abtOaWsOaooeWei+S9jee9rlxyXG4gIHVwZGF0ZU1vZGVsKF90eCwgX3R5LCBfdHosIF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDAsIF9zY2FsZSkge1xyXG4gICAgX3R4ID0gcGFyc2VGbG9hdChfdHgpXHJcbiAgICBfdHkgPSBwYXJzZUZsb2F0KF90eSlcclxuICAgIF90eiA9IHBhcnNlRmxvYXQocGFyc2VGbG9hdChfdHopLnRvRml4ZWQoMikpXHJcbiAgICBfcnggPSBwYXJzZUZsb2F0KF9yeClcclxuICAgIF9yeSA9IHBhcnNlRmxvYXQoX3J5KVxyXG4gICAgX3J6ID0gcGFyc2VGbG9hdChfcnopXHJcbiAgICBfc2NhbGUueCA9IHBhcnNlRmxvYXQoX3NjYWxlLngpXHJcbiAgICBfc2NhbGUueSA9IHBhcnNlRmxvYXQoX3NjYWxlLnkpXHJcbiAgICBfc2NhbGUueiA9IHBhcnNlRmxvYXQoX3NjYWxlLnopXHJcbiAgICAvLyBfc2NhbGUgPSBwYXJzZUZsb2F0KF9zY2FsZSlcclxuICAgIC8vIHRoaXMubGFiZWwucG9zaXRpb24gPSBbX3R4LCBfdHksIF90el1cclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKF90eCwgX3R5LCBfdHopXHJcbiAgICB0aGlzLmVudGl0eS5yb3RhdGUgPSB7IHg6IF9yeCwgeTogX3J5LCB6OiBfcnogfTtcclxuICAgIHRoaXMuZW50aXR5LmN1c3RvbVNjYWxlID0gX3NjYWxlO1xyXG4gICAgbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeClcclxuICAgIClcclxuICAgIGxldCBteSA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblkoXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcnkpXHJcbiAgICApXHJcbiAgICBsZXQgbXogPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25aKFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J6KVxyXG4gICAgKVxyXG4gICAgLy8g5bmz56e7XHJcbiAgICBsZXQgbSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdHgsIF90eSwgX3R6KSlcclxuICAgIC8vIOaXi+i9rFxyXG4gICAgbGV0IHJvdGF0aW9uWCA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG14KVxyXG4gICAgbGV0IHJvdGF0aW9uWSA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG15KVxyXG4gICAgbGV0IHJvdGF0aW9uWiA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG16KVxyXG4gICAgbGV0IG9yaWdpbmFsTWF0cml4ID0gbmV3IENlc2l1bS5NYXRyaXg0KClcclxuXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShtLCByb3RhdGlvblgsIG9yaWdpbmFsTWF0cml4KVxyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkob3JpZ2luYWxNYXRyaXgsIHJvdGF0aW9uWSwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25aLCB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeClcclxuICAgIC8vIOe8qeaUvlxyXG4gICAgbGV0IHNjYWxlWCA9IF9zY2FsZS54XHJcbiAgICBsZXQgc2NhbGVZID0gX3NjYWxlLnlcclxuICAgIGxldCBzY2FsZVogPSBfc2NhbGUuelxyXG4gICAgaWYgKHNjYWxlWCA9PT0gMCkge1xyXG4gICAgICBzY2FsZVggPSAwLjAwMDAxXHJcbiAgICB9XHJcbiAgICBpZiAoc2NhbGVZID09PSAwKSB7XHJcbiAgICAgIHNjYWxlWSA9IDAuMDAwMDFcclxuICAgIH1cclxuICAgIGlmIChzY2FsZVogPT09IDApIHtcclxuICAgICAgc2NhbGVaID0gMC4wMDAwMVxyXG4gICAgfVxyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVNjYWxlKHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoc2NhbGVYLCBzY2FsZVksIHNjYWxlWiksIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG4gICAgdGhpcy5lbnRpdHkubWluaW11bVBpeGVsU2l6ZSA9IHRoaXMuc2NhbGVCeURpc3RhbmNlID8gdW5kZWZpbmVkIDogdGhpcy5vcHRpb25zLm1pbmltdW1QaXhlbFNpemVcclxuICAgIHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmoudXBkYXRlKClcclxuICAgIHRoaXMuZW50aXR5LmlzTW92ZSA9IHRydWVcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLiN0aW1lb3V0RXZlbnRPYmplY3QpXHJcbiAgICB0aGlzLiN0aW1lb3V0RXZlbnRPYmplY3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LmlzTW92ZSA9IGZhbHNlKVxyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICAgIHRoaXMubG5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgICAgIHRoaXMubGF0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMuYWx0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICAgIHRoaXMubWF4aW11bVNjYWxlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWF4aW11bVNjYWxlXHJcbiAgICAgIHRoaXMubWluaW11bVBpeGVsU2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1QaXhlbFNpemVcclxuICAgICAgdGhpcy5zY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2VcclxuICAgICAgdGhpcy5yb3RhdGVYID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm90YXRlLnhcclxuICAgICAgdGhpcy5yb3RhdGVZID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm90YXRlLnlcclxuICAgICAgdGhpcy5yb3RhdGVaID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm90YXRlLnpcclxuICAgICAgdGhpcy5zY2FsZVggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zY2FsZS54XHJcbiAgICAgIHRoaXMuc2NhbGVZID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2NhbGUueVxyXG4gICAgICB0aGlzLnNjYWxlWiA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlLnpcclxuICAgICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICAgIHRoaXMubGFiZWxDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgICB0aGlzLmxhYmVsU2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgICAgIHRoaXMubGFiZWxMaW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgICB0aGlzLmxhYmVsTmVhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLm5lYXJcclxuICAgICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUlTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTW9kZWxcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTVEQTtBQTZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdkpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5SkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZkE7QUFBQTtBQUFBO0FBQUE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUF0RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQXVCQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBdEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZ0JBO0FBQUE7QUFBQTtBQU5BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFuQkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXFCQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFQQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXpDQTtBQTBDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQWpRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseModel/Model/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseModel/Model2/_element.js": /*!**************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseModel/Model2/_element.js ***! \**************************************************************/ /*! exports provided: html, css */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return css; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u6700\\u5927\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u6700\\u5C0F\\u50CF\\u7D20\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n \\n
\\n
\\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n
\\n x\\u8F74\\n \\n \\n
\\n
\\n
\\n
\\n y\\u8F74\\n \\n \\n
\\n
\\n
\\n
\\n z\\u8F74\\n \\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n \\n \\n
\\n
\\n
\\n
\\n \\u7F29\\u653E\\n \\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n \");\n}\nfunction css() {\n return \"\\n .YJ-custom-base-dialog>.content {\\n width: 600px;\\n }\\n .YJ-custom-base-dialog>.content>div>.row .col {\\n margin: 0 10px;\\n }\\n .YJ-custom-base-dialog>.content>div>.row .col:first-child {\\n margin-left: 0;\\n }\\n .YJ-custom-base-dialog>.content>div>.row .col:last-child {\\n margin-right: 0;\\n }\\n .YJ-custom-base-dialog>.content>div>.row .label {\\n flex: 0 0 74px;\\n }\\n .YJ-custom-base-dialog>.content .DIV-cy-tab-content-pane .input-select {\\n width: 100px;\\n }\\n\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwyL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZU1vZGVsL01vZGVsMi9fZWxlbWVudC5qcz9jYjkyIl0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uLy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICByZXR1cm4gYFxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuminOiJsjwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTE4MFwiIG1heD1cIjE4MFwiIEBtb2RlbD1cImxuZ1wiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDlpKfmr5Tkvos8L3NwYW4+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMC4xXCIgbWF4PVwiOTk5OTlcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwibWF4aW11bVNjYWxlXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTkwXCIgbWF4PVwiOTBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pyA5bCP5YOP57SgPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OVwiIEBtb2RlbD1cIm1pbmltdW1QaXhlbFNpemVcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiIEBtb2RlbD1cImFsdFwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7op4bph47nvKnmlL48L3NwYW4+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzY2FsZUJ5RGlzdGFuY2VcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxESVYtY3ktdGFicyBpZD1cIm1vZGVsLWVkaXQtdGFic1wiPlxyXG4gICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5L+h5oGvXCI+XHJcbiAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuaWueWQkeS/oeaBr1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+eOi9tDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ3aWR0aDogMzMycHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiMzYwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwicm90YXRlWFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDt3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjM2MFwiIEBtb2RlbD1cInJvdGF0ZVhcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj556L20PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAzMzJweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzNjBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJyb3RhdGVZXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O3dpZHRoOiAxMDBweDtcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiMzYwXCIgQG1vZGVsPVwicm90YXRlWVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnrovbQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwid2lkdGg6IDMzMnB4O1wiIHR5cGU9XCJyYW5nZVwiIG1heD1cIjM2MFwiIG1pbj1cIjBcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInJvdGF0ZVpcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7d2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIzNjBcIiBAbW9kZWw9XCJyb3RhdGVaXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAzMzJweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCI5OTk5OTlcIiBtaW49XCItOTk5OTlcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cImFsdFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDt3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5XCIgbWF4PVwiOTk5OTk5XCIgQG1vZGVsPVwiYWx0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57yp5pS+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAzMzJweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCI5OTlcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzY2FsZVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDt3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwic2NhbGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgPC9kaXY+XHJcbiAgYFxyXG59XHJcbmZ1bmN0aW9uIGNzcygpIHtcclxuICByZXR1cm4gYFxyXG4gIC5ZSi1jdXN0b20tYmFzZS1kaWFsb2c+LmNvbnRlbnQge1xyXG4gICAgd2lkdGg6IDYwMHB4O1xyXG4gIH1cclxuICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50PmRpdj4ucm93IC5jb2wge1xyXG4gICAgICBtYXJnaW46IDAgMTBweDtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudD5kaXY+LnJvdyAuY29sOmZpcnN0LWNoaWxkIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgfVxyXG4gIC5ZSi1jdXN0b20tYmFzZS1kaWFsb2c+LmNvbnRlbnQ+ZGl2Pi5yb3cgLmNvbDpsYXN0LWNoaWxkIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gIH1cclxuICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50PmRpdj4ucm93IC5sYWJlbCB7XHJcbiAgICAgIGZsZXg6IDAgMCA3NHB4O1xyXG4gIH1cclxuICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50IC5ESVYtY3ktdGFiLWNvbnRlbnQtcGFuZSAuaW5wdXQtc2VsZWN0IHtcclxuICAgICAgd2lkdGg6IDEwMHB4O1xyXG4gIH1cclxuYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sLCBjc3MgfSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUE4RkE7QUFDQTtBQUNBO0FBb0JBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseModel/Model2/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseModel/Model2/index.js": /*!***********************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseModel/Model2/index.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BaseSource/BaseModel/Model2/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseModel/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n\n\n\n\n\n\n\n\n\n\n\nvar Model2 = /*#__PURE__*/function (_BaseModel) {\n /**\r\n * @constructor\r\n * @description 加载模型\r\n * @param sdk {object} sdk\r\n * @param options {object} 模型参数\r\n * @param options.id {string} 对象id\r\n * @param options.show=true {boolean} 模型显隐\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 资源地址\r\n * @param options.positions {Array.} 坐标数组 [{lng,lat,alt},...]\r\n * @param options.height {number} 高程,为空时取坐标中最低高程\r\n * @param options.type=0 {number} 类型 0:点;1:线;2:多边形;3:矩形\r\n * @param options.interval=1 {number} 间隔(米),type=0时不生效\r\n * @param options.quantity {object} 数量,type=3时生效\r\n * @param options.quantity.x {number} x轴方向数量,type=3时生效\r\n * @param options.quantity.y {number} y轴方向数量,type=3时生效\r\n * @param options.scale=1 {number} 比例\r\n * @param options.maximumScale=100 {number} 最大比例\r\n * @param options.minimumPixelSize=60 {number} 最小像素\r\n * @param options.scaleByDistance=true {boolean} 随视野缩放\r\n * @param options.rotate {object} 旋转角度\r\n * @param options.rotate.x {number} x轴旋转度数\r\n * @param options.rotate.y {number} y轴旋转度数\r\n * @param options.rotate.z {number} z轴旋转度数\r\n * */\n function Model2(earth) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, Model2);\n _this2 = _callSuper(this, Model2, [earth, options, _Dialog = {}]);\n _this2.picking = true;\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || '#ffffff';\n _this2.options.scale = options.scale || options.scale === 0 ? options.scale : 1;\n _this2.options.url = options.url;\n _this2.options.maximumScale = options.maximumScale || options.maximumScale === 0 ? options.maximumScale : 100;\n _this2.options.minimumPixelSize = options.minimumPixelSize || options.minimumPixelSize === 0 ? options.minimumPixelSize : 60;\n _this2.options.positions = options.positions || [];\n _this2.options.type = options.type || 0;\n _this2.options.interval = options.interval || options.interval === 0 ? options.interval : 1;\n _this2.options.quantity = options.quantity;\n _this2.options.scaleByDistance = options.scaleByDistance || options.scaleByDistance === false ? options.scaleByDistance : true;\n _this2.options.rotate = options.rotate = options.rotate || {};\n _this2.options.rotate.x = options.rotate.x || 0;\n _this2.options.rotate.y = options.rotate.y || 0;\n _this2.options.rotate.z = options.rotate.z || 0;\n _this2.options.label = options.label = options.label || {};\n _this2.options.label.show = options.label.show || options.label.show === false ? options.label.show : false;\n _this2.options.label.fontSize = options.label.fontSize || 20;\n _this2.options.label.color = options.label.color || '#ffffff';\n _this2.options.label.near = options.label.near || options.label.near === 0 ? options.label.near : 2000;\n _this2.options.label.far = options.label.far || options.label.far === 0 ? options.label.far : 100000;\n _this2.options.label.scaleByDistance = options.label.scaleByDistance || false;\n _this2.options.label.backgroundColor = options.label.backgroundColor || ['#42c6ef', '#42c6ef'];\n _this2.options.line = options.line = options.line || {};\n _this2.options.line.width = options.line.width || 2;\n _this2.options.line.length = options.line.length || 20;\n _this2.options.line.color = options.line.color || '#fff000';\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.ModelPositions = [];\n _this2._elms = {};\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2._element_style = null;\n _this2.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.ControllerObject.controllerCallBack = function (params) {\n _this2.lng = params.position.lng;\n _this2.lat = params.position.lat;\n _this2.alt = params.position.alt;\n // this.rotateX = params.rotate.x\n // this.rotateY = params.rotate.y\n // this.rotateZ = params.rotate.z\n // this.updateModel(params.position.lng, params.position.lat, params.position.alt, params.rotate.x, params.rotate.y, params.rotate.z, this.options.scale)\n };\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\n _this2.on();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(Model2, _BaseModel);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(Model2, [{\n key: \"type\",\n get: function get() {\n return \"glb\";\n }\n }, {\n key: \"loadModel\",\n value: function () {\n var _loadModel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee(url) {\n var _this3 = this;\n var o, collection, positions, height, i, polygon, centroid, ModelPositions, grid, scripts, turfUrl, _i, params, threadFn, createWorker, worker;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n createWorker = function _createWorker(fn) {\n var worker = new Worker(\"data:,(\".concat(fn.toString(), \")(\").concat(JSON.stringify(params), \")\"));\n return worker;\n };\n threadFn = function _threadFn(_ref) {\n var type = _ref.type,\n interval = _ref.interval,\n positions = _ref.positions,\n optionsPositions = _ref.optionsPositions,\n quantity = _ref.quantity,\n turfUrl = _ref.turfUrl;\n importScripts(turfUrl);\n var ModelPositions = [];\n switch (type) {\n case 1:\n var line = turf.lineString(positions[0]);\n var chunk = turf.lineChunk(line, interval / 1000, {\n units: 'kilometers'\n });\n ModelPositions.push({\n lng: chunk.features[0].geometry.coordinates[0][0],\n lat: chunk.features[0].geometry.coordinates[0][1]\n });\n for (var _i2 = 0; _i2 < chunk.features.length; _i2++) {\n ModelPositions.push({\n lng: chunk.features[_i2].geometry.coordinates[1][0],\n lat: chunk.features[_i2].geometry.coordinates[1][1]\n });\n }\n break;\n case 2:\n var _polygon = turf.polygon(positions);\n var bbox = turf.bbox(_polygon);\n grid = turf.pointGrid(bbox, interval / 1000, {\n units: 'kilometers'\n });\n var ptsWithin = turf.pointsWithinPolygon(grid, _polygon);\n for (var _i3 = 0; _i3 < ptsWithin.features.length; _i3++) {\n ModelPositions.push({\n lng: ptsWithin.features[_i3].geometry.coordinates[0],\n lat: ptsWithin.features[_i3].geometry.coordinates[1]\n });\n }\n break;\n case 3:\n if (quantity) {\n var minX = optionsPositions[0].lng;\n var minY = optionsPositions[0].lat;\n var maxX = optionsPositions[2].lng;\n var maxY = optionsPositions[2].lat;\n var fromX = turf.point([minX, maxY]);\n var toX = turf.point([maxX, maxY]);\n var distanceX = turf.distance(fromX, toX, {\n units: 'kilometers'\n });\n var x = distanceX / quantity.x;\n var fromY = turf.point([minX, maxY]);\n var toY = turf.point([minX, minY]);\n var distanceY = turf.distance(fromY, toY, {\n units: 'kilometers'\n });\n var y = distanceY / quantity.y;\n var lineX = turf.lineString([[minX, maxY], [maxX, maxY]]);\n var chunkX = turf.lineChunk(lineX, x, {\n units: 'kilometers'\n });\n var lineY = turf.lineString([[minX, maxY], [minX, minY]]);\n var chunkY = turf.lineChunk(lineY, y, {\n units: 'kilometers'\n });\n for (var _i4 = 0; _i4 < chunkX.features.length; _i4++) {\n var Xcoordinates = chunkX.features[_i4].geometry.coordinates;\n for (var m = 0; m < chunkY.features.length; m++) {\n var Ycoordinates = chunkY.features[m].geometry.coordinates;\n ModelPositions.push({\n lng: (Xcoordinates[0][0] + Xcoordinates[1][0]) / 2,\n lat: (Ycoordinates[0][1] + Ycoordinates[1][1]) / 2\n });\n }\n }\n } else {\n grid = turf.pointGrid([optionsPositions[0].lng, optionsPositions[0].lat, optionsPositions[2].lng, optionsPositions[2].lat], interval / 1000, {\n units: 'kilometers'\n });\n for (var _i5 = 0; _i5 < grid.features.length; _i5++) {\n ModelPositions.push({\n lng: grid.features[_i5].geometry.coordinates[0],\n lat: grid.features[_i5].geometry.coordinates[1]\n });\n }\n }\n break;\n default:\n ModelPositions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(optionsPositions);\n }\n self.postMessage(ModelPositions);\n };\n if (!url.startsWith(\"http\")) {\n //说明是本地的json,在磁盘中存在的\n if (!url.includes(\":\")) {\n if (this.options.host) {\n o = new URL(url, this.options.host);\n url = o.href;\n }\n }\n }\n this.originalOptions = this.deepCopyObj(this.options);\n collection = new Cesium.PrimitiveCollection();\n positions = [[]];\n height = this.options.positions[0].alt;\n for (i = 0; i < this.options.positions.length; i++) {\n positions[0].push([this.options.positions[i].lng, this.options.positions[i].lat]);\n if (this.options.positions[i].alt > this.options.height) {\n height = this.options.positions[i].alt;\n }\n }\n if (positions[0].length > 2) {\n positions[0].push([this.options.positions[0].lng, this.options.positions[0].lat]);\n polygon = turf.polygon(positions);\n centroid = turf.pointOnFeature(polygon);\n this.center = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n };\n } else if (positions[0].length == 2) {\n this.center = {\n lng: (this.options.positions[0].lng + this.options.positions[1].lng) / 2,\n lat: (this.options.positions[0].lat + this.options.positions[1].lat) / 2\n };\n } else {\n this.center = {\n lng: this.options.positions[0].lng,\n lat: this.options.positions[0].lat\n };\n }\n ModelPositions = [];\n if (!this.options.height && this.options.height !== 0) {\n this.options.height = height;\n }\n scripts = document.scripts;\n turfUrl = '';\n _i = 0;\n case 14:\n if (!(_i < scripts.length)) {\n _context.next = 21;\n break;\n }\n if (!(scripts[_i].src && scripts[_i].src.includes('turf.min.js'))) {\n _context.next = 18;\n break;\n }\n turfUrl = scripts[_i].src && scripts[_i].src;\n return _context.abrupt(\"break\", 21);\n case 18:\n _i++;\n _context.next = 14;\n break;\n case 21:\n params = {\n type: this.options.type,\n interval: this.options.interval,\n positions: positions,\n optionsPositions: this.options.positions,\n quantity: this.options.quantity,\n turfUrl: turfUrl\n };\n worker = createWorker(threadFn);\n worker.onmessage = function (e) {\n _this3.ModelPositions = ModelPositions = e.data;\n var instances = [];\n for (var _i6 = 0; _i6 < ModelPositions.length; _i6++) {\n var heading = 0;\n var pitch = 0;\n var roll = 0;\n var scale = 1;\n // let cartographic = Cesium.Cartographic.fromDegrees(ModelPositions[i].lng, ModelPositions[i].lat, this.options.height);\n var position = Cesium.Cartesian3.fromDegrees(ModelPositions[_i6].lng, ModelPositions[_i6].lat, _this3.options.height);\n var modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, new Cesium.HeadingPitchRoll(heading, pitch, roll));\n Cesium.Matrix4.multiplyByUniformScale(modelMatrix, scale, modelMatrix);\n instances.push({\n modelMatrix: modelMatrix\n });\n }\n _this3.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_this3.sdk, {\n show: _this3.options.show ? _this3.options.label.show : false,\n position: [_this3.center.lng, _this3.center.lat, _this3.options.height],\n text: _this3.options.name,\n fontSize: _this3.options.label.fontSize,\n color: _this3.options.label.color,\n pixelOffset: _this3.options.line.length,\n backgroundColor: _this3.options.label.backgroundColor,\n lineColor: _this3.options.line.color,\n lineWidth: _this3.options.line.width,\n scaleByDistance: _this3.options.label.scaleByDistance,\n near: _this3.options.label.near,\n far: _this3.options.label.far\n });\n\n // this.entity = collection\n _this3.entity = new Cesium2.ModelInstanceCollection({\n url: url,\n instances: instances\n });\n _this3.entity.position = new Cesium.Cartesian3.fromDegrees(_this3.center.lng, _this3.center.lat, _this3.options.height);\n _this3.entity.rotate = {\n x: _this3.options.rotate.x,\n y: _this3.options.rotate.y,\n z: _this3.options.rotate.z\n };\n _this3.updateModel(_this3.center.lng, _this3.center.lat, _this3.options.height, _this3.options.rotate.x, _this3.options.rotate.y, _this3.options.rotate.z, _this3.options.scale);\n _this3.sdk.viewer.scene.primitives.add(_this3.entity);\n };\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function loadModel(_x) {\n return _loadModel.apply(this, arguments);\n }\n return loadModel;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n _superPropGet(Model2, \"remove\", this, 3)([]);\n this.label.remove();\n this.positionEditing = false;\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2() {\n var orientation, lng, lat, alt, destination, position;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 22;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 15;\n break;\n }\n _context2.next = 14;\n return this.getClampToHeight(position);\n case 14:\n position.alt = _context2.sent;\n case 15:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 23;\n break;\n case 22:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.center.lng, this.center.lat, this.options.height + 500)\n });\n case 23:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"on\",\n value: function on() {\n return this.add();\n }\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(Model2, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getHost\"])();\n this.options.url = this.options.url || \"\";\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.color = v;\n this.entity.color = Cesium.Color.fromCssColorString(v);\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.center.lng;\n },\n set: function set(v) {\n this.center.lng = v;\n this._ControllerChangePosition(50);\n this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label.position = [this.center.lng, this.center.lat, this.options.height];\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.center.lat;\n },\n set: function set(v) {\n this.center.lat = v;\n this._ControllerChangePosition(50);\n this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label.position = [this.center.lng, this.center.lat, this.options.height];\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.center.alt = v;\n this.options.height = v;\n this._ControllerChangePosition(50);\n this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.label.position = [Number(this.center.lng), Number(this.center.lat), Number(this.options.height)];\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"_ControllerChangePosition\",\n value: function _ControllerChangePosition(delay) {\n var _this = this;\n clearTimeout(_this._ControllerChangePositionEvent);\n _this._ControllerChangePositionEvent = setTimeout(function () {\n _this.ControllerObject.position = {\n lng: _this.center.lng,\n lat: _this.center.lat,\n alt: _this.options.height\n };\n }, delay);\n }\n }, {\n key: \"maximumScale\",\n get: function get() {\n return this.options.maximumScale;\n },\n set: function set(v) {\n this.options.maximumScale = v;\n this.entity.maximumScale = this.scaleByDistance ? undefined : v;\n this._elms.maximumScale && this._elms.maximumScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"minimumPixelSize\",\n get: function get() {\n return this.options.minimumPixelSize;\n },\n set: function set(v) {\n this.options.minimumPixelSize = v;\n this.entity.minimumPixelSize = this.scaleByDistance ? undefined : v;\n this._elms.minimumPixelSize && this._elms.minimumPixelSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scaleByDistance\",\n get: function get() {\n return this.options.scaleByDistance;\n },\n set: function set(v) {\n this.options.scaleByDistance = v;\n this.entity.maximumScale = v ? undefined : this.maximumScale;\n this.entity.minimumPixelSize = v ? undefined : this.minimumPixelSize;\n this._elms.scaleByDistance && this._elms.scaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"rotateX\",\n get: function get() {\n return this.options.rotate.x;\n },\n set: function set(v) {\n this.options.rotate.x = v;\n this.updateModelRotate(this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n // this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)\n this._elms.rotateX && this._elms.rotateX.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"rotateY\",\n get: function get() {\n return this.options.rotate.y;\n },\n set: function set(v) {\n this.options.rotate.y = v;\n this.updateModelRotate(this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n // this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)\n this._elms.rotateY && this._elms.rotateY.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"rotateZ\",\n get: function get() {\n return this.options.rotate.z;\n },\n set: function set(v) {\n this.options.rotate.z = v;\n this.updateModelRotate(this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n // this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)\n this._elms.rotateZ && this._elms.rotateZ.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.options.scale;\n },\n set: function set(v) {\n this.options.scale = v;\n this.updateModelRotate(this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n // this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)\n this._elms.scale && this._elms.scale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n this.options.line.width = v;\n this.label.lineWidth = v;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lineLength\",\n get: function get() {\n return this.options.line.length;\n },\n set: function set(v) {\n this.options.line.length = v;\n this.label.pixelOffset = v;\n this._elms.lineLength && this._elms.lineLength.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v;\n this.label.lineColor = v;\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.labelBackgroundColorEnd];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.labelBackgroundColorStart, v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3(index) {\n var table, tableContent, item, _loop, _i7;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return _this9.options.attribute.link.content;\n case 2:\n _this9.attributeLink = _context5.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop(_i7) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!(index === _i7)) {\n _context4.next = 36;\n break;\n }\n height = item[_i7].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i7].innerHTML = _html;\n textareaElm = item[_i7].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i7].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].url;\n btn = item[_i7].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context4.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context4.next = 14;\n break;\n }\n return _context4.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context4.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop2$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context3.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i7);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context3.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context3.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context4.next = 24;\n break;\n }\n return _context4.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context4.t0) {\n _context4.next = 22;\n break;\n }\n return _context4.abrupt(\"break\", 24);\n case 22:\n _context4.next = 18;\n break;\n case 24:\n _context4.next = 29;\n break;\n case 26:\n _context4.prev = 26;\n _context4.t1 = _context4[\"catch\"](15);\n _iterator.e(_context4.t1);\n case 29:\n _context4.prev = 29;\n _iterator.f();\n return _context4.finish(29);\n case 32:\n n++;\n _context4.next = 11;\n break;\n case 35:\n return _context4.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context4.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i7 = 0;\n case 8:\n if (!(_i7 < item.length)) {\n _context5.next = 15;\n break;\n }\n return _context5.delegateYield(_loop(_i7), \"t0\", 10);\n case 10:\n if (!_context5.t0) {\n _context5.next = 12;\n break;\n }\n return _context5.abrupt(\"break\", 15);\n case 12:\n _i7++;\n _context5.next = 8;\n break;\n case 15:\n case \"end\":\n return _context5.stop();\n }\n }, _callee3);\n }));\n function linkEdit(_x2) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this9.options.attribute.link.content.splice(i, 1);\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i8) {\n var btn = item[_i8].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i8);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i8 = 0; _i8 < item.length; _i8++) {\n _loop3(_i8);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera;\n },\n set: function set(v) {\n this.options.attribute.camera = v;\n }\n\n // get position() {\n // let cartographic = Cesium.Cartographic.fromCartesian(this.entity.position);\n // let lng = Cesium.Math.toDegrees(cartographic.longitude + 0.00000000663814);\n // let lat = Cesium.Math.toDegrees(cartographic.latitude + 0.00000025137835);\n // return { lng: lng, lat: lat, alt: cartographic.height - 2.19104611043234 }\n // }\n\n // set position(p) {\n\n // }\n\n /**\r\n * @desc 打开模型旋转功能\r\n * @param status {boolean}\r\n * @methodOf Source\r\n * */\n }, {\n key: \"rotationEditing\",\n get:\n /**\r\n * @desc 获取模型旋转状态\r\n * @method rotationEditing\r\n * @return boolean\r\n * @methodOf Source\r\n * */\n function get() {\n if (this.ControllerObject.getActiveState() === 'rtation') {\n return true;\n }\n return false;\n }\n\n /**@desc 打开平移模型功能\r\n *\r\n * @memberOf Source\r\n *@param status {boolean}\r\n *\r\n * */,\n set: function set(status) {\n if (status) {\n this.ControllerObject.editRtation();\n } else {\n this.ControllerObject.destroy();\n }\n }\n }, {\n key: \"positionEditing\",\n get: function get() {\n if (this.ControllerObject.getActiveState() === 'translational') {\n return true;\n }\n return false;\n }\n\n //平移时,坐标信息变化的回调\n ,\n set: function set(status) {\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer) {\n return;\n }\n if (status) {\n this.leftClickState = Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_17__[\"getLeftClickState\"])();\n this.ControllerObject.position = {\n lng: this.center.lng,\n lat: this.center.lat,\n alt: this.options.height\n };\n this.ControllerObject.editTranslational();\n new _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_17__[\"closeLeftClick\"](this.sdk);\n } else {\n if (this.leftClickState && !Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_17__[\"getLeftClickState\"])()) {\n new _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_17__[\"openLeftClick\"](this.sdk);\n }\n this.ControllerObject.destroy();\n }\n }\n }, {\n key: \"positionEditingCallBack\",\n get: function get() {}\n\n //旋转时,坐标信息变化的回调\n ,\n set: function set(callback) {\n return;\n }\n }, {\n key: \"rotationEditingCallBack\",\n get: function get() {\n var _this10 = this;\n return function (params) {\n // let params = this.ControllerObject._params\n // this.center = {\n // lng: params.tx,\n // lat: params.ty,\n // alt: params.tz,\n // }\n _this10.lng = params.tx;\n _this10.lat = params.ty;\n _this10.alt = params.tz;\n _this10.rotateX = params.rx;\n _this10.rotateY = params.ry;\n _this10.rotateZ = params.rz;\n _this10._rotationEditingCallBack && _this10._rotationEditingCallBack(_this10.ControllerObject._params);\n };\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */,\n set: function set(callback) {\n this._rotationEditingCallBack = callback;\n }\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n var _this11 = this;\n var state,\n _this,\n contentElm,\n tabsElm,\n colorPicker,\n labelColorPicker,\n lineColorPicker,\n labelBackgroundColorStartPicker,\n labelBackgroundColorEndPicker,\n all_elm,\n _args6 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n state = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n this._element_style = null;\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context6.next = 36;\n break;\n }\n this._element_style = document.createElement('style');\n this._element_style.type = 'text/css';\n this._element_style.setAttribute('data-name', 'YJ_style_dialog');\n this._element_style.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"css\"])();\n _context6.next = 12;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this.sdk, this.originalOptions, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this11.name = _this11.options.name || '未命名对象';\n _this11.originalOptions = _this11.deepCopyObj(_this11.options);\n _this11._DialogObject.close();\n _this11.Dialog.confirmCallBack && _this11.Dialog.confirmCallBack(_this11.originalOptions);\n },\n resetCallBack: function resetCallBack() {\n _this11.reset();\n _this11.Dialog.resetCallBack && _this11.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this11.Dialog.removeCallBack && _this11.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this11.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this11.positionEditing = false;\n _this11.ControllerObject && _this11.ControllerObject.destroy();\n _this11.Dialog.closeCallBack && _this11.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this11.show = show;\n _this11.Dialog.showCallBack && _this11.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n if (_this11.positionEditing) {\n _this11.positionEditing = false;\n } else {\n _this11.positionEditing = true;\n }\n }\n }, true);\n case 12:\n this._DialogObject = _context6.sent;\n document.getElementsByTagName('head')[0].appendChild(this._element_style);\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('model-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"label_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"line_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.lineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this11.attributeLink = _this11.options.attribute.link.content;\n _this11.cameraSelect && _this11.cameraSelect();\n var tagData = _this11.attributeSelect;\n var attributeElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this11.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < tagData.length; _i9++) {\n if (tagData[_i9].value === attributeSelectElm.value) {\n _this11.attributeType = tagData[_i9].key;\n break;\n }\n }\n });\n }\n }, 0);\n _context6.next = 36;\n break;\n case 36:\n case \"end\":\n return _context6.stop();\n }\n }, _callee4, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }() //更新模型位置\n )\n }, {\n key: \"updateModel\",\n value: function updateModel(_tx, _ty, _tz) {\n var _rx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var _ry = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var _rz = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var _scale = arguments.length > 6 ? arguments[6] : undefined;\n _tx = parseFloat(_tx);\n _ty = parseFloat(_ty);\n _tz = parseFloat(_tz);\n _rx = parseFloat(_rx);\n _ry = parseFloat(_ry);\n _rz = parseFloat(_rz);\n _scale = parseFloat(_scale);\n this.entity.rotate = {\n x: _rx,\n y: _ry,\n z: _rz\n };\n var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(_rx));\n var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(_ry));\n var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(_rz));\n // 平移\n var position = new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz);\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(position.x - this.entity._center.x, position.y - this.entity._center.y, position.z - this.entity._center.z));\n // 旋转\n var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n var rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n var originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(position.x - this.entity._center.x, position.y - this.entity._center.y, position.z - this.entity._center.z), this.entity.modelMatrix);\n\n // console.log(position.z, this.entity._center.z)\n // Cesium.Matrix4.multiply(this.entity.modelMatrix, rotationX, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationZ, this.entity.modelMatrix)\n // 缩放\n // Cesium.Matrix4.multiplyByScale(this.entity.modelMatrix, new Cesium.Cartesian3(_scale, _scale, _scale), this.entity.modelMatrix)\n\n this.ControllerObject.update();\n this.entity.position = new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz);\n }\n }, {\n key: \"updateModelRotate\",\n value: function updateModelRotate() {\n var _rx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var _ry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var _rz = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var _scale = arguments.length > 3 ? arguments[3] : undefined;\n _rx = parseFloat(_rx);\n _ry = parseFloat(_ry);\n _rz = parseFloat(_rz);\n _scale = parseFloat(_scale);\n this.sdk.viewer.scene.primitives.remove(this.entity);\n var url = this.options.url;\n if (!url.startsWith(\"http\")) {\n //说明是本地的json,在磁盘中存在的\n if (!url.includes(\":\")) {\n if (this.options.host) {\n var o = new URL(url, this.options.host);\n url = o.href;\n }\n }\n }\n var instances = [];\n for (var i = 0; i < this.ModelPositions.length; i++) {\n var scale = _scale;\n // let cartographic = Cesium.Cartographic.fromDegrees(ModelPositions[i].lng, ModelPositions[i].lat, this.options.height);\n var position = Cesium.Cartesian3.fromDegrees(this.ModelPositions[i].lng, this.ModelPositions[i].lat, this.options.height);\n var modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(_rz), Cesium.Math.toRadians(_ry), Cesium.Math.toRadians(_rx)));\n Cesium.Matrix4.multiplyByUniformScale(modelMatrix, scale, modelMatrix);\n instances.push({\n modelMatrix: modelMatrix\n });\n }\n this.entity = new Cesium.ModelInstanceCollection({\n url: url,\n instances: instances\n });\n this.entity.position = new Cesium.Cartesian3.fromDegrees(this.center.lng, this.center.lat, this.options.height);\n this.entity.rotate = {\n x: this.options.rotate.x,\n y: this.options.rotate.y,\n z: this.options.rotate.z\n };\n this.updateModel(this.center.lng, this.center.lat, this.options.height, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale);\n this.sdk.viewer.scene.primitives.add(this.entity);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lng = this.originalOptions.position.lng;\n this.lat = this.originalOptions.position.lat;\n this.alt = this.originalOptions.position.alt;\n this.maximumScale = this.originalOptions.maximumScale;\n this.minimumPixelSize = this.originalOptions.minimumPixelSize;\n this.scaleByDistance = this.originalOptions.scaleByDistance;\n this.rotateX = this.originalOptions.rotate.x;\n this.rotateY = this.originalOptions.rotate.y;\n this.rotateZ = this.originalOptions.rotate.z;\n this.scale = this.originalOptions.scale;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeCamera = this.options.attribute.camera;\n this.cameraSelect && this.cameraSelect();\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_18__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Model2);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvTW9kZWwyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZU1vZGVsL01vZGVsMi9pbmRleC5qcz84YTBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEhvc3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vb25cIjtcclxuaW1wb3J0IHsgaHRtbCwgY3NzIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uLy4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db250cm9sbGVyL2luZGV4XCI7XHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tIFwiLi4vLi4vLi4vTGFiZWxPYmplY3RcIjtcclxuaW1wb3J0IHsgb3BlbkxlZnRDbGljaywgY2xvc2VMZWZ0Q2xpY2ssIG9wZW5SaWdodENsaWNrLCBjbG9zZVJpZ2h0Q2xpY2ssIGdldExlZnRDbGlja1N0YXRlLCBnZXRSaWdodENsaWNrU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vR2xvYmFsL0NsaWNrQ2FsbGJhY2tcIlxyXG5pbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIE1vZGVsMiBleHRlbmRzIEJhc2VNb2RlbCB7XHJcbiAgLyoqXHJcbiogQGNvbnN0cnVjdG9yXHJcbiogQGRlc2NyaXB0aW9uIOWKoOi9veaooeWei1xyXG4qIEBwYXJhbSBzZGsge29iamVjdH0gc2RrXHJcbiogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5qih5Z6L5Y+C5pWwXHJcbiogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5a+56LGhaWRcclxuKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaooeWei+aYvumakFxyXG4qIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiogQHBhcmFtIG9wdGlvbnMudXJsIHtzdHJpbmd9IOi1hOa6kOWcsOWdgFxyXG4qIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9ucyB7QXJyYXkuPG9iamVjdD59IOWdkOagh+aVsOe7hCBbe2xuZyxsYXQsYWx0fSwuLi5dXHJcbiogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0IHtudW1iZXJ9IOmrmOeoi++8jOS4uuepuuaXtuWPluWdkOagh+S4reacgOS9jumrmOeoi1xyXG4qIEBwYXJhbSBvcHRpb25zLnR5cGU9MCB7bnVtYmVyfSDnsbvlnosgMDrngrnvvJsxOue6v++8mzI65aSa6L655b2i77ybMzrnn6nlvaJcclxuKiBAcGFyYW0gb3B0aW9ucy5pbnRlcnZhbD0xIHtudW1iZXJ9IOmXtOmalCjnsbMp77yMdHlwZT0w5pe25LiN55Sf5pWIXHJcbiogQHBhcmFtIG9wdGlvbnMucXVhbnRpdHkge29iamVjdH0g5pWw6YeP77yMdHlwZT0z5pe255Sf5pWIXHJcbiogQHBhcmFtIG9wdGlvbnMucXVhbnRpdHkueCB7bnVtYmVyfSB46L205pa55ZCR5pWw6YeP77yMdHlwZT0z5pe255Sf5pWIXHJcbiogQHBhcmFtIG9wdGlvbnMucXVhbnRpdHkueSB7bnVtYmVyfSB56L205pa55ZCR5pWw6YeP77yMdHlwZT0z5pe255Sf5pWIXHJcbiogQHBhcmFtIG9wdGlvbnMuc2NhbGU9MSB7bnVtYmVyfSDmr5TkvotcclxuKiBAcGFyYW0gb3B0aW9ucy5tYXhpbXVtU2NhbGU9MTAwIHtudW1iZXJ9IOacgOWkp+avlOS+i1xyXG4qIEBwYXJhbSBvcHRpb25zLm1pbmltdW1QaXhlbFNpemU9NjAge251bWJlcn0g5pyA5bCP5YOP57SgXHJcbiogQHBhcmFtIG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlPXRydWUge2Jvb2xlYW59IOmaj+inhumHjue8qeaUvlxyXG4qIEBwYXJhbSBvcHRpb25zLnJvdGF0ZSB7b2JqZWN0fSDml4vovazop5LluqZcclxuKiBAcGFyYW0gb3B0aW9ucy5yb3RhdGUueCB7bnVtYmVyfSB46L205peL6L2s5bqm5pWwXHJcbiogQHBhcmFtIG9wdGlvbnMucm90YXRlLnkge251bWJlcn0geei9tOaXi+i9rOW6puaVsFxyXG4qIEBwYXJhbSBvcHRpb25zLnJvdGF0ZS56IHtudW1iZXJ9IHrovbTml4vovazluqbmlbBcclxuKiAqL1xyXG4gIGNvbnN0cnVjdG9yKGVhcnRoLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoZWFydGgsIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSlcclxuICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICcjZmZmZmZmJ1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlID0gKG9wdGlvbnMuc2NhbGUgfHwgb3B0aW9ucy5zY2FsZSA9PT0gMCkgPyBvcHRpb25zLnNjYWxlIDogMVxyXG4gICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsXHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVNjYWxlID0gKG9wdGlvbnMubWF4aW11bVNjYWxlIHx8IG9wdGlvbnMubWF4aW11bVNjYWxlID09PSAwKSA/IG9wdGlvbnMubWF4aW11bVNjYWxlIDogMTAwXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSA9IChvcHRpb25zLm1pbmltdW1QaXhlbFNpemUgfHwgb3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplID09PSAwKSA/IG9wdGlvbnMubWluaW11bVBpeGVsU2l6ZSA6IDYwXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnMgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy50eXBlID0gb3B0aW9ucy50eXBlIHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5pbnRlcnZhbCA9IChvcHRpb25zLmludGVydmFsIHx8IG9wdGlvbnMuaW50ZXJ2YWwgPT09IDApID8gb3B0aW9ucy5pbnRlcnZhbCA6IDFcclxuICAgIHRoaXMub3B0aW9ucy5xdWFudGl0eSA9IG9wdGlvbnMucXVhbnRpdHlcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSAob3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgfHwgb3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlIDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZSA9IG9wdGlvbnMucm90YXRlID0gKG9wdGlvbnMucm90YXRlIHx8IHt9KVxyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZS54ID0gb3B0aW9ucy5yb3RhdGUueCB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnkgPSBvcHRpb25zLnJvdGF0ZS55IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueiA9IG9wdGlvbnMucm90YXRlLnogfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsID0gb3B0aW9ucy5sYWJlbCA9IChvcHRpb25zLmxhYmVsIHx8IHt9KVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSAob3B0aW9ucy5sYWJlbC5zaG93IHx8IG9wdGlvbnMubGFiZWwuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgMjBcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnXHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDBcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mYXIgPSAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDBcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yIHx8IFsnIzQyYzZlZicsICcjNDJjNmVmJ11cclxuICAgIHRoaXMub3B0aW9ucy5saW5lID0gb3B0aW9ucy5saW5lID0gKG9wdGlvbnMubGluZSB8fCB7fSlcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gb3B0aW9ucy5saW5lLndpZHRoIHx8IDJcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmxlbmd0aCA9IG9wdGlvbnMubGluZS5sZW5ndGggfHwgMjBcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gb3B0aW9ucy5saW5lLmNvbG9yIHx8ICcjZmZmMDAwJ1xyXG5cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLk1vZGVsUG9zaXRpb25zID0gW11cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuXHJcbiAgICB0aGlzLnBvc2l0aW9uQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnJvdGF0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLm9uQ2xpY2tDYWxsYmFjayA9IG51bGxcclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcblxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ID0gbmV3IENvbnRyb2xsZXIodGhpcy5zZGspXHJcbiAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuY29udHJvbGxlckNhbGxCYWNrID0gKHBhcmFtcykgPT4ge1xyXG4gICAgICB0aGlzLmxuZyA9IHBhcmFtcy5wb3NpdGlvbi5sbmdcclxuICAgICAgdGhpcy5sYXQgPSBwYXJhbXMucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMuYWx0ID0gcGFyYW1zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAvLyB0aGlzLnJvdGF0ZVggPSBwYXJhbXMucm90YXRlLnhcclxuICAgICAgLy8gdGhpcy5yb3RhdGVZID0gcGFyYW1zLnJvdGF0ZS55XHJcbiAgICAgIC8vIHRoaXMucm90YXRlWiA9IHBhcmFtcy5yb3RhdGUuelxyXG4gICAgICAvLyB0aGlzLnVwZGF0ZU1vZGVsKHBhcmFtcy5wb3NpdGlvbi5sbmcsIHBhcmFtcy5wb3NpdGlvbi5sYXQsIHBhcmFtcy5wb3NpdGlvbi5hbHQsIHBhcmFtcy5yb3RhdGUueCwgcGFyYW1zLnJvdGF0ZS55LCBwYXJhbXMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG5cclxuICAgIHRoaXMub24oKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gXCJnbGJcIlxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIGxvYWRNb2RlbCh1cmwpIHtcclxuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIC8v6K+05piO5piv5pys5Zyw55qEanNvbu+8jOWcqOejgeebmOS4reWtmOWcqOeahFxyXG4gICAgICBpZiAoIXVybC5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QpIHtcclxuICAgICAgICAgIGxldCBvID0gbmV3IFVSTCh1cmwsIHRoaXMub3B0aW9ucy5ob3N0KVxyXG4gICAgICAgICAgdXJsID0gby5ocmVmXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZUNvbGxlY3Rpb24oKTtcclxuXHJcbiAgICBsZXQgcG9zaXRpb25zID0gW1tdXVxyXG4gICAgbGV0IGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zaXRpb25zWzBdLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCA+IHRoaXMub3B0aW9ucy5oZWlnaHQpIHtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocG9zaXRpb25zWzBdLmxlbmd0aCA+IDIpIHtcclxuICAgICAgcG9zaXRpb25zWzBdLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdF0pXHJcbiAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9ucyk7XHJcbiAgICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbik7XHJcbiAgICAgIHRoaXMuY2VudGVyID0geyBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBvc2l0aW9uc1swXS5sZW5ndGggPT0gMikge1xyXG4gICAgICB0aGlzLmNlbnRlciA9IHsgbG5nOiAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxuZykgLyAyLCBsYXQ6ICh0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCArIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMV0ubGF0KSAvIDIgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY2VudGVyID0geyBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0IH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgTW9kZWxQb3NpdGlvbnMgPSBbXVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaGVpZ2h0ICYmIHRoaXMub3B0aW9ucy5oZWlnaHQgIT09IDApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodFxyXG4gICAgfVxyXG4gICAgbGV0IGdyaWRcclxuXHJcbiAgICBsZXQgc2NyaXB0cyA9IGRvY3VtZW50LnNjcmlwdHM7XHJcbiAgICBsZXQgdHVyZlVybCA9ICcnXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHNjcmlwdHNbaV0uc3JjICYmIHNjcmlwdHNbaV0uc3JjLmluY2x1ZGVzKCd0dXJmLm1pbi5qcycpKSB7XHJcbiAgICAgICAgdHVyZlVybCA9IHNjcmlwdHNbaV0uc3JjICYmIHNjcmlwdHNbaV0uc3JjXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgdHlwZTogdGhpcy5vcHRpb25zLnR5cGUsXHJcbiAgICAgIGludGVydmFsOiB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwsXHJcbiAgICAgIHBvc2l0aW9uczogcG9zaXRpb25zLFxyXG4gICAgICBvcHRpb25zUG9zaXRpb25zOiB0aGlzLm9wdGlvbnMucG9zaXRpb25zLFxyXG4gICAgICBxdWFudGl0eTogdGhpcy5vcHRpb25zLnF1YW50aXR5LFxyXG4gICAgICB0dXJmVXJsOiB0dXJmVXJsXHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0aHJlYWRGbih7IHR5cGUsIGludGVydmFsLCBwb3NpdGlvbnMsIG9wdGlvbnNQb3NpdGlvbnMsIHF1YW50aXR5LCB0dXJmVXJsIH0pIHtcclxuICAgICAgaW1wb3J0U2NyaXB0cyh0dXJmVXJsKTtcclxuICAgICAgbGV0IE1vZGVsUG9zaXRpb25zID0gW11cclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcocG9zaXRpb25zWzBdKTtcclxuICAgICAgICAgIGxldCBjaHVuayA9IHR1cmYubGluZUNodW5rKGxpbmUsIGludGVydmFsIC8gMTAwMCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgICAgTW9kZWxQb3NpdGlvbnMucHVzaCh7IGxuZzogY2h1bmsuZmVhdHVyZXNbMF0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1bMF0sIGxhdDogY2h1bmsuZmVhdHVyZXNbMF0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1bMV0gfSlcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmsuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgTW9kZWxQb3NpdGlvbnMucHVzaCh7IGxuZzogY2h1bmsuZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1bMF0sIGxhdDogY2h1bmsuZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1bMV0gfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9ucyk7XHJcbiAgICAgICAgICBsZXQgYmJveCA9IHR1cmYuYmJveChwb2x5Z29uKTtcclxuICAgICAgICAgIGdyaWQgPSB0dXJmLnBvaW50R3JpZChiYm94LCBpbnRlcnZhbCAvIDEwMDAsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICAgIGxldCBwdHNXaXRoaW4gPSB0dXJmLnBvaW50c1dpdGhpblBvbHlnb24oZ3JpZCwgcG9seWdvbik7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0c1dpdGhpbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBNb2RlbFBvc2l0aW9ucy5wdXNoKHsgbG5nOiBwdHNXaXRoaW4uZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGxhdDogcHRzV2l0aGluLmZlYXR1cmVzW2ldLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBpZiAocXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgbGV0IG1pblggPSBvcHRpb25zUG9zaXRpb25zWzBdLmxuZ1xyXG4gICAgICAgICAgICBsZXQgbWluWSA9IG9wdGlvbnNQb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICAgIGxldCBtYXhYID0gb3B0aW9uc1Bvc2l0aW9uc1syXS5sbmdcclxuICAgICAgICAgICAgbGV0IG1heFkgPSBvcHRpb25zUG9zaXRpb25zWzJdLmxhdFxyXG4gICAgICAgICAgICBsZXQgZnJvbVggPSB0dXJmLnBvaW50KFttaW5YLCBtYXhZXSk7XHJcbiAgICAgICAgICAgIGxldCB0b1ggPSB0dXJmLnBvaW50KFttYXhYLCBtYXhZXSk7XHJcbiAgICAgICAgICAgIGxldCBkaXN0YW5jZVggPSB0dXJmLmRpc3RhbmNlKGZyb21YLCB0b1gsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICAgICAgbGV0IHggPSBkaXN0YW5jZVggLyBxdWFudGl0eS54XHJcbiAgICAgICAgICAgIGxldCBmcm9tWSA9IHR1cmYucG9pbnQoW21pblgsIG1heFldKTtcclxuICAgICAgICAgICAgbGV0IHRvWSA9IHR1cmYucG9pbnQoW21pblgsIG1pblldKTtcclxuICAgICAgICAgICAgbGV0IGRpc3RhbmNlWSA9IHR1cmYuZGlzdGFuY2UoZnJvbVksIHRvWSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgICAgICBsZXQgeSA9IGRpc3RhbmNlWSAvIHF1YW50aXR5LnlcclxuXHJcbiAgICAgICAgICAgIGxldCBsaW5lWCA9IHR1cmYubGluZVN0cmluZyhbW21pblgsIG1heFldLCBbbWF4WCwgbWF4WV1dKTtcclxuICAgICAgICAgICAgbGV0IGNodW5rWCA9IHR1cmYubGluZUNodW5rKGxpbmVYLCB4LCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAgIGxldCBsaW5lWSA9IHR1cmYubGluZVN0cmluZyhbW21pblgsIG1heFldLCBbbWluWCwgbWluWV1dKTtcclxuICAgICAgICAgICAgbGV0IGNodW5rWSA9IHR1cmYubGluZUNodW5rKGxpbmVZLCB5LCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtYLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IFhjb29yZGluYXRlcyA9IGNodW5rWC5mZWF0dXJlc1tpXS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgY2h1bmtZLmZlYXR1cmVzLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgWWNvb3JkaW5hdGVzID0gY2h1bmtZLmZlYXR1cmVzW21dLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgICAgICAgICBNb2RlbFBvc2l0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG5nOiAoWGNvb3JkaW5hdGVzWzBdWzBdICsgWGNvb3JkaW5hdGVzWzFdWzBdKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGF0OiAoWWNvb3JkaW5hdGVzWzBdWzFdICsgWWNvb3JkaW5hdGVzWzFdWzFdKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBncmlkID0gdHVyZi5wb2ludEdyaWQoW29wdGlvbnNQb3NpdGlvbnNbMF0ubG5nLCBvcHRpb25zUG9zaXRpb25zWzBdLmxhdCwgb3B0aW9uc1Bvc2l0aW9uc1syXS5sbmcsIG9wdGlvbnNQb3NpdGlvbnNbMl0ubGF0XSwgaW50ZXJ2YWwgLyAxMDAwLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JpZC5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIE1vZGVsUG9zaXRpb25zLnB1c2goeyBsbmc6IGdyaWQuZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGxhdDogZ3JpZC5mZWF0dXJlc1tpXS5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTW9kZWxQb3NpdGlvbnMgPSBbLi4ub3B0aW9uc1Bvc2l0aW9uc11cclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5wb3N0TWVzc2FnZShNb2RlbFBvc2l0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlV29ya2VyKGZuKSB7XHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoYGRhdGE6LCgke2ZuLnRvU3RyaW5nKCl9KSgke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9KWApXHJcbiAgICAgIHJldHVybiB3b3JrZXJcclxuICAgIH1cclxuICAgIGNvbnN0IHdvcmtlciA9IGNyZWF0ZVdvcmtlcih0aHJlYWRGbilcclxuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBlID0+IHtcclxuICAgICAgdGhpcy5Nb2RlbFBvc2l0aW9ucyA9IE1vZGVsUG9zaXRpb25zID0gZS5kYXRhXHJcbiAgICAgIGxldCBpbnN0YW5jZXMgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1vZGVsUG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGhlYWRpbmcgPSAwXHJcbiAgICAgICAgbGV0IHBpdGNoID0gMFxyXG4gICAgICAgIGxldCByb2xsID0gMFxyXG4gICAgICAgIGxldCBzY2FsZSA9IDFcclxuICAgICAgICAvLyBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhNb2RlbFBvc2l0aW9uc1tpXS5sbmcsIE1vZGVsUG9zaXRpb25zW2ldLmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodCk7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICBNb2RlbFBvc2l0aW9uc1tpXS5sbmcsIE1vZGVsUG9zaXRpb25zW2ldLmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmFyIG1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShcclxuICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsKGhlYWRpbmcsIHBpdGNoLCByb2xsKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZShcclxuICAgICAgICAgIG1vZGVsTWF0cml4LFxyXG4gICAgICAgICAgc2NhbGUsXHJcbiAgICAgICAgICBtb2RlbE1hdHJpeFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGluc3RhbmNlcy5wdXNoKHtcclxuICAgICAgICAgIG1vZGVsTWF0cml4OiBtb2RlbE1hdHJpeFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhpcy5zZGssIHtcclxuICAgICAgICBzaG93OiB0aGlzLm9wdGlvbnMuc2hvdyA/IHRoaXMub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgICAgcG9zaXRpb246IFt0aGlzLmNlbnRlci5sbmcsIHRoaXMuY2VudGVyLmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodF0sXHJcbiAgICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgICAgZm9udFNpemU6IHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICAgIHBpeGVsT2Zmc2V0OiB0aGlzLm9wdGlvbnMubGluZS5sZW5ndGgsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgIGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLmxpbmUuY29sb3IsXHJcbiAgICAgICAgbGluZVdpZHRoOiB0aGlzLm9wdGlvbnMubGluZS53aWR0aCxcclxuICAgICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgICAgbmVhcjogdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgICAgZmFyOiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyB0aGlzLmVudGl0eSA9IGNvbGxlY3Rpb25cclxuICAgICAgdGhpcy5lbnRpdHkgPSBuZXcgQ2VzaXVtMi5Nb2RlbEluc3RhbmNlQ29sbGVjdGlvbih7XHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgaW5zdGFuY2VzOiBpbnN0YW5jZXNcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQpXHJcbiAgICAgIHRoaXMuZW50aXR5LnJvdGF0ZSA9IHsgeDogdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB5OiB0aGlzLm9wdGlvbnMucm90YXRlLnksIHo6IHRoaXMub3B0aW9ucy5yb3RhdGUueiB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZCh0aGlzLmVudGl0eSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmUoKSB7XHJcbiAgICBzdXBlci5yZW1vdmUoKVxyXG4gICAgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KTtcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbygpIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQgKyA1MDApXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7ZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0KX0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoKVxyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKCkge1xyXG4gICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCBcIlwiXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG5cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdlxyXG4gICAgdGhpcy5lbnRpdHkuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbG5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2VudGVyLmxuZ1xyXG4gIH1cclxuXHJcbiAgc2V0IGxuZyh2KSB7XHJcbiAgICB0aGlzLmNlbnRlci5sbmcgPSB2XHJcbiAgICB0aGlzLl9Db250cm9sbGVyQ2hhbmdlUG9zaXRpb24oNTApXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0XVxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jZW50ZXIubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMuY2VudGVyLmxhdCA9IHZcclxuICAgIHRoaXMuX0NvbnRyb2xsZXJDaGFuZ2VQb3NpdGlvbig1MClcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHRdXHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMuY2VudGVyLmFsdCA9IHZcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSB2XHJcbiAgICB0aGlzLl9Db250cm9sbGVyQ2hhbmdlUG9zaXRpb24oNTApXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW051bWJlcih0aGlzLmNlbnRlci5sbmcpLCBOdW1iZXIodGhpcy5jZW50ZXIubGF0KSwgTnVtYmVyKHRoaXMub3B0aW9ucy5oZWlnaHQpXVxyXG4gICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIF9Db250cm9sbGVyQ2hhbmdlUG9zaXRpb24oZGVsYXkpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGNsZWFyVGltZW91dChfdGhpcy5fQ29udHJvbGxlckNoYW5nZVBvc2l0aW9uRXZlbnQpO1xyXG4gICAgX3RoaXMuX0NvbnRyb2xsZXJDaGFuZ2VQb3NpdGlvbkV2ZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIF90aGlzLkNvbnRyb2xsZXJPYmplY3QucG9zaXRpb24gPSB7XHJcbiAgICAgICAgbG5nOiBfdGhpcy5jZW50ZXIubG5nLFxyXG4gICAgICAgIGxhdDogX3RoaXMuY2VudGVyLmxhdCxcclxuICAgICAgICBhbHQ6IF90aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgIH0sIGRlbGF5KTtcclxuICB9XHJcblxyXG4gIGdldCBtYXhpbXVtU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1heGltdW1TY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1heGltdW1TY2FsZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVNjYWxlID0gdlxyXG4gICAgdGhpcy5lbnRpdHkubWF4aW11bVNjYWxlID0gdGhpcy5zY2FsZUJ5RGlzdGFuY2UgPyB1bmRlZmluZWQgOiB2XHJcbiAgICB0aGlzLl9lbG1zLm1heGltdW1TY2FsZSAmJiB0aGlzLl9lbG1zLm1heGltdW1TY2FsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbmltdW1QaXhlbFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbmltdW1QaXhlbFNpemVcclxuICB9XHJcblxyXG4gIHNldCBtaW5pbXVtUGl4ZWxTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplID0gdlxyXG4gICAgdGhpcy5lbnRpdHkubWluaW11bVBpeGVsU2l6ZSA9IHRoaXMuc2NhbGVCeURpc3RhbmNlID8gdW5kZWZpbmVkIDogdlxyXG4gICAgdGhpcy5fZWxtcy5taW5pbXVtUGl4ZWxTaXplICYmIHRoaXMuX2VsbXMubWluaW11bVBpeGVsU2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG5cclxuICBzZXQgc2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmVudGl0eS5tYXhpbXVtU2NhbGUgPSB2ID8gdW5kZWZpbmVkIDogdGhpcy5tYXhpbXVtU2NhbGVcclxuICAgIHRoaXMuZW50aXR5Lm1pbmltdW1QaXhlbFNpemUgPSB2ID8gdW5kZWZpbmVkIDogdGhpcy5taW5pbXVtUGl4ZWxTaXplXHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLnNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcm90YXRlWCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucm90YXRlLnhcclxuICB9XHJcblxyXG4gIHNldCByb3RhdGVYKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUueCA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWxSb3RhdGUodGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgLy8gdGhpcy51cGRhdGVNb2RlbCh0aGlzLmNlbnRlci5sbmcsIHRoaXMuY2VudGVyLmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodCwgdGhpcy5vcHRpb25zLnJvdGF0ZS54LCB0aGlzLm9wdGlvbnMucm90YXRlLnksIHRoaXMub3B0aW9ucy5yb3RhdGUueiwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgdGhpcy5fZWxtcy5yb3RhdGVYICYmIHRoaXMuX2VsbXMucm90YXRlWC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvdGF0ZVkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJvdGF0ZS55XHJcbiAgfVxyXG5cclxuICBzZXQgcm90YXRlWSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlLnkgPSB2XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsUm90YXRlKHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIC8vIHRoaXMudXBkYXRlTW9kZWwodGhpcy5jZW50ZXIubG5nLCB0aGlzLmNlbnRlci5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQsIHRoaXMub3B0aW9ucy5yb3RhdGUueCwgdGhpcy5vcHRpb25zLnJvdGF0ZS55LCB0aGlzLm9wdGlvbnMucm90YXRlLnosIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMucm90YXRlWSAmJiB0aGlzLl9lbG1zLnJvdGF0ZVkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCByb3RhdGVaKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yb3RhdGUuelxyXG4gIH1cclxuXHJcbiAgc2V0IHJvdGF0ZVoodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnJvdGF0ZS56ID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbFJvdGF0ZSh0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICAvLyB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLnJvdGF0ZVogJiYgdGhpcy5fZWxtcy5yb3RhdGVaLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNjYWxlXHJcbiAgfVxyXG5cclxuICBzZXQgc2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbFJvdGF0ZSh0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICAvLyB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlICYmIHRoaXMuX2VsbXMuc2NhbGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93KSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiYgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlICYmIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgfVxyXG5cclxuICBzZXQgbGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxpbmVXaWR0aCAmJiB0aGlzLl9lbG1zLmxpbmVXaWR0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVMZW5ndGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBzZXQgbGluZUxlbmd0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5sZW5ndGggPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5saW5lTGVuZ3RoICYmIHRoaXMuX2VsbXMubGluZUxlbmd0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS5jb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IGxpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt2LCB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhXHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdlxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBvc2l0aW9uKCkge1xyXG4gIC8vICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbih0aGlzLmVudGl0eS5wb3NpdGlvbik7XHJcbiAgLy8gICBsZXQgbG5nID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUgKyAwLjAwMDAwMDAwNjYzODE0KTtcclxuICAvLyAgIGxldCBsYXQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlICsgMC4wMDAwMDAyNTEzNzgzNSk7XHJcbiAgLy8gICByZXR1cm4geyBsbmc6IGxuZywgbGF0OiBsYXQsIGFsdDogY2FydG9ncmFwaGljLmhlaWdodCAtIDIuMTkxMDQ2MTEwNDMyMzQgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHBvc2l0aW9uKHApIHtcclxuXHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDmiZPlvIDmqKHlnovml4vovazlip/og71cclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqIEBtZXRob2RPZiBTb3VyY2VcclxuICAgKiAqL1xyXG4gIHNldCByb3RhdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0UnRhdGlvbigpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg6I635Y+W5qih5Z6L5peL6L2s54q25oCBXHJcbiAgICogQG1ldGhvZCByb3RhdGlvbkVkaXRpbmdcclxuICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgKiBAbWV0aG9kT2YgU291cmNlXHJcblxyXG4gICAqICovXHJcbiAgZ2V0IHJvdGF0aW9uRWRpdGluZygpIHtcclxuICAgIGlmICh0aGlzLkNvbnRyb2xsZXJPYmplY3QuZ2V0QWN0aXZlU3RhdGUoKSA9PT0gJ3J0YXRpb24nKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+aooeWei+WKn+iDvVxyXG4gICAqXHJcbiAgICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICAqQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5sZWZ0Q2xpY2tTdGF0ZSA9IGdldExlZnRDbGlja1N0YXRlKClcclxuICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID0ge1xyXG4gICAgICAgIGxuZzogdGhpcy5jZW50ZXIubG5nLFxyXG4gICAgICAgIGxhdDogdGhpcy5jZW50ZXIubGF0LFxyXG4gICAgICAgIGFsdDogdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICAgIG5ldyBjbG9zZUxlZnRDbGljayh0aGlzLnNkaylcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sZWZ0Q2xpY2tTdGF0ZSAmJiAhZ2V0TGVmdENsaWNrU3RhdGUoKSkge1xyXG4gICAgICAgIG5ldyBvcGVuTGVmdENsaWNrKHRoaXMuc2RrKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5Db250cm9sbGVyT2JqZWN0LmdldEFjdGl2ZVN0YXRlKCkgPT09ICd0cmFuc2xhdGlvbmFsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvL+W5s+enu+aXtu+8jOWdkOagh+S/oeaBr+WPmOWMlueahOWbnuiwg1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmdDYWxsQmFjayhjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nQ2FsbEJhY2soKSB7XHJcbiAgfVxyXG5cclxuICAvL+aXi+i9rOaXtu+8jOWdkOagh+S/oeaBr+WPmOWMlueahOWbnuiwg1xyXG4gIHNldCByb3RhdGlvbkVkaXRpbmdDYWxsQmFjayhjYWxsYmFjaykge1xyXG4gICAgdGhpcy5fcm90YXRpb25FZGl0aW5nQ2FsbEJhY2sgPSBjYWxsYmFja1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKCkge1xyXG4gICAgcmV0dXJuIChwYXJhbXMpID0+IHtcclxuICAgICAgLy8gbGV0IHBhcmFtcyA9IHRoaXMuQ29udHJvbGxlck9iamVjdC5fcGFyYW1zXHJcbiAgICAgIC8vIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICAvLyAgIGxuZzogcGFyYW1zLnR4LFxyXG4gICAgICAvLyAgIGxhdDogcGFyYW1zLnR5LFxyXG4gICAgICAvLyAgIGFsdDogcGFyYW1zLnR6LFxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMubG5nID0gcGFyYW1zLnR4XHJcbiAgICAgIHRoaXMubGF0ID0gcGFyYW1zLnR5XHJcbiAgICAgIHRoaXMuYWx0ID0gcGFyYW1zLnR6XHJcbiAgICAgIHRoaXMucm90YXRlWCA9IHBhcmFtcy5yeFxyXG4gICAgICB0aGlzLnJvdGF0ZVkgPSBwYXJhbXMucnlcclxuICAgICAgdGhpcy5yb3RhdGVaID0gcGFyYW1zLnJ6XHJcbiAgICAgIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrICYmIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKHRoaXMuQ29udHJvbGxlck9iamVjdC5fcGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIOe8lui+keahhlxyXG4gICAqIEBwYXJhbSBzdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g54q25oCBOiB0cnVl5omT5byALCBmYWxzZeWFs+mXrVxyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUgPSBmYWxzZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJywgJ1lKX3N0eWxlX2RpYWxvZycpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLmlubmVySFRNTCA9IGNzcygpO1xyXG5cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+e8lui+keWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuc3R5bGUgPSBuZXcgQ2VzaXVtLkNlc2l1bTNEVGlsZVN0eWxlKHtcclxuICAgICAgICAgIC8vICAgY29sb3I6IFwiY29sb3IoJ3JnYmEoMjU1LDI1NSwyNTUsXCIgKyB0aGlzLm5ld0RhdGEudHJhbnNwYXJlbmN5ICsgXCIpJylcIixcclxuICAgICAgICAgIC8vICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSk7XHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmFcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdtb2RlbC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsX2NvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsaW5lX2NvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgPSBbbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sIFwiLmF0dHJpYnV0ZS1zZWxlY3RcIilcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgKHRoaXMuX2VsZW1lbnRfc3R5bGUpIHtcclxuICAgICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpXHJcbiAgICAgIC8vICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+abtOaWsOaooeWei+S9jee9rlxyXG4gIHVwZGF0ZU1vZGVsKF90eCwgX3R5LCBfdHosIF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDAsIF9zY2FsZSkge1xyXG4gICAgX3R4ID0gcGFyc2VGbG9hdChfdHgpXHJcbiAgICBfdHkgPSBwYXJzZUZsb2F0KF90eSlcclxuICAgIF90eiA9IHBhcnNlRmxvYXQoX3R6KVxyXG4gICAgX3J4ID0gcGFyc2VGbG9hdChfcngpXHJcbiAgICBfcnkgPSBwYXJzZUZsb2F0KF9yeSlcclxuICAgIF9yeiA9IHBhcnNlRmxvYXQoX3J6KVxyXG4gICAgX3NjYWxlID0gcGFyc2VGbG9hdChfc2NhbGUpXHJcblxyXG4gICAgdGhpcy5lbnRpdHkucm90YXRlID0geyB4OiBfcngsIHk6IF9yeSwgejogX3J6IH07XHJcbiAgICBsZXQgbXggPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25YKFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J4KVxyXG4gICAgKVxyXG4gICAgbGV0IG15ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWShcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeSlcclxuICAgIClcclxuICAgIGxldCBteiA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblooXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcnopXHJcbiAgICApXHJcbiAgICAvLyDlubPnp7tcclxuICAgIGxldCBwb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdHgsIF90eSwgX3R6KVxyXG4gICAgbGV0IG0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShuZXcgQ2VzaXVtLkNhcnRlc2lhbjMocG9zaXRpb24ueCAtIHRoaXMuZW50aXR5Ll9jZW50ZXIueCwgcG9zaXRpb24ueSAtIHRoaXMuZW50aXR5Ll9jZW50ZXIueSwgcG9zaXRpb24ueiAtIHRoaXMuZW50aXR5Ll9jZW50ZXIueikpXHJcbiAgICAvLyDml4vovaxcclxuICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgIGxldCByb3RhdGlvblkgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteSlcclxuICAgIGxldCByb3RhdGlvblogPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteilcclxuICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcblxyXG4gICAgQ2VzaXVtLk1hdHJpeDQuZnJvbVRyYW5zbGF0aW9uKG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhwb3NpdGlvbi54IC0gdGhpcy5lbnRpdHkuX2NlbnRlci54LCBwb3NpdGlvbi55IC0gdGhpcy5lbnRpdHkuX2NlbnRlci55LCBwb3NpdGlvbi56IC0gdGhpcy5lbnRpdHkuX2NlbnRlci56KSwgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXgpXHJcblxyXG4gICAgLy8gY29uc29sZS5sb2cocG9zaXRpb24ueiwgdGhpcy5lbnRpdHkuX2NlbnRlci56KVxyXG4gICAgLy8gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkodGhpcy5lbnRpdHkubW9kZWxNYXRyaXgsIHJvdGF0aW9uWCwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICAvLyBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25ZLCBvcmlnaW5hbE1hdHJpeClcclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblosIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG4gICAgLy8g57yp5pS+XHJcbiAgICAvLyBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUodGhpcy5lbnRpdHkubW9kZWxNYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhfc2NhbGUsIF9zY2FsZSwgX3NjYWxlKSwgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXgpXHJcblxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnVwZGF0ZSgpXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhfdHgsIF90eSwgX3R6KVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZU1vZGVsUm90YXRlKF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDAsIF9zY2FsZSkge1xyXG4gICAgX3J4ID0gcGFyc2VGbG9hdChfcngpXHJcbiAgICBfcnkgPSBwYXJzZUZsb2F0KF9yeSlcclxuICAgIF9yeiA9IHBhcnNlRmxvYXQoX3J6KVxyXG4gICAgX3NjYWxlID0gcGFyc2VGbG9hdChfc2NhbGUpXHJcblxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KTtcclxuXHJcbiAgICBsZXQgdXJsID0gdGhpcy5vcHRpb25zLnVybFxyXG4gICAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgLy/or7TmmI7mmK/mnKzlnLDnmoRqc29u77yM5Zyo56OB55uY5Lit5a2Y5Zyo55qEXHJcbiAgICAgIGlmICghdXJsLmluY2x1ZGVzKFwiOlwiKSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaG9zdCkge1xyXG4gICAgICAgICAgbGV0IG8gPSBuZXcgVVJMKHVybCwgdGhpcy5vcHRpb25zLmhvc3QpXHJcbiAgICAgICAgICB1cmwgPSBvLmhyZWZcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5zdGFuY2VzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5Nb2RlbFBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgc2NhbGUgPSBfc2NhbGVcclxuICAgICAgLy8gbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoTW9kZWxQb3NpdGlvbnNbaV0ubG5nLCBNb2RlbFBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQpO1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICB0aGlzLk1vZGVsUG9zaXRpb25zW2ldLmxuZywgdGhpcy5Nb2RlbFBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgdmFyIG1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShcclxuICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICBuZXcgQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeiksIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcnkpLCBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J4KSlcclxuICAgICAgKTtcclxuICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZShcclxuICAgICAgICBtb2RlbE1hdHJpeCxcclxuICAgICAgICBzY2FsZSxcclxuICAgICAgICBtb2RlbE1hdHJpeFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICAgIG1vZGVsTWF0cml4OiBtb2RlbE1hdHJpeFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5ID0gbmV3IENlc2l1bS5Nb2RlbEluc3RhbmNlQ29sbGVjdGlvbih7XHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICBpbnN0YW5jZXM6IGluc3RhbmNlc1xyXG4gICAgfSlcclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0KVxyXG4gICAgdGhpcy5lbnRpdHkucm90YXRlID0geyB4OiB0aGlzLm9wdGlvbnMucm90YXRlLngsIHk6IHRoaXMub3B0aW9ucy5yb3RhdGUueSwgejogdGhpcy5vcHRpb25zLnJvdGF0ZS56IH07XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuY2VudGVyLmxuZywgdGhpcy5jZW50ZXIubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0LCB0aGlzLm9wdGlvbnMucm90YXRlLngsIHRoaXMub3B0aW9ucy5yb3RhdGUueSwgdGhpcy5vcHRpb25zLnJvdGF0ZS56LCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQodGhpcy5lbnRpdHkpO1xyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMubG5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgICB0aGlzLmxhdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgdGhpcy5hbHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgIHRoaXMubWF4aW11bVNjYWxlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWF4aW11bVNjYWxlXHJcbiAgICB0aGlzLm1pbmltdW1QaXhlbFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5taW5pbXVtUGl4ZWxTaXplXHJcbiAgICB0aGlzLnNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5yb3RhdGVYID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm90YXRlLnhcclxuICAgIHRoaXMucm90YXRlWSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnJvdGF0ZS55XHJcbiAgICB0aGlzLnJvdGF0ZVogPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5yb3RhdGUuelxyXG4gICAgdGhpcy5zY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlXHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMubGFiZWxDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgICB0aGlzLmxhYmVsRm9udFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgICB0aGlzLmxhYmVsU2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgICB0aGlzLmxhYmVsTmVhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLm5lYXJcclxuICAgIHRoaXMubGFiZWxGYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mYXJcclxuICAgIHRoaXMubGFiZWxMaW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgIHRoaXMubGFiZWxQaXhlbE9mZnNldCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhXHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNb2RlbDJcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUE0SEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF0RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBckxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBN0RBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBdEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUE1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWdCQTtBQUFBO0FBQUE7QUFOQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQXJCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckNBO0FBc0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUF6TEE7QUFBQTtBQUFBO0FBQUE7QUEyTEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseModel/Model2/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseModel/index.js": /*!****************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseModel/index.js ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/index.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\nvar BaseModel = /*#__PURE__*/function (_BaseSource) {\n function BaseModel(sdk, options) {\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, BaseModel);\n return _callSuper(this, BaseModel, [sdk, options]);\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BaseModel, _BaseSource);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(BaseModel, [{\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.options.url) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\", this.loadModel(this.options.url));\n case 2:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].primaryCallBack = function (content) {\n _this.options.richTextContent = content;\n };\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseModel);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlTW9kZWwvaW5kZXguanM/ZDhhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmljaFRleHQgZnJvbSBcIi4uLy4uLy4uL0VsZW1lbnQvcmljaFRleHRcIjtcclxuaW1wb3J0IEJhc2VTb3VyY2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcblxyXG5jbGFzcyBCYXNlTW9kZWwgZXh0ZW5kcyBCYXNlU291cmNlIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWRNb2RlbCh0aGlzLm9wdGlvbnMudXJsKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2FkZExpbmsoKSB7XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluaygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rKGxpbmspIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgdXJsOiBsaW5rXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIF9hZGRScigpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgdXJsOiB2clxyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJk+W8gOWvjOaWh+acrOahhlxyXG4gICAqL1xyXG4gIG9wZW5SaWNoVGV4dEVkaXRvcihlKSB7XHJcbiAgICAvLyB2YXIgdWUgPSBVRS5nZXRFZGl0b3IoJ2FwcCcpO1xyXG4gICAgcmljaFRleHQub3Blbih0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5uYW1lLCB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50KVxyXG4gICAgcmljaFRleHQucHJpbWFyeUNhbGxCYWNrID0gKGNvbnRlbnQpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYXNlTW9kZWxcclxuXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseModel/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTerrain/index.js": /*!******************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTerrain/index.js ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 17:54\r\n * @description:index\r\n * @update: 2023-11-20 17:54\r\n */\n\n\n\n\n\nvar _updateModelTimeout = /*#__PURE__*/new WeakMap();\nvar BaseTerrain = /*#__PURE__*/function (_BaseSource) {\n function BaseTerrain(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var object = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _Dialog = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, BaseTerrain);\n _this = _callSuper(this, BaseTerrain, [sdk, options]);\n _classPrivateFieldInitSpec(_this, _updateModelTimeout, void 0);\n _this.object = JSON.parse(JSON.stringify(object));\n _this.object.west || (_this.object.west = 40);\n _this.object.south || (_this.object.south = 30);\n _this.object.east || (_this.object.east = 160);\n _this.object.north || (_this.object.north = 50);\n _this.show = _this.options.show;\n _this._elms = {};\n _this.Dialog = _Dialog;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(BaseTerrain, _BaseSource);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(BaseTerrain, [{\n key: \"type\",\n get: function get() {\n return \"terrain\";\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"show\",\n get: function get() {\n return !(this.sdk.viewer.scene.terrainProvider instanceof Cesium.EllipsoidTerrainProvider);\n },\n set: function set(status) {\n status ? this.open() : this.close();\n }\n }, {\n key: \"open\",\n value: function () {\n var _open = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee() {\n var res, text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.options.url) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\", this.loadTerrain({\n url: this.options.url\n }));\n case 4:\n _context.next = 6;\n return this.requestResource();\n case 6:\n res = _context.sent;\n _context.next = 9;\n return res.text();\n case 9:\n text = _context.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context.next = 19;\n break;\n }\n if (!text.data.url.length) {\n _context.next = 16;\n break;\n }\n return _context.abrupt(\"return\", this.loadTerrain(text.data));\n case 16:\n return _context.abrupt(\"return\", new Promise(function (res, reject) {\n reject('资源不存在');\n }));\n case 17:\n _context.next = 20;\n break;\n case 19:\n return _context.abrupt(\"return\", new Promise(function (res, reject) {\n reject(text.msg || text.message);\n }));\n case 20:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function open() {\n return _open.apply(this, arguments);\n }\n return open;\n }() //关闭地形\n }, {\n key: \"close\",\n value: function close() {\n var _this2 = this;\n this.sdk.viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider({});\n for (var i = 0; i < YJ.Analysis.AnalysesResults.length; i++) {\n if (YJ.Analysis.AnalysesResults[i].type === 'ContourAnalysis') {\n YJ.Analysis.AnalysesResults[i].destroy();\n }\n }\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_14__[\"syncSplitData\"])(this.sdk, this.options.id);\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, this));\n _classPrivateFieldSet(_updateModelTimeout, this, setTimeout(function () {\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this2));\n var _iterator = _createForOfIteratorHelper(_this2.sdk.entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step.value, 2),\n key = _step$value[0],\n entity = _step$value[1];\n if (entity.type === 'BillboardObject' && (entity.heightMode == 1 || entity.heightMode == 3)) {\n entity.updateHeight();\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }, 500));\n }\n }, {\n key: \"loadTerrain\",\n value: function () {\n var _loadTerrain = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(options) {\n var _this3 = this;\n var object, url, o;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n object = _objectSpread({}, options);\n url = \"\";\n if (object.url.startsWith(\"http\")) url = object.url;else {\n //说明是本地的json,在磁盘中存在的\n if (object.url.includes(\":\")) {\n url = object.url;\n } else {\n if (this.options.host) {\n o = new URL(object.url, this.options.host);\n url = o.href;\n } else url = object.url;\n }\n }\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context2.next = 9;\n break;\n }\n _context2.next = 6;\n return Cesium.CesiumTerrainProvider.fromUrl(url);\n case 6:\n this.terrainProvider = _context2.sent;\n _context2.next = 10;\n break;\n case 9:\n this.terrainProvider = new Cesium.CesiumTerrainProvider({\n url: url\n });\n case 10:\n if (!(!this.sdk || !this.sdk.viewer)) {\n _context2.next = 12;\n break;\n }\n return _context2.abrupt(\"return\");\n case 12:\n this.sdk.viewer.terrainProvider = this.terrainProvider;\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, this));\n _classPrivateFieldSet(_updateModelTimeout, this, setTimeout(function () {\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this3));\n _this3.terrainProvider.readyPromise.then(function () {\n var _iterator2 = _createForOfIteratorHelper(_this3.sdk.entityMap),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _step2$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step2.value, 2),\n key = _step2$value[0],\n entity = _step2$value[1];\n if (entity.type === 'BillboardObject' && (entity.heightMode == 1 || entity.heightMode == 3)) {\n entity.updateHeight();\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n });\n }, 1000));\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_14__[\"syncSplitData\"])(this.sdk, this.options.id);\n case 16:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function loadTerrain(_x) {\n return _loadTerrain.apply(this, arguments);\n }\n return loadTerrain;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n this.close();\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3() {\n var duration,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n rectangle,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n duration = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : 3;\n if (!this._error) {\n _context3.next = 3;\n break;\n }\n return _context3.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_13__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_13__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_13__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context3.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context3.next = 18;\n break;\n }\n _context3.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context3.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation,\n duration: duration\n });\n _context3.next = 27;\n break;\n case 25:\n rectangle = new Cesium.Rectangle(Cesium.Math.toRadians(this.object.west), Cesium.Math.toRadians(this.object.south), Cesium.Math.toRadians(this.object.east), Cesium.Math.toRadians(this.object.north));\n this.sdk.viewer.camera.flyTo({\n destination: rectangle,\n duration: duration\n });\n case 27:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(BaseTerrain, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getHost\"])();\n this.options.url = this.options.url || \"\";\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n var _this4 = this;\n var state,\n contentElm,\n html,\n nameElm,\n _args4 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n state = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : false;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context4.next = 5;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk, this.options, {\n title: '地形属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.name = _this4.name.trim();\n if (!_this4.name) {\n _this4.name = '未命名对象';\n }\n _this4.originalOptions = _this4.deepCopyObj(_this4.options);\n _this4._DialogObject.close();\n var cdoptions = _this4.deepCopyObj(_this4.options);\n cdoptions.host = '';\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(cdoptions);\n },\n // resetCallBack: () => {\n // this.name = this.originalOptions.name\n // this.Dialog.resetCallBack && this.Dialog.resetCallBack()\n // },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n }\n }, true);\n case 5:\n this._DialogObject = _context4.sent;\n contentElm = document.createElement('div');\n contentElm.style.width = '300px';\n html = \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\uFF1A\\n \\n
\\n
\\n
\\n \";\n contentElm.innerHTML = html;\n nameElm = contentElm.getElementsByClassName('name')[0];\n nameElm.value = this.name;\n nameElm.addEventListener('input', function () {\n _this4.name = nameElm.value;\n });\n this._DialogObject.contentAppChild(contentElm);\n this._elms.name = [nameElm];\n case 15:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseTerrain);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGVycmFpbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXNlU291cmNlL0Jhc2VUZXJyYWluL2luZGV4LmpzPzZmZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTExLTIwIDE3OjU0XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMTEtMjAgMTc6NTRcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBnZXRIb3N0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCBCYXNlU291cmNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuXHJcbmNsYXNzIEJhc2VUZXJyYWluIGV4dGVuZHMgQmFzZVNvdXJjZSB7XHJcbiAgI3VwZGF0ZU1vZGVsVGltZW91dDtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgb2JqZWN0ID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmplY3QpKVxyXG4gICAgdGhpcy5vYmplY3Qud2VzdCB8fCAodGhpcy5vYmplY3Qud2VzdCA9IDQwKVxyXG4gICAgdGhpcy5vYmplY3Quc291dGggfHwgKHRoaXMub2JqZWN0LnNvdXRoID0gMzApXHJcbiAgICB0aGlzLm9iamVjdC5lYXN0IHx8ICh0aGlzLm9iamVjdC5lYXN0ID0gMTYwKVxyXG4gICAgdGhpcy5vYmplY3Qubm9ydGggfHwgKHRoaXMub2JqZWN0Lm5vcnRoID0gNTApXHJcbiAgICB0aGlzLnNob3cgPSB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiBcInRlcnJhaW5cIlxyXG4gIH1cclxuXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm5hbWVcclxuICB9XHJcbiAgc2V0IG5hbWUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm5hbWUgJiYgdGhpcy5fZWxtcy5uYW1lLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiAhKFxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUudGVycmFpblByb3ZpZGVyIGluc3RhbmNlb2ZcclxuICAgICAgQ2VzaXVtLkVsbGlwc29pZFRlcnJhaW5Qcm92aWRlclxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc2V0IHNob3coc3RhdHVzKSB7XHJcbiAgICBzdGF0dXMgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWRUZXJyYWluKHtcclxuICAgICAgICB1cmw6IHRoaXMub3B0aW9ucy51cmxcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnJlcXVlc3RSZXNvdXJjZSgpXHJcbiAgICAgIGxldCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICB0ZXh0ID0gSlNPTi5wYXJzZSh0ZXh0KVxyXG4gICAgICBpZiAoWzAsIDIwMF0uaW5jbHVkZXModGV4dC5jb2RlKSkge1xyXG4gICAgICAgIGlmICh0ZXh0LmRhdGEudXJsLmxlbmd0aClcclxuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRUZXJyYWluKHRleHQuZGF0YSlcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgn6LWE5rqQ5LiN5a2Y5ZyoJylcclxuICAgICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KHRleHQubXNnIHx8IHRleHQubWVzc2FnZSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+WFs+mXreWcsOW9olxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlciA9XHJcbiAgICAgIG5ldyBDZXNpdW0uRWxsaXBzb2lkVGVycmFpblByb3ZpZGVyKHt9KVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBZSi5BbmFseXNpcy5BbmFseXNlc1Jlc3VsdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFlKLkFuYWx5c2lzLkFuYWx5c2VzUmVzdWx0c1tpXS50eXBlID09PSAnQ29udG91ckFuYWx5c2lzJykge1xyXG4gICAgICAgIFlKLkFuYWx5c2lzLkFuYWx5c2VzUmVzdWx0c1tpXS5kZXN0cm95KClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG5cclxuICAgIGNsZWFyVGltZW91dCh0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQpXHJcbiAgICB0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI3VwZGF0ZU1vZGVsVGltZW91dClcclxuICAgICAgZm9yIChsZXQgW2tleSwgZW50aXR5XSBvZiB0aGlzLnNkay5lbnRpdHlNYXApIHtcclxuICAgICAgICBpZiAoZW50aXR5LnR5cGUgPT09ICdCaWxsYm9hcmRPYmplY3QnICYmIChlbnRpdHkuaGVpZ2h0TW9kZSA9PSAxIHx8IGVudGl0eS5oZWlnaHRNb2RlID09IDMpKSB7XHJcbiAgICAgICAgICBlbnRpdHkudXBkYXRlSGVpZ2h0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5LmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGVudGl0eS5sYWJlbC5zaG93ID0gZW50aXR5LmxhYmVsLnNob3dcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkVGVycmFpbihvcHRpb25zKSB7XHJcbiAgICBsZXQgb2JqZWN0ID0geyAuLi5vcHRpb25zIH1cclxuICAgIGxldCB1cmwgPSBcIlwiXHJcbiAgICBpZiAob2JqZWN0LnVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSlcclxuICAgICAgdXJsID0gb2JqZWN0LnVybFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8v6K+05piO5piv5pys5Zyw55qEanNvbu+8jOWcqOejgeebmOS4reWtmOWcqOeahFxyXG4gICAgICBpZiAob2JqZWN0LnVybC5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgICB1cmwgPSBvYmplY3QudXJsXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ob3N0KSB7XHJcbiAgICAgICAgICBsZXQgbyA9IG5ldyBVUkwob2JqZWN0LnVybCwgdGhpcy5vcHRpb25zLmhvc3QpXHJcbiAgICAgICAgICB1cmwgPSBvLmhyZWZcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHVybCA9IG9iamVjdC51cmxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKE51bWJlcihDZXNpdW0uVkVSU0lPTi5zcGxpdCgnLicpWzFdKSA+PSAxMDcpIHtcclxuICAgICAgdGhpcy50ZXJyYWluUHJvdmlkZXIgPSBhd2FpdCBDZXNpdW0uQ2VzaXVtVGVycmFpblByb3ZpZGVyLmZyb21VcmwodXJsKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudGVycmFpblByb3ZpZGVyID0gbmV3IENlc2l1bS5DZXNpdW1UZXJyYWluUHJvdmlkZXIoe1xyXG4gICAgICAgIHVybDogdXJsXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNkay52aWV3ZXIudGVycmFpblByb3ZpZGVyID0gdGhpcy50ZXJyYWluUHJvdmlkZXI7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0KVxyXG4gICAgdGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQpXHJcbiAgICAgIHRoaXMudGVycmFpblByb3ZpZGVyLnJlYWR5UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRpdHldIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICAgICAgaWYgKGVudGl0eS50eXBlID09PSAnQmlsbGJvYXJkT2JqZWN0JyAmJiAoZW50aXR5LmhlaWdodE1vZGUgPT0gMSB8fCBlbnRpdHkuaGVpZ2h0TW9kZSA9PSAzKSkge1xyXG4gICAgICAgICAgICBlbnRpdHkudXBkYXRlSGVpZ2h0KClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZW50aXR5LmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgZW50aXR5LmxhYmVsLnNob3cgPSBlbnRpdHkubGFiZWwuc2hvd1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSwgMTAwMCk7XHJcblxyXG5cclxuICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuY2xvc2UoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmx5VG8oZHVyYXRpb24gPSAzKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb24sXHJcbiAgICAgICAgZHVyYXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcmVjdGFuZ2xlID0gbmV3IENlc2l1bS5SZWN0YW5nbGUoXHJcbiAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub2JqZWN0Lndlc3QpLFxyXG4gICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9iamVjdC5zb3V0aCksXHJcbiAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub2JqZWN0LmVhc3QpLFxyXG4gICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9iamVjdC5ub3J0aClcclxuICAgICAgKVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogcmVjdGFuZ2xlLFxyXG4gICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKCkge1xyXG4gICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCBcIlwiXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24g57yW6L6R5qGGXHJcbiAgICogQHBhcmFtIHN0YXRlPWZhbHNlIHtib29sZWFufSDnirbmgIE6IHRydWXmiZPlvIAsIGZhbHNl5YWz6ZetXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgIHRpdGxlOiAn5Zyw5b2i5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgbGV0IGNkb3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgIGNkb3B0aW9ucy5ob3N0ID0gJydcclxuICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKGNkb3B0aW9ucylcclxuICAgICAgfSxcclxuICAgICAgLy8gcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgICAgLy8gICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAvLyB9LFxyXG4gICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgIH0sIHRydWUpXHJcbiAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICBjb250ZW50RWxtLnN0eWxlLndpZHRoID0gJzMwMHB4J1xyXG4gICAgbGV0IGh0bWwgPSBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ew77yaPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgbmFtZVwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbiAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWxcclxuICAgIGxldCBuYW1lRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduYW1lJylbMF1cclxuICAgIG5hbWVFbG0udmFsdWUgPSB0aGlzLm5hbWVcclxuICAgIG5hbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG5hbWVFbG0udmFsdWVcclxuICAgIH0pXHJcbiAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICB0aGlzLl9lbG1zLm5hbWUgPSBbbmFtZUVsbV1cclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZVRlcnJhaW5cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUlBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUF0QkE7QUFBQTtBQUFBO0FBQUE7QUF3QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaERBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF0RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXBCQTtBQXFCQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFoREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrREE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTerrain/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/BIM/_element.js": /*!*************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/BIM/_element.js ***! \*************************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n x\\u8F74\\n \\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n y\\u8F74\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n z\\u8F74\\n \\n
\\n
\\n
\\n
\\n \\u5927\\u5C0F\\n \\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n

BIM\\u5C5E\\u6027\\u5BFC\\u51FA\\u9009\\u9879

\\n
\\n
\\n
\\n
\\n
\\n \\n \\u4FEE\\u5EFA\\u4E2D\\n
\\n
\\n \\n \\u672A\\u5B8C\\u6210\\n
\\n
\\n \\n \\u5DF2\\u5B8C\\u6210\\n
\\n
\\n
\\n \\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9CSU0vX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9CSU0vX2VsZW1lbnQuanM/MGJlNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbmZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgcmV0dXJuIGBcclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue7j+W6pjwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+eOi9tDwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTE4MFwiIG1heD1cIjE4MFwiIEBtb2RlbD1cInJvbGxcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTBcIiBtYXg9XCI5MFwiIEBtb2RlbD1cImxhdFwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj556L20PC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwiaGVhZGluZ1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJoZWlnaHRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj566L20PC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwicGl0Y2hcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lpKflsI88L3NwYW4+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMC4xXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cInNjYWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlclwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIxMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzY2FsZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICBcclxuICA8ZGl2IGNsYXNzPVwiZGl2aWRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGluZVwiPjwvZGl2PlxyXG4gICAgPHA+QklN5bGe5oCn5a+85Ye66YCJ6aG5PC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWJveFwiIEBjbGljaz1cImV4cG9ydFN0YXRlXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiM1wiPlxyXG4gICAgICAgIDxzcGFuPuS/ruW7uuS4rTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1ib3hcIiBAY2xpY2s9XCJleHBvcnRTdGF0ZVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIjJcIj5cclxuICAgICAgICA8c3Bhbj7mnKrlrozmiJA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtYm94XCIgQGNsaWNrPVwiZXhwb3J0U3RhdGVcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCIxXCI+XHJcbiAgICAgICAgPHNwYW4+5bey5a6M5oiQPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8YnV0dG9uIEBjbGljaz1cImV4cG9ydFByb3BlcnR5XCI+5a+8IOWHujwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBRUE7QUFBQTtBQUFBO0FBQ0E7QUF1RkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/BIM/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/BIM/_element2.js": /*!**************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/BIM/_element2.js ***! \**************************************************************/ /*! exports provided: html2, css2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html2\", function() { return html2; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css2\", function() { return css2; });\nfunction html2() {\n return \"\\n
\\n
\\n \\u6784\\u4EF6\\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u9009\\u62E9\\u72B6\\u6001\\n \\n
\\n
\\n
\\n
\\n

\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027

\\n
\\n
\\n
\\n
\\n \";\n}\nfunction css2() {\n return \"\\n .YJ-custom-base-dialog>.content {\\n width: 440px;\\n }\\n .YJ-custom-base-dialog>.content .row .label {\\n flex: 0 0 110px;\\n }\\n .col:first-child {\\n margin-right: 10px;\\n }\\n .col:last-child {\\n margin-left: 10px;\\n }\\n .YJ-custom-base-dialog>.content .divide {\\n position: relative;\\n display: flex;\\n align-items: center;\\n margin: 20px 0;\\n }\\n .YJ-custom-base-dialog>.content .divide .line{\\n height: 1px;\\n background: #ddd;\\n flex: 1;\\n }\\n .YJ-custom-base-dialog>.content .divide p{\\n margin: 0 10px;\\n }\\n .YJ-custom-base-dialog>.content .property .property-item .btn{\\n font-size: 24px;\\n line-height: 20px;\\n padding: 2px 0;\\n }\\n .YJ-custom-base-dialog>.content .property .property-item .input_lable {\\n flex: 0 0 115px;\\n border: none;\\n margin-right: 15px;\\n text-align: right;\\n }\\n .YJ-custom-base-dialog>.content .property .property-item:first-child .delete{\\n display: none\\n }\\n .YJ-custom-base-dialog>.content .property .property-item .add{\\n display: none;\\n }\\n .YJ-custom-base-dialog>.content .property .property-item:last-child .add{\\n display: inline-block;\\n }\\n\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9CSU0vX2VsZW1lbnQyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZVRpbGVzZXQvQklNL19lbGVtZW50Mi5qcz83ODIxIl0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuZnVuY3Rpb24gaHRtbDIoKSB7XHJcbiAgcmV0dXJuIGBcclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnoTku7blkI3np7A8L3NwYW4+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbmFtZT1cIm5hbWVcIiBkaXNhYmxlZD1cImRpc2FibGVkXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pgInmi6nnirbmgIE8L3NwYW4+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJpbnB1dCBpbnB1dC1zZWxlY3RcIiBuYW1lPVwic3RhdGUtc2VsZWN0XCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIiBzdHlsZT1cImNvbG9yOiAjMDAwO1wiPumHjee9rjwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCIgc3R5bGU9XCJjb2xvcjogI2YwMDtcIj7lt7LlrozmiJA8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiIHN0eWxlPVwiY29sb3I6ICMwZjA7XCI+5pyq5a6M5oiQPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjNcIiBzdHlsZT1cImNvbG9yOiAjMDBmO1wiPuS/ruW7uuS4rTwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkaXZpZGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+PC9kaXY+XHJcbiAgICA8cD7oh6rlrprkuYnlsZ7mgKc8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGluZVwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eVwiPlxyXG4gIDwvZGl2PlxyXG4gIGBcclxufVxyXG5mdW5jdGlvbiBjc3MyKCkge1xyXG4gIHJldHVybiBgXHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCB7XHJcbiAgICB3aWR0aDogNDQwcHg7XHJcbiAgfVxyXG4gIC5ZSi1jdXN0b20tYmFzZS1kaWFsb2c+LmNvbnRlbnQgLnJvdyAubGFiZWwge1xyXG4gICAgZmxleDogMCAwIDExMHB4O1xyXG4gIH1cclxuICAuY29sOmZpcnN0LWNoaWxkIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICB9XHJcbiAgLmNvbDpsYXN0LWNoaWxkIHtcclxuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gIH1cclxuICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50IC5kaXZpZGUge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDIwcHggMDtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAuZGl2aWRlIC5saW5le1xyXG4gICAgaGVpZ2h0OiAxcHg7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZGRkO1xyXG4gICAgZmxleDogMTtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAuZGl2aWRlIHB7XHJcbiAgICBtYXJnaW46IDAgMTBweDtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAucHJvcGVydHkgLnByb3BlcnR5LWl0ZW0gLmJ0bntcclxuICAgIGZvbnQtc2l6ZTogMjRweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgcGFkZGluZzogMnB4IDA7XHJcbiAgfVxyXG4gIC5ZSi1jdXN0b20tYmFzZS1kaWFsb2c+LmNvbnRlbnQgLnByb3BlcnR5IC5wcm9wZXJ0eS1pdGVtIC5pbnB1dF9sYWJsZSB7XHJcbiAgICBmbGV4OiAwIDAgMTE1cHg7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAucHJvcGVydHkgLnByb3BlcnR5LWl0ZW06Zmlyc3QtY2hpbGQgLmRlbGV0ZXtcclxuICAgIGRpc3BsYXk6IG5vbmVcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAucHJvcGVydHkgLnByb3BlcnR5LWl0ZW0gLmFkZHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgfVxyXG4gIC5ZSi1jdXN0b20tYmFzZS1kaWFsb2c+LmNvbnRlbnQgLnByb3BlcnR5IC5wcm9wZXJ0eS1pdGVtOmxhc3QtY2hpbGQgLmFkZHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB9XHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbDIsIGNzczIgfSJdLCJtYXBwaW5ncyI6IkFBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFnREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/BIM/_element2.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/BIM/index.js": /*!**********************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/BIM/index.js ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseTileset/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BaseSource/BaseTileset/BIM/_element.js\");\n/* harmony import */ var _element2__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element2 */ \"./src/Obj/Base/BaseSource/BaseTileset/BIM/_element2.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 16:05\r\n * @description:index\r\n * @update: 2023-11-20 16:05\r\n */\n\n\n\n\n\n\n\n\n\nvar _updateModelTimeout = /*#__PURE__*/new WeakMap();\nvar BIM = /*#__PURE__*/function (_BaseTileset) {\n /**\r\n * @constructor\r\n * @description 加载BIM模型\r\n * @param sdk {object} sdk\r\n * @param options {object} 模型参数\r\n * @param options.id {string} 对象id\r\n * @param options.show=true {boolean} 模型显隐\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 资源地址\r\n * @param options.position {object} 模型位置\r\n * @param options.position.lng {number} 经度\r\n * @param options.position.lat {number} 纬度\r\n * @param options.position.alt {number} 高度\r\n * */\n function BIM(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, BIM);\n _this2 = _callSuper(this, BIM, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _updateModelTimeout, void 0);\n _this2.picking = false;\n _this2.features = options.features || [];\n _this2.exportStateArray = [];\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\n _this2.Dialog.exportState = function (e) {\n _this2.exportState(e);\n };\n _this2.Dialog.exportProperty = function (e) {\n _this2.exportProperty(_this2.exportStateArray);\n };\n _this2.features = new Map();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(BIM, _BaseTileset);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(BIM, [{\n key: \"type\",\n get: function get() {\n return \"bim\";\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.newData.name;\n },\n set: function set(v) {\n this.newData.name = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.newData.lng;\n },\n set: function set(v) {\n this.newData.lng = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.newData.lat;\n },\n set: function set(v) {\n this.newData.lat = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.newData.height;\n },\n set: function set(v) {\n this.newData.height = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"roll\",\n get: function get() {\n return this.newData.roll;\n },\n set: function set(v) {\n this.newData.roll = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.roll && this._elms.roll.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"heading\",\n get: function get() {\n return this.newData.heading;\n },\n set: function set(v) {\n this.newData.heading = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.heading && this._elms.heading.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"pitch\",\n get: function get() {\n return this.newData.pitch;\n },\n set: function set(v) {\n this.newData.pitch = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.pitch && this._elms.pitch.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.newData.scale;\n },\n set: function set(v) {\n this.newData.scale = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n this._elms.scale && this._elms.scale.forEach(function (item) {\n item.value = v;\n });\n }\n\n // get transparency() {\n // return this.newData.transparency\n // }\n\n // set transparency(v) {\n // this.newData.transparency = v\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n // this.entity.transparency = Number(this.newData.transparency)\n // this._elms.transparency && this._elms.transparency.forEach((item) => {\n // item.value = v\n // })\n // }\n }, {\n key: \"loadSceneTree\",\n value: function () {\n var _loadSceneTree = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(url) {\n var _this3 = this;\n var array;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n // Cesium.ExperimentalFeatures.enableModelExperimental = true;\n array = url.split('/');\n array[array.length - 1] = 'scenetree.json';\n _context.next = 4;\n return Cesium.Resource.fetchJson({\n url: array.join('/')\n }).then(function (res) {\n _this3.scenetree = res;\n var _initData = function initData(array) {\n array.forEach(function (item) {\n if (_this3.features.has(item.id)) {\n _this3.features.get(item.id).sphere = item.sphere;\n } else {\n _this3.features.set(item.id, {\n sphere: item.sphere\n });\n }\n if (item.children) {\n _initData(item.children);\n }\n });\n };\n _initData(res.scenes[0].children);\n\n // res.scenes[0].children.forEach(item => {\n // if (this.features.has(item.id)) {\n // this.features.get(item.id).sphere = item.sphere\n // }\n // else {\n // this.features.set(item.id, {sphere: item.sphere})\n // }\n // })\n });\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function loadSceneTree(_x) {\n return _loadSceneTree.apply(this, arguments);\n }\n return loadSceneTree;\n }() // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(state) {\n var _this4 = this;\n var _this, contentElm, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context2.next = 16;\n break;\n }\n _context2.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this.sdk, this.newData, {\n title: 'BIM模型属性',\n left: '180px',\n top: '100px',\n resetCallBack: function resetCallBack() {\n _this4.reset();\n _this4.Dialog.resetCallBack && _this4.Dialog.resetCallBack();\n },\n confirmCallBack: function confirmCallBack(info) {\n _this4.name = _this4.name.trim();\n if (!_this4.name) {\n _this4.name = '未命名对象';\n }\n _this4.oldData.name = _this4.newData.name;\n _this4.oldData.height = _this4.newData.height;\n _this4.oldData.lng = _this4.newData.lng;\n _this4.oldData.lat = _this4.newData.lat;\n // this.oldData.transparency = this.newData.transparency\n _this4.oldData.scale = _this4.newData.scale;\n _this4.oldData.roll = _this4.newData.roll;\n _this4.oldData.heading = _this4.newData.heading;\n _this4.oldData.pitch = _this4.newData.pitch;\n _this4._DialogObject.close();\n var features = new Map();\n _this4.features.forEach(function (item, key) {\n var data = _objectSpread({}, item);\n delete data.features;\n features.set(key, data);\n });\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_objectSpread(_objectSpread({}, _this4.oldData), {}, {\n features: features,\n type: _this4.type\n }));\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(_this4.sdk, _this4.oldData.id);\n },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n // this.newData.transparency = this.oldData.transparency\n // this.newData.name = this.oldData.name\n // this.newData.height = this.oldData.height\n // this.newData.lng = this.oldData.lng\n // this.newData.lat = this.oldData.lat\n // this.newData.scale = this.oldData.scale\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this4.editObj.destroy();\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this4.newData.show = show;\n _this4.entity && (_this4.entity.show = show);\n _this4.Dialog.showCallBack && _this4.Dialog.showCallBack();\n },\n rotateCallBack: function rotateCallBack() {\n if (_this4.rotationEditing) {\n _this4.rotationEditing = false;\n } else {\n _this4.rotationEditing = true;\n }\n },\n translationalCallBack: function translationalCallBack() {\n if (_this4.positionEditing) {\n _this4.positionEditing = false;\n } else {\n _this4.positionEditing = true;\n }\n }\n });\n case 6:\n this._DialogObject = _context2.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' tileset-bim';\n // 内容部分\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n _context2.next = 17;\n break;\n case 16:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 17:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function edit(_x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"featureEdit\",\n value: function () {\n var _featureEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state, feature) {\n var _this5 = this;\n var _this, _createPropertyItem, name, data, content, e_name, e_state, e_property, i, target, confirmBtn;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _this = this;\n this._element_style = null;\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context3.next = 46;\n break;\n }\n _createPropertyItem = function createPropertyItem(item) {\n var html = \"
\\n
\\n \\n \\n \\n \\n
\\n
\");\n // document.createRange().createContextualFragment(html)\n var newElement = document.createElement(\"div\");\n newElement.innerHTML = html;\n var itemElm = newElement.getElementsByClassName('property-item')[0];\n var e_key = itemElm.querySelector(\"input[name='key']\");\n var e_value = itemElm.querySelector(\"input[name='value']\");\n var e_add = itemElm.getElementsByClassName('add')[0];\n var e_delete = itemElm.getElementsByClassName('delete')[0];\n e_key.addEventListener('input', function (e) {\n item.key = e.target.value;\n });\n e_value.addEventListener('input', function (e) {\n item.value = e.target.value;\n });\n e_add.addEventListener('click', function () {\n var newItem = {\n id: _this.randomString(),\n key: \"点击此处可编辑\",\n value: \"\"\n };\n data.descriptions.push(newItem);\n _createPropertyItem(newItem);\n });\n e_delete.addEventListener('click', function (e) {\n for (var _i = 0; _i < data.descriptions.length; _i++) {\n if (data.descriptions[_i].id === item.id) {\n data.descriptions.splice(_i, 1);\n break;\n }\n }\n e_property.removeChild(itemElm);\n // let item = {\n // key: \"点击此处可编辑\",\n // value: \"\"\n // }\n // createPropertyItem(item)\n });\n e_property.appendChild(itemElm);\n };\n // console.log(this.entity)\n // console.log(this.entity.root.children[0].content)\n // console.log(feature.getProperty('id'), feature.getProperty('name'), feature.getProperty('state'))\n name = feature.getProperty('name'); // console.log(feature.getProperty('descriptions'))\n data = {\n id: feature.getProperty('id'),\n name: name,\n state: feature.getProperty('state') || 0,\n descriptions: feature.getProperty('descriptions') || [{\n id: this.randomString(),\n key: \"点击此处可编辑\",\n value: \"\"\n }]\n };\n _context3.t0 = feature.getProperty('state');\n _context3.next = _context3.t0 === '0' ? 10 : _context3.t0 === '1' ? 12 : _context3.t0 === '2' ? 14 : _context3.t0 === '3' ? 16 : 18;\n break;\n case 10:\n data.stateCH = '';\n return _context3.abrupt(\"break\", 18);\n case 12:\n data.stateCH = '已完成';\n return _context3.abrupt(\"break\", 18);\n case 14:\n data.stateCH = '未完成';\n return _context3.abrupt(\"break\", 18);\n case 16:\n data.stateCH = '修建中';\n return _context3.abrupt(\"break\", 18);\n case 18:\n // let feature = this.entity.root.children[0].content.getFeature(0)\n // console.log(id,feature, this.entity)\n // return\n this._element_style = document.createElement('style');\n this._element_style.type = 'text/css';\n this._element_style.setAttribute('data-name', 'YJ_style_dialog');\n this._element_style.innerHTML = Object(_element2__WEBPACK_IMPORTED_MODULE_11__[\"css2\"])();\n _context3.next = 24;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_14__[\"default\"](this.sdk.viewer._container, {\n title: this.oldData.name + '-----设置状态',\n left: 'calc(50% - 200px)',\n top: 'calc(50% - 200px)',\n closeCallBack: function closeCallBack() {\n _this5.Dialog.closeCallBack && _this5.Dialog.closeCallBack();\n }\n });\n case 24:\n this._DialogObject = _context3.sent;\n _context3.next = 27;\n return this._DialogObject.init();\n case 27:\n document.getElementsByTagName('head')[0].appendChild(this._element_style);\n // 内容部分\n content = document.createElement('div');\n content.innerHTML = Object(_element2__WEBPACK_IMPORTED_MODULE_11__[\"html2\"])();\n // 名称\n e_name = content.querySelector(\"input[name='name']\");\n e_name.value = name;\n //状态\n e_state = content.querySelector(\"select[name='state-select']\");\n e_state.value = data.state;\n e_state.addEventListener('change', function (e) {\n data.state = e.target.value;\n switch (data.state) {\n case '0':\n data.stateCH = '';\n break;\n case '1':\n data.stateCH = '已完成';\n break;\n case '2':\n data.stateCH = '未完成';\n break;\n case '3':\n data.stateCH = '修建中';\n break;\n }\n });\n //自定义属性\n e_property = content.getElementsByClassName('property')[0];\n for (i = 0; i < data.descriptions.length; i++) {\n _createPropertyItem(data.descriptions[i], i);\n }\n target = this._DialogObject._element.foot.getElementsByClassName('translational')[0];\n this._DialogObject.contentAppChild(content);\n // foot部分\n confirmBtn = document.createElement('button');\n confirmBtn.className = 'confirm';\n confirmBtn.innerHTML = '确认';\n this._DialogObject.footAppChild(confirmBtn, target);\n confirmBtn.addEventListener('click', function () {\n var flag = false;\n for (var _i2 = 0; _i2 < _this5.features.length; _i2++) {\n if (_this5.features[_i2].id == data.id) {\n _this5.features[_i2] = data;\n flag = true;\n break;\n }\n }\n if (!flag) {\n _this5.features.push(data);\n }\n feature.setProperty('state', data.state);\n feature.setProperty('descriptions', data.descriptions);\n var color = '#fff';\n switch (data.state) {\n case '0':\n color = '#fff';\n break;\n case '1':\n color = '#f00';\n break;\n case '2':\n color = '#0f0';\n break;\n case '3':\n color = '#00f';\n break;\n default:\n }\n feature.color = Cesium.Color.fromCssColorString(color);\n _this5._DialogObject.close();\n _this5.Dialog.confirmCallBack && _this5.Dialog.confirmCallBack(_objectSpread(_objectSpread({}, _this5.newData), {}, {\n features: _this5.features\n }));\n });\n _context3.next = 48;\n break;\n case 46:\n if (this._element_style) {\n document.getElementsByTagName('head')[0].removeChild(this._element_style);\n this._element_style = null;\n }\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 48:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function featureEdit(_x3, _x4) {\n return _featureEdit.apply(this, arguments);\n }\n return featureEdit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n // this.transparency = this.oldData.transparency\n this.name = this.oldData.name;\n this.height = this.oldData.height;\n this.lng = this.oldData.lng;\n this.lat = this.oldData.lat;\n this.roll = this.oldData.roll;\n this.heading = this.oldData.heading;\n this.pitch = this.oldData.pitch;\n this.scale = this.oldData.scale;\n }\n\n //更新模型位置\n }, {\n key: \"updateModel\",\n value: function updateModel(_tx, _ty, _tz) {\n var _this6 = this;\n var _rx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var _ry = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var _rz = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var s = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n if (!this.tileset.root.transform) {\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: '该模型不支持移动和旋转!',\n type: 'warning',\n duration: 1500\n });\n }\n console.warn('该模型不支持移动和旋转!');\n return;\n }\n if (!_tx && _tx !== 0 || !_ty && _ty !== 0 || !_tz && _tz !== 0) {\n return;\n }\n var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(_rx));\n var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(_ry));\n var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(_rz));\n // 平移\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz));\n // 旋转\n var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n var rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n var originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.multiply(m, rotationX, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationZ, originalMatrix);\n var scale = Cesium.Matrix4.fromUniformScale(s);\n Cesium.Matrix4.multiply(originalMatrix, scale, this.entity._root.transform);\n if (!this.editObj.activeAxis) {\n this.editObj.position = {\n lng: _tx,\n lat: _ty,\n alt: _tz\n };\n }\n if (!this.editObj.activeCircle) {\n this.editObj.rotate = {\n x: _rx,\n y: _ry,\n z: _rz\n };\n }\n this.editObj && this.editObj.update();\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, this));\n _classPrivateFieldSet(_updateModelTimeout, this, setTimeout(function () {\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this6));\n var center = _this6.cartesian3Towgs84(_this6.entity.boundingSphere.center, _this6.sdk.viewer);\n var circle = turf.circle([center.lng, center.lat], _this6.entity.boundingSphere.radius / 1000, {\n steps: 360,\n units: 'kilometers'\n });\n var _iterator = _createForOfIteratorHelper(_this6.sdk.entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2),\n key = _step$value[0],\n entity = _step$value[1];\n if (entity.type === 'BillboardObject' && entity.heightMode == 3) {\n var pt = turf.point([entity.lng, entity.lat]);\n if (turf.booleanPointInPolygon(pt, circle)) {\n entity.updateHeight();\n }\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }, 300));\n }\n\n // exportProperty(states) {\n // console.log(this.features)\n // let fieldKeys = ['name', '', '', '', '', '', '', '', '', '', '', '', 'stateCH', 'descriptions']\n // let fieldLabels = ['构件名称', '体积', '墩全高H', '墩身高h', '底部高程', '承台宽', '承台长', '承台高', '族', '桩径', '桩长', '结构材质', '完成情况', '自定义属性']\n\n // let dataStr = fieldLabels.toString() + '\\r\\n';\n // for (let i = 0; i < this.features.length; i++) {\n // for (let j = 0; j < states.length; j++) {\n // if (this.features[i].state == states[j]) {\n // fieldKeys.forEach(key => {\n // if (Array.isArray(this.features[i][key])) {\n // let str = ''\n // for (let k in this.features[i][key]) {\n // str += `${this.features[i][key][k].key + ':' + this.features[i][key][k].value}\\n`\n // }\n // dataStr += `\"${str}\"\\t`\n // }\n // else {\n // // 加引号是为了使换行符在单元格内正常显示\n // dataStr += `\"${this.features[i][key] ? this.features[i][key] : ''}\"\\t,`;\n // }\n // });\n // dataStr += '\\r\\n';\n // break\n // }\n // }\n // }\n\n // // encodeURIComponent 解决中文乱码\n // const url = \"data:text/xls;charset=utf-8,\\ufeff\" + encodeURIComponent(dataStr);\n // console.log(url)\n // // const link = document.createElement(\"a\");\n // // link.href = url;\n // // link.download = this.oldData.name + \"--构件属性.xls\";\n // // link.style.display = 'none';\n // // document.body.appendChild(link);\n // // link.click();\n // // document.body.removeChild(link); //释放标签\n // }\n }, {\n key: \"getScenetree\",\n value: function getScenetree() {\n return this.scenetree;\n }\n\n // 设置feature颜色\n }, {\n key: \"featureColor\",\n value: function featureColor(id, color) {\n if (this.features.has(id)) {\n var features = this.features.get(id).features;\n for (var key in features) {\n if (features[key].content._model) {\n features[key].color = Cesium.Color.fromCssColorString(color);\n }\n features[key].customColor = Cesium.Color.fromCssColorString(color);\n }\n this.features.get(id).customColor = Cesium.Color.fromCssColorString(color);\n }\n }\n }, {\n key: \"getFeatureColor\",\n value: function getFeatureColor(id) {\n if (this.features.has(id)) {\n if (this.features.get(id).customColor) {\n return this.features.get(id).customColor;\n }\n var features = this.features.get(id).features;\n for (var key in features) {\n if (features[key].content._model) {\n return features[key].customColor || features[key].color;\n }\n }\n }\n }\n\n // 设置feature显隐\n }, {\n key: \"featureShow\",\n value: function featureShow(id, show) {\n if (this.features.has(id)) {\n var features = this.features.get(id).features;\n for (var key in features) {\n if (features[key].content._model) {\n features[key].show = show;\n }\n features[key].customShow = show;\n }\n this.features.get(id).customShow = show;\n }\n }\n\n //飞到feature位置\n }, {\n key: \"featureFlyto\",\n value: function () {\n var _featureFlyto = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4(id) {\n var _this7 = this;\n var sphere, center, srcMatInv, curMat, mat, center2, wgs84, cartesian3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (this.features.has(id)) {\n sphere = this.features.get(id).sphere;\n center = new Cesium.Cartesian3(sphere[0], sphere[1], sphere[2]);\n srcMatInv = this.entity._root.originalTransform;\n srcMatInv = Cesium.Matrix4.inverse(srcMatInv, new Cesium.Matrix4());\n curMat = this.entity._root.transform;\n mat = Cesium.Matrix4.multiply(curMat, srcMatInv, new Cesium.Matrix4());\n center2 = Cesium.Matrix4.multiplyByPoint(mat, center, new Cesium.Cartesian3());\n wgs84 = this.cartesian3Towgs84(center2, this.sdk.viewer);\n cartesian3 = Cesium.Cartesian3.fromDegrees(wgs84.lng, wgs84.lat, wgs84.alt + sphere[3]);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeViewFollow\"])(this.sdk);\n this.sdk.viewer.camera.flyTo({\n destination: cartesian3\n });\n // this.entity.style = await new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,0.2)')\"\n // });\n this.features.forEach(function (item, key) {\n if (key === id) {\n var color = _this7.getFeatureColor(id);\n if (_this7.features.has(id) && color) {\n var features = _this7.features.get(id).features;\n for (var k in features) {\n if (features[k].content._model) {\n features[k].color = color;\n }\n features[k].customAlpha = 1;\n }\n _this7.features.get(id).customAlpha = 1;\n }\n // this.featureColor(id, `rgba(${Cesium.Color.floatToByte(color.red)},${Cesium.Color.floatToByte(color.green)},${Cesium.Color.floatToByte(color.blue)},${color.alpha})`)\n } else {\n var _color = _this7.getFeatureColor(key);\n if (_this7.features.has(key) && _color) {\n var _features = _this7.features.get(key).features;\n for (var _k in _features) {\n if (_features[_k].content._model) {\n _features[_k].color = Cesium.Color.fromCssColorString(\"rgba(\".concat(Cesium.Color.floatToByte(_color.red), \",\").concat(Cesium.Color.floatToByte(_color.green), \",\").concat(Cesium.Color.floatToByte(_color.blue), \",\").concat(_color.alpha * 0.2, \")\"));\n }\n _features[_k].customAlpha = _color.alpha * 0.2;\n }\n _this7.features.get(key).customAlpha = _color.alpha * 0.2;\n }\n // this.featureColor(key, `rgba(${Cesium.Color.floatToByte(color.red)},${Cesium.Color.floatToByte(color.green)},${Cesium.Color.floatToByte(color.blue)},${color.alpha * 0.2})`)\n }\n });\n // this.entity.readyPromise.then(()=>{\n // this.featureColor(id, '#ffffff')\n // })\n } else {\n this.features.forEach(function (item, key) {\n var features = _this7.features.get(key).features;\n var color = _this7.getFeatureColor(key);\n if (color) {\n for (var k in features) {\n if (features[k].content._model) {\n features[k].color = color;\n }\n features[k].customAlpha = 1;\n }\n _this7.features.get(key).customAlpha = color.alpha * 0.2;\n }\n });\n }\n case 1:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function featureFlyto(_x5) {\n return _featureFlyto.apply(this, arguments);\n }\n return featureFlyto;\n }() // 导出属性\n }, {\n key: \"exportProperty\",\n value: function exportProperty(states) {\n if (this.exportStateArray.length === 0) {\n window.ELEMENT && window.ELEMENT.Message({\n message: '未选择属性导出选项!',\n type: 'warning',\n duration: 1500\n });\n return;\n }\n var fieldKeys = ['name', '', '', '', '', '', '', '', '', '', '', '', 'stateCH', 'descriptions'];\n var fieldLabels = ['构件名称', '体积', '墩全高H', '墩身高h', '底部高程', '承台宽', '承台长', '承台高', '族', '桩径', '桩长', '结构材质', '完成情况', '自定义属性'];\n var url = 'data:application/vnd.ms-excel;base64,',\n tmplWorkbookXML = '' + 'Axel Richter{created}' + '' + '' + '' + '' + '{worksheets}',\n tmplWorksheetXML = '{rows}
',\n tmplCellXML = '{data}',\n base64 = function base64(s) {\n return window.btoa(unescape(encodeURIComponent(s)));\n },\n format = function format(s, c) {\n return s.replace(/{(\\w+)}/g, function (m, p) {\n return c[p];\n });\n };\n var ctx = \"\";\n var workbookXML = \"\";\n var worksheetsXML = \"\";\n var rowsXML = \"\";\n var pil = 0;\n for (var i = 0; i < this.features.length; i++) {\n for (var j = 0; j < states.length; j++) {\n if (this.features[i].state == states[j]) {\n if (i == 0) {\n rowsXML += '' + '构件名称' + '体积' + '墩全高H' + '墩身高h' + '底部高程' + '承台宽' + '承台长' + '承台高' + '' + '桩径' + '桩长' + '结构材质' + '完成情况' + '自定义属性' + '';\n }\n rowsXML += '';\n for (var key in fieldKeys) {\n if (Array.isArray(this.features[i][fieldKeys[key]])) {\n var str = '';\n for (var k in this.features[i][fieldKeys[key]]) {\n str += \"\".concat(this.features[i][fieldKeys[key]][k].key + ':' + this.features[i][fieldKeys[key]][k].value, \" \");\n }\n ctx = {\n nameType: 'String',\n data: str\n };\n } else {\n ctx = {\n nameType: 'String',\n data: this.features[i][fieldKeys[key]] || \"0\"\n };\n }\n rowsXML += format(tmplCellXML, ctx);\n }\n rowsXML += '';\n if (i > 0 && i / 60000 % 1 === 0) {\n pil++;\n ctx = {\n rows: rowsXML,\n nameWS: 'Sheet' + i\n };\n worksheetsXML += format(tmplWorksheetXML, ctx);\n rowsXML = \"\";\n rowsXML += '' + '构件名称' + '体积' + '墩全高H' + '墩身高h' + '底部高程' + '承台宽' + '承台长' + '承台高' + '' + '桩径' + '桩长' + '结构材质' + '完成情况' + '自定义属性' + '';\n }\n }\n }\n }\n ctx = {\n rows: rowsXML,\n nameWS: 'Sheet'\n };\n worksheetsXML += format(tmplWorksheetXML, ctx);\n rowsXML = \"\";\n ctx = {\n created: new Date().getTime(),\n worksheets: worksheetsXML\n };\n workbookXML = format(tmplWorkbookXML, ctx);\n var link = document.createElement(\"A\");\n link.href = url + base64(workbookXML);\n link.download = this.oldData.name + \"--构件属性.xls\";\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }, {\n key: \"exportState\",\n value: function exportState(e) {\n var checkbox = e.target.getElementsByTagName('input')[0];\n checkbox.checked = !checkbox.checked;\n if (checkbox.checked) {\n this.exportStateArray.push(checkbox.value);\n this.exportStateArray = Array.from(new Set(this.exportStateArray));\n } else {\n for (var i = 0; i < this.exportStateArray.length; i++) {\n if (this.exportStateArray[i] == checkbox.value) {\n this.exportStateArray.splice(i, 1);\n break;\n }\n }\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BIM);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9CSU0vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9CSU0vaW5kZXguanM/ZGM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMTEtMjAgMTY6MDVcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMy0xMS0yMCAxNjowNVxyXG4gKi9cclxuaW1wb3J0IEJhc2VUaWxlc2V0IGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgaHRtbDIsIGNzczIgfSBmcm9tIFwiLi9fZWxlbWVudDJcIjtcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSAnLi4vLi4vLi4vLi4vLi4vQmFzZURpYWxvZydcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHN5bmNTcGxpdERhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIEJJTSBleHRlbmRzIEJhc2VUaWxlc2V0IHtcclxuICAjdXBkYXRlTW9kZWxUaW1lb3V0XHJcbiAgLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZGVzY3JpcHRpb24g5Yqg6L29QklN5qih5Z6LXHJcbiAqIEBwYXJhbSBzZGsge29iamVjdH0gc2RrXHJcbiAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOaooeWei+WPguaVsFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDlr7nosaFpZFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaooeWei+aYvumakFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gKiBAcGFyYW0gb3B0aW9ucy51cmwge3N0cmluZ30g6LWE5rqQ5Zyw5Z2AXHJcbiAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uIHtvYmplY3R9IOaooeWei+S9jee9rlxyXG4gKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICB0aGlzLmZlYXR1cmVzID0gb3B0aW9ucy5mZWF0dXJlcyB8fCBbXVxyXG4gICAgdGhpcy5leHBvcnRTdGF0ZUFycmF5ID0gW11cclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICB0aGlzLkRpYWxvZy5leHBvcnRTdGF0ZSA9IChlKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0U3RhdGUoZSlcclxuICAgIH1cclxuICAgIHRoaXMuRGlhbG9nLmV4cG9ydFByb3BlcnR5ID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRQcm9wZXJ0eSh0aGlzLmV4cG9ydFN0YXRlQXJyYXkpXHJcbiAgICB9XHJcbiAgICB0aGlzLmZlYXR1cmVzID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiBcImJpbVwiXHJcbiAgfVxyXG5cclxuICBnZXQgbmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0RhdGEubmFtZVxyXG4gIH1cclxuXHJcbiAgc2V0IG5hbWUodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLm5hbWUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm5hbWUgJiYgdGhpcy5fZWxtcy5uYW1lLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbG5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5sbmdcclxuICB9XHJcblxyXG4gIHNldCBsbmcodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLmxuZyA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5uZXdEYXRhLmxuZywgdGhpcy5uZXdEYXRhLmxhdCwgdGhpcy5uZXdEYXRhLmhlaWdodCwgdGhpcy5uZXdEYXRhLnJvbGwsIHRoaXMubmV3RGF0YS5oZWFkaW5nLCB0aGlzLm5ld0RhdGEucGl0Y2gsIHRoaXMubmV3RGF0YS5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGF0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5sYXRcclxuICB9XHJcblxyXG4gIHNldCBsYXQodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLmxhdCA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5uZXdEYXRhLmxuZywgdGhpcy5uZXdEYXRhLmxhdCwgdGhpcy5uZXdEYXRhLmhlaWdodCwgdGhpcy5uZXdEYXRhLnJvbGwsIHRoaXMubmV3RGF0YS5oZWFkaW5nLCB0aGlzLm5ld0RhdGEucGl0Y2gsIHRoaXMubmV3RGF0YS5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLmhlaWdodCA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5uZXdEYXRhLmxuZywgdGhpcy5uZXdEYXRhLmxhdCwgdGhpcy5uZXdEYXRhLmhlaWdodCwgdGhpcy5uZXdEYXRhLnJvbGwsIHRoaXMubmV3RGF0YS5oZWFkaW5nLCB0aGlzLm5ld0RhdGEucGl0Y2gsIHRoaXMubmV3RGF0YS5zY2FsZSlcclxuICAgIHRoaXMuX2VsbXMuaGVpZ2h0ICYmIHRoaXMuX2VsbXMuaGVpZ2h0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcm9sbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0RhdGEucm9sbFxyXG4gIH1cclxuXHJcbiAgc2V0IHJvbGwodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLnJvbGwgPSB2XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMubmV3RGF0YS5sbmcsIHRoaXMubmV3RGF0YS5sYXQsIHRoaXMubmV3RGF0YS5oZWlnaHQsIHRoaXMubmV3RGF0YS5yb2xsLCB0aGlzLm5ld0RhdGEuaGVhZGluZywgdGhpcy5uZXdEYXRhLnBpdGNoLCB0aGlzLm5ld0RhdGEuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLnJvbGwgJiYgdGhpcy5fZWxtcy5yb2xsLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaGVhZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0RhdGEuaGVhZGluZ1xyXG4gIH1cclxuXHJcbiAgc2V0IGhlYWRpbmcodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLmhlYWRpbmcgPSB2XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMubmV3RGF0YS5sbmcsIHRoaXMubmV3RGF0YS5sYXQsIHRoaXMubmV3RGF0YS5oZWlnaHQsIHRoaXMubmV3RGF0YS5yb2xsLCB0aGlzLm5ld0RhdGEuaGVhZGluZywgdGhpcy5uZXdEYXRhLnBpdGNoLCB0aGlzLm5ld0RhdGEuc2NhbGUpXHJcbiAgICB0aGlzLl9lbG1zLmhlYWRpbmcgJiYgdGhpcy5fZWxtcy5oZWFkaW5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcGl0Y2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLnBpdGNoXHJcbiAgfVxyXG5cclxuICBzZXQgcGl0Y2godikge1xyXG4gICAgdGhpcy5uZXdEYXRhLnBpdGNoID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm5ld0RhdGEubG5nLCB0aGlzLm5ld0RhdGEubGF0LCB0aGlzLm5ld0RhdGEuaGVpZ2h0LCB0aGlzLm5ld0RhdGEucm9sbCwgdGhpcy5uZXdEYXRhLmhlYWRpbmcsIHRoaXMubmV3RGF0YS5waXRjaCwgdGhpcy5uZXdEYXRhLnNjYWxlKVxyXG4gICAgdGhpcy5fZWxtcy5waXRjaCAmJiB0aGlzLl9lbG1zLnBpdGNoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLnNjYWxlXHJcbiAgfVxyXG5cclxuICBzZXQgc2NhbGUodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLnNjYWxlID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm5ld0RhdGEubG5nLCB0aGlzLm5ld0RhdGEubGF0LCB0aGlzLm5ld0RhdGEuaGVpZ2h0LCB0aGlzLm5ld0RhdGEucm9sbCwgdGhpcy5uZXdEYXRhLmhlYWRpbmcsIHRoaXMubmV3RGF0YS5waXRjaCwgdGhpcy5uZXdEYXRhLnNjYWxlKVxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZSAmJiB0aGlzLl9lbG1zLnNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgdHJhbnNwYXJlbmN5KCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3lcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCB0cmFuc3BhcmVuY3kodikge1xyXG4gIC8vICAgdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSA9IHZcclxuICAvLyAgIHRoaXMuZW50aXR5LnN0eWxlID0gbmV3IENlc2l1bS5DZXNpdW0zRFRpbGVTdHlsZSh7XHJcbiAgLy8gICAgIGNvbG9yOiBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LFwiICsgdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSArIFwiKScpXCIsXHJcbiAgLy8gICAgIHNob3c6IHRydWUsXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMuZW50aXR5LnRyYW5zcGFyZW5jeSA9IE51bWJlcih0aGlzLm5ld0RhdGEudHJhbnNwYXJlbmN5KVxyXG4gIC8vICAgdGhpcy5fZWxtcy50cmFuc3BhcmVuY3kgJiYgdGhpcy5fZWxtcy50cmFuc3BhcmVuY3kuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gIC8vICAgICBpdGVtLnZhbHVlID0gdlxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIGFzeW5jIGxvYWRTY2VuZVRyZWUodXJsKSB7XHJcblxyXG4gICAgLy8gQ2VzaXVtLkV4cGVyaW1lbnRhbEZlYXR1cmVzLmVuYWJsZU1vZGVsRXhwZXJpbWVudGFsID0gdHJ1ZTtcclxuICAgIGxldCBhcnJheSA9IHVybC5zcGxpdCgnLycpXHJcbiAgICBhcnJheVthcnJheS5sZW5ndGggLSAxXSA9ICdzY2VuZXRyZWUuanNvbidcclxuXHJcblxyXG4gICAgYXdhaXQgQ2VzaXVtLlJlc291cmNlLmZldGNoSnNvbih7XHJcbiAgICAgIHVybDogYXJyYXkuam9pbignLycpXHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2NlbmV0cmVlID0gcmVzXHJcblxyXG4gICAgICBjb25zdCBpbml0RGF0YSA9IChhcnJheSkgPT4ge1xyXG4gICAgICAgIGFycmF5LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaXRlbS5pZCkuc3BoZXJlID0gaXRlbS5zcGhlcmVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnNldChpdGVtLmlkLCB7IHNwaGVyZTogaXRlbS5zcGhlcmUgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGluaXREYXRhKGl0ZW0uY2hpbGRyZW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5pdERhdGEocmVzLnNjZW5lc1swXS5jaGlsZHJlbilcclxuXHJcbiAgICAgIC8vIHJlcy5zY2VuZXNbMF0uY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgLy8gICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgLy8gICAgIHRoaXMuZmVhdHVyZXMuZ2V0KGl0ZW0uaWQpLnNwaGVyZSA9IGl0ZW0uc3BoZXJlXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAvLyAgICAgdGhpcy5mZWF0dXJlcy5zZXQoaXRlbS5pZCwge3NwaGVyZTogaXRlbS5zcGhlcmV9KVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSlcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g57yW6L6R5qGGXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMubmV3RGF0YSwge1xyXG4gICAgICAgIHRpdGxlOiAnQklN5qih5Z6L5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKGluZm8pID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEubmFtZSA9IHRoaXMubmV3RGF0YS5uYW1lXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEuaGVpZ2h0ID0gdGhpcy5uZXdEYXRhLmhlaWdodFxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLmxuZyA9IHRoaXMubmV3RGF0YS5sbmdcclxuICAgICAgICAgIHRoaXMub2xkRGF0YS5sYXQgPSB0aGlzLm5ld0RhdGEubGF0XHJcbiAgICAgICAgICAvLyB0aGlzLm9sZERhdGEudHJhbnNwYXJlbmN5ID0gdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeVxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLnNjYWxlID0gdGhpcy5uZXdEYXRhLnNjYWxlXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEucm9sbCA9IHRoaXMubmV3RGF0YS5yb2xsXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEuaGVhZGluZyA9IHRoaXMubmV3RGF0YS5oZWFkaW5nXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEucGl0Y2ggPSB0aGlzLm5ld0RhdGEucGl0Y2hcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICBsZXQgZmVhdHVyZXMgPSBuZXcgTWFwKClcclxuICAgICAgICAgIHRoaXMuZmVhdHVyZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi5pdGVtIH1cclxuICAgICAgICAgICAgZGVsZXRlIGRhdGEuZmVhdHVyZXNcclxuICAgICAgICAgICAgZmVhdHVyZXMuc2V0KGtleSwgZGF0YSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHsgLi4udGhpcy5vbGREYXRhLCBmZWF0dXJlczogZmVhdHVyZXMsIHR5cGU6IHRoaXMudHlwZSB9KVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vbGREYXRhLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgLy8gdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSA9IHRoaXMub2xkRGF0YS50cmFuc3BhcmVuY3lcclxuICAgICAgICAgIC8vIHRoaXMubmV3RGF0YS5uYW1lID0gdGhpcy5vbGREYXRhLm5hbWVcclxuICAgICAgICAgIC8vIHRoaXMubmV3RGF0YS5oZWlnaHQgPSB0aGlzLm9sZERhdGEuaGVpZ2h0XHJcbiAgICAgICAgICAvLyB0aGlzLm5ld0RhdGEubG5nID0gdGhpcy5vbGREYXRhLmxuZ1xyXG4gICAgICAgICAgLy8gdGhpcy5uZXdEYXRhLmxhdCA9IHRoaXMub2xkRGF0YS5sYXRcclxuICAgICAgICAgIC8vIHRoaXMubmV3RGF0YS5zY2FsZSA9IHRoaXMub2xkRGF0YS5zY2FsZVxyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuc3R5bGUgPSBuZXcgQ2VzaXVtLkNlc2l1bTNEVGlsZVN0eWxlKHtcclxuICAgICAgICAgIC8vICAgY29sb3I6IFwiY29sb3IoJ3JnYmEoMjU1LDI1NSwyNTUsXCIgKyB0aGlzLm5ld0RhdGEudHJhbnNwYXJlbmN5ICsgXCIpJylcIixcclxuICAgICAgICAgIC8vICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMubmV3RGF0YS5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LnNob3cgPSBzaG93KVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3RhdGVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm90YXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm90YXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdGF0aW9uRWRpdGluZyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgdGlsZXNldC1iaW0nXHJcbiAgICAgIC8vIOWGheWuuemDqOWIhlxyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmZWF0dXJlRWRpdChzdGF0ZSwgZmVhdHVyZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5lbnRpdHkpXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZW50aXR5LnJvb3QuY2hpbGRyZW5bMF0uY29udGVudClcclxuICAgICAgLy8gY29uc29sZS5sb2coZmVhdHVyZS5nZXRQcm9wZXJ0eSgnaWQnKSwgZmVhdHVyZS5nZXRQcm9wZXJ0eSgnbmFtZScpLCBmZWF0dXJlLmdldFByb3BlcnR5KCdzdGF0ZScpKVxyXG4gICAgICBsZXQgbmFtZSA9IGZlYXR1cmUuZ2V0UHJvcGVydHkoJ25hbWUnKVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhmZWF0dXJlLmdldFByb3BlcnR5KCdkZXNjcmlwdGlvbnMnKSlcclxuICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgaWQ6IGZlYXR1cmUuZ2V0UHJvcGVydHkoJ2lkJyksXHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICBzdGF0ZTogZmVhdHVyZS5nZXRQcm9wZXJ0eSgnc3RhdGUnKSB8fCAwLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uczogZmVhdHVyZS5nZXRQcm9wZXJ0eSgnZGVzY3JpcHRpb25zJykgfHwgW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogdGhpcy5yYW5kb21TdHJpbmcoKSxcclxuICAgICAgICAgICAga2V5OiBcIueCueWHu+atpOWkhOWPr+e8lui+kVwiLFxyXG4gICAgICAgICAgICB2YWx1ZTogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgICBzd2l0Y2ggKGZlYXR1cmUuZ2V0UHJvcGVydHkoJ3N0YXRlJykpIHtcclxuICAgICAgICBjYXNlICcwJzogZGF0YS5zdGF0ZUNIID0gJydcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMSc6IGRhdGEuc3RhdGVDSCA9ICflt7LlrozmiJAnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzInOiBkYXRhLnN0YXRlQ0ggPSAn5pyq5a6M5oiQJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICczJzogZGF0YS5zdGF0ZUNIID0gJ+S/ruW7uuS4rSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgLy8gbGV0IGZlYXR1cmUgPSB0aGlzLmVudGl0eS5yb290LmNoaWxkcmVuWzBdLmNvbnRlbnQuZ2V0RmVhdHVyZSgwKVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhpZCxmZWF0dXJlLCB0aGlzLmVudGl0eSlcclxuICAgICAgLy8gcmV0dXJuXHJcbiAgICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJywgJ1lKX3N0eWxlX2RpYWxvZycpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLmlubmVySFRNTCA9IGNzczIoKTtcclxuXHJcblxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgQmFzZURpYWxvZyh0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLm9sZERhdGEubmFtZSArICctLS0tLeiuvue9rueKtuaAgScsIGxlZnQ6ICdjYWxjKDUwJSAtIDIwMHB4KScsIHRvcDogJ2NhbGMoNTAlIC0gMjAwcHgpJyxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgYXdhaXQgdGhpcy5fRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpO1xyXG4gICAgICAvLyDlhoXlrrnpg6jliIZcclxuICAgICAgbGV0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudC5pbm5lckhUTUwgPSBodG1sMigpXHJcbiAgICAgIC8vIOWQjeensFxyXG4gICAgICBsZXQgZV9uYW1lID0gY29udGVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0nbmFtZSddXCIpXHJcbiAgICAgIGVfbmFtZS52YWx1ZSA9IG5hbWVcclxuICAgICAgLy/nirbmgIFcclxuICAgICAgbGV0IGVfc3RhdGUgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RbbmFtZT0nc3RhdGUtc2VsZWN0J11cIilcclxuICAgICAgZV9zdGF0ZS52YWx1ZSA9IGRhdGEuc3RhdGVcclxuICAgICAgZV9zdGF0ZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICAgIGRhdGEuc3RhdGUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIHN3aXRjaCAoZGF0YS5zdGF0ZSkge1xyXG4gICAgICAgICAgY2FzZSAnMCc6IGRhdGEuc3RhdGVDSCA9ICcnXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICcxJzogZGF0YS5zdGF0ZUNIID0gJ+W3suWujOaIkCdcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJzInOiBkYXRhLnN0YXRlQ0ggPSAn5pyq5a6M5oiQJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnMyc6IGRhdGEuc3RhdGVDSCA9ICfkv67lu7rkuK0nXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLy/oh6rlrprkuYnlsZ7mgKdcclxuICAgICAgbGV0IGVfcHJvcGVydHkgPSBjb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Byb3BlcnR5JylbMF1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNyZWF0ZVByb3BlcnR5SXRlbShkYXRhLmRlc2NyaXB0aW9uc1tpXSwgaSlcclxuICAgICAgfVxyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eUl0ZW0oaXRlbSkge1xyXG4gICAgICAgIGxldCBodG1sID0gYDxkaXYgY2xhc3M9XCJyb3cgcHJvcGVydHktaXRlbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dF9sYWJsZVwiIG5hbWU9XCJrZXlcIiB2YWx1ZT1cIiR7aXRlbS5rZXl9XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbmFtZT1cInZhbHVlXCIgdmFsdWU9XCIke2l0ZW0udmFsdWV9XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYWRkXCI+77yLPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZGVsZXRlXCI+77yNPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgLy8gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbClcclxuICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgbGV0IGl0ZW1FbG0gPSBuZXdFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Byb3BlcnR5LWl0ZW0nKVswXVxyXG4gICAgICAgIGxldCBlX2tleSA9IGl0ZW1FbG0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J2tleSddXCIpXHJcbiAgICAgICAgbGV0IGVfdmFsdWUgPSBpdGVtRWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSd2YWx1ZSddXCIpXHJcbiAgICAgICAgbGV0IGVfYWRkID0gaXRlbUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhZGQnKVswXVxyXG4gICAgICAgIGxldCBlX2RlbGV0ZSA9IGl0ZW1FbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZGVsZXRlJylbMF1cclxuICAgICAgICBlX2tleS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLmtleSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBlX3ZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZV9hZGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3SXRlbSA9IHtcclxuICAgICAgICAgICAgaWQ6IF90aGlzLnJhbmRvbVN0cmluZygpLFxyXG4gICAgICAgICAgICBrZXk6IFwi54K55Ye75q2k5aSE5Y+v57yW6L6RXCIsXHJcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9ucy5wdXNoKG5ld0l0ZW0pXHJcbiAgICAgICAgICBjcmVhdGVQcm9wZXJ0eUl0ZW0obmV3SXRlbSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGVfZGVsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5kZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb25zW2ldLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbnMuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZV9wcm9wZXJ0eS5yZW1vdmVDaGlsZChpdGVtRWxtKVxyXG4gICAgICAgICAgLy8gbGV0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAvLyAgIGtleTogXCLngrnlh7vmraTlpITlj6/nvJbovpFcIixcclxuICAgICAgICAgIC8vICAgdmFsdWU6IFwiXCJcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGNyZWF0ZVByb3BlcnR5SXRlbShpdGVtKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZV9wcm9wZXJ0eS5hcHBlbmRDaGlsZChpdGVtRWxtKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cmFuc2xhdGlvbmFsJylbMF1cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50KVxyXG4gICAgICAvLyBmb2906YOo5YiGXHJcbiAgICAgIGxldCBjb25maXJtQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgIGNvbmZpcm1CdG4uY2xhc3NOYW1lID0gJ2NvbmZpcm0nO1xyXG4gICAgICBjb25maXJtQnRuLmlubmVySFRNTCA9ICfnoa7orqQnXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5mb290QXBwQ2hpbGQoY29uZmlybUJ0biwgdGFyZ2V0KVxyXG4gICAgICBjb25maXJtQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzW2ldLmlkID09IGRhdGEuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlc1tpXSA9IGRhdGFcclxuICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZS5zZXRQcm9wZXJ0eSgnc3RhdGUnLCBkYXRhLnN0YXRlKVxyXG4gICAgICAgIGZlYXR1cmUuc2V0UHJvcGVydHkoJ2Rlc2NyaXB0aW9ucycsIGRhdGEuZGVzY3JpcHRpb25zKVxyXG4gICAgICAgIGxldCBjb2xvciA9ICcjZmZmJ1xyXG4gICAgICAgIHN3aXRjaCAoZGF0YS5zdGF0ZSkge1xyXG4gICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJyNmZmYnXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJyNmMDAnXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJyMwZjAnXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJyMwMGYnXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZS5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoY29sb3IpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHsgLi4udGhpcy5uZXdEYXRhLCBmZWF0dXJlczogdGhpcy5mZWF0dXJlcyB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50X3N0eWxlKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50X3N0eWxlKVxyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy50cmFuc3BhcmVuY3kgPSB0aGlzLm9sZERhdGEudHJhbnNwYXJlbmN5XHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9sZERhdGEubmFtZVxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9sZERhdGEuaGVpZ2h0XHJcbiAgICB0aGlzLmxuZyA9IHRoaXMub2xkRGF0YS5sbmdcclxuICAgIHRoaXMubGF0ID0gdGhpcy5vbGREYXRhLmxhdFxyXG4gICAgdGhpcy5yb2xsID0gdGhpcy5vbGREYXRhLnJvbGxcclxuICAgIHRoaXMuaGVhZGluZyA9IHRoaXMub2xkRGF0YS5oZWFkaW5nXHJcbiAgICB0aGlzLnBpdGNoID0gdGhpcy5vbGREYXRhLnBpdGNoXHJcbiAgICB0aGlzLnNjYWxlID0gdGhpcy5vbGREYXRhLnNjYWxlXHJcbiAgfVxyXG5cclxuICAvL+abtOaWsOaooeWei+S9jee9rlxyXG4gIHVwZGF0ZU1vZGVsKF90eCwgX3R5LCBfdHosIF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDAsIHMgPSAxKSB7XHJcbiAgICBpZiAoIXRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybSkge1xyXG4gICAgICBpZiAod2luZG93LkVMRU1FTlQpIHtcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6K+l5qih5Z6L5LiN5pSv5oyB56e75Yqo5ZKM5peL6L2s77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKCfor6XmqKHlnovkuI3mlK/mjIHnp7vliqjlkozml4vovazvvIEnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmICgoIV90eCAmJiBfdHghPT0wKSB8fCAoIV90eSAmJiBfdHkhPT0wKSB8fCAoIV90eiAmJiBfdHohPT0wKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBteCA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblgoXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcngpXHJcbiAgICApXHJcbiAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J5KVxyXG4gICAgKVxyXG4gICAgbGV0IG16ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWihcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeilcclxuICAgIClcclxuICAgIC8vIOW5s+enu1xyXG4gICAgbGV0IG0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoX3R4LCBfdHksIF90eikpXHJcbiAgICAvLyDml4vovaxcclxuICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgIGxldCByb3RhdGlvblkgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteSlcclxuICAgIGxldCByb3RhdGlvblogPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteilcclxuICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShtLCByb3RhdGlvblgsIG9yaWdpbmFsTWF0cml4KVxyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkob3JpZ2luYWxNYXRyaXgsIHJvdGF0aW9uWSwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25aLCBvcmlnaW5hbE1hdHJpeClcclxuICAgIGNvbnN0IHNjYWxlID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVVuaWZvcm1TY2FsZShzKTtcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCBzY2FsZSwgdGhpcy5lbnRpdHkuX3Jvb3QudHJhbnNmb3JtKVxyXG4gICAgaWYgKCF0aGlzLmVkaXRPYmouYWN0aXZlQXhpcykge1xyXG4gICAgICB0aGlzLmVkaXRPYmoucG9zaXRpb24gPSB7IGxuZzogX3R4LCBsYXQ6IF90eSwgYWx0OiBfdHogfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmVkaXRPYmouYWN0aXZlQ2lyY2xlKSB7XHJcbiAgICAgIHRoaXMuZWRpdE9iai5yb3RhdGUgPSB7IHg6IF9yeCwgeTogX3J5LCB6OiBfcnogfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0T2JqICYmIHRoaXMuZWRpdE9iai51cGRhdGUoKVxyXG5cclxuICAgIGNsZWFyVGltZW91dCh0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQpXHJcbiAgICB0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI3VwZGF0ZU1vZGVsVGltZW91dClcclxuICAgICAgbGV0IGNlbnRlciA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5lbnRpdHkuYm91bmRpbmdTcGhlcmUuY2VudGVyLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgIGxldCBjaXJjbGUgPSB0dXJmLmNpcmNsZShbY2VudGVyLmxuZywgY2VudGVyLmxhdF0sIHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLnJhZGl1cyAvIDEwMDAsIHsgc3RlcHM6IDM2MCwgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgZm9yIChsZXQgW2tleSwgZW50aXR5XSBvZiB0aGlzLnNkay5lbnRpdHlNYXApIHtcclxuICAgICAgICBpZiAoZW50aXR5LnR5cGUgPT09ICdCaWxsYm9hcmRPYmplY3QnICYmIGVudGl0eS5oZWlnaHRNb2RlID09IDMpIHtcclxuICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW2VudGl0eS5sbmcsIGVudGl0eS5sYXRdKTtcclxuICAgICAgICAgIGlmICh0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgY2lyY2xlKSkge1xyXG4gICAgICAgICAgICBlbnRpdHkudXBkYXRlSGVpZ2h0KClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZihlbnRpdHkubGFiZWwpIHtcclxuICAgICAgICAgICAgZW50aXR5LmxhYmVsLnNob3cgPSBlbnRpdHkubGFiZWwuc2hvd1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBleHBvcnRQcm9wZXJ0eShzdGF0ZXMpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZmVhdHVyZXMpXHJcbiAgLy8gICBsZXQgZmllbGRLZXlzID0gWyduYW1lJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnc3RhdGVDSCcsICdkZXNjcmlwdGlvbnMnXVxyXG4gIC8vICAgbGV0IGZpZWxkTGFiZWxzID0gWyfmnoTku7blkI3np7AnLCAn5L2T56evJywgJ+WiqeWFqOmrmEgnLCAn5aKp6Lqr6auYaCcsICflupXpg6jpq5jnqIsnLCAn5om/5Y+w5a69JywgJ+aJv+WPsOmVvycsICfmib/lj7Dpq5gnLCAn5pePJywgJ+ahqeW+hCcsICfmoanplb8nLCAn57uT5p6E5p2Q6LSoJywgJ+WujOaIkOaDheWGtScsICfoh6rlrprkuYnlsZ7mgKcnXVxyXG5cclxuICAvLyAgIGxldCBkYXRhU3RyID0gZmllbGRMYWJlbHMudG9TdHJpbmcoKSArICdcXHJcXG4nO1xyXG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3RhdGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgLy8gICAgICAgaWYgKHRoaXMuZmVhdHVyZXNbaV0uc3RhdGUgPT0gc3RhdGVzW2pdKSB7XHJcbiAgLy8gICAgICAgICBmaWVsZEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gIC8vICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZlYXR1cmVzW2ldW2tleV0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgbGV0IHN0ciA9ICcnXHJcbiAgLy8gICAgICAgICAgICAgZm9yIChsZXQgayBpbiB0aGlzLmZlYXR1cmVzW2ldW2tleV0pIHtcclxuICAvLyAgICAgICAgICAgICAgIHN0ciArPSBgJHt0aGlzLmZlYXR1cmVzW2ldW2tleV1ba10ua2V5ICsgJ++8micgKyB0aGlzLmZlYXR1cmVzW2ldW2tleV1ba10udmFsdWV9XFxuYFxyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgICBkYXRhU3RyICs9IGBcIiR7c3RyfVwiXFx0YFxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIC8vIOWKoOW8leWPt+aYr+S4uuS6huS9v+aNouihjOespuWcqOWNleWFg+agvOWGheato+W4uOaYvuekulxyXG4gIC8vICAgICAgICAgICAgIGRhdGFTdHIgKz0gYFwiJHt0aGlzLmZlYXR1cmVzW2ldW2tleV0gPyB0aGlzLmZlYXR1cmVzW2ldW2tleV0gOiAnJ31cIlxcdCxgO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuICAvLyAgICAgICAgIGRhdGFTdHIgKz0gJ1xcclxcbic7XHJcbiAgLy8gICAgICAgICBicmVha1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCDop6PlhrPkuK3mlofkubHnoIFcclxuICAvLyAgIGNvbnN0IHVybCA9IFwiZGF0YTp0ZXh0L3hscztjaGFyc2V0PXV0Zi04LFxcdWZlZmZcIiArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhU3RyKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHVybClcclxuICAvLyAgIC8vIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAvLyAgIC8vIGxpbmsuaHJlZiA9IHVybDtcclxuICAvLyAgIC8vIGxpbmsuZG93bmxvYWQgPSB0aGlzLm9sZERhdGEubmFtZSArIFwiLS3mnoTku7blsZ7mgKcueGxzXCI7XHJcbiAgLy8gICAvLyBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgLy8gICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gIC8vICAgLy8gbGluay5jbGljaygpO1xyXG4gIC8vICAgLy8gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTsgLy/ph4rmlL7moIfnrb5cclxuICAvLyB9XHJcblxyXG4gIGdldFNjZW5ldHJlZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjZW5ldHJlZVxyXG4gIH1cclxuXHJcbiAgLy8g6K6+572uZmVhdHVyZeminOiJslxyXG4gIGZlYXR1cmVDb2xvcihpZCwgY29sb3IpIHtcclxuICAgIGlmICh0aGlzLmZlYXR1cmVzLmhhcyhpZCkpIHtcclxuICAgICAgbGV0IGZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzXHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBmZWF0dXJlcykge1xyXG4gICAgICAgIGlmIChmZWF0dXJlc1trZXldLmNvbnRlbnQuX21vZGVsKSB7XHJcbiAgICAgICAgICBmZWF0dXJlc1trZXldLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhjb2xvcilcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZXNba2V5XS5jdXN0b21Db2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoY29sb3IpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhjb2xvcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmVDb2xvcihpZCkge1xyXG4gICAgaWYgKHRoaXMuZmVhdHVyZXMuaGFzKGlkKSkge1xyXG4gICAgICBpZiAodGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUNvbG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5jdXN0b21Db2xvclxyXG4gICAgICB9XHJcbiAgICAgIGxldCBmZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmVhdHVyZXMpIHtcclxuICAgICAgICBpZiAoZmVhdHVyZXNba2V5XS5jb250ZW50Ll9tb2RlbCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZlYXR1cmVzW2tleV0uY3VzdG9tQ29sb3IgfHwgZmVhdHVyZXNba2V5XS5jb2xvclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6K6+572uZmVhdHVyZeaYvumakFxyXG4gIGZlYXR1cmVTaG93KGlkLCBzaG93KSB7XHJcbiAgICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaWQpKSB7XHJcbiAgICAgIGxldCBmZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmVhdHVyZXMpIHtcclxuICAgICAgICBpZiAoZmVhdHVyZXNba2V5XS5jb250ZW50Ll9tb2RlbCkge1xyXG4gICAgICAgICAgZmVhdHVyZXNba2V5XS5zaG93ID0gc2hvd1xyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlc1trZXldLmN1c3RvbVNob3cgPSBzaG93XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbVNob3cgPSBzaG93XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy/po57liLBmZWF0dXJl5L2N572uXHJcbiAgYXN5bmMgZmVhdHVyZUZseXRvKGlkKSB7XHJcbiAgICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaWQpKSB7XHJcbiAgICAgIGxldCBzcGhlcmUgPSB0aGlzLmZlYXR1cmVzLmdldChpZCkuc3BoZXJlXHJcbiAgICAgIGxldCBjZW50ZXIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoXHJcbiAgICAgICAgc3BoZXJlWzBdLFxyXG4gICAgICAgIHNwaGVyZVsxXSxcclxuICAgICAgICBzcGhlcmVbMl1cclxuICAgICAgKVxyXG4gICAgICBsZXQgc3JjTWF0SW52ID0gdGhpcy5lbnRpdHkuX3Jvb3Qub3JpZ2luYWxUcmFuc2Zvcm1cclxuICAgICAgc3JjTWF0SW52ID0gQ2VzaXVtLk1hdHJpeDQuaW52ZXJzZShzcmNNYXRJbnYsIG5ldyBDZXNpdW0uTWF0cml4NCgpKVxyXG4gICAgICBsZXQgY3VyTWF0ID0gdGhpcy5lbnRpdHkuX3Jvb3QudHJhbnNmb3JtXHJcbiAgICAgIGxldCBtYXQgPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShjdXJNYXQsIHNyY01hdEludiwgbmV3IENlc2l1bS5NYXRyaXg0KCkpXHJcbiAgICAgIGxldCBjZW50ZXIyID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KFxyXG4gICAgICAgIG1hdCxcclxuICAgICAgICBjZW50ZXIsXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgKVxyXG4gICAgICBsZXQgd2dzODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNlbnRlcjIsIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgbGV0IGNhcnRlc2lhbjMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICB3Z3M4NC5sbmcsXHJcbiAgICAgICAgd2dzODQubGF0LFxyXG4gICAgICAgIHdnczg0LmFsdCArIHNwaGVyZVszXVxyXG4gICAgICApXHJcbiAgICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogY2FydGVzaWFuM1xyXG4gICAgICB9KVxyXG4gICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IGF3YWl0IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAvLyAgIGNvbG9yOiBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LDAuMiknKVwiXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICB0aGlzLmZlYXR1cmVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgPT09IGlkKSB7XHJcbiAgICAgICAgICBsZXQgY29sb3IgPSB0aGlzLmdldEZlYXR1cmVDb2xvcihpZClcclxuICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmhhcyhpZCkgJiYgY29sb3IpIHtcclxuICAgICAgICAgICAgbGV0IGZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gZmVhdHVyZXMpIHtcclxuICAgICAgICAgICAgICBpZiAoZmVhdHVyZXNba10uY29udGVudC5fbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVzW2tdLmNvbG9yID0gY29sb3JcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNba10uY3VzdG9tQWxwaGEgPSAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUFscGhhID0gMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5mZWF0dXJlQ29sb3IoaWQsIGByZ2JhKCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLnJlZCl9LCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLmdyZWVuKX0sJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IuYmx1ZSl9LCR7Y29sb3IuYWxwaGF9KWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGNvbG9yID0gdGhpcy5nZXRGZWF0dXJlQ29sb3Ioa2V5KVxyXG4gICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZXMuaGFzKGtleSkgJiYgY29sb3IpIHtcclxuICAgICAgICAgICAgbGV0IGZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcy5nZXQoa2V5KS5mZWF0dXJlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrIGluIGZlYXR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZlYXR1cmVzW2tdLmNvbnRlbnQuX21vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlc1trXS5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IucmVkKX0sJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IuZ3JlZW4pfSwke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5ibHVlKX0sJHtjb2xvci5hbHBoYSAqIDAuMn0pYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNba10uY3VzdG9tQWxwaGEgPSBjb2xvci5hbHBoYSAqIDAuMlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMuZ2V0KGtleSkuY3VzdG9tQWxwaGEgPSBjb2xvci5hbHBoYSAqIDAuMlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5mZWF0dXJlQ29sb3Ioa2V5LCBgcmdiYSgke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5yZWQpfSwke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5ncmVlbil9LCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLmJsdWUpfSwke2NvbG9yLmFscGhhICogMC4yfSlgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLy8gdGhpcy5lbnRpdHkucmVhZHlQcm9taXNlLnRoZW4oKCk9PntcclxuICAgICAgLy8gICB0aGlzLmZlYXR1cmVDb2xvcihpZCwgJyNmZmZmZmYnKVxyXG4gICAgICAvLyB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZmVhdHVyZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcy5nZXQoa2V5KS5mZWF0dXJlc1xyXG4gICAgICAgIGxldCBjb2xvciA9IHRoaXMuZ2V0RmVhdHVyZUNvbG9yKGtleSlcclxuICAgICAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICAgIGZvciAobGV0IGsgaW4gZmVhdHVyZXMpIHtcclxuICAgICAgICAgICAgaWYgKGZlYXR1cmVzW2tdLmNvbnRlbnQuX21vZGVsKSB7XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNba10uY29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZlYXR1cmVzW2tdLmN1c3RvbUFscGhhID0gMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoa2V5KS5jdXN0b21BbHBoYSA9IGNvbG9yLmFscGhhICogMC4yXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5a+85Ye65bGe5oCnXHJcbiAgZXhwb3J0UHJvcGVydHkoc3RhdGVzKSB7XHJcbiAgICBpZiAodGhpcy5leHBvcnRTdGF0ZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiAn5pyq6YCJ5oup5bGe5oCn5a+85Ye66YCJ6aG577yBJyxcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGZpZWxkS2V5cyA9IFsnbmFtZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3N0YXRlQ0gnLCAnZGVzY3JpcHRpb25zJ11cclxuICAgIGxldCBmaWVsZExhYmVscyA9IFsn5p6E5Lu25ZCN56ewJywgJ+S9k+enrycsICfloqnlhajpq5hIJywgJ+Wiqei6q+mrmGgnLCAn5bqV6YOo6auY56iLJywgJ+aJv+WPsOWuvScsICfmib/lj7Dplb8nLCAn5om/5Y+w6auYJywgJ+aXjycsICfmoanlvoQnLCAn5qGp6ZW/JywgJ+e7k+aehOadkOi0qCcsICflrozmiJDmg4XlhrUnLCAn6Ieq5a6a5LmJ5bGe5oCnJ11cclxuICAgIHZhciB1cmwgPSAnZGF0YTphcHBsaWNhdGlvbi92bmQubXMtZXhjZWw7YmFzZTY0LCcsXHJcbiAgICAgIHRtcGxXb3JrYm9va1hNTCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCI/Pjw/bXNvLWFwcGxpY2F0aW9uIHByb2dpZD1cIkV4Y2VsLlNoZWV0XCI/PjxXb3JrYm9vayB4bWxucz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0XCIgeG1sbnM6c3M9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldFwiPidcclxuICAgICAgICArICc8RG9jdW1lbnRQcm9wZXJ0aWVzIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCI+PEF1dGhvcj5BeGVsIFJpY2h0ZXI8L0F1dGhvcj48Q3JlYXRlZD57Y3JlYXRlZH08L0NyZWF0ZWQ+PC9Eb2N1bWVudFByb3BlcnRpZXM+J1xyXG4gICAgICAgICsgJzxTdHlsZXM+J1xyXG4gICAgICAgICsgJzxTdHlsZSBzczpJRD1cIkN1cnJlbmN5XCI+PE51bWJlckZvcm1hdCBzczpGb3JtYXQ9XCJDdXJyZW5jeVwiPjwvTnVtYmVyRm9ybWF0PjwvU3R5bGU+J1xyXG4gICAgICAgICsgJzxTdHlsZSBzczpJRD1cIkRhdGVcIj48TnVtYmVyRm9ybWF0IHNzOkZvcm1hdD1cIk1lZGl1bSBEYXRlXCI+PC9OdW1iZXJGb3JtYXQ+PC9TdHlsZT4nXHJcbiAgICAgICAgKyAnPC9TdHlsZXM+J1xyXG4gICAgICAgICsgJ3t3b3Jrc2hlZXRzfTwvV29ya2Jvb2s+J1xyXG4gICAgICAsIHRtcGxXb3Jrc2hlZXRYTUwgPSAnPFdvcmtzaGVldCBzczpOYW1lPVwie25hbWVXU31cIj48VGFibGU+PHNzOkNvbHVtbiBzczpXaWR0aD1cIjEyMFwiLz48c3M6Q29sdW1uIHNzOldpZHRoPVwiMTIwXCIvPjxzczpDb2x1bW4gc3M6V2lkdGg9XCIxMjBcIi8+PHNzOkNvbHVtbiBzczpXaWR0aD1cIjEyMFwiLz48c3M6Q29sdW1uIHNzOldpZHRoPVwiMTIwXCIvPjxzczpDb2x1bW4gc3M6V2lkdGg9XCIxMjBcIi8+PHNzOkNvbHVtbiBzczpXaWR0aD1cIjEyMFwiLz48c3M6Q29sdW1uIHNzOldpZHRoPVwiMTIwXCIvPjxzczpDb2x1bW4gc3M6V2lkdGg9XCIxMjBcIi8+PHNzOkNvbHVtbiBzczpXaWR0aD1cIjEyMFwiLz48c3M6Q29sdW1uIHNzOldpZHRoPVwiMTIwXCIvPjxzczpDb2x1bW4gc3M6V2lkdGg9XCIxMjBcIi8+PHNzOkNvbHVtbiBzczpXaWR0aD1cIjEyMFwiLz48c3M6Q29sdW1uIHNzOldpZHRoPVwiMjQwXCIvPntyb3dzfTwvVGFibGU+PC9Xb3Jrc2hlZXQ+J1xyXG4gICAgICAsIHRtcGxDZWxsWE1MID0gJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJ7bmFtZVR5cGV9XCI+e2RhdGF9PC9EYXRhPjwvQ2VsbD4nXHJcbiAgICAgICwgYmFzZTY0ID0gZnVuY3Rpb24gKHMpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHMpKSlcclxuICAgICAgfVxyXG4gICAgICAsIGZvcm1hdCA9IGZ1bmN0aW9uIChzLCBjKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgveyhcXHcrKX0vZywgZnVuY3Rpb24gKG0sIHApIHtcclxuICAgICAgICAgIHJldHVybiBjW3BdO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICB2YXIgY3R4ID0gXCJcIjtcclxuICAgIHZhciB3b3JrYm9va1hNTCA9IFwiXCI7XHJcbiAgICB2YXIgd29ya3NoZWV0c1hNTCA9IFwiXCI7XHJcbiAgICB2YXIgcm93c1hNTCA9IFwiXCI7XHJcblxyXG4gICAgdmFyIHBpbCA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdGF0ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlc1tpXS5zdGF0ZSA9PSBzdGF0ZXNbal0pIHtcclxuICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgcm93c1hNTCArPSAnPFJvdz4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuaehOS7tuWQjeensDwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7kvZPnp688L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5aKp5YWo6auYSDwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7loqnouqvpq5hoPC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuW6lemDqOmrmOeoizwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7mib/lj7Dlrr08L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5om/5Y+w6ZW/PC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuaJv+WPsOmrmDwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7ml488L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5qGp5b6EPC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuahqemVvzwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7nu5PmnoTmnZDotKg8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5a6M5oiQ5oOF5Ya1PC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuiHquWumuS5ieWxnuaApzwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzwvUm93Pic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3dzWE1MICs9ICc8Um93Pic7XHJcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZmllbGRLZXlzKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmVhdHVyZXNbaV1bZmllbGRLZXlzW2tleV1dKSkge1xyXG4gICAgICAgICAgICAgIGxldCBzdHIgPSAnJ1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGsgaW4gdGhpcy5mZWF0dXJlc1tpXVtmaWVsZEtleXNba2V5XV0pIHtcclxuICAgICAgICAgICAgICAgIHN0ciArPSBgJHt0aGlzLmZlYXR1cmVzW2ldW2ZpZWxkS2V5c1trZXldXVtrXS5rZXkgKyAn77yaJyArIHRoaXMuZmVhdHVyZXNbaV1bZmllbGRLZXlzW2tleV1dW2tdLnZhbHVlfSYjMTA7YFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjdHggPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lVHlwZTogJ1N0cmluZycsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdHJcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGN0eCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWVUeXBlOiAnU3RyaW5nJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZmVhdHVyZXNbaV1bZmllbGRLZXlzW2tleV1dIHx8IFwiMFwiXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3dzWE1MICs9IGZvcm1hdCh0bXBsQ2VsbFhNTCwgY3R4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJvd3NYTUwgKz0gJzwvUm93Pic7XHJcbiAgICAgICAgICBpZiAoaSA+IDAgJiYgKGkgLyA2MDAwMCkgJSAxID09PSAwKSB7XHJcbiAgICAgICAgICAgIHBpbCsrO1xyXG4gICAgICAgICAgICBjdHggPSB7IHJvd3M6IHJvd3NYTUwsIG5hbWVXUzogJ1NoZWV0JyArIGkgfTtcclxuICAgICAgICAgICAgd29ya3NoZWV0c1hNTCArPSBmb3JtYXQodG1wbFdvcmtzaGVldFhNTCwgY3R4KTtcclxuICAgICAgICAgICAgcm93c1hNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHJvd3NYTUwgKz0gJzxSb3c+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7mnoTku7blkI3np7A8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5L2T56evPC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuWiqeWFqOmrmEg8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5aKp6Lqr6auYaDwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7lupXpg6jpq5jnqIs8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5om/5Y+w5a69PC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuaJv+WPsOmVvzwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7mib/lj7Dpq5g8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+5pePPC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuahqeW+hDwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7moanplb88L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8Q2VsbD48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+57uT5p6E5p2Q6LSoPC9EYXRhPjwvQ2VsbD4nICtcclxuICAgICAgICAgICAgICAnPENlbGw+PERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPuWujOaIkOaDheWGtTwvRGF0YT48L0NlbGw+JyArXHJcbiAgICAgICAgICAgICAgJzxDZWxsPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj7oh6rlrprkuYnlsZ7mgKc8L0RhdGE+PC9DZWxsPicgK1xyXG4gICAgICAgICAgICAgICc8L1Jvdz4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY3R4ID0geyByb3dzOiByb3dzWE1MLCBuYW1lV1M6ICdTaGVldCcgfTtcclxuICAgIHdvcmtzaGVldHNYTUwgKz0gZm9ybWF0KHRtcGxXb3Jrc2hlZXRYTUwsIGN0eCk7XHJcbiAgICByb3dzWE1MID0gXCJcIjtcclxuICAgIGN0eCA9IHsgY3JlYXRlZDogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgd29ya3NoZWV0czogd29ya3NoZWV0c1hNTCB9O1xyXG4gICAgd29ya2Jvb2tYTUwgPSBmb3JtYXQodG1wbFdvcmtib29rWE1MLCBjdHgpO1xyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiQVwiKTtcclxuICAgIGxpbmsuaHJlZiA9IHVybCArIGJhc2U2NCh3b3JrYm9va1hNTCk7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gdGhpcy5vbGREYXRhLm5hbWUgKyBcIi0t5p6E5Lu25bGe5oCnLnhsc1wiXHJcbiAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRTdGF0ZShlKSB7XHJcbiAgICBsZXQgY2hlY2tib3ggPSBlLnRhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgY2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkXHJcbiAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmV4cG9ydFN0YXRlQXJyYXkucHVzaChjaGVja2JveC52YWx1ZSlcclxuICAgICAgdGhpcy5leHBvcnRTdGF0ZUFycmF5ID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuZXhwb3J0U3RhdGVBcnJheSkpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmV4cG9ydFN0YXRlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5leHBvcnRTdGF0ZUFycmF5W2ldID09IGNoZWNrYm94LnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cG9ydFN0YXRlQXJyYXkuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQklNXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFoQkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF0Q0E7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFyRUE7QUFzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFoR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUF3RUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRIQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFOQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBbkxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbEZBO0FBQUE7QUFBQTtBQUFBO0FBb0ZBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/BIM/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/Tileset/_element.js": /*!*****************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/Tileset/_element.js ***! \*****************************************************************/ /*! exports provided: html, css */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return css; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u7CBE\\u5EA6\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n \\u900F\\u89C6\\n \\n
\\n
\\n
\\n \";\n}\nfunction css() {\n return \"\\n .YJ-custom-base-dialog>.content {\\n width: 420px;\\n }\\n .YJ-custom-base-dialog>.content .row .label {\\n flex: 0 0 45px;\\n }\\n\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9UaWxlc2V0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZVRpbGVzZXQvVGlsZXNldC9fZWxlbWVudC5qcz85YjQ3Il0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuZnVuY3Rpb24gaHRtbCgpIHtcclxuICByZXR1cm4gYFxyXG4gIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6auY5bqmPC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtM1wiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBAbW9kZWw9XCJoZWlnaHRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nsr7luqY8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjAuMVwiIG1heD1cIjEwXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cImFjY3VyYWN5XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumAj+inhjwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMFwiIG1heD1cIjFcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInRyYW5zcGFyZW5jeVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIGBcclxufVxyXG5mdW5jdGlvbiBjc3MoKSB7XHJcbiAgcmV0dXJuIGBcclxuICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50IHtcclxuICAgIHdpZHRoOiA0MjBweDtcclxuICB9XHJcbiAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAucm93IC5sYWJlbCB7XHJcbiAgICBmbGV4OiAwIDAgNDVweDtcclxuICB9XHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCwgY3NzIH0iXSwibWFwcGluZ3MiOiJBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBUUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/Tileset/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js": /*!**************************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/BaseTileset/index.js\");\n/* harmony import */ var _Element_cy_html_slider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../../Element/cy_html_slider */ \"./src/Obj/Element/cy_html_slider.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BaseSource/BaseTileset/Tileset/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 16:05\r\n * @description:index\r\n * @update: 2023-11-20 16:05\r\n */\n\n\n\n\n\n\nvar _updateModelTimeout = /*#__PURE__*/new WeakMap();\nvar Tileset = /*#__PURE__*/function (_BaseTileset) {\n /**\r\n * @constructor\r\n * @description 加载Tileset模型\r\n * @param sdk {object} sdk\r\n * @param options {object} 模型参数\r\n * @param options.id {string} 对象id\r\n * @param options.show=true {boolean} 模型显隐\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 资源地址\r\n * @param options.accuracy=1 {number} 精度(倍)\r\n * @param options.position {object} 模型位置\r\n * @param options.position.lng {number} 经度\r\n * @param options.position.lat {number} 纬度\r\n * @param options.position.alt {number} 高度\r\n * */\n function Tileset(earth) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, Tileset);\n _this2 = _callSuper(this, Tileset, [earth, options]);\n _classPrivateFieldInitSpec(_this2, _updateModelTimeout, void 0);\n _this2.picking = false;\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Tileset, _BaseTileset);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(Tileset, [{\n key: \"type\",\n get: function get() {\n return \"tileset\";\n }\n }, {\n key: \"on\",\n value: function on() {\n return this.add();\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.newData.name;\n },\n set: function set(v) {\n this.newData.name = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.newData.height;\n },\n set: function set(v) {\n this.newData.height = v;\n this.options.position.alt = v;\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = v;\n });\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch);\n }\n }, {\n key: \"accuracy\",\n get: function get() {\n return this.newData.accuracy;\n },\n set: function set(v) {\n var _this3 = this;\n this.newData.accuracy = Number(v.toFixed(1));\n if (this.newData.accuracy < 0.1) {\n this.newData.accuracy = 0.1;\n }\n if (this.entity) {\n this.entity.maximumScreenSpaceError = 32 / this.newData.accuracy;\n }\n this._elms.accuracy && this._elms.accuracy.forEach(function (item) {\n item.value = _this3.newData.accuracy;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.newData.lng;\n },\n set: function set(v) {\n this.newData.lng = v;\n this.options.position.lng = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch);\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.newData.lat;\n },\n set: function set(v) {\n this.newData.lat = v;\n this.options.position.lat = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch);\n }\n }, {\n key: \"roll\",\n get: function get() {\n return this.newData.roll;\n },\n set: function set(v) {\n this.newData.roll = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n }\n }, {\n key: \"heading\",\n get: function get() {\n return this.newData.heading;\n },\n set: function set(v) {\n this.newData.heading = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n }\n }, {\n key: \"pitch\",\n get: function get() {\n return this.newData.pitch;\n },\n set: function set(v) {\n this.newData.pitch = v;\n this.updateModel(this.newData.lng, this.newData.lat, this.newData.height, this.newData.roll, this.newData.heading, this.newData.pitch, this.newData.scale);\n }\n }, {\n key: \"transparency\",\n get: function get() {\n return this.newData.transparency;\n },\n set: function set(v) {\n if (!this.newData) {\n return;\n }\n this.newData.transparency = Number(v);\n this._elms.transparency && this._elms.transparency.forEach(function (item) {\n item.value = v;\n });\n var transparency = this.newData.transparency;\n // if (transparency == 1) {\n // transparency = 0.99\n // }\n this.entity.style = new Cesium.Cesium3DTileStyle({\n color: {\n \"conditions\": [\n //有size属性表示为点云,需要与点颜色融合\n [\"Boolean(${SIZE})\", \"${COLOR} * color('rgba(255,255,255)', \" + transparency + \")\"], [\"true\", \"color('rgba(255,255,255,\" + transparency + \")')\"]]\n },\n show: true\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this4 = this;\n var state,\n _this,\n contentElm,\n all_elm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = _args.length > 0 && _args[0] !== undefined ? _args[0] : false;\n _this = this;\n this._element_style = null;\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 21;\n break;\n }\n this._element_style = document.createElement('style');\n this._element_style.type = 'text/css';\n this._element_style.setAttribute('data-name', 'YJ_style_dialog');\n this._element_style.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"css\"])();\n _context.next = 11;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_14__[\"default\"](this.sdk, this.newData, {\n title: '倾斜模型属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.oldData.name = _this4.newData.name;\n _this4.oldData.height = _this4.newData.height;\n _this4.oldData.lng = _this4.newData.lng;\n _this4.oldData.lat = _this4.newData.lat;\n _this4.oldData.transparency = _this4.newData.transparency;\n _this4.oldData.scale = _this4.newData.scale;\n _this4.oldData.roll = _this4.newData.roll;\n _this4.oldData.heading = _this4.newData.heading;\n _this4.oldData.pitch = _this4.newData.pitch;\n _this4.oldData.type = _this4.type;\n _this4.oldData.accuracy = _this4.newData.accuracy;\n _this4._DialogObject.close();\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_objectSpread(_objectSpread({}, _this4.oldData), {}, {\n type: _this4.type\n }));\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(_this4.sdk, _this4.oldData.id);\n },\n resetCallBack: function resetCallBack() {\n _this4.reset();\n _this4.Dialog.resetCallBack && _this4.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n if (_this4.positionEditing) {\n _this4.positionEditing = false;\n }\n if (_this4.rotationEditing) {\n _this4.rotationEditing = false;\n }\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this4.newData.show = show;\n _this4.entity && (_this4.entity.show = show);\n _this4.Dialog.showCallBack && _this4.Dialog.showCallBack();\n },\n rotateCallBack: function rotateCallBack() {\n if (_this4.rotationEditing) {\n _this4.rotationEditing = false;\n } else {\n _this4.rotationEditing = true;\n }\n },\n translationalCallBack: function translationalCallBack() {\n if (_this4.positionEditing) {\n _this4.positionEditing = false;\n } else {\n _this4.positionEditing = true;\n }\n }\n }, true);\n case 11:\n this._DialogObject = _context.sent;\n document.getElementsByTagName('head')[0].appendChild(this._element_style);\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n _context.next = 21;\n break;\n case 21:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }() //更新模型位置\n )\n }, {\n key: \"updateModel\",\n value: function updateModel(_tx, _ty, _tz) {\n var _this5 = this;\n var _rx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var _ry = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var _rz = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var s = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n if (!this.tileset.root.transform) {\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: '该模型不支持移动和旋转!',\n type: 'warning',\n duration: 1500\n });\n }\n console.warn('该模型不支持移动和旋转!');\n return;\n }\n if (!_tx && _tx !== 0 || !_ty && _ty !== 0 || !_tz && _tz !== 0) {\n return;\n }\n var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(_rx));\n var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(_ry));\n var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(_rz));\n // 平移\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(_tx, _ty, _tz));\n // 旋转\n var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n var rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n var originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.multiply(m, rotationX, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationZ, originalMatrix);\n var scale = Cesium.Matrix4.fromUniformScale(s);\n Cesium.Matrix4.multiply(originalMatrix, scale, this.entity._root.transform);\n // console.log(_tx, _ty, _tz)\n if (!this.editObj.activeAxis) {\n this.editObj.position = {\n lng: _tx,\n lat: _ty,\n alt: _tz\n };\n }\n if (!this.editObj.activeCircle) {\n this.editObj.rotate = {\n x: _rx,\n y: _ry,\n z: _rz\n };\n }\n this.editObj && this.editObj.update();\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, this));\n _classPrivateFieldSet(_updateModelTimeout, this, setTimeout(function () {\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this5));\n var center = _this5.cartesian3Towgs84(_this5.entity.boundingSphere.center, _this5.sdk.viewer);\n var circle = turf.circle([center.lng, center.lat], _this5.entity.boundingSphere.radius / 1000, {\n steps: 360,\n units: 'kilometers'\n });\n var _iterator = _createForOfIteratorHelper(_this5.sdk.entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2),\n key = _step$value[0],\n entity = _step$value[1];\n if (entity.type === 'BillboardObject' && entity.heightMode == 3) {\n var pt = turf.point([entity.lng, entity.lat]);\n if (turf.booleanPointInPolygon(pt, circle)) {\n entity.updateHeight();\n }\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }, 300));\n }\n\n // flyTo() {\n // this.entity.readyPromise.then(() => {\n // console.log(this.entity)\n // let boundingSphere\n // if(!this.lng || !this.lat) {\n // boundingSphere = new Cesium.BoundingSphere(this.entity.boundingSphere)\n // }\n // else {\n // boundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(this.lng, this.lat, this.height), this.entity.boundingSphere.radius)\n // }\n // this.sdk.viewer.camera.flyToBoundingSphere(boundingSphere)\n // })\n // }\n }, {\n key: \"reset\",\n value: function reset() {\n this.editObj.destroy();\n if (!this.entity) {\n return;\n }\n this.transparency = this.oldData.transparency;\n this.name = this.oldData.name;\n this.height = this.oldData.height;\n this.lng = this.oldData.lng;\n this.lat = this.oldData.lat;\n this.roll = this.oldData.roll;\n this.heading = this.oldData.heading;\n this.pitch = this.oldData.pitch;\n this.scale = this.oldData.scale;\n this.accuracy = this.oldData.accuracy;\n this.entity.style = new Cesium.Cesium3DTileStyle({\n color: {\n \"conditions\": [[\"Boolean(${SIZE})\", \"${COLOR} * color('rgba(255,255,255)', \" + this.transparency + \")\"], [\"true\", \"color('rgba(255,255,255,\" + this.transparency + \")')\"]]\n },\n show: true\n });\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Tileset);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9UaWxlc2V0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0Jhc2VTb3VyY2UvQmFzZVRpbGVzZXQvVGlsZXNldC9pbmRleC5qcz8wYTZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZTogaW5kZXhcclxuICogQGF1dGhvcjogQWRtaW5pc3RyYXRvclxyXG4gKiBAZGF0ZTogMjAyMy0xMS0yMCAxNjowNVxyXG4gKiBAZGVzY3JpcHRpb27vvJppbmRleFxyXG4gKiBAdXBkYXRlOiAyMDIzLTExLTIwIDE2OjA1XHJcbiAqL1xyXG5pbXBvcnQgQmFzZVRpbGVzZXQgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBjeV9zbGlkZXIgZnJvbSBcIi4uLy4uLy4uLy4uL0VsZW1lbnQvY3lfaHRtbF9zbGlkZXJcIjtcclxuaW1wb3J0IHsgaHRtbCwgY3NzIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi8uLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgeyBzeW5jU3BsaXREYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuXHJcbmNsYXNzIFRpbGVzZXQgZXh0ZW5kcyBCYXNlVGlsZXNldCB7XHJcbiAgI3VwZGF0ZU1vZGVsVGltZW91dDtcclxuICAvKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBkZXNjcmlwdGlvbiDliqDovb1UaWxlc2V05qih5Z6LXHJcbiAqIEBwYXJhbSBzZGsge29iamVjdH0gc2RrXHJcbiAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOaooeWei+WPguaVsFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDlr7nosaFpZFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaooeWei+aYvumakFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gKiBAcGFyYW0gb3B0aW9ucy51cmwge3N0cmluZ30g6LWE5rqQ5Zyw5Z2AXHJcbiAqIEBwYXJhbSBvcHRpb25zLmFjY3VyYWN5PTEge251bWJlcn0g57K+5bqmKOWAjSlcclxuICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb24ge29iamVjdH0g5qih5Z6L5L2N572uXHJcbiAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAqICovXHJcbiAgY29uc3RydWN0b3IoZWFydGgsIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihlYXJ0aCwgb3B0aW9ucylcclxuICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gXCJ0aWxlc2V0XCJcclxuICB9XHJcblxyXG4gIG9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkKClcclxuICB9XHJcblxyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5uYW1lXHJcbiAgfVxyXG5cclxuICBzZXQgbmFtZSh2KSB7XHJcbiAgICB0aGlzLm5ld0RhdGEubmFtZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubmFtZSAmJiB0aGlzLl9lbG1zLm5hbWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLmhlaWdodFxyXG4gIH1cclxuXHJcbiAgc2V0IGhlaWdodCh2KSB7XHJcbiAgICB0aGlzLm5ld0RhdGEuaGVpZ2h0ID0gdlxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9IHZcclxuICAgIHRoaXMuX2VsbXMuaGVpZ2h0ICYmIHRoaXMuX2VsbXMuaGVpZ2h0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMubmV3RGF0YS5sbmcsIHRoaXMubmV3RGF0YS5sYXQsIHRoaXMubmV3RGF0YS5oZWlnaHQsIHRoaXMubmV3RGF0YS5yb2xsLCB0aGlzLm5ld0RhdGEuaGVhZGluZywgdGhpcy5uZXdEYXRhLnBpdGNoKVxyXG4gIH1cclxuICBcclxuICBnZXQgYWNjdXJhY3koKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLmFjY3VyYWN5XHJcbiAgfVxyXG5cclxuICBzZXQgYWNjdXJhY3kodikge1xyXG4gICAgdGhpcy5uZXdEYXRhLmFjY3VyYWN5ID0gTnVtYmVyKHYudG9GaXhlZCgxKSlcclxuICAgIGlmKHRoaXMubmV3RGF0YS5hY2N1cmFjeTwwLjEpIHtcclxuICAgICAgdGhpcy5uZXdEYXRhLmFjY3VyYWN5ID0gMC4xXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmVudGl0eSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5tYXhpbXVtU2NyZWVuU3BhY2VFcnJvciA9IDMyL3RoaXMubmV3RGF0YS5hY2N1cmFjeVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5hY2N1cmFjeSAmJiB0aGlzLl9lbG1zLmFjY3VyYWN5LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHRoaXMubmV3RGF0YS5hY2N1cmFjeVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLmxuZ1xyXG4gIH1cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMubmV3RGF0YS5sbmcgPSB2XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm5ld0RhdGEubG5nLCB0aGlzLm5ld0RhdGEubGF0LCB0aGlzLm5ld0RhdGEuaGVpZ2h0LCB0aGlzLm5ld0RhdGEucm9sbCwgdGhpcy5uZXdEYXRhLmhlYWRpbmcsIHRoaXMubmV3RGF0YS5waXRjaClcclxuICB9XHJcblxyXG4gIGdldCBsYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdEYXRhLmxhdFxyXG4gIH1cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMubmV3RGF0YS5sYXQgPSB2XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gdlxyXG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLm5ld0RhdGEubG5nLCB0aGlzLm5ld0RhdGEubGF0LCB0aGlzLm5ld0RhdGEuaGVpZ2h0LCB0aGlzLm5ld0RhdGEucm9sbCwgdGhpcy5uZXdEYXRhLmhlYWRpbmcsIHRoaXMubmV3RGF0YS5waXRjaClcclxuICB9XHJcblxyXG4gIGdldCByb2xsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5yb2xsXHJcbiAgfVxyXG5cclxuICBzZXQgcm9sbCh2KSB7XHJcbiAgICB0aGlzLm5ld0RhdGEucm9sbCA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5uZXdEYXRhLmxuZywgdGhpcy5uZXdEYXRhLmxhdCwgdGhpcy5uZXdEYXRhLmhlaWdodCwgdGhpcy5uZXdEYXRhLnJvbGwsIHRoaXMubmV3RGF0YS5oZWFkaW5nLCB0aGlzLm5ld0RhdGEucGl0Y2gsIHRoaXMubmV3RGF0YS5zY2FsZSlcclxuICB9XHJcblxyXG4gIGdldCBoZWFkaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS5oZWFkaW5nXHJcbiAgfVxyXG5cclxuICBzZXQgaGVhZGluZyh2KSB7XHJcbiAgICB0aGlzLm5ld0RhdGEuaGVhZGluZyA9IHZcclxuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5uZXdEYXRhLmxuZywgdGhpcy5uZXdEYXRhLmxhdCwgdGhpcy5uZXdEYXRhLmhlaWdodCwgdGhpcy5uZXdEYXRhLnJvbGwsIHRoaXMubmV3RGF0YS5oZWFkaW5nLCB0aGlzLm5ld0RhdGEucGl0Y2gsIHRoaXMubmV3RGF0YS5zY2FsZSlcclxuICB9XHJcblxyXG4gIGdldCBwaXRjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0RhdGEucGl0Y2hcclxuICB9XHJcblxyXG4gIHNldCBwaXRjaCh2KSB7XHJcbiAgICB0aGlzLm5ld0RhdGEucGl0Y2ggPSB2XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMubmV3RGF0YS5sbmcsIHRoaXMubmV3RGF0YS5sYXQsIHRoaXMubmV3RGF0YS5oZWlnaHQsIHRoaXMubmV3RGF0YS5yb2xsLCB0aGlzLm5ld0RhdGEuaGVhZGluZywgdGhpcy5uZXdEYXRhLnBpdGNoLCB0aGlzLm5ld0RhdGEuc2NhbGUpXHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNwYXJlbmN5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3lcclxuICB9XHJcblxyXG4gIHNldCB0cmFuc3BhcmVuY3kodikge1xyXG4gICAgaWYgKCF0aGlzLm5ld0RhdGEpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm5ld0RhdGEudHJhbnNwYXJlbmN5ID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLl9lbG1zLnRyYW5zcGFyZW5jeSAmJiB0aGlzLl9lbG1zLnRyYW5zcGFyZW5jeS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IHRyYW5zcGFyZW5jeSA9IHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3lcclxuICAgIC8vIGlmICh0cmFuc3BhcmVuY3kgPT0gMSkge1xyXG4gICAgLy8gICB0cmFuc3BhcmVuY3kgPSAwLjk5XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICBjb2xvcjoge1xyXG4gICAgICAgIFwiY29uZGl0aW9uc1wiOiBbXHJcbiAgICAgICAgICAvL+aciXNpemXlsZ7mgKfooajnpLrkuLrngrnkupHvvIzpnIDopoHkuI7ngrnpopzoibLono3lkIhcclxuICAgICAgICAgIFtcIkJvb2xlYW4oJHtTSVpFfSlcIiwgXCIke0NPTE9SfSAqIGNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1KScsIFwiICsgdHJhbnNwYXJlbmN5ICsgXCIpXCJdLFxyXG4gICAgICAgICAgW1widHJ1ZVwiLCBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LFwiICsgdHJhbnNwYXJlbmN5ICsgXCIpJylcIl1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJywgJ1lKX3N0eWxlX2RpYWxvZycpO1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLmlubmVySFRNTCA9IGNzcygpO1xyXG5cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5uZXdEYXRhLCB7XHJcbiAgICAgICAgdGl0bGU6ICflgL7mlpzmqKHlnovlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLm5hbWUgPSB0aGlzLm5ld0RhdGEubmFtZVxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLmhlaWdodCA9IHRoaXMubmV3RGF0YS5oZWlnaHRcclxuICAgICAgICAgIHRoaXMub2xkRGF0YS5sbmcgPSB0aGlzLm5ld0RhdGEubG5nXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEubGF0ID0gdGhpcy5uZXdEYXRhLmxhdFxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLnRyYW5zcGFyZW5jeSA9IHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3lcclxuICAgICAgICAgIHRoaXMub2xkRGF0YS5zY2FsZSA9IHRoaXMubmV3RGF0YS5zY2FsZVxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLnJvbGwgPSB0aGlzLm5ld0RhdGEucm9sbFxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLmhlYWRpbmcgPSB0aGlzLm5ld0RhdGEuaGVhZGluZ1xyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLnBpdGNoID0gdGhpcy5uZXdEYXRhLnBpdGNoXHJcbiAgICAgICAgICB0aGlzLm9sZERhdGEudHlwZSA9IHRoaXMudHlwZVxyXG4gICAgICAgICAgdGhpcy5vbGREYXRhLmFjY3VyYWN5ID0gdGhpcy5uZXdEYXRhLmFjY3VyYWN5XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh7IC4uLnRoaXMub2xkRGF0YSwgdHlwZTogdGhpcy50eXBlIH0pXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9sZERhdGEuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucm90YXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm90YXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5ld0RhdGEuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5zaG93ID0gc2hvdylcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm90YXRlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnJvdGF0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3RhdGlvbkVkaXRpbmcgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpO1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLl9lbGVtZW50X3N0eWxlKSB7XHJcbiAgICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50X3N0eWxlKVxyXG4gICAgICAvLyAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+abtOaWsOaooeWei+S9jee9rlxyXG4gIHVwZGF0ZU1vZGVsKF90eCwgX3R5LCBfdHosIF9yeCA9IDAsIF9yeSA9IDAsIF9yeiA9IDAsIHMgPSAxKSB7XHJcbiAgICBpZiAoIXRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybSkge1xyXG4gICAgICBpZiAod2luZG93LkVMRU1FTlQpIHtcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6K+l5qih5Z6L5LiN5pSv5oyB56e75Yqo5ZKM5peL6L2s77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKCfor6XmqKHlnovkuI3mlK/mjIHnp7vliqjlkozml4vovazvvIEnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmICgoIV90eCAmJiBfdHghPT0wKSB8fCAoIV90eSAmJiBfdHkhPT0wKSB8fCAoIV90eiAmJiBfdHohPT0wKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBteCA9IENlc2l1bS5NYXRyaXgzLmZyb21Sb3RhdGlvblgoXHJcbiAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhfcngpXHJcbiAgICApXHJcbiAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKFxyXG4gICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3J5KVxyXG4gICAgKVxyXG4gICAgbGV0IG16ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWihcclxuICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF9yeilcclxuICAgIClcclxuICAgIC8vIOW5s+enu1xyXG4gICAgbGV0IG0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoX3R4LCBfdHksIF90eikpXHJcbiAgICAvLyDml4vovaxcclxuICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgIGxldCByb3RhdGlvblkgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteSlcclxuICAgIGxldCByb3RhdGlvblogPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteilcclxuICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShtLCByb3RhdGlvblgsIG9yaWdpbmFsTWF0cml4KVxyXG4gICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkob3JpZ2luYWxNYXRyaXgsIHJvdGF0aW9uWSwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25aLCBvcmlnaW5hbE1hdHJpeClcclxuICAgIGNvbnN0IHNjYWxlID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVVuaWZvcm1TY2FsZShzKTtcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCBzY2FsZSwgdGhpcy5lbnRpdHkuX3Jvb3QudHJhbnNmb3JtKVxyXG4gICAgLy8gY29uc29sZS5sb2coX3R4LCBfdHksIF90eilcclxuICAgIGlmICghdGhpcy5lZGl0T2JqLmFjdGl2ZUF4aXMpIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLnBvc2l0aW9uID0geyBsbmc6IF90eCwgbGF0OiBfdHksIGFsdDogX3R6IH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5lZGl0T2JqLmFjdGl2ZUNpcmNsZSkge1xyXG4gICAgICB0aGlzLmVkaXRPYmoucm90YXRlID0geyB4OiBfcngsIHk6IF9yeSwgejogX3J6IH1cclxuICAgIH1cclxuICAgIHRoaXMuZWRpdE9iaiAmJiB0aGlzLmVkaXRPYmoudXBkYXRlKClcclxuXHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0KVxyXG4gICAgdGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQpXHJcbiAgICAgIGxldCBjZW50ZXIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLmNlbnRlciwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBsZXQgY2lyY2xlID0gdHVyZi5jaXJjbGUoW2NlbnRlci5sbmcsIGNlbnRlci5sYXRdLCB0aGlzLmVudGl0eS5ib3VuZGluZ1NwaGVyZS5yYWRpdXMgLyAxMDAwLCB7IHN0ZXBzOiAzNjAsIHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgIGZvciAobGV0IFtrZXksIGVudGl0eV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgaWYgKGVudGl0eS50eXBlID09PSAnQmlsbGJvYXJkT2JqZWN0JyAmJiBlbnRpdHkuaGVpZ2h0TW9kZSA9PSAzKSB7XHJcbiAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtlbnRpdHkubG5nLCBlbnRpdHkubGF0XSk7XHJcbiAgICAgICAgICBpZiAodHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocHQsIGNpcmNsZSkpIHtcclxuICAgICAgICAgICAgZW50aXR5LnVwZGF0ZUhlaWdodCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGVudGl0eS5sYWJlbCkge1xyXG4gICAgICAgICAgICBlbnRpdHkubGFiZWwuc2hvdyA9IGVudGl0eS5sYWJlbC5zaG93XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgLy8gZmx5VG8oKSB7XHJcbiAgLy8gICB0aGlzLmVudGl0eS5yZWFkeVByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMuZW50aXR5KVxyXG4gIC8vICAgICBsZXQgYm91bmRpbmdTcGhlcmVcclxuICAvLyAgICAgaWYoIXRoaXMubG5nIHx8ICF0aGlzLmxhdCkge1xyXG4gIC8vICAgICAgIGJvdW5kaW5nU3BoZXJlID0gbmV3IENlc2l1bS5Cb3VuZGluZ1NwaGVyZSh0aGlzLmVudGl0eS5ib3VuZGluZ1NwaGVyZSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlIHtcclxuICAvLyAgICAgICBib3VuZGluZ1NwaGVyZSA9IG5ldyBDZXNpdW0uQm91bmRpbmdTcGhlcmUoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5sbmcsIHRoaXMubGF0LCB0aGlzLmhlaWdodCksIHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLnJhZGl1cylcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoYm91bmRpbmdTcGhlcmUpXHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmVkaXRPYmouZGVzdHJveSgpXHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0aGlzLm9sZERhdGEudHJhbnNwYXJlbmN5XHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9sZERhdGEubmFtZVxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9sZERhdGEuaGVpZ2h0XHJcbiAgICB0aGlzLmxuZyA9IHRoaXMub2xkRGF0YS5sbmdcclxuICAgIHRoaXMubGF0ID0gdGhpcy5vbGREYXRhLmxhdFxyXG4gICAgdGhpcy5yb2xsID0gdGhpcy5vbGREYXRhLnJvbGxcclxuICAgIHRoaXMuaGVhZGluZyA9IHRoaXMub2xkRGF0YS5oZWFkaW5nXHJcbiAgICB0aGlzLnBpdGNoID0gdGhpcy5vbGREYXRhLnBpdGNoXHJcbiAgICB0aGlzLnNjYWxlID0gdGhpcy5vbGREYXRhLnNjYWxlXHJcbiAgICB0aGlzLmFjY3VyYWN5ID0gdGhpcy5vbGREYXRhLmFjY3VyYWN5XHJcblxyXG4gICAgdGhpcy5lbnRpdHkuc3R5bGUgPSBuZXcgQ2VzaXVtLkNlc2l1bTNEVGlsZVN0eWxlKHtcclxuICAgICAgY29sb3I6IHtcclxuICAgICAgICBcImNvbmRpdGlvbnNcIjogW1xyXG4gICAgICAgICAgW1wiQm9vbGVhbigke1NJWkV9KVwiLCBcIiR7Q09MT1J9ICogY29sb3IoJ3JnYmEoMjU1LDI1NSwyNTUpJywgXCIgKyB0aGlzLnRyYW5zcGFyZW5jeSArIFwiKVwiXSxcclxuICAgICAgICAgIFtcInRydWVcIiwgXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMudHJhbnNwYXJlbmN5ICsgXCIpJylcIl1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRpbGVzZXRcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBakJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBeERBO0FBeURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBL0ZBO0FBQUE7QUFBQTtBQUFBO0FBaUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/BaseTileset/index.js": /*!******************************************************!*\ !*** ./src/Obj/Base/BaseSource/BaseTileset/index.js ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/BaseSource/index.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 17:54\r\n * @description:index\r\n * @update: 2023-11-20 17:54\r\n */\n\n\n\n\n\n\nvar _updateModelTimeout = /*#__PURE__*/new WeakMap();\nvar BaseTileset = /*#__PURE__*/function (_BaseSource) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 模型\r\n * @param options {object}\r\n * @param options.id{string} id\r\n * @param options.name{string} 名称\r\n * @param options.url{string} 模型地址\r\n * @param options.lng{number} 经度\r\n * @param options.lat{number} 纬度\r\n * @param options.height=0{number} 高度\r\n * @param options.scale=1{number} 模型比例\r\n * @param options.roll=0{number} 模型x旋转\r\n * @param options.heading=0{number} 模型z轴旋转角度\r\n * @param options.pitch=0{number} 模型y轴旋转角度\r\n * */\n function BaseTileset(sdk, options) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, BaseTileset);\n _this = _callSuper(this, BaseTileset, [sdk, options]);\n _classPrivateFieldInitSpec(_this, _updateModelTimeout, void 0);\n _this.setDefaultValue();\n _this.watchs = [];\n _this.positionCallBack = null;\n _this.rotationCallback = null;\n _this.onClickCallback = null;\n _this._DialogObject = null;\n _this._element_style = null;\n _this.options.accuracy = options.accuracy ? Number(options.accuracy.toFixed(1)) : 1;\n _this.options.position = _this.options.position || {};\n _this.oldData = {\n id: _this.options.id,\n transparency: _this.options.transparency || _this.options.transparency === 0 ? _this.options.transparency : 1,\n name: _this.options.name,\n accuracy: _this.options.accuracy,\n url: _this.options.url,\n height: _this.options.position.alt || 0,\n lng: _this.options.position.lng,\n lat: _this.options.position.lat,\n scale: _this.options.scale || _this.options.scale === 0 ? _this.options.scale : 1,\n roll: _this.options.roll || 0,\n heading: _this.options.heading || 0,\n pitch: _this.options.pitch || 0\n };\n _this.newData = {\n id: _this.options.id,\n transparency: _this.options.transparency || _this.options.transparency === 0 ? _this.options.transparency : 1,\n name: _this.options.name,\n accuracy: _this.options.accuracy,\n url: _this.options.url,\n height: _this.options.position.alt || 0,\n lng: _this.options.position.lng,\n lat: _this.options.position.lat,\n scale: _this.options.scale || _this.options.scale === 0 ? _this.options.scale : 1,\n roll: _this.options.roll || 0,\n heading: _this.options.heading || 0,\n pitch: _this.options.pitch || 0\n };\n _this.tileset = undefined;\n _this.editObj = new _Controller_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this.sdk);\n _this.editObj.controllerCallBack = _this.rotationEditingCallBack;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(BaseTileset, _BaseSource);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(BaseTileset, [{\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee() {\n var res, text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.options.url) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\", this.loadTileset({\n url: this.options.url\n }));\n case 4:\n _context.next = 6;\n return this.requestResource();\n case 6:\n res = _context.sent;\n _context.next = 9;\n return res.text();\n case 9:\n text = _context.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context.next = 19;\n break;\n }\n if (!text.data.url.length) {\n _context.next = 16;\n break;\n }\n return _context.abrupt(\"return\", this.loadTileset(text.data));\n case 16:\n return _context.abrupt(\"return\", new Promise(function (res, reject) {\n reject('资源不存在');\n }));\n case 17:\n _context.next = 20;\n break;\n case 19:\n return _context.abrupt(\"return\", new Promise(function (res, reject) {\n reject(text.msg || text.message);\n }));\n case 20:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"loadSceneTree\",\n value: function loadSceneTree() {}\n }, {\n key: \"loadTileset\",\n value: function () {\n var _loadTileset = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(options) {\n var _this2 = this;\n var object, url, o, response, params, tileset, _initData, cartographic, m, scale, _cartographic;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n object = _objectSpread({}, options);\n url = \"\";\n if (object.url.startsWith(\"http\")) url = object.url;else {\n //说明是本地的json,在磁盘中存在的\n if (object.url.includes(\":\")) {\n url = object.url;\n } else {\n if (this.options.host) {\n o = new URL(object.url, this.options.host);\n url = o.href;\n } else url = object.url;\n }\n }\n _context2.next = 5;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 5:\n response = _context2.sent;\n if (!(response.status === 200)) {\n _context2.next = 10;\n break;\n }\n _context2.next = 9;\n return response.json();\n case 9:\n this.tileset = _context2.sent;\n case 10:\n params = {\n show: this.options.show,\n skipLevelOfDetail: true,\n baseScreenSpaceError: 1024,\n maximumScreenSpaceError: 32,\n // 数值加大,能让最终成像变模糊\n skipScreenSpaceErrorFactor: 16,\n skipLevels: 1,\n immediatelyLoadDesiredLevelOfDetail: false,\n loadSiblings: true,\n // 如果为true则不会在已加载完概况房屋后,自动从中心开始超清化房屋\n cullWithChildrenBounds: true,\n cullRequestsWhileMoving: true,\n cullRequestsWhileMovingMultiplier: 10,\n // 值越小能够更快的剔除\n preloadWhenHidden: false,\n preferLeaves: true,\n maximumCacheOverflowBytes: 128,\n // 内存分配变小有利于倾斜摄影数据回收,提升性能体验\n progressiveResolutionHeightFraction: 0.5,\n // 数值偏于0能够让初始加载变得模糊\n dynamicScreenSpaceErrorDensity: 0.1,\n // 数值加大,能让周边加载变快\n dynamicScreenSpaceErrorFactor: 1,\n dynamicScreenSpaceError: true // 有了这个后,会在真正的全屏加载完之后才清晰化房屋\n };\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context2.next = 19;\n break;\n }\n _context2.next = 14;\n return Cesium.Cesium3DTileset.fromUrl(url, params);\n case 14:\n tileset = _context2.sent;\n this.entity = tileset;\n this.entity.imageBasedLighting.luminanceAtZenith = 0.1;\n _context2.next = 25;\n break;\n case 19:\n params.url = url;\n tileset = new Cesium.Cesium3DTileset(params);\n _context2.next = 23;\n return tileset.readyPromise;\n case 23:\n this.entity = _context2.sent;\n this.entity.imageBasedLighting.luminanceAtZenith = 0.1;\n case 25:\n _context2.next = 27;\n return this.loadSceneTree(url);\n case 27:\n _initData = function initData(tile) {\n if (tile._contents) {\n for (var i = 0; i < tile._contents.length; i++) {\n _initData(tile._contents[i]);\n }\n } else {\n for (var _i = 0; _i < tile.featuresLength; _i++) {\n var feature = tile.getFeature(_i);\n var file = feature.content.url;\n var id = feature.getProperty('id');\n if (_this2.features.has(id)) {\n if (_this2.features.get(id).features) {\n if (_this2.features.get(id).features[file]) {\n // feature = this.features.get(id).features[feature.featureId]\n if (_this2.features.get(id).features[file].customColor) {\n feature.color = _this2.features.get(id).features[file].customColor;\n feature.customColor = _this2.features.get(id).features[file].customColor;\n }\n if (_this2.features.get(id).features[file].customAlpha) {\n var color = feature.color;\n feature.color = Cesium.Color.fromCssColorString(\"rgba(\".concat(Cesium.Color.floatToByte(color.red), \",\").concat(Cesium.Color.floatToByte(color.green), \",\").concat(Cesium.Color.floatToByte(color.blue), \",\").concat(_this2.features.get(id).features[file].customAlpha, \")\"));\n feature.customAlpha = _this2.features.get(id).features[file].customAlpha;\n }\n if (_this2.features.get(id).features[file].customShow) {\n feature.show = _this2.features.get(id).features[file].customShow;\n feature.customShow = _this2.features.get(id).features[file].customShow;\n }\n }\n _this2.features.get(id).features[file] = feature;\n } else {\n var _object = {};\n if (_this2.features.get(id).customColor) {\n feature.color = _this2.features.get(id).customColor;\n feature.customColor = _this2.features.get(id).customColor;\n }\n if (_this2.features.get(id).customAlpha) {\n var _color = feature.color;\n feature.color = Cesium.Color.fromCssColorString(\"rgba(\".concat(Cesium.Color.floatToByte(_color.red), \",\").concat(Cesium.Color.floatToByte(_color.green), \",\").concat(Cesium.Color.floatToByte(_color.blue), \",\").concat(_this2.features.get(id).customAlpha, \")\"));\n feature.customAlpha = _this2.features.get(id).customAlpha;\n }\n if (_this2.features.get(id).customShow) {\n feature.show = _this2.features.get(id).customShow;\n feature.customShow = _this2.features.get(id).customShow;\n }\n _object[file] = feature;\n _this2.features.get(id).features = _object;\n }\n } else {\n var _object2 = {};\n _object2[file] = feature;\n _this2.features.set(id, {\n features: _object2\n });\n }\n if (!feature.customColor) {\n feature.customColor = Cesium.Color.fromCssColorString('#ffffff');\n }\n }\n }\n\n // for (let i = 0; i < tile._content.featuresLength; i++) {\n // let feature = tile._content.getFeature(i)\n // feature.show = false\n // }\n // if (tile._content._contents) {\n // for (let i = 0; i < tile._content._contents.length; i++) {\n // for (let m = 0; m < tile._content._contents[i].featuresLength; m++) {\n // let feature = tile._content._contents[i].getFeature(m)\n // feature.show = false\n // }\n // }\n // }\n };\n if (!(!this.sdk || !this.sdk.viewer || !this.sdk.viewer.scene)) {\n _context2.next = 30;\n break;\n }\n return _context2.abrupt(\"return\");\n case 30:\n tileset.tileLoad.addEventListener(function (tile) {\n // this.test()\n _initData(tile._content);\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this2));\n _classPrivateFieldSet(_updateModelTimeout, _this2, setTimeout(function () {\n clearTimeout(_classPrivateFieldGet(_updateModelTimeout, _this2));\n var center = _this2.cartesian3Towgs84(tileset.boundingSphere.center, _this2.sdk.viewer);\n var circle = turf.circle([center.lng, center.lat], tileset.boundingSphere.radius / 1000, {\n steps: 360,\n units: 'kilometers'\n });\n var _iterator = _createForOfIteratorHelper(_this2.sdk.entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2),\n key = _step$value[0],\n entity = _step$value[1];\n if (entity.type === 'BillboardObject' && entity.heightMode == 3) {\n var pt = turf.point([entity.lng, entity.lat]);\n if (turf.booleanPointInPolygon(pt, circle)) {\n entity.updateHeight();\n }\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }, 500));\n\n // if (tile._content._contents) {\n // for (let i = 0; i < tile._content._contents.length; i++) {\n // for (let m = 0; m < tile._content._contents[i].featuresLength; m++) {\n // let feature = tile._content._contents[i].getFeature(m)\n // console.log(feature)\n // feature.show = false\n // }\n // }\n // }\n // for (let i = 0; i < tile._content.featuresLength; i++) {\n // let feature = tile._content.getFeature(i)\n // let file = feature.content.url\n // let id = feature.getProperty('id')\n // if (this.features.has(id)) {\n // if (this.features.get(id).features) {\n // if (this.features.get(id).features[file]) {\n // // feature = this.features.get(id).features[feature.featureId]\n // if (this.features.get(id).features[file].customColor) {\n // feature.color = this.features.get(id).features[file].customColor\n // feature.customColor = this.features.get(id).features[file].customColor\n // }\n // if (this.features.get(id).features[file].customAlpha) {\n // let color = feature.color\n // feature.color = Cesium.Color.fromCssColorString(`rgba(${Cesium.Color.floatToByte(color.red)},${Cesium.Color.floatToByte(color.green)},${Cesium.Color.floatToByte(color.blue)},${this.features.get(id).features[file].customAlpha})`)\n // feature.customAlpha = this.features.get(id).features[file].customAlpha\n // }\n // if (this.features.get(id).features[file].customShow) {\n // feature.show = this.features.get(id).features[file].customShow\n // feature.customShow = this.features.get(id).features[file].customShow\n // }\n\n // }\n // this.features.get(id).features[file] = feature\n // }\n // else {\n // let object = {}\n // object[file] = feature\n // this.features.get(id).features = object\n // }\n // }\n // else {\n // let object = {}\n // object[file] = feature\n // this.features.set(id, { features: object })\n // }\n // if (!feature.customColor) {\n // feature.customColor = Cesium.Color.fromCssColorString('#ffffff')\n // }\n // }\n });\n // // console.log(tileset)\n // if (this.type === 'bim') {\n // const setTilesetStyle = (f) => {\n // if (tileset.style) {\n // // tileset.style = new Cesium.Cesium3DTileStyle({\n // // color: {\n // // conditions: [\n // // ['${name} ===\"对象074\" ', 'color(\"red\")'], //符合条件项\n // // ['true', 'rgba(255,255,255,1)'] //其他项\n // // ]\n // // }\n // // })\n // // tileset.tileLoad.removeEventListener(setTilesetStyle)\n // }\n // console.log(f)\n // }\n // tileset.tileLoad.addEventListener(setTilesetStyle)\n // }\n\n this.entity._root.originalTransform = _objectSpread({}, this.entity._root.transform);\n this.entity.id = this.options.id || this.randomString();\n this.entity.type = this.type;\n // this.editObj = new EditB3DM(this.sdk, this.entity)\n\n this.sdk.viewer.scene.primitives.add(tileset);\n if (this.options.position && JSON.stringify(this.options.position) != \"{}\" && (this.options.position.lng || this.options.position.lng === 0) && (this.options.position.lat || this.options.position.lat === 0)) {\n this.options.position.alt == this.options.position.alt || 0;\n cartographic = Cesium.Cartographic.fromCartesian(this.entity.boundingSphere.center);\n if (this.tileset.root.transform) {\n cartographic = Cesium.Cartographic.fromCartesian({\n x: this.tileset.root.transform[12],\n y: this.tileset.root.transform[13],\n z: this.tileset.root.transform[14]\n });\n }\n this.entity.original = {\n lng: Cesium.Math.toDegrees(cartographic.longitude),\n // 经度\n lat: Cesium.Math.toDegrees(cartographic.latitude),\n // 纬度\n height: cartographic.height\n };\n m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt));\n scale = Cesium.Matrix4.fromUniformScale(this.oldData.scale);\n if (this.tileset.root.transform) {\n Cesium.Matrix4.multiply(m, scale, this.entity._root.transform);\n }\n this.lng = this.oldData.lng;\n this.lat = this.oldData.lat;\n this.height = this.oldData.height;\n } else {\n this.options.position = {};\n _cartographic = Cesium.Cartographic.fromCartesian(this.entity.boundingSphere.center);\n if (this.tileset.root.transform) {\n _cartographic = Cesium.Cartographic.fromCartesian({\n x: this.tileset.root.transform[12],\n y: this.tileset.root.transform[13],\n z: this.tileset.root.transform[14]\n });\n }\n this.entity.original = {\n lng: Cesium.Math.toDegrees(_cartographic.longitude),\n lat: this.oldData.lat = Cesium.Math.toDegrees(_cartographic.latitude),\n height: _cartographic.height\n };\n this.lng = this.oldData.lng = Cesium.Math.toDegrees(_cartographic.longitude); // 经度\n this.lat = this.oldData.lat = Cesium.Math.toDegrees(_cartographic.latitude); // 纬度\n this.height = this.oldData.height = _cartographic.height; // 高度\n }\n this.scale = this.oldData.scale;\n this.roll = this.oldData.roll;\n this.heading = this.oldData.heading;\n this.pitch = this.oldData.pitch;\n this.transparency = this.oldData.transparency;\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(this.sdk, this.options.id);\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_12__[\"regMoveCallback\"])(this.entity.id, this.mouseMoveCB, this);\n\n // this.entity = this.sdk.viewer.scene.primitives.add(tileset);\n // if (this.options.position && JSON.stringify(this.options.position) != \"{}\") {\n // let m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt))\n // const scale = Cesium.Matrix4.fromUniformScale(this.oldData.scale);\n // Cesium.Matrix4.multiply(m, scale, this.entity._root.transform)\n // }\n // else {\n // this.options.position = {}\n // }\n // this.lng = this.oldData.lng\n // this.lat = this.oldData.lat\n // this.height = this.oldData.height\n // this.scale = this.oldData.scale\n // this.roll = this.oldData.roll\n // this.heading = this.oldData.heading\n // this.pitch = this.oldData.pitch\n // this.transparency = this.oldData.transparency\n\n // regMoveCallback(this.entity.id, this.mouseMoveCB, this)\n\n // this.editObj = new EditB3DM(this.sdk, this.entity)\n // this.editObj.transformCallBack = this.rotationEditingCallBack\n // tileset.readyPromise.then(() => {\n // this.entity = this.sdk.viewer.scene.primitives.add(tileset);\n\n // })\n // let x = this.sdk.viewer.scene.primitives.add(new Cesium.Cesium3DTileset({\n // url: url\n // }));\n // setTimeout(() => {\n // console.log(x)\n // this.sdk.viewer.flyTo(this.entity)\n // }, 3000);\n case 43:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function loadTileset(_x) {\n return _loadTileset.apply(this, arguments);\n }\n return loadTileset;\n }() // test() {\n // let heightstyle = new Cesium.Cesium3DTileStyle({\n // color: {\n // conditions: [\n // [\"Number(${height})>=300\", \"rgba(45,0,75,0.5)\"],\n // [\"Number(${height})>=200\", \"rgb(102,71,151)\"],\n // [\"Number(${height})>=100\", \"rgb(170,162,204)\"],\n // [\"Number(${height})>=50\", \"rgb(224,226,238)\"],\n // [\"Number(${height})>=25\", \"rgb(252,230, 200)\"],\n // [\"Number(${height})>=10\", \"rgb(248,176,87)\"],\n // [\"Number(${height})>=5\", \"rgb(198, 106,11)\"],\n // [\"isNaN(Number(${height}))\", \"rgb(255, 255, 255)\"],\n // [\"true\", \"rgb(127,59,8)\"]\n // ]\n // }\n // });\n // this.entity.style = heightstyle;\n // }\n }, {\n key: \"remove\",\n value: function remove() {\n _superPropGet(BaseTileset, \"remove\", this, 3)([]);\n this.editObj.destroy();\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }, {\n key: \"flyTo\",\n value: function flyTo() {\n _superPropGet(BaseTileset, \"flyTo\", this, 3)([]);\n }\n }, {\n key: \"on\",\n value: function on() {\n return this.add();\n }\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(BaseTileset, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getHost\"])();\n this.options.url = this.options.url || \"\";\n }\n }, {\n key: \"position\",\n get: function get() {\n var cartographic = Cesium.Cartographic.fromCartesian(this.entity.boundingSphere.center);\n if (this.tileset.root.transform) {\n cartographic = Cesium.Cartographic.fromCartesian({\n x: this.tileset.root.transform[12],\n y: this.tileset.root.transform[13],\n z: this.tileset.root.transform[14]\n });\n }\n var lng = Cesium.Math.toDegrees(cartographic.longitude + 0.00000000663814);\n var lat = Cesium.Math.toDegrees(cartographic.latitude + 0.00000025137835);\n if (this.newData.lng && this.newData.lat && this.newData.height) {\n return {\n lng: this.newData.lng,\n lat: this.newData.lat,\n height: this.newData.height\n };\n } else {\n return {\n lng: lng,\n lat: lat,\n height: cartographic.height - 2.19104611043234\n };\n }\n },\n set: function set(p) {}\n\n /**\r\n * @desc 打开模型旋转功能\r\n * @param status {boolean}\r\n * @methodOf Source\r\n * */\n }, {\n key: \"rotationEditing\",\n get:\n /**\r\n * @desc 获取模型旋转状态\r\n * @method rotationEditing\r\n * @return boolean\r\n * @methodOf Source\r\n * */\n function get() {\n if (this.editObj.getActiveState() === 'rtation') {\n return true;\n }\n return false;\n }\n\n /**@desc 打开平移模型功能\r\n *\r\n * @memberOf Source\r\n *@param status {boolean}\r\n *\r\n * */,\n set: function set(status) {\n if (!this.tileset.root.transform) {\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: '该模型不支持移动和旋转!',\n type: 'warning',\n duration: 1500\n });\n }\n console.warn('该模型不支持移动和旋转!');\n return;\n }\n if (status) {\n this.editObj.position = {\n lng: this.newData.lng,\n lat: this.newData.lat,\n alt: this.newData.height\n };\n this.editObj.update();\n this.editObj.editRtation();\n } else {\n this.editObj.destroy();\n }\n }\n }, {\n key: \"positionEditing\",\n get: function get() {\n if (this.editObj.getActiveState() === 'translational') {\n return true;\n }\n return false;\n }\n\n //平移时,坐标信息变化的回调\n ,\n set: function set(status) {\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n if (!this.tileset.root.transform) {\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: '该模型不支持移动和旋转!',\n type: 'warning',\n duration: 1500\n });\n }\n console.warn('该模型不支持移动和旋转!');\n return;\n }\n if (status) {\n this.editObj.position = {\n lng: this.newData.lng,\n lat: this.newData.lat,\n alt: this.newData.height\n };\n this.editObj.update();\n this.editObj.editTranslational();\n } else {\n this.editObj.destroy();\n }\n }\n }, {\n key: \"positionEditingCallBack\",\n get: function get() {}\n\n //旋转时,坐标信息变化的回调\n ,\n set: function set(callback) {\n return;\n }\n }, {\n key: \"rotationEditingCallBack\",\n get: function get() {\n var _this3 = this;\n return function (params, state) {\n _this3.lng = params.position.lng;\n _this3.lat = params.position.lat;\n _this3.height = params.position.alt;\n _this3.roll = params.rotate.x;\n _this3.heading = params.rotate.y;\n _this3.pitch = params.rotate.z;\n // this._rotationEditingCallBack && this._rotationEditingCallBack(this.editObj._params)\n };\n },\n set: function set(callback) {\n this._rotationEditingCallBack = callback;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n\n // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3(state) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function edit(_x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n var _this4 = this;\n if (typeof v === \"boolean\") {\n this.options.show = v;\n this.entity && (this.entity.show = v);\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n if (this.options.label && this.options.label.show && this.label) {\n this.label.show = v;\n }\n setTimeout(function () {\n var center = _this4.cartesian3Towgs84(_this4.entity.boundingSphere.center, _this4.sdk.viewer);\n var circle = turf.circle([center.lng, center.lat], _this4.entity.boundingSphere.radius / 1000, {\n steps: 360,\n units: 'kilometers'\n });\n var _iterator2 = _createForOfIteratorHelper(_this4.sdk.entityMap),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _step2$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step2.value, 2),\n key = _step2$value[0],\n entity = _step2$value[1];\n if (entity.type === 'BillboardObject' && entity.heightMode == 3) {\n var pt = turf.point([entity.lng, entity.lat]);\n if (turf.booleanPointInPolygon(pt, circle)) {\n entity.updateHeight();\n }\n } else {\n if (entity.label) {\n entity.label.show = entity.label.show;\n }\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this4.sdk, _this4.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(_this4.sdk, _this4.options.id);\n }, 300);\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseTileset);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9CYXNlVGlsZXNldC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXNlU291cmNlL0Jhc2VUaWxlc2V0L2luZGV4LmpzP2VjMTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTExLTIwIDE3OjU0XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMTEtMjAgMTc6NTRcclxuICovXHJcbmltcG9ydCB7IGdldEhvc3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vb25cIjtcclxuaW1wb3J0IEJhc2VTb3VyY2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHJlZ0xlZnRDbGlja0NhbGxiYWNrLCByZWdSaWdodENsaWNrQ2FsbGJhY2ssIHJlZ01vdmVDYWxsYmFjayB9IGZyb20gXCIuLi8uLi8uLi8uLi9HbG9iYWwvQ2xpY2tDYWxsYmFja1wiO1xyXG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vLi4vLi4vQ29udHJvbGxlci9pbmRleFwiO1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5cclxuY2xhc3MgQmFzZVRpbGVzZXQgZXh0ZW5kcyBCYXNlU291cmNlIHtcclxuICAjdXBkYXRlTW9kZWxUaW1lb3V0O1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQGRlc2NyaXB0aW9uIOaooeWei1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWR7c3RyaW5nfSBpZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWV7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy51cmx7c3RyaW5nfSDmqKHlnovlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sbmd7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYXR7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHQ9MHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNjYWxlPTF7bnVtYmVyfSDmqKHlnovmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yb2xsPTB7bnVtYmVyfSDmqKHlnot45peL6L2sXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVhZGluZz0we251bWJlcn0g5qih5Z6Leui9tOaXi+i9rOinkuW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBpdGNoPTB7bnVtYmVyfSDmqKHlnot56L205peL6L2s6KeS5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMpIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSgpXHJcbiAgICB0aGlzLndhdGNocyA9IFtdXHJcbiAgICB0aGlzLnBvc2l0aW9uQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnJvdGF0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLm9uQ2xpY2tDYWxsYmFjayA9IG51bGxcclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcbiAgICB0aGlzLm9wdGlvbnMuYWNjdXJhY3kgPSBvcHRpb25zLmFjY3VyYWN5ID8gTnVtYmVyKG9wdGlvbnMuYWNjdXJhY3kudG9GaXhlZCgxKSkgOiAxXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb24gfHwge31cclxuICAgIHRoaXMub2xkRGF0YSA9IHtcclxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdHJhbnNwYXJlbmN5OiAodGhpcy5vcHRpb25zLnRyYW5zcGFyZW5jeSB8fCB0aGlzLm9wdGlvbnMudHJhbnNwYXJlbmN5ID09PSAwKSA/IHRoaXMub3B0aW9ucy50cmFuc3BhcmVuY3kgOiAxLFxyXG4gICAgICBuYW1lOiB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgYWNjdXJhY3k6IHRoaXMub3B0aW9ucy5hY2N1cmFjeSxcclxuICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgfHwgMCxcclxuICAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIHNjYWxlOiAodGhpcy5vcHRpb25zLnNjYWxlIHx8IHRoaXMub3B0aW9ucy5zY2FsZSA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuc2NhbGUgOiAxLFxyXG4gICAgICByb2xsOiB0aGlzLm9wdGlvbnMucm9sbCB8fCAwLFxyXG4gICAgICBoZWFkaW5nOiB0aGlzLm9wdGlvbnMuaGVhZGluZyB8fCAwLFxyXG4gICAgICBwaXRjaDogdGhpcy5vcHRpb25zLnBpdGNoIHx8IDBcclxuICAgIH1cclxuICAgIHRoaXMubmV3RGF0YSA9IHtcclxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdHJhbnNwYXJlbmN5OiAodGhpcy5vcHRpb25zLnRyYW5zcGFyZW5jeSB8fCB0aGlzLm9wdGlvbnMudHJhbnNwYXJlbmN5ID09PSAwKSA/IHRoaXMub3B0aW9ucy50cmFuc3BhcmVuY3kgOiAxLFxyXG4gICAgICBuYW1lOiB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgYWNjdXJhY3k6IHRoaXMub3B0aW9ucy5hY2N1cmFjeSxcclxuICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgfHwgMCxcclxuICAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIHNjYWxlOiAodGhpcy5vcHRpb25zLnNjYWxlIHx8IHRoaXMub3B0aW9ucy5zY2FsZSA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuc2NhbGUgOiAxLFxyXG4gICAgICByb2xsOiB0aGlzLm9wdGlvbnMucm9sbCB8fCAwLFxyXG4gICAgICBoZWFkaW5nOiB0aGlzLm9wdGlvbnMuaGVhZGluZyB8fCAwLFxyXG4gICAgICBwaXRjaDogdGhpcy5vcHRpb25zLnBpdGNoIHx8IDBcclxuICAgIH1cclxuICAgIHRoaXMudGlsZXNldCA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5lZGl0T2JqID0gbmV3IENvbnRyb2xsZXIodGhpcy5zZGspXHJcbiAgICB0aGlzLmVkaXRPYmouY29udHJvbGxlckNhbGxCYWNrID0gdGhpcy5yb3RhdGlvbkVkaXRpbmdDYWxsQmFja1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy51cmwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9hZFRpbGVzZXQoe1xyXG4gICAgICAgIHVybDogdGhpcy5vcHRpb25zLnVybFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucmVxdWVzdFJlc291cmNlKClcclxuICAgICAgbGV0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpXHJcbiAgICAgIHRleHQgPSBKU09OLnBhcnNlKHRleHQpXHJcbiAgICAgIGlmIChbMCwgMjAwXS5pbmNsdWRlcyh0ZXh0LmNvZGUpKSB7XHJcbiAgICAgICAgaWYgKHRleHQuZGF0YS51cmwubGVuZ3RoKVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFRpbGVzZXQodGV4dC5kYXRhKVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KCfotYTmupDkuI3lrZjlnKgnKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICByZWplY3QodGV4dC5tc2cgfHwgdGV4dC5tZXNzYWdlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsb2FkU2NlbmVUcmVlKCkge1xyXG5cclxuICB9XHJcblxyXG5cclxuICBhc3luYyBsb2FkVGlsZXNldChvcHRpb25zKSB7XHJcbiAgICBsZXQgb2JqZWN0ID0geyAuLi5vcHRpb25zIH1cclxuICAgIGxldCB1cmwgPSBcIlwiXHJcbiAgICBpZiAob2JqZWN0LnVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSlcclxuICAgICAgdXJsID0gb2JqZWN0LnVybFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8v6K+05piO5piv5pys5Zyw55qEanNvbu+8jOWcqOejgeebmOS4reWtmOWcqOeahFxyXG4gICAgICBpZiAob2JqZWN0LnVybC5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgICB1cmwgPSBvYmplY3QudXJsXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ob3N0KSB7XHJcbiAgICAgICAgICBsZXQgbyA9IG5ldyBVUkwob2JqZWN0LnVybCwgdGhpcy5vcHRpb25zLmhvc3QpXHJcbiAgICAgICAgICB1cmwgPSBvLmhyZWZcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHVybCA9IG9iamVjdC51cmxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICB0aGlzLnRpbGVzZXQgPSBhd2FpdCByZXNwb25zZS5qc29uKClcclxuICAgIH1cclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93LFxyXG4gICAgICBza2lwTGV2ZWxPZkRldGFpbDogdHJ1ZSxcclxuICAgICAgYmFzZVNjcmVlblNwYWNlRXJyb3I6IDEwMjQsXHJcbiAgICAgIG1heGltdW1TY3JlZW5TcGFjZUVycm9yOiAzMiwgLy8g5pWw5YC85Yqg5aSn77yM6IO96K6p5pyA57uI5oiQ5YOP5Y+Y5qih57OKXHJcbiAgICAgIHNraXBTY3JlZW5TcGFjZUVycm9yRmFjdG9yOiAxNixcclxuICAgICAgc2tpcExldmVsczogMSxcclxuICAgICAgaW1tZWRpYXRlbHlMb2FkRGVzaXJlZExldmVsT2ZEZXRhaWw6IGZhbHNlLFxyXG4gICAgICBsb2FkU2libGluZ3M6IHRydWUsIC8vIOWmguaenOS4unRydWXliJnkuI3kvJrlnKjlt7LliqDovb3lrozmpoLlhrXmiL/lsYvlkI7vvIzoh6rliqjku47kuK3lv4PlvIDlp4votoXmuIXljJbmiL/lsYtcclxuICAgICAgY3VsbFdpdGhDaGlsZHJlbkJvdW5kczogdHJ1ZSxcclxuICAgICAgY3VsbFJlcXVlc3RzV2hpbGVNb3Zpbmc6IHRydWUsXHJcbiAgICAgIGN1bGxSZXF1ZXN0c1doaWxlTW92aW5nTXVsdGlwbGllcjogMTAsIC8vIOWAvOi2iuWwj+iDveWkn+abtOW/q+eahOWJlOmZpFxyXG4gICAgICBwcmVsb2FkV2hlbkhpZGRlbjogZmFsc2UsXHJcbiAgICAgIHByZWZlckxlYXZlczogdHJ1ZSxcclxuICAgICAgbWF4aW11bUNhY2hlT3ZlcmZsb3dCeXRlczogMTI4LCAvLyDlhoXlrZjliIbphY3lj5jlsI/mnInliKnkuo7lgL7mlpzmkYTlvbHmlbDmja7lm57mlLbvvIzmj5DljYfmgKfog73kvZPpqoxcclxuICAgICAgcHJvZ3Jlc3NpdmVSZXNvbHV0aW9uSGVpZ2h0RnJhY3Rpb246IDAuNSwgLy8g5pWw5YC85YGP5LqOMOiDveWkn+iuqeWIneWni+WKoOi9veWPmOW+l+aooeezilxyXG4gICAgICBkeW5hbWljU2NyZWVuU3BhY2VFcnJvckRlbnNpdHk6IDAuMSwgLy8g5pWw5YC85Yqg5aSn77yM6IO96K6p5ZGo6L655Yqg6L295Y+Y5b+rXHJcbiAgICAgIGR5bmFtaWNTY3JlZW5TcGFjZUVycm9yRmFjdG9yOiAxLFxyXG4gICAgICBkeW5hbWljU2NyZWVuU3BhY2VFcnJvcjogdHJ1ZSAvLyDmnInkuobov5nkuKrlkI7vvIzkvJrlnKjnnJ/mraPnmoTlhajlsY/liqDovb3lrozkuYvlkI7miY3muIXmmbDljJbmiL/lsYtcclxuICAgIH1cclxuICAgIGxldCB0aWxlc2V0XHJcbiAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICB0aWxlc2V0ID0gYXdhaXQgQ2VzaXVtLkNlc2l1bTNEVGlsZXNldC5mcm9tVXJsKHVybCwgcGFyYW1zKTtcclxuICAgICAgdGhpcy5lbnRpdHkgPSB0aWxlc2V0XHJcbiAgICAgIHRoaXMuZW50aXR5LmltYWdlQmFzZWRMaWdodGluZy5sdW1pbmFuY2VBdFplbml0aCA9IDAuMVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBhcmFtcy51cmwgPSB1cmxcclxuICAgICAgdGlsZXNldCA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlc2V0KHBhcmFtcyk7XHJcbiAgICAgIHRoaXMuZW50aXR5ID0gYXdhaXQgdGlsZXNldC5yZWFkeVByb21pc2VcclxuICAgICAgdGhpcy5lbnRpdHkuaW1hZ2VCYXNlZExpZ2h0aW5nLmx1bWluYW5jZUF0WmVuaXRoID0gMC4xXHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuXHJcblxyXG4gICAgYXdhaXQgdGhpcy5sb2FkU2NlbmVUcmVlKHVybClcclxuICAgIGNvbnN0IGluaXREYXRhID0gKHRpbGUpID0+IHtcclxuICAgICAgaWYgKHRpbGUuX2NvbnRlbnRzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aWxlLl9jb250ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaW5pdERhdGEodGlsZS5fY29udGVudHNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgZmVhdHVyZSA9IHRpbGUuZ2V0RmVhdHVyZShpKVxyXG4gICAgICAgICAgbGV0IGZpbGUgPSBmZWF0dXJlLmNvbnRlbnQudXJsXHJcbiAgICAgICAgICBsZXQgaWQgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdpZCcpXHJcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXMpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZpbGVdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmZWF0dXJlID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZlYXR1cmUuZmVhdHVyZUlkXVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21Db2xvcikge1xyXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlLmNvbG9yID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZpbGVdLmN1c3RvbUNvbG9yXHJcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmUuY3VzdG9tQ29sb3IgPSB0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQ29sb3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQWxwaGEpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gZmVhdHVyZS5jb2xvclxyXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5yZWQpfSwke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5ncmVlbil9LCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLmJsdWUpfSwke3RoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21BbHBoYX0pYClcclxuICAgICAgICAgICAgICAgICAgZmVhdHVyZS5jdXN0b21BbHBoYSA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21BbHBoYVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21TaG93KSB7XHJcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmUuc2hvdyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21TaG93XHJcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmUuY3VzdG9tU2hvdyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21TaG93XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXSA9IGZlYXR1cmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0ge31cclxuICAgICAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmNvbG9yID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUNvbG9yXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmN1c3RvbUNvbG9yID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUNvbG9yXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuY3VzdG9tQWxwaGEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IGZlYXR1cmUuY29sb3JcclxuICAgICAgICAgICAgICAgIGZlYXR1cmUuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLnJlZCl9LCR7Q2VzaXVtLkNvbG9yLmZsb2F0VG9CeXRlKGNvbG9yLmdyZWVuKX0sJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IuYmx1ZSl9LCR7dGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbUFscGhhfSlgKVxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5jdXN0b21BbHBoYSA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5jdXN0b21BbHBoYVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlcy5nZXQoaWQpLmN1c3RvbVNob3cpIHtcclxuICAgICAgICAgICAgICAgIGZlYXR1cmUuc2hvdyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5jdXN0b21TaG93XHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmN1c3RvbVNob3cgPSB0aGlzLmZlYXR1cmVzLmdldChpZCkuY3VzdG9tU2hvd1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBvYmplY3RbZmlsZV0gPSBmZWF0dXJlXHJcbiAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzID0gb2JqZWN0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgb2JqZWN0ID0ge31cclxuICAgICAgICAgICAgb2JqZWN0W2ZpbGVdID0gZmVhdHVyZVxyXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnNldChpZCwgeyBmZWF0dXJlczogb2JqZWN0IH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWZlYXR1cmUuY3VzdG9tQ29sb3IpIHtcclxuICAgICAgICAgICAgZmVhdHVyZS5jdXN0b21Db2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmZmZmYnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGUuX2NvbnRlbnQuZmVhdHVyZXNMZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgIGxldCBmZWF0dXJlID0gdGlsZS5fY29udGVudC5nZXRGZWF0dXJlKGkpXHJcbiAgICAgIC8vICAgZmVhdHVyZS5zaG93ID0gZmFsc2VcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBpZiAodGlsZS5fY29udGVudC5fY29udGVudHMpIHtcclxuICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGUuX2NvbnRlbnQuX2NvbnRlbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRpbGUuX2NvbnRlbnQuX2NvbnRlbnRzW2ldLmZlYXR1cmVzTGVuZ3RoOyBtKyspIHtcclxuICAgICAgLy8gICAgICAgbGV0IGZlYXR1cmUgPSB0aWxlLl9jb250ZW50Ll9jb250ZW50c1tpXS5nZXRGZWF0dXJlKG0pXHJcbiAgICAgIC8vICAgICAgIGZlYXR1cmUuc2hvdyA9IGZhbHNlXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLnNkay52aWV3ZXIuc2NlbmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aWxlc2V0LnRpbGVMb2FkLmFkZEV2ZW50TGlzdGVuZXIodGlsZSA9PiB7XHJcbiAgICAgIC8vIHRoaXMudGVzdCgpXHJcbiAgICAgIGluaXREYXRhKHRpbGUuX2NvbnRlbnQpXHJcblxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0KVxyXG4gICAgICB0aGlzLiN1cGRhdGVNb2RlbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdXBkYXRlTW9kZWxUaW1lb3V0KVxyXG4gICAgICAgIGxldCBjZW50ZXIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRpbGVzZXQuYm91bmRpbmdTcGhlcmUuY2VudGVyLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgbGV0IGNpcmNsZSA9IHR1cmYuY2lyY2xlKFtjZW50ZXIubG5nLCBjZW50ZXIubGF0XSwgdGlsZXNldC5ib3VuZGluZ1NwaGVyZS5yYWRpdXMgLyAxMDAwLCB7IHN0ZXBzOiAzNjAsIHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50aXR5XSBvZiB0aGlzLnNkay5lbnRpdHlNYXApIHtcclxuICAgICAgICAgIGlmIChlbnRpdHkudHlwZSA9PT0gJ0JpbGxib2FyZE9iamVjdCcgJiYgZW50aXR5LmhlaWdodE1vZGUgPT0gMykge1xyXG4gICAgICAgICAgICBsZXQgcHQgPSB0dXJmLnBvaW50KFtlbnRpdHkubG5nLCBlbnRpdHkubGF0XSk7XHJcbiAgICAgICAgICAgIGlmICh0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwdCwgY2lyY2xlKSkge1xyXG4gICAgICAgICAgICAgIGVudGl0eS51cGRhdGVIZWlnaHQoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGVudGl0eS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgIGVudGl0eS5sYWJlbC5zaG93ID0gZW50aXR5LmxhYmVsLnNob3dcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgIC8vIGlmICh0aWxlLl9jb250ZW50Ll9jb250ZW50cykge1xyXG4gICAgICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlsZS5fY29udGVudC5fY29udGVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdGlsZS5fY29udGVudC5fY29udGVudHNbaV0uZmVhdHVyZXNMZW5ndGg7IG0rKykge1xyXG4gICAgICAvLyAgICAgICBsZXQgZmVhdHVyZSA9IHRpbGUuX2NvbnRlbnQuX2NvbnRlbnRzW2ldLmdldEZlYXR1cmUobSlcclxuICAgICAgLy8gICAgICAgY29uc29sZS5sb2coZmVhdHVyZSlcclxuICAgICAgLy8gICAgICAgZmVhdHVyZS5zaG93ID0gZmFsc2VcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCB0aWxlLl9jb250ZW50LmZlYXR1cmVzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBsZXQgZmVhdHVyZSA9IHRpbGUuX2NvbnRlbnQuZ2V0RmVhdHVyZShpKVxyXG4gICAgICAvLyAgIGxldCBmaWxlID0gZmVhdHVyZS5jb250ZW50LnVybFxyXG4gICAgICAvLyAgIGxldCBpZCA9IGZlYXR1cmUuZ2V0UHJvcGVydHkoJ2lkJylcclxuICAgICAgLy8gICBpZiAodGhpcy5mZWF0dXJlcy5oYXMoaWQpKSB7XHJcbiAgICAgIC8vICAgICBpZiAodGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzKSB7XHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0pIHtcclxuICAgICAgLy8gICAgICAgICAvLyBmZWF0dXJlID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZlYXR1cmUuZmVhdHVyZUlkXVxyXG4gICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQ29sb3IpIHtcclxuICAgICAgLy8gICAgICAgICAgIGZlYXR1cmUuY29sb3IgPSB0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQ29sb3JcclxuICAgICAgLy8gICAgICAgICAgIGZlYXR1cmUuY3VzdG9tQ29sb3IgPSB0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQ29sb3JcclxuICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21BbHBoYSkge1xyXG4gICAgICAvLyAgICAgICAgICAgbGV0IGNvbG9yID0gZmVhdHVyZS5jb2xvclxyXG4gICAgICAvLyAgICAgICAgICAgZmVhdHVyZS5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IucmVkKX0sJHtDZXNpdW0uQ29sb3IuZmxvYXRUb0J5dGUoY29sb3IuZ3JlZW4pfSwke0Nlc2l1bS5Db2xvci5mbG9hdFRvQnl0ZShjb2xvci5ibHVlKX0sJHt0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tQWxwaGF9KWApXHJcbiAgICAgIC8vICAgICAgICAgICBmZWF0dXJlLmN1c3RvbUFscGhhID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZpbGVdLmN1c3RvbUFscGhhXHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVzLmdldChpZCkuZmVhdHVyZXNbZmlsZV0uY3VzdG9tU2hvdykge1xyXG4gICAgICAvLyAgICAgICAgICAgZmVhdHVyZS5zaG93ID0gdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZpbGVdLmN1c3RvbVNob3dcclxuICAgICAgLy8gICAgICAgICAgIGZlYXR1cmUuY3VzdG9tU2hvdyA9IHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlc1tmaWxlXS5jdXN0b21TaG93XHJcbiAgICAgIC8vICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgdGhpcy5mZWF0dXJlcy5nZXQoaWQpLmZlYXR1cmVzW2ZpbGVdID0gZmVhdHVyZVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgZWxzZSB7XHJcbiAgICAgIC8vICAgICAgIGxldCBvYmplY3QgPSB7fVxyXG4gICAgICAvLyAgICAgICBvYmplY3RbZmlsZV0gPSBmZWF0dXJlXHJcbiAgICAgIC8vICAgICAgIHRoaXMuZmVhdHVyZXMuZ2V0KGlkKS5mZWF0dXJlcyA9IG9iamVjdFxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgLy8gICAgIGxldCBvYmplY3QgPSB7fVxyXG4gICAgICAvLyAgICAgb2JqZWN0W2ZpbGVdID0gZmVhdHVyZVxyXG4gICAgICAvLyAgICAgdGhpcy5mZWF0dXJlcy5zZXQoaWQsIHsgZmVhdHVyZXM6IG9iamVjdCB9KVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gICBpZiAoIWZlYXR1cmUuY3VzdG9tQ29sb3IpIHtcclxuICAgICAgLy8gICAgIGZlYXR1cmUuY3VzdG9tQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmZmZmZmJylcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH0pXHJcbiAgICAvLyAvLyBjb25zb2xlLmxvZyh0aWxlc2V0KVxyXG4gICAgLy8gaWYgKHRoaXMudHlwZSA9PT0gJ2JpbScpIHtcclxuICAgIC8vICAgY29uc3Qgc2V0VGlsZXNldFN0eWxlID0gKGYpID0+IHtcclxuICAgIC8vICAgICBpZiAodGlsZXNldC5zdHlsZSkge1xyXG4gICAgLy8gICAgICAgLy8gdGlsZXNldC5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgLy8gICAgICAgLy8gICBjb2xvcjoge1xyXG4gICAgLy8gICAgICAgLy8gICAgIGNvbmRpdGlvbnM6IFtcclxuICAgIC8vICAgICAgIC8vICAgICAgIFsnJHtuYW1lfSA9PT1cIuWvueixoTA3NFwiICcsICdjb2xvcihcInJlZFwiKSddLCAvL+espuWQiOadoeS7tumhuVxyXG4gICAgLy8gICAgICAgLy8gICAgICAgWyd0cnVlJywgJ3JnYmEoMjU1LDI1NSwyNTUsMSknXSAvL+WFtuS7lumhuVxyXG4gICAgLy8gICAgICAgLy8gICAgIF1cclxuICAgIC8vICAgICAgIC8vICAgfVxyXG4gICAgLy8gICAgICAgLy8gfSlcclxuICAgIC8vICAgICAgIC8vIHRpbGVzZXQudGlsZUxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzZXRUaWxlc2V0U3R5bGUpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKGYpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgdGlsZXNldC50aWxlTG9hZC5hZGRFdmVudExpc3RlbmVyKHNldFRpbGVzZXRTdHlsZSlcclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eS5fcm9vdC5vcmlnaW5hbFRyYW5zZm9ybSA9IHsgLi4udGhpcy5lbnRpdHkuX3Jvb3QudHJhbnNmb3JtIH1cclxuICAgIHRoaXMuZW50aXR5LmlkID0gdGhpcy5vcHRpb25zLmlkIHx8IHRoaXMucmFuZG9tU3RyaW5nKClcclxuICAgIHRoaXMuZW50aXR5LnR5cGUgPSB0aGlzLnR5cGVcclxuICAgIC8vIHRoaXMuZWRpdE9iaiA9IG5ldyBFZGl0QjNETSh0aGlzLnNkaywgdGhpcy5lbnRpdHkpXHJcblxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRpbGVzZXQpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbiAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMucG9zaXRpb24pICE9IFwie31cIlxyXG4gICAgICAmJiAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID09PSAwKSAmJiAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID09PSAwKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID09IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgfHwgMFxyXG4gICAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XHJcbiAgICAgIGlmICh0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm0pIHtcclxuICAgICAgICBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oeyB4OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTJdLCB5OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTNdLCB6OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTRdIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbnRpdHkub3JpZ2luYWwgPSB7XHJcbiAgICAgICAgbG5nOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSksIC8vIOe7j+W6plxyXG4gICAgICAgIGxhdDogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSksIC8vIOe6rOW6plxyXG4gICAgICAgIGhlaWdodDogY2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIGxldCBtID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQpKVxyXG4gICAgICBjb25zdCBzY2FsZSA9IENlc2l1bS5NYXRyaXg0LmZyb21Vbmlmb3JtU2NhbGUodGhpcy5vbGREYXRhLnNjYWxlKTtcclxuICAgICAgaWYgKHRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybSkge1xyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG0sIHNjYWxlLCB0aGlzLmVudGl0eS5fcm9vdC50cmFuc2Zvcm0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sbmcgPSB0aGlzLm9sZERhdGEubG5nXHJcbiAgICAgIHRoaXMubGF0ID0gdGhpcy5vbGREYXRhLmxhdFxyXG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMub2xkRGF0YS5oZWlnaHRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB7fVxyXG4gICAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XHJcbiAgICAgIGlmICh0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm0pIHtcclxuICAgICAgICBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oeyB4OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTJdLCB5OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTNdLCB6OiB0aGlzLnRpbGVzZXQucm9vdC50cmFuc2Zvcm1bMTRdIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbnRpdHkub3JpZ2luYWwgPSB7XHJcbiAgICAgICAgbG5nOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSksXHJcbiAgICAgICAgbGF0OiB0aGlzLm9sZERhdGEubGF0ID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSksXHJcbiAgICAgICAgaGVpZ2h0OiBjYXJ0b2dyYXBoaWMuaGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG5nID0gdGhpcy5vbGREYXRhLmxuZyA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubG9uZ2l0dWRlKTsgLy8g57uP5bqmXHJcbiAgICAgIHRoaXMubGF0ID0gdGhpcy5vbGREYXRhLmxhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpOyAvLyDnuqzluqZcclxuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9sZERhdGEuaGVpZ2h0ID0gY2FydG9ncmFwaGljLmhlaWdodDsgLy8g6auY5bqmXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2NhbGUgPSB0aGlzLm9sZERhdGEuc2NhbGVcclxuICAgIHRoaXMucm9sbCA9IHRoaXMub2xkRGF0YS5yb2xsXHJcbiAgICB0aGlzLmhlYWRpbmcgPSB0aGlzLm9sZERhdGEuaGVhZGluZ1xyXG4gICAgdGhpcy5waXRjaCA9IHRoaXMub2xkRGF0YS5waXRjaFxyXG4gICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0aGlzLm9sZERhdGEudHJhbnNwYXJlbmN5XHJcblxyXG4gICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG5cclxuICAgIHJlZ01vdmVDYWxsYmFjayh0aGlzLmVudGl0eS5pZCwgdGhpcy5tb3VzZU1vdmVDQiwgdGhpcylcclxuXHJcblxyXG4gICAgLy8gdGhpcy5lbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQodGlsZXNldCk7XHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uICYmIEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucy5wb3NpdGlvbikgIT0gXCJ7fVwiKSB7XHJcbiAgICAvLyAgIGxldCBtID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQpKVxyXG4gICAgLy8gICBjb25zdCBzY2FsZSA9IENlc2l1bS5NYXRyaXg0LmZyb21Vbmlmb3JtU2NhbGUodGhpcy5vbGREYXRhLnNjYWxlKTtcclxuICAgIC8vICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkobSwgc2NhbGUsIHRoaXMuZW50aXR5Ll9yb290LnRyYW5zZm9ybSlcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB7fVxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5sbmcgPSB0aGlzLm9sZERhdGEubG5nXHJcbiAgICAvLyB0aGlzLmxhdCA9IHRoaXMub2xkRGF0YS5sYXRcclxuICAgIC8vIHRoaXMuaGVpZ2h0ID0gdGhpcy5vbGREYXRhLmhlaWdodFxyXG4gICAgLy8gdGhpcy5zY2FsZSA9IHRoaXMub2xkRGF0YS5zY2FsZVxyXG4gICAgLy8gdGhpcy5yb2xsID0gdGhpcy5vbGREYXRhLnJvbGxcclxuICAgIC8vIHRoaXMuaGVhZGluZyA9IHRoaXMub2xkRGF0YS5oZWFkaW5nXHJcbiAgICAvLyB0aGlzLnBpdGNoID0gdGhpcy5vbGREYXRhLnBpdGNoXHJcbiAgICAvLyB0aGlzLnRyYW5zcGFyZW5jeSA9IHRoaXMub2xkRGF0YS50cmFuc3BhcmVuY3lcclxuXHJcbiAgICAvLyByZWdNb3ZlQ2FsbGJhY2sodGhpcy5lbnRpdHkuaWQsIHRoaXMubW91c2VNb3ZlQ0IsIHRoaXMpXHJcblxyXG4gICAgLy8gdGhpcy5lZGl0T2JqID0gbmV3IEVkaXRCM0RNKHRoaXMuc2RrLCB0aGlzLmVudGl0eSlcclxuICAgIC8vIHRoaXMuZWRpdE9iai50cmFuc2Zvcm1DYWxsQmFjayA9IHRoaXMucm90YXRpb25FZGl0aW5nQ2FsbEJhY2tcclxuICAgIC8vIHRpbGVzZXQucmVhZHlQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZCh0aWxlc2V0KTtcclxuXHJcbiAgICAvLyB9KVxyXG4gICAgLy8gbGV0IHggPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQobmV3IENlc2l1bS5DZXNpdW0zRFRpbGVzZXQoe1xyXG4gICAgLy8gICB1cmw6IHVybFxyXG4gICAgLy8gfSkpO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKHgpXHJcbiAgICAvLyAgIHRoaXMuc2RrLnZpZXdlci5mbHlUbyh0aGlzLmVudGl0eSlcclxuICAgIC8vIH0sIDMwMDApO1xyXG4gIH1cclxuXHJcbiAgLy8gdGVzdCgpIHtcclxuICAvLyAgIGxldCBoZWlnaHRzdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gIC8vICAgICBjb2xvcjoge1xyXG4gIC8vICAgICAgIGNvbmRpdGlvbnM6IFtcclxuICAvLyAgICAgICAgIFtcIk51bWJlcigke2hlaWdodH0pPj0zMDBcIiwgXCJyZ2JhKDQ1LDAsNzUsMC41KVwiXSxcclxuICAvLyAgICAgICAgIFtcIk51bWJlcigke2hlaWdodH0pPj0yMDBcIiwgXCJyZ2IoMTAyLDcxLDE1MSlcIl0sXHJcbiAgLy8gICAgICAgICBbXCJOdW1iZXIoJHtoZWlnaHR9KT49MTAwXCIsIFwicmdiKDE3MCwxNjIsMjA0KVwiXSxcclxuICAvLyAgICAgICAgIFtcIk51bWJlcigke2hlaWdodH0pPj01MFwiLCBcInJnYigyMjQsMjI2LDIzOClcIl0sXHJcbiAgLy8gICAgICAgICBbXCJOdW1iZXIoJHtoZWlnaHR9KT49MjVcIiwgXCJyZ2IoMjUyLDIzMCwgMjAwKVwiXSxcclxuICAvLyAgICAgICAgIFtcIk51bWJlcigke2hlaWdodH0pPj0xMFwiLCBcInJnYigyNDgsMTc2LDg3KVwiXSxcclxuICAvLyAgICAgICAgIFtcIk51bWJlcigke2hlaWdodH0pPj01XCIsIFwicmdiKDE5OCwgMTA2LDExKVwiXSxcclxuICAvLyAgICAgICAgIFtcImlzTmFOKE51bWJlcigke2hlaWdodH0pKVwiLCBcInJnYigyNTUsIDI1NSwgMjU1KVwiXSxcclxuICAvLyAgICAgICAgIFtcInRydWVcIiwgXCJyZ2IoMTI3LDU5LDgpXCJdXHJcbiAgLy8gICAgICAgXVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMuZW50aXR5LnN0eWxlID0gaGVpZ2h0c3R5bGU7XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgc3VwZXIucmVtb3ZlKClcclxuICAgIHRoaXMuZWRpdE9iai5kZXN0cm95KClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLmVudGl0eSk7XHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmx5VG8oKSB7XHJcbiAgICBzdXBlci5mbHlUbygpXHJcbiAgfVxyXG5cclxuXHJcbiAgb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoKVxyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKCkge1xyXG4gICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCBcIlwiXHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb24oKSB7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XHJcbiAgICBpZiAodGhpcy50aWxlc2V0LnJvb3QudHJhbnNmb3JtKSB7XHJcbiAgICAgIGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbih7IHg6IHRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybVsxMl0sIHk6IHRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybVsxM10sIHo6IHRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybVsxNF0gfSlcclxuICAgIH1cclxuICAgIGxldCBsbmcgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSArIDAuMDAwMDAwMDA2NjM4MTQpO1xyXG4gICAgbGV0IGxhdCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUgKyAwLjAwMDAwMDI1MTM3ODM1KTtcclxuICAgIGlmICh0aGlzLm5ld0RhdGEubG5nICYmIHRoaXMubmV3RGF0YS5sYXQgJiYgdGhpcy5uZXdEYXRhLmhlaWdodCkge1xyXG4gICAgICByZXR1cm4geyBsbmc6IHRoaXMubmV3RGF0YS5sbmcsIGxhdDogdGhpcy5uZXdEYXRhLmxhdCwgaGVpZ2h0OiB0aGlzLm5ld0RhdGEuaGVpZ2h0IH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBsbmc6IGxuZywgbGF0OiBsYXQsIGhlaWdodDogY2FydG9ncmFwaGljLmhlaWdodCAtIDIuMTkxMDQ2MTEwNDMyMzQgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHBvc2l0aW9uKHApIHtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDmiZPlvIDmqKHlnovml4vovazlip/og71cclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqIEBtZXRob2RPZiBTb3VyY2VcclxuICAgKiAqL1xyXG4gIHNldCByb3RhdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoIXRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybSkge1xyXG4gICAgICBpZiAod2luZG93LkVMRU1FTlQpIHtcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6K+l5qih5Z6L5LiN5pSv5oyB56e75Yqo5ZKM5peL6L2s77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKCfor6XmqKHlnovkuI3mlK/mjIHnp7vliqjlkozml4vovazvvIEnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubmV3RGF0YS5sbmcsIGxhdDogdGhpcy5uZXdEYXRhLmxhdCwgYWx0OiB0aGlzLm5ld0RhdGEuaGVpZ2h0IH1cclxuICAgICAgdGhpcy5lZGl0T2JqLnVwZGF0ZSgpXHJcbiAgICAgIHRoaXMuZWRpdE9iai5lZGl0UnRhdGlvbigpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg6I635Y+W5qih5Z6L5peL6L2s54q25oCBXHJcbiAgICogQG1ldGhvZCByb3RhdGlvbkVkaXRpbmdcclxuICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgKiBAbWV0aG9kT2YgU291cmNlXHJcblxyXG4gICAqICovXHJcbiAgZ2V0IHJvdGF0aW9uRWRpdGluZygpIHtcclxuICAgIGlmICh0aGlzLmVkaXRPYmouZ2V0QWN0aXZlU3RhdGUoKSA9PT0gJ3J0YXRpb24nKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+aooeWei+WKn+iDvVxyXG4gICAqXHJcbiAgICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICAqQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMudGlsZXNldC5yb290LnRyYW5zZm9ybSkge1xyXG4gICAgICBpZiAod2luZG93LkVMRU1FTlQpIHtcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAn6K+l5qih5Z6L5LiN5pSv5oyB56e75Yqo5ZKM5peL6L2s77yBJyxcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKCfor6XmqKHlnovkuI3mlK/mjIHnp7vliqjlkozml4vovazvvIEnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubmV3RGF0YS5sbmcsIGxhdDogdGhpcy5uZXdEYXRhLmxhdCwgYWx0OiB0aGlzLm5ld0RhdGEuaGVpZ2h0IH1cclxuICAgICAgdGhpcy5lZGl0T2JqLnVwZGF0ZSgpXHJcbiAgICAgIHRoaXMuZWRpdE9iai5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIGlmICh0aGlzLmVkaXRPYmouZ2V0QWN0aXZlU3RhdGUoKSA9PT0gJ3RyYW5zbGF0aW9uYWwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8v5bmz56e75pe277yM5Z2Q5qCH5L+h5oGv5Y+Y5YyW55qE5Zue6LCDXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZ0NhbGxCYWNrKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmdDYWxsQmFjaygpIHtcclxuICB9XHJcblxyXG4gIC8v5peL6L2s5pe277yM5Z2Q5qCH5L+h5oGv5Y+Y5YyW55qE5Zue6LCDXHJcbiAgc2V0IHJvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9yb3RhdGlvbkVkaXRpbmdDYWxsQmFjayA9IGNhbGxiYWNrXHJcbiAgfVxyXG5cclxuICBnZXQgcm90YXRpb25FZGl0aW5nQ2FsbEJhY2soKSB7XHJcbiAgICByZXR1cm4gKHBhcmFtcywgc3RhdGUpID0+IHtcclxuICAgICAgdGhpcy5sbmcgPSBwYXJhbXMucG9zaXRpb24ubG5nXHJcbiAgICAgIHRoaXMubGF0ID0gcGFyYW1zLnBvc2l0aW9uLmxhdFxyXG4gICAgICB0aGlzLmhlaWdodCA9IHBhcmFtcy5wb3NpdGlvbi5hbHRcclxuICAgICAgdGhpcy5yb2xsID0gcGFyYW1zLnJvdGF0ZS54XHJcbiAgICAgIHRoaXMuaGVhZGluZyA9IHBhcmFtcy5yb3RhdGUueVxyXG4gICAgICB0aGlzLnBpdGNoID0gcGFyYW1zLnJvdGF0ZS56XHJcbiAgICAgIC8vIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrICYmIHRoaXMuX3JvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKHRoaXMuZWRpdE9iai5fcGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7IH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5zaG93ID0gdilcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bikge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuLmNoZWNrZWQgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAmJiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyAmJiB0aGlzLmxhYmVsKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdlxyXG4gICAgICB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGxldCBjZW50ZXIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLmNlbnRlciwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIGxldCBjaXJjbGUgPSB0dXJmLmNpcmNsZShbY2VudGVyLmxuZywgY2VudGVyLmxhdF0sIHRoaXMuZW50aXR5LmJvdW5kaW5nU3BoZXJlLnJhZGl1cyAvIDEwMDAsIHsgc3RlcHM6IDM2MCwgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRpdHldIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICAgICAgaWYgKGVudGl0eS50eXBlID09PSAnQmlsbGJvYXJkT2JqZWN0JyAmJiBlbnRpdHkuaGVpZ2h0TW9kZSA9PSAzKSB7XHJcbiAgICAgICAgICAgIGxldCBwdCA9IHR1cmYucG9pbnQoW2VudGl0eS5sbmcsIGVudGl0eS5sYXRdKTtcclxuICAgICAgICAgICAgaWYgKHR1cmYuYm9vbGVhblBvaW50SW5Qb2x5Z29uKHB0LCBjaXJjbGUpKSB7XHJcbiAgICAgICAgICAgICAgZW50aXR5LnVwZGF0ZUhlaWdodCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZW50aXR5LmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgZW50aXR5LmxhYmVsLnNob3cgPSBlbnRpdHkubGFiZWwuc2hvd1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIuWPguaVsOW/hemhu+S4umJvb2xlYW5cIilcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VUaWxlc2V0XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBbEJBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUF2QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdFVBO0FBQUE7QUFBQTtBQUFBO0FBeVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXBDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZ0JBO0FBQUE7QUFBQTtBQU5BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFiQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFlQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/BaseTileset/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BaseSource/index.js": /*!******************************************!*\ !*** ./src/Obj/Base/BaseSource/index.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_4___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-11-20 18:31\r\n * @description:index\r\n * @update: 2023-11-20 18:31\r\n */\n\n\n\nvar BaseSource = /*#__PURE__*/function (_Base) {\n function BaseSource(sdk, options) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BaseSource);\n _this = _callSuper(this, BaseSource, [sdk, options]);\n _this.sdk.addIncetance(_this.options.id, _this);\n if (_this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_8__[\"setSplitDirection\"])(0, _this.options.id);\n }\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BaseSource, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BaseSource, [{\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(BaseSource, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_7__[\"getHost\"])();\n }\n }, {\n key: \"requestResource\",\n value: function requestResource() {\n var url = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) url = this.options.host + '/data/service/load-compact-service';else url = this.options.host + '/yjearth4.0/data/service/load-compact-service';\n return fetch(url, {\n method: 'post',\n body: JSON.stringify({\n source_id: this.options.id\n }),\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_7__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_7__[\"getToken\"])()\n }\n });\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseSource);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmFzZVNvdXJjZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXNlU291cmNlL2luZGV4LmpzPzMwMjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTExLTIwIDE4OjMxXHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMTEtMjAgMTg6MzFcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQge2dldEhvc3QsIGdldFRva2VufSBmcm9tIFwiLi4vLi4vLi4vb25cIjtcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuXCI7XHJcblxyXG5jbGFzcyBCYXNlU291cmNlIGV4dGVuZHMgQmFzZSB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zKSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWUoKSB7XHJcbiAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzb3VyY2UoKSB7XHJcbiAgICBsZXQgdXJsID0gXCJcIlxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ob3N0LmVuZHNXaXRoKFwieWplYXJ0aDQuMFwiKSlcclxuICAgICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL2RhdGEvc2VydmljZS9sb2FkLWNvbXBhY3Qtc2VydmljZSdcclxuICAgIGVsc2VcclxuICAgICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL3lqZWFydGg0LjAvZGF0YS9zZXJ2aWNlL2xvYWQtY29tcGFjdC1zZXJ2aWNlJ1xyXG4gICAgcmV0dXJuIGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcclxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe3NvdXJjZV9pZDogdGhpcy5vcHRpb25zLmlkfSksXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VTb3VyY2VcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/BaseSource/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BatchModel/_element.js": /*!*********************************************!*\ !*** ./src/Obj/Base/BatchModel/_element.js ***! \*********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u6DFB\\u52A0\\u65B9\\u5F0F\\n
\\n
\\n
\\n \\u95F4\\u8DDD\\n
\\n \\n \\u7C73\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmF0Y2hNb2RlbC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXRjaE1vZGVsL19lbGVtZW50LmpzP2VjZTkiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbCgpIHtcclxuICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBhZGQtdHlwZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPua3u+WKoOaWueW8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtdHlwZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumXtOi3nTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5OTk5XCIgQG1vZGVsPVwic3BhY2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPuexszwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQW9CQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BatchModel/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BatchModel/index.js": /*!******************************************!*\ !*** ./src/Obj/Base/BatchModel/index.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BatchModel/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _BaseSource_BaseModel_Model__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../BaseSource/BaseModel/Model */ \"./src/Obj/Base/BaseSource/BaseModel/Model/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Draw_drawPolyline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Draw/drawPolyline */ \"./src/Draw/drawPolyline.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n/* harmony import */ var _Draw_drawThreeRect__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Draw/drawThreeRect */ \"./src/Draw/drawThreeRect.js\");\n/* harmony import */ var _Draw_drawPoint__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Draw/drawPoint */ \"./src/Draw/drawPoint.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 批量模型\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar BatchModel = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 批量模型\r\n * @param options {object} 批量模型属性\r\n * @param options.name=未命名对象 {string} 名称\r\n * @param options.type=polygon {string} 线类型(line,polygon)\r\n * @param options.url=polygon {string} 线类型(line,polygon,point)\r\n * @param options.spacing= {number} 间距\r\n * @param options.show=true {boolean}\r\n * @param Dialog {object} 弹框对象\r\n * @param Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function BatchModel(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _Dialog = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, BatchModel);\n _this2 = _callSuper(this, BatchModel, [sdk, options]);\n _this2.viewer = _this2.sdk.viewer;\n _this2.options.name = options.name || '批量模型';\n _this2.options.type = options.type || '面';\n _this2.options.url = options.url || '';\n _this2.options.spacing = options.spacing * 1 || 50;\n _this2.options.positions = options.positions || [];\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.callback = callback;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n _this2._elms = {};\n _this2.pointArr = [];\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n var tools = new _Tools__WEBPACK_IMPORTED_MODULE_14__[\"default\"](sdk);\n // BatchModel.computeDis(this)\n // if (this.options.positions.length > 0 || this.options.positions.lng) {\n if (_this2.options.spacing < 0 || options.spacing * 1 === 0) {\n tools.message({\n type: 'warning',\n text: '请输入正确的间距!'\n });\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(_this2);\n }\n if (options.type && options.spacing != undefined || options.type == '点') {\n // BatchModel.computeDis(this)\n\n var Draw;\n switch (options.type) {\n case '点':\n Draw = new _Draw_drawPoint__WEBPACK_IMPORTED_MODULE_21__[\"default\"](_this2.sdk);\n break;\n case '线':\n Draw = new _Draw_drawPolyline__WEBPACK_IMPORTED_MODULE_18__[\"default\"](_this2.sdk);\n break;\n case '面':\n Draw = new _Draw_drawThreeRect__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_this2.sdk);\n break;\n default:\n break;\n }\n Draw && Draw.start(function (a, positions) {\n _this2.options.positions = positions;\n //判断范围是否过大\n if (options.type == '面') {\n var posi = positions.map(function (v) {\n return Cesium.Cartesian3.fromDegrees(v.lng, v.lat);\n });\n var dis1 = Cesium.Cartesian3.distance(posi[0], posi[1]);\n var dis2 = Cesium.Cartesian3.distance(posi[1], posi[2]);\n var num1 = dis1 / _this2.options.spacing;\n var num2 = dis2 / _this2.options.spacing;\n if (num1 * num2 > 100) {\n tools.message({\n type: 'warning',\n text: '数量大于100,请重新绘制'\n });\n return;\n }\n } else if (options.type == '线') {\n var _posi = positions.map(function (v) {\n return Cesium.Cartesian3.fromDegrees(v.lng, v.lat);\n });\n var dis = 0;\n for (var i = 0; i < _posi.length - 2; i++) {\n dis += Cesium.Cartesian3.distance(_posi[i], _posi[i + 1]);\n }\n if (dis / _this2.options.spacing > 100) {\n tools.message({\n type: 'warning',\n text: '数量大于100,请重新绘制'\n });\n return;\n }\n }\n // this.callback(this.options);\n (_this2.options.positions.length || _this2.options.positions.lng) && BatchModel.computeDis(_this2);\n });\n } else {\n _this2.edit(true);\n }\n return _this2;\n }\n\n // 计算距离\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(BatchModel, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(BatchModel, [{\n key: \"linePoint\",\n value: function () {\n var _linePoint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee(polygonPositions, spacing) {\n var boundaryPoints, boundaryAngle, i, start, end, segmentLength, segments, j, ratio, point, cartographic, longitude, latitude, height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n boundaryPoints = [];\n boundaryAngle = [];\n i = 0;\n case 3:\n if (!(i < polygonPositions.length - 1)) {\n _context.next = 27;\n break;\n }\n start = polygonPositions[i];\n end = polygonPositions[(i + 1) % polygonPositions.length];\n segmentLength = Cesium.Cartesian3.distance(start, end);\n segments = Math.ceil(segmentLength / spacing);\n j = 0;\n case 9:\n if (!(j <= segments)) {\n _context.next = 24;\n break;\n }\n ratio = j / segments;\n point = Cesium.Cartesian3.lerp(start, end, ratio, new Cesium.Cartesian3());\n cartographic = Cesium.Cartographic.fromCartesian(point // Cartesian3对象 {x, y, z}\n );\n longitude = Cesium.Math.toDegrees(cartographic.longitude);\n latitude = Cesium.Math.toDegrees(cartographic.latitude);\n _context.next = 17;\n return this.getClampToHeight({\n lng: longitude,\n lat: latitude\n });\n case 17:\n height = _context.sent;\n point = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);\n boundaryPoints.push(point);\n if (j != segments || i == polygonPositions.length - 2) {\n boundaryAngle.push(this.calculateRoadAngle(start, end));\n }\n case 21:\n j++;\n _context.next = 9;\n break;\n case 24:\n i++;\n _context.next = 3;\n break;\n case 27:\n return _context.abrupt(\"return\", [_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(new Set(boundaryPoints.map(function (p) {\n return \"\".concat(p.x, \",\").concat(p.y, \",\").concat(p.z);\n }))).map(function (str) {\n var _str$split$map = str.split(',').map(Number),\n _str$split$map2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_str$split$map, 3),\n x = _str$split$map2[0],\n y = _str$split$map2[1],\n z = _str$split$map2[2];\n return new Cesium.Cartesian3(x, y, z);\n }), boundaryAngle]);\n case 28:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function linePoint(_x, _x2) {\n return _linePoint.apply(this, arguments);\n }\n return linePoint;\n }()\n }, {\n key: \"calculateRoadAngle\",\n value: function calculateRoadAngle(startPoint, endPoint) {\n var normal = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal(startPoint);\n var enuMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(startPoint, undefined, normal);\n var inverseMatrix = Cesium.Matrix4.inverse(enuMatrix, new Cesium.Matrix4());\n var localEnd = Cesium.Matrix4.multiplyByPoint(inverseMatrix, endPoint, new Cesium.Cartesian3());\n var horizontalVec = new Cesium.Cartesian2(localEnd.x, localEnd.y);\n Cesium.Cartesian2.normalize(horizontalVec, horizontalVec);\n var north = new Cesium.Cartesian2(1, 0);\n var angle = Cesium.Cartesian2.angleBetween(north, horizontalVec);\n angle = Cesium.Math.toDegrees(angle);\n var cross = Cesium.Cartesian2.cross(north, horizontalVec, new Cesium.Cartesian2());\n // return cross < 0 ? angle : - angle;\n return cross < 0 ? -angle : angle;\n }\n }, {\n key: \"generateInterpolatedPoints\",\n value: function generateInterpolatedPoints(polygonPositions, spacing) {\n // 1. 边界点插值\n var boundaryPoints = [];\n for (var i = 0; i < polygonPositions.length; i++) {\n var start = polygonPositions[i];\n var end = polygonPositions[(i + 1) % polygonPositions.length];\n var segmentLength = Cesium.Cartesian3.distance(start, end);\n var segments = Math.ceil(segmentLength / spacing);\n for (var j = 0; j <= segments; j++) {\n var ratio = j / segments;\n var point = Cesium.Cartesian3.lerp(start, end, ratio, new Cesium.Cartesian3());\n boundaryPoints.push(point);\n }\n }\n\n // 2. 内部网格生成\n var extent = this.computePolygonExtent(polygonPositions);\n var result = this.createGridFromBBox(extent, this.options.spacing);\n // const extent = Cesium.Rectangle.fromCartesianArray(polygonPositions);\n\n var gridPoints = [];\n // const polygon = new Cesium.PolygonHierarchy(polygonPositions);\n var polygon = [];\n this.options.positions.forEach(function (item) {\n polygon.push([item.lng, item.lat]);\n });\n polygon.push(polygon[0]);\n for (var x = extent.west; x <= extent.east; x += result.lonStep) {\n for (var y = extent.south; y <= extent.north; y += result.latStep) {\n var position = Cesium.Cartesian3.fromDegrees(x, y);\n var _point = turf.point([x, y]);\n var polygonTurf = turf.polygon([polygon]);\n var isInside = turf.booleanPointInPolygon(_point, polygonTurf);\n isInside && gridPoints.push(position);\n }\n }\n\n // 3. 合并结果并去重\n // return [...new Set([...boundaryPoints, ...gridPoints]\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(new Set([].concat(gridPoints).map(function (p) {\n return \"\".concat(p.x, \",\").concat(p.y, \",\").concat(p.z);\n }))).map(function (str) {\n var _str$split$map3 = str.split(',').map(Number),\n _str$split$map4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_str$split$map3, 3),\n x = _str$split$map4[0],\n y = _str$split$map4[1],\n z = _str$split$map4[2];\n return new Cesium.Cartesian3(x, y, z);\n });\n }\n }, {\n key: \"createGridFromBBox\",\n value: function createGridFromBBox(bbox, spacing) {\n var earthRadius = 6378137; // WGS84椭球体长半轴\n // 计算经度方向网格数\n var lonDistance = Cesium.Cartesian3.distance(Cesium.Cartesian3.fromDegrees(bbox.west, (bbox.south + bbox.north) / 2, 0), Cesium.Cartesian3.fromDegrees(bbox.east, (bbox.south + bbox.north) / 2, 0));\n var lonCount = Math.ceil(lonDistance / spacing);\n\n // 计算纬度方向网格数\n var latDistance = Cesium.Cartesian3.distance(Cesium.Cartesian3.fromDegrees((bbox.west + bbox.east) / 2, bbox.south, 0), Cesium.Cartesian3.fromDegrees((bbox.west + bbox.east) / 2, bbox.north, 0));\n var latCount = Math.ceil(latDistance / spacing);\n // 生成网格线\n var lonStep = (bbox.east - bbox.west) / lonCount;\n var latStep = (bbox.north - bbox.south) / latCount;\n return {\n lonStep: lonStep,\n latStep: latStep\n };\n }\n }, {\n key: \"computePolygonExtent\",\n value: function computePolygonExtent(positions) {\n // 计算多边形经纬度范围\n var cartographics = positions.map(function (p) {\n return Cesium.Cartographic.fromCartesian(p);\n });\n var lons = cartographics.map(function (c) {\n return Cesium.Math.toDegrees(c.longitude);\n });\n var lats = cartographics.map(function (c) {\n return Cesium.Math.toDegrees(c.latitude);\n });\n return {\n west: Math.min.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(lons)),\n east: Math.max.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(lons)),\n south: Math.min.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(lats)),\n north: Math.max.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(lats))\n };\n }\n }, {\n key: \"computedArea\",\n value: function () {\n var _computedArea = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(polygonPositions, spacing) {\n var dis12, dis23, vec12, vec23, num12, num23, line1, i, line2, _i, allPoints, _i2, j;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n dis12 = Cesium.Cartesian3.distance(polygonPositions[0], polygonPositions[1]);\n dis23 = Cesium.Cartesian3.distance(polygonPositions[1], polygonPositions[2]);\n vec12 = Cesium.Cartesian3.subtract(polygonPositions[1], polygonPositions[0], new Cesium.Cartesian3());\n vec23 = Cesium.Cartesian3.subtract(polygonPositions[2], polygonPositions[1], new Cesium.Cartesian3());\n num12 = Math.ceil(dis12 / spacing);\n num23 = Math.ceil(dis23 / spacing);\n line1 = [];\n i = 0;\n case 8:\n if (!(i < num12)) {\n _context2.next = 17;\n break;\n }\n _context2.t0 = line1;\n _context2.next = 12;\n return this.calculatePointB(polygonPositions[0], polygonPositions[1], i * spacing);\n case 12:\n _context2.t1 = _context2.sent;\n _context2.t0.push.call(_context2.t0, _context2.t1);\n case 14:\n i++;\n _context2.next = 8;\n break;\n case 17:\n line2 = [];\n _i = 0;\n case 19:\n if (!(_i < num12)) {\n _context2.next = 28;\n break;\n }\n _context2.t2 = line2;\n _context2.next = 23;\n return this.calculatePointB(polygonPositions[3], polygonPositions[2], _i * spacing);\n case 23:\n _context2.t3 = _context2.sent;\n _context2.t2.push.call(_context2.t2, _context2.t3);\n case 25:\n _i++;\n _context2.next = 19;\n break;\n case 28:\n allPoints = [];\n _i2 = 0;\n case 30:\n if (!(_i2 < line1.length)) {\n _context2.next = 44;\n break;\n }\n j = 0;\n case 32:\n if (!(j < num23)) {\n _context2.next = 41;\n break;\n }\n _context2.t4 = allPoints;\n _context2.next = 36;\n return this.calculatePointB(line1[_i2], line2[_i2], j * spacing);\n case 36:\n _context2.t5 = _context2.sent;\n _context2.t4.push.call(_context2.t4, _context2.t5);\n case 38:\n j++;\n _context2.next = 32;\n break;\n case 41:\n _i2++;\n _context2.next = 30;\n break;\n case 44:\n return _context2.abrupt(\"return\", allPoints);\n case 45:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function computedArea(_x3, _x4) {\n return _computedArea.apply(this, arguments);\n }\n return computedArea;\n }()\n }, {\n key: \"calculatePointB\",\n value: function () {\n var _calculatePointB = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3(pointA, pointC, distance) {\n var vectorAC, lengthAC, unitVector, scaledVector, pointB, cartographic, longitude, latitude, height, point;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n // 将输入坐标转换为Cartesian3类型\n // const pointA = Cesium.Cartesian3.fromDegrees(a.longitude, a.latitude, a.height);\n // const pointC = Cesium.Cartesian3.fromDegrees(c.longitude, c.latitude, c.height);\n // 计算向量AC\n vectorAC = Cesium.Cartesian3.subtract(pointC, pointA, new Cesium.Cartesian3()); // 计算向量AC的长度\n lengthAC = Cesium.Cartesian3.magnitude(vectorAC); // 归一化向量AC\n unitVector = Cesium.Cartesian3.normalize(vectorAC, new Cesium.Cartesian3()); // 计算点B坐标\n scaledVector = Cesium.Cartesian3.multiplyByScalar(unitVector, distance, new Cesium.Cartesian3());\n pointB = Cesium.Cartesian3.add(pointA, scaledVector, new Cesium.Cartesian3());\n cartographic = Cesium.Cartographic.fromCartesian(pointB // Cartesian3对象 {x, y, z}\n );\n longitude = Cesium.Math.toDegrees(cartographic.longitude);\n latitude = Cesium.Math.toDegrees(cartographic.latitude);\n _context3.next = 10;\n return this.getClampToHeight({\n lng: longitude,\n lat: latitude\n });\n case 10:\n height = _context3.sent;\n point = Cesium.Cartesian3.fromDegrees(longitude, latitude, height); // 转换回经纬度\n // const cartographic = Cesium.Cartographic.fromCartesian(pointB);\n // return {\n // longitude: Cesium.Math.toDegrees(cartographic.longitude),\n // latitude: Cesium.Math.toDegrees(cartographic.latitude),\n // height: cartographic.height\n // };\n // return pointB\n return _context3.abrupt(\"return\", point);\n case 13:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function calculatePointB(_x5, _x6, _x7) {\n return _calculatePointB.apply(this, arguments);\n }\n return calculatePointB;\n }()\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.options.show = v;\n for (var i = 0; i < this.pointArr.length; i++) {\n this.pointArr[i].show = v;\n }\n }\n }, {\n key: \"type\",\n get: function get() {\n return this.options.type;\n },\n set: function set(v) {\n this.options.type = v;\n this._elms.type && this._elms.type.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"spacing\",\n get: function get() {\n return this.options.spacing;\n },\n set: function set(v) {\n this.options.spacing = v;\n this._elms.spacing && this._elms.spacing.forEach(function (item) {\n item.value = v;\n });\n }\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n var _this3 = this;\n var state,\n _this,\n contentElm,\n all_elm,\n nameData,\n nameDataLegpObject,\n nameDataLegpElm,\n i,\n _args4 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n state = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context4.next = 33;\n break;\n }\n _context4.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk, this.originalOptions, {\n title: '默认模型参数设置',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this3.name = _this3.name.trim();\n if (!_this3.name) {\n // this.name = '未命名对象'\n _this3.name = '飞线';\n }\n var Draw;\n switch (_this3.options.type) {\n case '点':\n Draw = new _Draw_drawPoint__WEBPACK_IMPORTED_MODULE_21__[\"default\"](_this3.sdk);\n break;\n case '线':\n Draw = new _Draw_drawPolyline__WEBPACK_IMPORTED_MODULE_18__[\"default\"](_this3.sdk);\n break;\n case '面':\n Draw = new _Draw_drawThreeRect__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_this3.sdk);\n break;\n default:\n break;\n }\n Draw && Draw.start(function (a, positions) {\n _this3.options.positions = positions;\n // this.callback(this.options);\n (_this3.options.positions.length || _this3.options.positions.lng) && BatchModel.computeDis(_this3);\n });\n _this3.originalOptions = _this3.deepCopyObj(_this3.options);\n _this3._DialogObject.close();\n _this3.Dialog.confirmCallBack && _this3.Dialog.confirmCallBack(_this3.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_15__[\"syncData\"])(_this3.sdk, _this3.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(_this3.sdk, _this3.options.id);\n },\n // resetCallBack: () => {\n // this.reset()\n // console.log('22222')\n // this.Dialog.resetCallBack && this.Dialog.resetCallBack()\n // },\n // removeCallBack: () => {\n // console.log('33333')\n // this.Dialog.removeCallBack && this.Dialog.removeCallBack()\n // },\n closeCallBack: function closeCallBack() {\n _this3.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this3.Dialog.closeCallBack && _this3.Dialog.closeCallBack();\n },\n addFootElm: [{\n tagName: 'button',\n className: 'flipe-over-y',\n innerHTML: '重置',\n event: ['click', function () {\n _this3.reset();\n }]\n }]\n // showCallBack: (show) => {\n // this.show = show\n // this.Dialog.showCallBack && this.Dialog.showCallBack()\n // }\n }, true);\n case 7:\n this._DialogObject = _context4.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' flow-line-surface';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n // let waterColorPicker = new YJColorPicker({\n // el: contentElm.getElementsByClassName(\"flowLine-color\")[0],\n // size: 'mini',//颜色box类型\n // alpha: true,//是否开启透明度\n // defaultColor: this.color,\n // disabled: false,//是否禁止打开颜色选择器\n // openPickerAni: 'opacity',//打开颜色选择器动画\n // sure: (color) => {\n // this.color = color\n // },//点击确认按钮事件回调\n // clear: () => {\n // this.color = 'rgba(255,255,255,1)'\n // },//点击清空按钮事件回调\n // })\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n nameData = [{\n name: '点',\n value: '点'\n }, {\n name: '线',\n value: '线'\n }, {\n name: '面',\n value: '面'\n }];\n nameDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('add-type-box')[0], '.add-type');\n if (!nameDataLegpObject) {\n _context4.next = 31;\n break;\n }\n nameDataLegpObject.legp_search(nameData);\n nameDataLegpElm = this._DialogObject._element.content.getElementsByClassName('add-type')[0].getElementsByTagName('input')[0];\n this._elms.type = [nameDataLegpElm];\n nameDataLegpElm.value = this.options.type;\n i = 0;\n case 23:\n if (!(i < nameData.length)) {\n _context4.next = 30;\n break;\n }\n if (!(nameData[i].value === nameDataLegpElm.value)) {\n _context4.next = 27;\n break;\n }\n nameDataLegpObject.legp_searchActive(nameData[i].value);\n return _context4.abrupt(\"break\", 30);\n case 27:\n i++;\n _context4.next = 23;\n break;\n case 30:\n nameDataLegpElm.addEventListener('input', function () {\n for (var _i3 = 0; _i3 < nameData.length; _i3++) {\n if (nameData[_i3].value === nameDataLegpElm.value) {\n _this3.type = nameData[_i3].value;\n break;\n }\n }\n });\n case 31:\n _context4.next = 33;\n break;\n case 33:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"drawArea\",\n value: function drawArea() {}\n }, {\n key: \"reset\",\n value: function reset() {\n this.name = this.originalOptions.name;\n this.type = this.originalOptions.type;\n this.spacing = this.originalOptions.spacing;\n this.show = this.originalOptions.show;\n this.options.spacing = this.originalOptions.spacing;\n }\n\n /**\r\n * 飞到对应实体\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n i,\n a,\n BoundingSphere,\n _orientation,\n _args5 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n options = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeViewFollow\"])(this.sdk);\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n // if (!position.hasOwnProperty('alt')) {\n // position.alt = await this.getClampToHeight(position)\n // }\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n } else {\n positionArray = [];\n if (this.options.positions.length > 0) {\n for (i = 0; i < this.options.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt);\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-20.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n } else if (this.options.positions.lng) {\n _orientation = {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n };\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.positions.lng, this.options.positions.lat, this.options.positions.alt + 100)\n // orientation: orientation\n });\n }\n }\n case 5:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 删除\r\n */\n )\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee6() {\n var i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n for (i = 0; i < this.pointArr.length; i++) {\n this.pointArr[i].remove();\n }\n this.pointArr = [];\n this.positions = [];\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context6.next = 7;\n return this.sdk.removeIncetance(this.options.id);\n case 7:\n _context6.next = 9;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_15__[\"syncData\"])(this.sdk, this.options.id);\n case 9:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"computeDis\",\n value: function () {\n var _computeDis = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee7(that) {\n var fromDegreesArray, arr, posiArr, array, height, params;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n fromDegreesArray = [];\n posiArr = [];\n array = [];\n if (!(that.options.type == '面')) {\n _context7.next = 13;\n break;\n }\n that.options.positions.forEach(function (item) {\n fromDegreesArray.push(item.lng, item.lat);\n });\n // arr = that.generateInterpolatedPoints(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing)\n _context7.next = 7;\n return that.computedArea(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing);\n case 7:\n arr = _context7.sent;\n array[0] = arr;\n array[1] = that.calculateRoadAngle(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[0], Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)[3]);\n arr.forEach(function (item, index) {\n var cartographic = Cesium.Cartographic.fromCartesian(item // Cartesian3对象 {x, y, z}\n );\n var longitude = Cesium.Math.toDegrees(cartographic.longitude);\n var latitude = Cesium.Math.toDegrees(cartographic.latitude);\n var height = cartographic.height;\n posiArr.push({\n lng: longitude,\n lat: latitude,\n alt: height\n });\n });\n _context7.next = 29;\n break;\n case 13:\n if (!(that.options.type == '线')) {\n _context7.next = 23;\n break;\n }\n that.options.positions.forEach(function (item) {\n fromDegreesArray.push(item.lng, item.lat);\n });\n _context7.next = 17;\n return that.linePoint(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray), that.options.spacing);\n case 17:\n array = _context7.sent;\n arr = array[0];\n that.pointArr = arr;\n arr.forEach(function (item, index) {\n var cartographic = Cesium.Cartographic.fromCartesian(item // Cartesian3对象 {x, y, z}\n );\n var longitude = Cesium.Math.toDegrees(cartographic.longitude);\n var latitude = Cesium.Math.toDegrees(cartographic.latitude);\n var height = cartographic.height;\n posiArr.push({\n lng: longitude,\n lat: latitude,\n alt: height\n });\n });\n _context7.next = 29;\n break;\n case 23:\n if (!(that.options.type == '点')) {\n _context7.next = 29;\n break;\n }\n _context7.next = 26;\n return that.getClampToHeight({\n lng: that.options.positions.lng,\n lat: that.options.positions.lat\n });\n case 26:\n height = _context7.sent;\n posiArr = [{\n lng: that.options.positions.lng,\n lat: that.options.positions.lat,\n alt: height\n }];\n // posiArr = [that.options.positions]\n that.pointArr = posiArr;\n case 29:\n params = {\n type: that.options.type,\n positions: posiArr,\n rotate: that.options.type == '点' ? undefined : array[1]\n };\n that.callback(params);\n // posiArr.forEach((item, index) => {\n // let model = new Model(that.sdk, {\n // id: 'model' + index,\n // show: that.options.show,\n // url: that.options.url,\n // position: item,\n // rotate: that.options.type == '点' ? undefined : { x: 0, y: 0, z: array[1] && (array[1][index] || array[1]) }\n // })\n // that.pointArr.push(model)\n // })\n case 31:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7);\n }));\n function computeDis(_x8) {\n return _computeDis.apply(this, arguments);\n }\n return computeDis;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BatchModel);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmF0Y2hNb2RlbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9CYXRjaE1vZGVsL2luZGV4LmpzPzM3MDciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiDmibnph4/mqKHlnotcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi8uLi8uLi9Ub29sc1wiO1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IE1vZGVsIGZyb20gJy4uL0Jhc2VTb3VyY2UvQmFzZU1vZGVsL01vZGVsJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCdcclxuXHJcbmltcG9ydCBEcmF3UG9seWxpbmUgZnJvbSAnLi4vLi4vLi4vRHJhdy9kcmF3UG9seWxpbmUnXHJcbmltcG9ydCBEcmF3UG9seWdvbiBmcm9tICcuLi8uLi8uLi9EcmF3L2RyYXdQb2x5Z29uJ1xyXG5pbXBvcnQgRHJhd1RocmVlUmVjdCBmcm9tICcuLi8uLi8uLi9EcmF3L2RyYXdUaHJlZVJlY3QnXHJcbmltcG9ydCBEcmF3UG9pbnQgZnJvbSAnLi4vLi4vLi4vRHJhdy9kcmF3UG9pbnQnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdywgQ2VzaXVtQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuXHJcbmNsYXNzIEJhdGNoTW9kZWwgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOaJuemHj+aooeWei1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOaJuemHj+aooeWei+WxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWU95pyq5ZG95ZCN5a+56LGhIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnR5cGU9cG9seWdvbiB7c3RyaW5nfSDnur/nsbvlnosobGluZSxwb2x5Z29uKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnVybD1wb2x5Z29uIHtzdHJpbmd9IOe6v+exu+WeiyhsaW5lLHBvbHlnb24scG9pbnQpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3BhY2luZz0ge251bWJlcn0g6Ze06LedXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufVxyXG4gICAqIEBwYXJhbSBEaWFsb2cge29iamVjdH0g5by55qGG5a+56LGhXHJcbiAgICogQHBhcmFtIERpYWxvZy5jb25maXJtQ2FsbEJhY2sge2Z1bmN0aW9ufSDlvLnmoYbnoa7orqTml7bnmoTlm57osINcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBjYWxsYmFjayA9IG51bGwsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMudmlld2VyID0gdGhpcy5zZGsudmlld2VyXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn5om56YeP5qih5Z6LJ1xyXG4gICAgdGhpcy5vcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgfHwgJ+mdoidcclxuICAgIHRoaXMub3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xyXG4gICAgdGhpcy5vcHRpb25zLnNwYWNpbmcgPSBvcHRpb25zLnNwYWNpbmcgKiAxIHx8IDUwXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnMgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMucG9pbnRBcnIgPSBbXVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIGxldCB0b29scyA9IG5ldyBUb29scyhzZGspXHJcbiAgICAvLyBCYXRjaE1vZGVsLmNvbXB1dGVEaXModGhpcylcclxuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA+IDAgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sbmcpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3BhY2luZyA8IDAgfHwgb3B0aW9ucy5zcGFjaW5nICogMSA9PT0gMCkge1xyXG4gICAgICB0b29scy5tZXNzYWdlKHsgdHlwZTogJ3dhcm5pbmcnLCB0ZXh0OiAn6K+36L6T5YWl5q2j56Gu55qE6Ze06Led77yBJyB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoKG9wdGlvbnMudHlwZSAmJiBvcHRpb25zLnNwYWNpbmcgIT0gdW5kZWZpbmVkKSB8fCBvcHRpb25zLnR5cGUgPT0gJ+eCuScpIHtcclxuICAgICAgLy8gQmF0Y2hNb2RlbC5jb21wdXRlRGlzKHRoaXMpXHJcblxyXG4gICAgICBsZXQgRHJhd1xyXG4gICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ+eCuSc6XHJcbiAgICAgICAgICBEcmF3ID0gbmV3IERyYXdQb2ludCh0aGlzLnNkaylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+e6vyc6XHJcbiAgICAgICAgICBEcmF3ID0gbmV3IERyYXdQb2x5bGluZSh0aGlzLnNkaylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+mdoic6XHJcbiAgICAgICAgICBEcmF3ID0gbmV3IERyYXdUaHJlZVJlY3QodGhpcy5zZGspXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgRHJhdyAmJiBEcmF3LnN0YXJ0KChhLCBwb3NpdGlvbnMpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gcG9zaXRpb25zO1xyXG4gICAgICAgIC8v5Yik5pat6IyD5Zu05piv5ZCm6L+H5aSnXHJcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PSAn6Z2iJykge1xyXG4gICAgICAgICAgbGV0IHBvc2kgPSBwb3NpdGlvbnMubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModi5sbmcsIHYubGF0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBkaXMxID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9zaVswXSwgcG9zaVsxXSlcclxuICAgICAgICAgIGxldCBkaXMyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9zaVsxXSwgcG9zaVsyXSlcclxuICAgICAgICAgIGxldCBudW0xID0gZGlzMSAvIHRoaXMub3B0aW9ucy5zcGFjaW5nXHJcbiAgICAgICAgICBsZXQgbnVtMiA9IGRpczIgLyB0aGlzLm9wdGlvbnMuc3BhY2luZ1xyXG4gICAgICAgICAgaWYgKG51bTEgKiBudW0yID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRvb2xzLm1lc3NhZ2UoeyB0eXBlOiAnd2FybmluZycsIHRleHQ6ICfmlbDph4/lpKfkuo4xMDDvvIzor7fph43mlrDnu5jliLYnIH0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PSAn57q/Jykge1xyXG4gICAgICAgICAgbGV0IHBvc2kgPSBwb3NpdGlvbnMubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModi5sbmcsIHYubGF0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBkaXMgPSAwXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2kubGVuZ3RoIC0gMjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRpcyArPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwb3NpW2ldLCBwb3NpW2kgKyAxXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkaXMgLyB0aGlzLm9wdGlvbnMuc3BhY2luZyA+IDEwMCkge1xyXG4gICAgICAgICAgICB0b29scy5tZXNzYWdlKHsgdHlwZTogJ3dhcm5pbmcnLCB0ZXh0OiAn5pWw6YeP5aSn5LqOMTAw77yM6K+36YeN5paw57uY5Yi2JyB9KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuY2FsbGJhY2sodGhpcy5vcHRpb25zKTtcclxuICAgICAgICAodGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sbmcpICYmIEJhdGNoTW9kZWwuY29tcHV0ZURpcyh0aGlzKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdCh0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6K6h566X6Led56a7XHJcbiAgc3RhdGljIGFzeW5jIGNvbXB1dGVEaXModGhhdCkge1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgbGV0IGFyclxyXG4gICAgbGV0IHBvc2lBcnIgPSBbXVxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGlmICh0aGF0Lm9wdGlvbnMudHlwZSA9PSAn6Z2iJykge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKGl0ZW0ubG5nLCBpdGVtLmxhdClcclxuICAgICAgfSlcclxuICAgICAgLy8gYXJyID0gdGhhdC5nZW5lcmF0ZUludGVycG9sYXRlZFBvaW50cyhDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpLCB0aGF0Lm9wdGlvbnMuc3BhY2luZylcclxuICAgICAgYXJyID0gYXdhaXQgdGhhdC5jb21wdXRlZEFyZWEoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KSwgdGhhdC5vcHRpb25zLnNwYWNpbmcpXHJcbiAgICAgIGFycmF5WzBdID0gYXJyXHJcbiAgICAgIGFycmF5WzFdID0gdGhhdC5jYWxjdWxhdGVSb2FkQW5nbGUoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVswXSwgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVszXSlcclxuICAgICAgYXJyLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKFxyXG4gICAgICAgICAgaXRlbSAvLyBDYXJ0ZXNpYW4z5a+56LGhIHt4LCB5LCB6fVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbG9uZ2l0dWRlID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sb25naXR1ZGUpO1xyXG4gICAgICAgIGNvbnN0IGxhdGl0dWRlID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhcnRvZ3JhcGhpYy5sYXRpdHVkZSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgICBwb3NpQXJyLnB1c2goe1xyXG4gICAgICAgICAgbG5nOiBsb25naXR1ZGUsXHJcbiAgICAgICAgICBsYXQ6IGxhdGl0dWRlLFxyXG4gICAgICAgICAgYWx0OiBoZWlnaHRcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIGlmICh0aGF0Lm9wdGlvbnMudHlwZSA9PSAn57q/Jykge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKGl0ZW0ubG5nLCBpdGVtLmxhdClcclxuICAgICAgfSlcclxuICAgICAgYXJyYXkgPSBhd2FpdCB0aGF0LmxpbmVQb2ludChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpLCB0aGF0Lm9wdGlvbnMuc3BhY2luZylcclxuICAgICAgYXJyID0gYXJyYXlbMF1cclxuICAgICAgdGhhdC5wb2ludEFyciA9IGFyclxyXG4gICAgICBhcnIuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oXHJcbiAgICAgICAgICBpdGVtIC8vIENhcnRlc2lhbjPlr7nosaEge3gsIHksIHp9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgY29uc3QgbGF0aXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBjYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG4gICAgICAgIHBvc2lBcnIucHVzaCh7XHJcbiAgICAgICAgICBsbmc6IGxvbmdpdHVkZSxcclxuICAgICAgICAgIGxhdDogbGF0aXR1ZGUsXHJcbiAgICAgICAgICBhbHQ6IGhlaWdodFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYgKHRoYXQub3B0aW9ucy50eXBlID09ICfngrknKSB7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGF0IH0pXHJcbiAgICAgIHBvc2lBcnIgPSBbeyBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGF0LCBhbHQ6IGhlaWdodCB9XVxyXG4gICAgICAvLyBwb3NpQXJyID0gW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNdXHJcbiAgICAgIHRoYXQucG9pbnRBcnIgPSBwb3NpQXJyXHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICB0eXBlOiB0aGF0Lm9wdGlvbnMudHlwZSxcclxuICAgICAgcG9zaXRpb25zOiBwb3NpQXJyLFxyXG4gICAgICByb3RhdGU6IHRoYXQub3B0aW9ucy50eXBlID09ICfngrknID8gdW5kZWZpbmVkIDogYXJyYXlbMV1cclxuICAgIH1cclxuICAgIHRoYXQuY2FsbGJhY2socGFyYW1zKVxyXG4gICAgLy8gcG9zaUFyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgLy8gICBsZXQgbW9kZWwgPSBuZXcgTW9kZWwodGhhdC5zZGssIHtcclxuICAgIC8vICAgICBpZDogJ21vZGVsJyArIGluZGV4LFxyXG4gICAgLy8gICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgLy8gICAgIHVybDogdGhhdC5vcHRpb25zLnVybCxcclxuICAgIC8vICAgICBwb3NpdGlvbjogaXRlbSxcclxuICAgIC8vICAgICByb3RhdGU6IHRoYXQub3B0aW9ucy50eXBlID09ICfngrknID8gdW5kZWZpbmVkIDogeyB4OiAwLCB5OiAwLCB6OiBhcnJheVsxXSAmJiAoYXJyYXlbMV1baW5kZXhdIHx8IGFycmF5WzFdKSB9XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyAgIHRoYXQucG9pbnRBcnIucHVzaChtb2RlbClcclxuICAgIC8vIH0pXHJcbiAgfVxyXG4gIGFzeW5jIGxpbmVQb2ludChwb2x5Z29uUG9zaXRpb25zLCBzcGFjaW5nKSB7XHJcbiAgICBsZXQgYm91bmRhcnlQb2ludHMgPSBbXTtcclxuICAgIGxldCBib3VuZGFyeUFuZ2xlID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25Qb3NpdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9IHBvbHlnb25Qb3NpdGlvbnNbaV07XHJcbiAgICAgIGNvbnN0IGVuZCA9IHBvbHlnb25Qb3NpdGlvbnNbKGkgKyAxKSAlIHBvbHlnb25Qb3NpdGlvbnMubGVuZ3RoXTtcclxuICAgICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICBjb25zdCBzZWdtZW50cyA9IE1hdGguY2VpbChzZWdtZW50TGVuZ3RoIC8gc3BhY2luZyk7XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBzZWdtZW50czsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgcmF0aW8gPSBqIC8gc2VnbWVudHM7XHJcbiAgICAgICAgbGV0IHBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMubGVycChcclxuICAgICAgICAgIHN0YXJ0LCBlbmQsIHJhdGlvLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihcclxuICAgICAgICAgIHBvaW50IC8vIENhcnRlc2lhbjPlr7nosaEge3gsIHksIHp9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgY29uc3QgbGF0aXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKTtcclxuXHJcblxyXG4gICAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IGxvbmdpdHVkZSwgbGF0OiBsYXRpdHVkZSB9KVxyXG4gICAgICAgIHBvaW50ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG9uZ2l0dWRlLCBsYXRpdHVkZSwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgYm91bmRhcnlQb2ludHMucHVzaChwb2ludCk7XHJcbiAgICAgICAgaWYgKGogIT0gc2VnbWVudHMgfHwgaSA9PSBwb2x5Z29uUG9zaXRpb25zLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgIGJvdW5kYXJ5QW5nbGUucHVzaCh0aGlzLmNhbGN1bGF0ZVJvYWRBbmdsZShzdGFydCwgZW5kKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbWy4uLm5ldyBTZXQoYm91bmRhcnlQb2ludHNcclxuICAgICAgLm1hcChwID0+IGAke3AueH0sJHtwLnl9LCR7cC56fWApKV1cclxuICAgICAgLm1hcChzdHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IFt4LCB5LCB6XSA9IHN0ci5zcGxpdCgnLCcpLm1hcChOdW1iZXIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoeCwgeSwgeik7XHJcbiAgICAgIH0pLCBib3VuZGFyeUFuZ2xlXTtcclxuICB9XHJcbiAgY2FsY3VsYXRlUm9hZEFuZ2xlKHN0YXJ0UG9pbnQsIGVuZFBvaW50KSB7XHJcbiAgICBjb25zdCBub3JtYWwgPSBDZXNpdW0uRWxsaXBzb2lkLldHUzg0Lmdlb2RldGljU3VyZmFjZU5vcm1hbChzdGFydFBvaW50KTtcclxuICAgIGNvbnN0IGVudU1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHN0YXJ0UG9pbnQsIHVuZGVmaW5lZCwgbm9ybWFsKTtcclxuICAgIGNvbnN0IGludmVyc2VNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5pbnZlcnNlKGVudU1hdHJpeCwgbmV3IENlc2l1bS5NYXRyaXg0KCkpO1xyXG5cclxuICAgIGNvbnN0IGxvY2FsRW5kID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KGludmVyc2VNYXRyaXgsIGVuZFBvaW50LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBob3Jpem9udGFsVmVjID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKGxvY2FsRW5kLngsIGxvY2FsRW5kLnkpO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjIubm9ybWFsaXplKGhvcml6b250YWxWZWMsIGhvcml6b250YWxWZWMpO1xyXG5cclxuICAgIGNvbnN0IG5vcnRoID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEsIDApO1xyXG5cclxuICAgIGxldCBhbmdsZSA9IENlc2l1bS5DYXJ0ZXNpYW4yLmFuZ2xlQmV0d2Vlbihub3J0aCwgaG9yaXpvbnRhbFZlYyk7XHJcbiAgICBhbmdsZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhhbmdsZSlcclxuICAgIGNvbnN0IGNyb3NzID0gQ2VzaXVtLkNhcnRlc2lhbjIuY3Jvc3Mobm9ydGgsIGhvcml6b250YWxWZWMsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMigpKTtcclxuICAgIC8vIHJldHVybiBjcm9zcyA8IDAgPyBhbmdsZSA6IC0gYW5nbGU7XHJcbiAgICByZXR1cm4gY3Jvc3MgPCAwID8gLWFuZ2xlIDogYW5nbGU7XHJcbiAgfVxyXG4gIGdlbmVyYXRlSW50ZXJwb2xhdGVkUG9pbnRzKHBvbHlnb25Qb3NpdGlvbnMsIHNwYWNpbmcpIHtcclxuICAgIC8vIDEuIOi+ueeVjOeCueaPkuWAvFxyXG4gICAgY29uc3QgYm91bmRhcnlQb2ludHMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25Qb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcG9seWdvblBvc2l0aW9uc1tpXTtcclxuICAgICAgY29uc3QgZW5kID0gcG9seWdvblBvc2l0aW9uc1soaSArIDEpICUgcG9seWdvblBvc2l0aW9ucy5sZW5ndGhdO1xyXG4gICAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gTWF0aC5jZWlsKHNlZ21lbnRMZW5ndGggLyBzcGFjaW5nKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IHNlZ21lbnRzOyBqKyspIHtcclxuICAgICAgICBjb25zdCByYXRpbyA9IGogLyBzZWdtZW50cztcclxuICAgICAgICBjb25zdCBwb2ludCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmxlcnAoXHJcbiAgICAgICAgICBzdGFydCwgZW5kLCByYXRpbywgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgICApO1xyXG4gICAgICAgIGJvdW5kYXJ5UG9pbnRzLnB1c2gocG9pbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4g5YaF6YOo572R5qC855Sf5oiQXHJcbiAgICBjb25zdCBleHRlbnQgPSB0aGlzLmNvbXB1dGVQb2x5Z29uRXh0ZW50KHBvbHlnb25Qb3NpdGlvbnMpO1xyXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY3JlYXRlR3JpZEZyb21CQm94KGV4dGVudCwgdGhpcy5vcHRpb25zLnNwYWNpbmcpXHJcbiAgICAvLyBjb25zdCBleHRlbnQgPSBDZXNpdW0uUmVjdGFuZ2xlLmZyb21DYXJ0ZXNpYW5BcnJheShwb2x5Z29uUG9zaXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBncmlkUG9pbnRzID0gW107XHJcbiAgICAvLyBjb25zdCBwb2x5Z29uID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHBvbHlnb25Qb3NpdGlvbnMpO1xyXG4gICAgdmFyIHBvbHlnb24gPSBbXVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBwb2x5Z29uLnB1c2goW2l0ZW0ubG5nLCBpdGVtLmxhdF0pXHJcbiAgICB9KVxyXG4gICAgcG9seWdvbi5wdXNoKHBvbHlnb25bMF0pXHJcbiAgICBmb3IgKGxldCB4ID0gZXh0ZW50Lndlc3Q7IHggPD0gZXh0ZW50LmVhc3Q7IHggKz0gcmVzdWx0LmxvblN0ZXApIHtcclxuICAgICAgZm9yIChsZXQgeSA9IGV4dGVudC5zb3V0aDsgeSA8PSBleHRlbnQubm9ydGg7IHkgKz0gcmVzdWx0LmxhdFN0ZXApIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHgsIHkpO1xyXG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHVyZi5wb2ludChbeCwgeV0pO1xyXG4gICAgICAgIGNvbnN0IHBvbHlnb25UdXJmID0gdHVyZi5wb2x5Z29uKFtwb2x5Z29uXSk7XHJcbiAgICAgICAgY29uc3QgaXNJbnNpZGUgPSB0dXJmLmJvb2xlYW5Qb2ludEluUG9seWdvbihwb2ludCwgcG9seWdvblR1cmYpO1xyXG4gICAgICAgIGlzSW5zaWRlICYmIGdyaWRQb2ludHMucHVzaChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIOWQiOW5tue7k+aenOW5tuWOu+mHjVxyXG4gICAgLy8gcmV0dXJuIFsuLi5uZXcgU2V0KFsuLi5ib3VuZGFyeVBvaW50cywgLi4uZ3JpZFBvaW50c11cclxuICAgIHJldHVybiBbLi4ubmV3IFNldChbLi4uZ3JpZFBvaW50c11cclxuICAgICAgLm1hcChwID0+IGAke3AueH0sJHtwLnl9LCR7cC56fWApKV1cclxuICAgICAgLm1hcChzdHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IFt4LCB5LCB6XSA9IHN0ci5zcGxpdCgnLCcpLm1hcChOdW1iZXIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoeCwgeSwgeik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlR3JpZEZyb21CQm94KGJib3gsIHNwYWNpbmcpIHtcclxuICAgIGNvbnN0IGVhcnRoUmFkaXVzID0gNjM3ODEzNzsgLy8gV0dTODTmpK3nkIPkvZPplb/ljYrovbRcclxuICAgIC8vIOiuoeeul+e7j+W6puaWueWQkee9keagvOaVsFxyXG4gICAgY29uc3QgbG9uRGlzdGFuY2UgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShcclxuICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoYmJveC53ZXN0LCAoYmJveC5zb3V0aCArIGJib3gubm9ydGgpIC8gMiwgMCksXHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGJib3guZWFzdCwgKGJib3guc291dGggKyBiYm94Lm5vcnRoKSAvIDIsIDApXHJcbiAgICApO1xyXG4gICAgY29uc3QgbG9uQ291bnQgPSBNYXRoLmNlaWwobG9uRGlzdGFuY2UgLyBzcGFjaW5nKTtcclxuXHJcbiAgICAvLyDorqHnrpfnuqzluqbmlrnlkJHnvZHmoLzmlbBcclxuICAgIGNvbnN0IGxhdERpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UoXHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKChiYm94Lndlc3QgKyBiYm94LmVhc3QpIC8gMiwgYmJveC5zb3V0aCwgMCksXHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKChiYm94Lndlc3QgKyBiYm94LmVhc3QpIC8gMiwgYmJveC5ub3J0aCwgMClcclxuICAgICk7XHJcbiAgICBjb25zdCBsYXRDb3VudCA9IE1hdGguY2VpbChsYXREaXN0YW5jZSAvIHNwYWNpbmcpO1xyXG4gICAgLy8g55Sf5oiQ572R5qC857q/XHJcbiAgICBjb25zdCBsb25TdGVwID0gKGJib3guZWFzdCAtIGJib3gud2VzdCkgLyBsb25Db3VudDtcclxuICAgIGNvbnN0IGxhdFN0ZXAgPSAoYmJveC5ub3J0aCAtIGJib3guc291dGgpIC8gbGF0Q291bnQ7XHJcbiAgICByZXR1cm4geyBsb25TdGVwLCBsYXRTdGVwIH1cclxuICB9XHJcblxyXG4gIGNvbXB1dGVQb2x5Z29uRXh0ZW50KHBvc2l0aW9ucykge1xyXG4gICAgLy8g6K6h566X5aSa6L655b2i57uP57qs5bqm6IyD5Zu0XHJcbiAgICBjb25zdCBjYXJ0b2dyYXBoaWNzID0gcG9zaXRpb25zLm1hcChwID0+XHJcbiAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwKSk7XHJcbiAgICBjb25zdCBsb25zID0gY2FydG9ncmFwaGljcy5tYXAoYyA9PiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoYy5sb25naXR1ZGUpKTtcclxuICAgIGNvbnN0IGxhdHMgPSBjYXJ0b2dyYXBoaWNzLm1hcChjID0+IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjLmxhdGl0dWRlKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3ZXN0OiBNYXRoLm1pbiguLi5sb25zKSxcclxuICAgICAgZWFzdDogTWF0aC5tYXgoLi4ubG9ucyksXHJcbiAgICAgIHNvdXRoOiBNYXRoLm1pbiguLi5sYXRzKSxcclxuICAgICAgbm9ydGg6IE1hdGgubWF4KC4uLmxhdHMpXHJcbiAgICB9O1xyXG4gIH1cclxuICBhc3luYyBjb21wdXRlZEFyZWEocG9seWdvblBvc2l0aW9ucywgc3BhY2luZykge1xyXG4gICAgbGV0IGRpczEyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9seWdvblBvc2l0aW9uc1swXSwgcG9seWdvblBvc2l0aW9uc1sxXSk7XHJcbiAgICBsZXQgZGlzMjMgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwb2x5Z29uUG9zaXRpb25zWzFdLCBwb2x5Z29uUG9zaXRpb25zWzJdKTtcclxuICAgIGxldCB2ZWMxMiA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvbHlnb25Qb3NpdGlvbnNbMV0sIHBvbHlnb25Qb3NpdGlvbnNbMF0sIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgIGxldCB2ZWMyMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvbHlnb25Qb3NpdGlvbnNbMl0sIHBvbHlnb25Qb3NpdGlvbnNbMV0sIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcbiAgICBsZXQgbnVtMTIgPSBNYXRoLmNlaWwoZGlzMTIgLyBzcGFjaW5nKTtcclxuICAgIGxldCBudW0yMyA9IE1hdGguY2VpbChkaXMyMyAvIHNwYWNpbmcpO1xyXG5cclxuICAgIGxldCBsaW5lMSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTEyOyBpKyspIHtcclxuICAgICAgbGluZTEucHVzaChhd2FpdCB0aGlzLmNhbGN1bGF0ZVBvaW50Qihwb2x5Z29uUG9zaXRpb25zWzBdLCBwb2x5Z29uUG9zaXRpb25zWzFdLCBpICogc3BhY2luZykpXHJcbiAgICB9XHJcbiAgICBsZXQgbGluZTIgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW0xMjsgaSsrKSB7XHJcbiAgICAgIGxpbmUyLnB1c2goYXdhaXQgdGhpcy5jYWxjdWxhdGVQb2ludEIocG9seWdvblBvc2l0aW9uc1szXSwgcG9seWdvblBvc2l0aW9uc1syXSwgaSAqIHNwYWNpbmcpKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBhbGxQb2ludHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTIzOyBqKyspIHtcclxuICAgICAgICBhbGxQb2ludHMucHVzaChhd2FpdCB0aGlzLmNhbGN1bGF0ZVBvaW50QihsaW5lMVtpXSwgbGluZTJbaV0sIGogKiBzcGFjaW5nKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFsbFBvaW50c1xyXG4gIH1cclxuICBhc3luYyBjYWxjdWxhdGVQb2ludEIocG9pbnRBLCBwb2ludEMsIGRpc3RhbmNlKSB7XHJcbiAgICAvLyDlsIbovpPlhaXlnZDmoIfovazmjaLkuLpDYXJ0ZXNpYW4z57G75Z6LXHJcbiAgICAvLyBjb25zdCBwb2ludEEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhhLmxvbmdpdHVkZSwgYS5sYXRpdHVkZSwgYS5oZWlnaHQpO1xyXG4gICAgLy8gY29uc3QgcG9pbnRDID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoYy5sb25naXR1ZGUsIGMubGF0aXR1ZGUsIGMuaGVpZ2h0KTtcclxuXHJcbiAgICAvLyDorqHnrpflkJHph49BQ1xyXG4gICAgY29uc3QgdmVjdG9yQUMgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwb2ludEMsIHBvaW50QSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG5cclxuICAgIC8vIOiuoeeul+WQkemHj0FD55qE6ZW/5bqmXHJcbiAgICBjb25zdCBsZW5ndGhBQyA9IENlc2l1bS5DYXJ0ZXNpYW4zLm1hZ25pdHVkZSh2ZWN0b3JBQyk7XHJcblxyXG4gICAgLy8g5b2S5LiA5YyW5ZCR6YePQUNcclxuICAgIGNvbnN0IHVuaXRWZWN0b3IgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUodmVjdG9yQUMsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcbiAgICAvLyDorqHnrpfngrlC5Z2Q5qCHXHJcbiAgICBjb25zdCBzY2FsZWRWZWN0b3IgPSBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKHVuaXRWZWN0b3IsIGRpc3RhbmNlLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBwb2ludEIgPSBDZXNpdW0uQ2FydGVzaWFuMy5hZGQocG9pbnRBLCBzY2FsZWRWZWN0b3IsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcblxyXG4gICAgY29uc3QgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKFxyXG4gICAgICBwb2ludEIgLy8gQ2FydGVzaWFuM+WvueixoSB7eCwgeSwgen1cclxuICAgICk7XHJcbiAgICBjb25zdCBsb25naXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICBjb25zdCBsYXRpdHVkZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpO1xyXG5cclxuXHJcbiAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiBsb25naXR1ZGUsIGxhdDogbGF0aXR1ZGUgfSlcclxuICAgIGxldCBwb2ludCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxvbmdpdHVkZSwgbGF0aXR1ZGUsIGhlaWdodCk7XHJcbiAgICAvLyDovazmjaLlm57nu4/nuqzluqZcclxuICAgIC8vIGNvbnN0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb2ludEIpO1xyXG4gICAgLy8gcmV0dXJuIHtcclxuICAgIC8vICAgbG9uZ2l0dWRlOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSksXHJcbiAgICAvLyAgIGxhdGl0dWRlOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxhdGl0dWRlKSxcclxuICAgIC8vICAgaGVpZ2h0OiBjYXJ0b2dyYXBoaWMuaGVpZ2h0XHJcbiAgICAvLyB9O1xyXG4gICAgLy8gcmV0dXJuIHBvaW50QlxyXG4gICAgcmV0dXJuIHBvaW50XHJcbiAgfVxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHZcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb2ludEFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnBvaW50QXJyW2ldLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlXHJcbiAgfVxyXG5cclxuICBzZXQgdHlwZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudHlwZSA9IHZcclxuICAgIHRoaXMuX2VsbXMudHlwZSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLnR5cGUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuICBnZXQgc3BhY2luZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3BhY2luZ1xyXG4gIH1cclxuXHJcbiAgc2V0IHNwYWNpbmcodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwYWNpbmcgPSB2XHJcbiAgICB0aGlzLl9lbG1zLnNwYWNpbmcgJiZcclxuICAgICAgdGhpcy5fZWxtcy5zcGFjaW5nLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIOe8lui+keahhlxyXG4gICAqIEBwYXJhbSBzdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g54q25oCBOiB0cnVl5omT5byALCBmYWxzZeWFs+mXrVxyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUgPSBmYWxzZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICAvLyBsZXQgZWxtcyA9IHRoaXMuc2RrLnZpZXdlci5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1iYXNlLWRpYWxvZycpXHJcbiAgICAvLyBmb3IgKGxldCBpID0gZWxtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgLy8gICB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChlbG1zW2ldKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+m7mOiupOaooeWei+WPguaVsOiuvue9ricsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn6aOe57q/J1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBEcmF3XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ+eCuSc6XHJcbiAgICAgICAgICAgICAgRHJhdyA9IG5ldyBEcmF3UG9pbnQodGhpcy5zZGspXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ+e6vyc6XHJcbiAgICAgICAgICAgICAgRHJhdyA9IG5ldyBEcmF3UG9seWxpbmUodGhpcy5zZGspXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ+mdoic6XHJcbiAgICAgICAgICAgICAgRHJhdyA9IG5ldyBEcmF3VGhyZWVSZWN0KHRoaXMuc2RrKVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRHJhdyAmJiBEcmF3LnN0YXJ0KChhLCBwb3NpdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcclxuICAgICAgICAgICAgLy8gdGhpcy5jYWxsYmFjayh0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sbmcpICYmIEJhdGNoTW9kZWwuY29tcHV0ZURpcyh0aGlzKVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgIC8vICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZygnMjIyMjInKVxyXG4gICAgICAgIC8vICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIC8vIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZygnMzMzMzMnKVxyXG4gICAgICAgIC8vICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWRkRm9vdEVsbTogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0YWdOYW1lOiAnYnV0dG9uJyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZmxpcGUtb3Zlci15JyxcclxuICAgICAgICAgICAgaW5uZXJIVE1MOiAn6YeN572uJyxcclxuICAgICAgICAgICAgZXZlbnQ6IFtcclxuICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICAvLyBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgLy8gICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgZmxvdy1saW5lLXN1cmZhY2UnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIC8vIGxldCB3YXRlckNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAvLyAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJmbG93TGluZS1jb2xvclwiKVswXSxcclxuICAgICAgLy8gICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgLy8gICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAvLyAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgLy8gICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgLy8gICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgLy8gICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgLy8gICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAvLyAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgLy8gICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAvLyAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgLy8gfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG5cclxuICAgICAgbGV0IG5hbWVEYXRhID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfngrknLFxyXG4gICAgICAgICAgdmFsdWU6ICfngrknLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+e6vycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+e6vycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn6Z2iJyxcclxuICAgICAgICAgIHZhbHVlOiAn6Z2iJyxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuXHJcbiAgICAgIGxldCBuYW1lRGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnYWRkLXR5cGUtYm94J1xyXG4gICAgICAgIClbMF0sXHJcbiAgICAgICAgJy5hZGQtdHlwZSdcclxuICAgICAgKVxyXG4gICAgICBpZiAobmFtZURhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgbmFtZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKG5hbWVEYXRhKVxyXG4gICAgICAgIGxldCBuYW1lRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FkZC10eXBlJylbMF1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgIHRoaXMuX2VsbXMudHlwZSA9IFtuYW1lRGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgbmFtZURhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLnR5cGVcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAobmFtZURhdGFbaV0udmFsdWUgPT09IG5hbWVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuYW1lRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUobmFtZURhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hbWVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKG5hbWVEYXRhW2ldLnZhbHVlID09PSBuYW1lRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBuYW1lRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuX2VsbXMuY29sb3IgPSBbd2F0ZXJDb2xvclBpY2tlcl1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLl9lbGVtZW50X3N0eWxlKSB7XHJcbiAgICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50X3N0eWxlKVxyXG4gICAgICAvLyAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyYXdBcmVhKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy50eXBlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudHlwZVxyXG4gICAgdGhpcy5zcGFjaW5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3BhY2luZ1xyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvd1xyXG4gICAgdGhpcy5vcHRpb25zLnNwYWNpbmcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zcGFjaW5nXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDpo57liLDlr7nlupTlrp7kvZNcclxuICAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIC8vIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgIC8vICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBCb3VuZGluZ1NwaGVyZSA9IENlc2l1bS5Cb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25BcnJheSlcclxuICAgICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0yMC4wKSxcclxuICAgICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubG5nKSB7XHJcbiAgICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC02MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5hbHQgKyAxMDApLFxyXG4gICAgICAgICAgLy8gb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpFxyXG4gICAqL1xyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb2ludEFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnBvaW50QXJyW2ldLnJlbW92ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb2ludEFyciA9IFtdXHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYXRjaE1vZGVsXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0VBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFuQkE7QUFBQTtBQUFBO0FBQUE7QUFQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEJBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdENBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBekJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFyQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF1Q0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckVBO0FBc0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBO0FBbktBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0tBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF2RkE7QUFBQTtBQUFBO0FBQUE7QUF3RkE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFmQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQTtBQUFBO0FBQUE7QUFBQTtBQXRsQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFwRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeWxCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/BatchModel/index.js\n"); /***/ }), /***/ "./src/Obj/Base/BillboardObject/_element.js": /*!**************************************************!*\ !*** ./src/Obj/Base/BillboardObject/_element.js ***! \**************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n

WGS84\\u5750\\u6807

\\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u6D77\\u62D4\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u8F6C\\u6362\\u5750\\u6807\\u9009\\u62E9\\n
\\n
\\n
\\n
\\n
\\n X\\u8F74:\\n \\n
\\n
\\n
\\n
\\n Y\\u8F74:\\n \\n
\\n
\\n
\\n
\\n Z\\u8F74:\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
\\n
\\n \\u6700\\u8FD1\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u6700\\u8FDC\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\u5C0F\\u6570\\u683C\\u5F0F\\n
\\n
\\n
\\n
\\n \\n \\u5EA6\\u5206\\u683C\\u5F0F\\n
\\n
\\n
\\n
\\n \\n \\u5EA6\\u5206\\u79D2\\u683C\\u5F0F\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n \\u5EA6\\n \\n \\u5206\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n \\u5EA6\\n \\n \\u5206\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n \\u5EA6\\n \\n \\u5206\\n \\n \\u79D2\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n \\u5EA6\\n \\n \\u5206\\n \\n \\u79D2\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n

\\u56FE\\u6807\\u8BBE\\u7F6E

\\n
\\n
\\n \\u663E\\u9690\\n \\n
\\n
\\n \\u56FE\\u6807\\n
\\n \\\"\\\"\\n
\\n
\\n
\\n \\u9ED8\\u8BA4\\u56FE\\u6807\\n
\\n \\\"\\\"\\n
\\n
\\n
\\n \\u56FE\\u6807\\u500D\\u6570\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n

\\u6587\\u5B57\\u8BBE\\u7F6E

\\n
\\n
\\n \\u663E\\u9690\\n \\n
\\n
\\n \\u5B57\\u4F53\\u9009\\u62E9\\n
\\n
\\n
\\n \\u6587\\u5B57\\u5927\\u5C0F\\n
\\n \\n px\\n \\n
\\n
\\n
\\n \\u6587\\u5B57\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmlsbGJvYXJkT2JqZWN0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0JpbGxib2FyZE9iamVjdC9fZWxlbWVudC5qcz8xOGU2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiB1bnNldDtcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibGFiZWxUZXh0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDQ2JTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmxlLWxlZnQtbGluZVwiPldHUzg05Z2Q5qCHPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6rOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTBcIiBtYXg9XCI5MFwiIEBtb2RlbD1cImxhdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5rW35ouU6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgYWx0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiIEBtb2RlbD1cImFsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDUwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29vcmRpbmF0ZS1zZWxlY3QtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmxlLWxlZnQtbGluZVwiPui9rOaNouWdkOagh+mAieaLqVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0IGNvb3JkaW5hdGUtc2VsZWN0XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPljovbQ6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6IG5vbmU7YmFja2dyb3VuZDogbm9uZTtcIiBjbGFzcz1cImlucHV0IGNvbnZlcnQteFwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlnovbQ6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6IG5vbmU7YmFja2dyb3VuZDogbm9uZTtcIiBjbGFzcz1cImlucHV0IGNvbnZlcnQteVwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlrovbQ6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6IG5vbmU7YmFja2dyb3VuZDogbm9uZTtcIiBjbGFzcz1cImlucHV0IGNvbnZlcnQtelwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuinhumHjue8qeaUvjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzY2FsZUJ5RGlzdGFuY2VcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDov5Hot53nprs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OTk5OVwiIEBtb2RlbD1cIm5lYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDov5zot53nprs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OTk5OVwiIEBtb2RlbD1cImZhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxESVYtY3ktdGFicyBpZD1cInBvaW50LW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBoZWlnaHQtbW9kZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVpZ2h0LW1vZGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGhlaWdodFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJZSi1jdXN0b20tY2hlY2tib3gtYm94XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7Y3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiWUotY3VzdG9tLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxcHg7dXNlci1zZWxlY3Q6IG5vbmU7XCI+5bCP5pWw5qC85byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJZSi1jdXN0b20tY2hlY2tib3gtYm94XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7Y3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiWUotY3VzdG9tLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxcHg7dXNlci1zZWxlY3Q6IG5vbmU7XCI+5bqm5YiG5qC85byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJZSi1jdXN0b20tY2hlY2tib3gtYm94XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7Y3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiWUotY3VzdG9tLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxcHg7dXNlci1zZWxlY3Q6IG5vbmU7XCI+5bqm5YiG56eS5qC85byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2otaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6IDAgMCA0MHB4O1wiPue7j+W6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgbG5nXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAwIDAgNDBweDtcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGxhdFwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9qLWlucHV0LWJveFwiIHN0eWxlPVwid2lkdGg6IDU2JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAwIDAgNDBweDtcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsbmctZG0tZFwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsbmctZG0tbVwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7liIY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvcC1saW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAwIDAgNDBweDtcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsYXQtZG0tZFwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsYXQtZG0tbVwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7liIY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS1saW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2otaW5wdXQtYm94XCIgc3R5bGU9XCJ3aWR0aDogNzAlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6IDAgMCA0MHB4O1wiPue7j+W6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGxuZy1kbXMtZFwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsbmctZG1zLW1cIiBzdHlsZT1cImZsZXg6IDE7XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDE0cHg7bWFyZ2luOiAwIDEwcHg7XCI+5YiGPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgbG5nLWRtcy1zXCIgc3R5bGU9XCJmbGV4OiAxO1wiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCAxNHB4O21hcmdpbjogMCAxMHB4O1wiPuenkjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9wLWxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6IDAgMCA0MHB4O1wiPue6rOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGxhdC1kbXMtZFwiIHN0eWxlPVwiZmxleDogMTtcIiByZWFkb25seT1cInJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTRweDttYXJnaW46IDAgMTBweDtcIj7luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsYXQtZG1zLW1cIiBzdHlsZT1cImZsZXg6IDE7XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDE0cHg7bWFyZ2luOiAwIDEwcHg7XCI+5YiGPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgbGF0LWRtcy1zXCIgc3R5bGU9XCJmbGV4OiAxO1wiIHJlYWRvbmx5PVwicmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCAxNHB4O21hcmdpbjogMCAxMHB4O1wiPuenkjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm90dG9tLWxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoND7lm77moIforr7nva48L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogbm9uZTtcIj7mmL7pmpA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwiYmlsbGJvYXJkU2hvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDkwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiBub25lO1wiPuWbvuaghzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3hcIiBAY2xpY2s9XCJjbGlja0NoYW5nZUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgc3JjPVwiXCIgYWx0PVwiXCIgQG1vZGVsPVwiYmlsbGJvYXJkSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDkwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiBub25lO1wiPum7mOiupOWbvuaghzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3hcIiBAY2xpY2s9XCJjbGlja0NoYW5nZURlZmF1bHRJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIHNyYz1cIlwiIGFsdD1cIlwiIEBtb2RlbD1cImJpbGxib2FyZERlZmF1bHRJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Zu+5qCH5YCN5pWwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwLjFcIiBtYXg9XCI5OVwiIEBtb2RlbD1cImJpbGxib2FyZFNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+5YCNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0PuaWh+Wtl+iuvue9rjwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IG5vbmU7XCI+5pi+6ZqQPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cImxhYmVsU2hvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBmb250LXNlbGVjdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IG5vbmU7XCI+5a2X5L2T6YCJ5oupPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0IGlucHV0LXNlbGVjdCBmb250LXNlbGVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaWh+Wtl+Wkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5XCIgQG1vZGVsPVwibGFiZWxGb250U2l6ZVwiIHN0eWxlPVwid2lkdGg6IDcwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaWh+Wtl+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8IS0tIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmlYjmnpxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5omp5pWjPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cImRpZmZ1c2VTaG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Y2K5b6EPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5OTk5OVwiIEBtb2RlbD1cImRpZmZ1c2VSYWRpdXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjEwMFwiIG1heD1cIjk5OTk5XCIgQG1vZGVsPVwiZGlmZnVzZUR1cmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpZmZ1c2VDb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pm7fovr48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwic2NhblNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ljYrlvoQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTk5XCIgQG1vZGVsPVwic2NhblJhZGl1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaXtumXtDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMTAwXCIgbWF4PVwiOTk5OTlcIiBAbW9kZWw9XCJzY2FuRHVyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NhbkNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPi0tPlxyXG48IS0tICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIueBr+WFieaOp+WItlwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgIDxkaXY+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5oyH5LukPC9zcGFuPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJpbnN0cnVjdFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5XCIgQGNsaWNrPVwiaW5zdHJ1Y3RTdWJtaXRcIj7mj5DkuqQ8L2J1dHRvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPi0tPlxyXG48IS0tICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuiuvue9ruaTjeS9nOeCuVwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgIDxkaXY+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6K6+572u5pON5L2c54K5PC9zcGFuPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJvcGVyYXRpbmdQb2ludFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5XCIgQGNsaWNrPVwib3BlcmF0aW5nUG9pbnRTdWJtaXRcIj7mj5DkuqQ8L2J1dHRvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPi0tPlxyXG4gICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQXlVQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BillboardObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/BillboardObject/index.js": /*!***********************************************!*\ !*** ./src/Obj/Base/BillboardObject/index.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/readOnlyError */ \"./node_modules/@babel/runtime/helpers/readOnlyError.js\");\n/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_cy_html_slider__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/cy_html_slider */ \"./src/Obj/Element/cy_html_slider.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/BillboardObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/cluster/cluster */ \"./src/Global/cluster/cluster.js\");\n/* harmony import */ var _CircleDiffuse__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../CircleDiffuse */ \"./src/Obj/Base/CircleDiffuse/index.js\");\n/* harmony import */ var _RadarScan__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../RadarScan */ \"./src/Obj/Base/RadarScan/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Tools_proj__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../../Tools/proj */ \"./src/Tools/proj.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Tools_getGoodsList__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../../Tools/getGoodsList */ \"./src/Tools/getGoodsList.js\");\n\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * 点\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _positionEditingCallback = /*#__PURE__*/new WeakMap();\nvar BillboardObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 点标注\r\n * @param options {object} 属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 标注整体的显隐\r\n * @param options.name {string} 名称\r\n * @param {object} options.position={} 必填,位置\r\n * @param {number} options.position.lng 经度\r\n * @param {number} options.position.lat 纬度\r\n * @param {number} options.position.alt 高度\r\n * @param {number} options.heightMode=3 高度模式(0:海拔高度;1:相对地表;2:依附地表; 3:依附模型)\r\n * @param [options.scaleByDistance=true] {boolean} 是否开启跟随视野缩放\r\n * @param [options.near=2000] {number} 视野缩放最近距离\r\n * @param [options.far=100000] {number} 视野缩放最远距离\r\n * @param options.billboard {object} 图标参数\r\n * @param [options.billboard.show=true] {boolean} 图标显隐\r\n * @param options.billboard.image {string} 图标路径\r\n * @param options.billboard.defaultImage {string} 默认图标的唯一标识\r\n * @param [options.billboard.scale=3] {number} 图标放大倍数\r\n * @param options.label {object} 文字参数\r\n * @param [options.label.text] {string} 文字内容\r\n * @param [options.label.show=true] {boolean} 文字显隐\r\n * @param [options.label.fontFamily=0] {number} 文字字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param [options.label.fontSize=39] {number} 文字大小, 单位px\r\n * @param [options.label.color=#00ffff] {string} 文字颜色\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param {object} options.attribute.vr={} 全景图\r\n * @param options.attribute.vr.content=[]] {array} 全景图内容\r\n * @param options.attribute.vr.content[].name {string} 名称\r\n * @param options.attribute.vr.content[].url {string} 地址\r\n * @param {object} ptions.attribute.camera={} 摄像头\r\n * @param options.attribute.camera.content=[]] {array} 摄像头内容\r\n * @param {object} options.attribute.isc={} isc\r\n * @param options.attribute.isc.content=[]] {array} ISC内容\r\n * @param {object} options.attribute.goods={} 物资\r\n * @param options.attribute.goods.content=[]] {array} 物资内容\r\n * @param options.attribute.goods.content[].ID {string} ID\r\n * @param options.attribute.goods.content[].name {string} 名称\r\n * @param options.attribute.goods.content[].cnt {string} 数量\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * \r\n \r\n \r\n *@param _Dialog {object} 弹框事件\r\n *@param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function BillboardObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, BillboardObject);\n _this2 = _callSuper(this, BillboardObject, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _positionEditingCallback, null);\n _this2.options.near = options.near || options.near === 0 ? options.near : 2000;\n _this2.options.far = options.far || options.far === 0 ? options.far : 100000;\n _this2.options.scaleByDistance = options.scaleByDistance || options.scaleByDistance === false ? options.scaleByDistance : true;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 3;\n _this2.options.billboard = options.billboard = options.billboard || {};\n // this.options.billboard.isSelect = options.billboard.isSelect || false\n _this2.options.billboard.show = options.billboard.show || options.billboard.show === false ? options.billboard.show : true;\n _this2.options.billboard.image = options.billboard.image || Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"getBillboardDefaultUrl\"])(options.billboard.defaultImage) || _this2.getSourceRootPath() + '/img/A-ablu-blank.png';\n _this2.options.billboard.defaultImage = options.billboard.defaultImage;\n _this2.options.billboard.scale = options.billboard.scale || options.billboard.scale === 0 ? options.billboard.scale : 3;\n options.label = options.label || {};\n _this2.options.label = options.label || {};\n _this2.options.label.text = options.label.text || _this2.options.name;\n _this2.options.name = _this2.options.label.text;\n _this2.options.label.show = options.label.show || options.label.show === false ? options.label.show : true;\n _this2.options.label.fontFamily = options.label.fontFamily || 0;\n _this2.options.label.fontSize = options.label.fontSize || 39;\n _this2.options.label.color = options.label.color || '#00ffff';\n _this2.options.position = options.position = options.position || {};\n _this2.options.position.lng = Number(Number(options.position.lng || 0).toFixed(8));\n _this2.options.position.lat = Number(Number(options.position.lat || 0).toFixed(8));\n _this2.options.position.alt = Number(Number(options.position.alt || 0).toFixed(2));\n // this.options.diffuseShow = options.diffuseShow || false\n // this.options.diffuseRadius = (options.diffuseRadius || options.diffuseRadius === 0) ? options.diffuseRadius : 10\n // this.options.diffuseDuration = (options.diffuseDuration || options.diffuseDuration === 0) ? options.diffuseDuration : 2000\n // this.options.diffuseColor = options.diffuseColor || \"#FF0000\"\n // this.options.scanShow = options.scanShow || false\n // this.options.scanRadius = (options.scanRadius || options.scanRadius === 0) ? options.scanRadius : 10\n // this.options.scanDuration = (options.scanDuration || options.scanDuration === 0) ? options.scanDuration : 2000\n // this.options.scanColor = options.scanColor || \"#FF0000\"\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.isc = _this2.options.attribute.isc || {};\n _this2.options.attribute.isc.content = _this2.options.attribute.isc.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n // this.options.coordinate = options.coordinate || ''\n _this2.operate = {};\n _this2._elms = {};\n _this2.previous = {\n position: _objectSpread({}, _this2.options.position)\n };\n // this.options.attributePos = options.attributePos || {\n // x: 60,\n // y: 60,\n // width: 200,\n // height: 120\n // }\n _this2.entity;\n _this2._proj = _this2.sdk.proj;\n\n // // 验证物资\n // let goodsContent = []\n // if(options.attribute && options.attribute.goods && options.attribute.goods.content && Array.isArray(options.attribute.goods.content)) {\n // goodsContent = [...options.attribute.goods.content]\n // }\n // this.options.attribute.goods.content = []\n // if (goodsContent.length > 0) {\n // getGoodsList().then((list)=>{\n // for (let i = goodsContent.length-1; i >= 0; i--) {\n // let falg = false\n // for (let j = 0; j < list.length; j++) {\n // if (goodsContent[i].ID === list[j].ID) {\n // falg = true\n // break\n // }\n // }\n // if(!falg) {\n // goodsContent.splice(i, 1)\n // }\n // }\n // this.options.attribute.goods.content = [...goodsContent]\n // })\n // }\n\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n BillboardObject.create(_this2);\n _this2.picking = true;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(BillboardObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(BillboardObject, [{\n key: \"type\",\n get: function get() {\n return 'BillboardObject';\n }\n }, {\n key: \"selectBillboard\",\n value:\n // 选中效果\n function selectBillboard() {\n var that = this;\n this.sdk.viewer.screenSpaceEventHandler.setInputAction(function (click) {\n var pickedObject = that.sdk.viewer.scene.pick(click.position);\n if (Cesium.defined(pickedObject) && pickedObject.id && pickedObject.id.id === 'airportBillboard') {\n if (that.entity.billboard) {\n // 如果点击的是Billboard,给它添加选中效果\n that.entity.billboard.color = Cesium.Color.YELLOW; // 改变颜色\n }\n // 可以添加更多选中效果,例如边框等\n } else {\n if (that.entity.billboard) {\n that.entity.billboard.color = Cesium.Color.WHITE;\n }\n }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n }, {\n key: \"attributeSelect\",\n get: function get() {\n return [{\n name: '富文本',\n value: '富文本',\n key: 'richText'\n }, {\n name: '链接',\n value: '链接',\n key: 'link'\n }, {\n name: 'IP摄像头',\n value: 'IP摄像头',\n key: 'camera'\n },\n // {\n // name: 'ISC摄像头',\n // value: 'ISC摄像头',\n // key: 'isc'\n // },\n // {\n // name: '传感器',\n // value: '传感器',\n // key: 'sensor'\n // },\n {\n name: '全景图',\n value: '全景图',\n key: 'vr'\n }, {\n name: '物资',\n value: '物资',\n key: 'goods'\n }];\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (!this.isShowView) {\n this.options.show = v;\n this.originalOptions.show = v;\n }\n if (!this.showView || this.showView == 3) {\n this.entity && (this.entity.show = this.options.show);\n } else {\n this.entity && (this.entity.show = false);\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_22__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_28__[\"syncSplitData\"])(this.sdk, this.options.id);\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = this.options.show;\n }\n this.isShowView = false;\n // if (v) {\n // if (this.diffuseShow) {\n // this.diffuseShow = true\n // }\n // if (this.scanShow) {\n // this.scanShow = true\n // }\n // }\n // else {\n // if (this.diffuse) {\n // this.diffuse.show = v\n // }\n // if (this.scan) {\n // this.scan.show = v\n // }\n // }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.heightMode = v ? v : 0;\n this.options.heightMode = v || v == 0 ? v : 3;\n var heightMode;\n var heightModeName = '';\n switch (this.options.heightMode) {\n case '0':\n case 0:\n heightMode = Cesium.HeightReference.NONE;\n break;\n case '1':\n case 1:\n heightMode = Cesium.HeightReference.NONE;\n break;\n case '2':\n case 2:\n heightMode = Cesium.HeightReference.CLAMP_TO_GROUND;\n break;\n case '3':\n case 3:\n heightMode = Cesium.HeightReference.NONE;\n var objectsToExclude = [];\n var _iterator = _createForOfIteratorHelper(this.sdk.entityMap),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step.value, 2),\n key = _step$value[0],\n value = _step$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n this.getClampToHeight(this.options.position, objectsToExclude).then(function (h) {\n _this3.alt = Number(h.toFixed(2));\n });\n break;\n }\n if (this.entity) {\n this.entity.billboard.heightReference = heightMode;\n this.entity.label.heightReference = heightMode;\n }\n }\n }, {\n key: \"labelText\",\n get: function get() {\n return this.options.label.text;\n },\n set: function set(v) {\n this.options.label.text = v;\n this.options.name = v;\n this.entity && (this.entity.label.text = v + '');\n this._elms.labelText && this._elms.labelText.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.position.lng;\n },\n set: function set(v) {\n this.options.position.lng = Number(Number(v).toFixed(8));\n // this.scan && (this.scan.lng = v)\n // this.diffuse && (this.diffuse.lng = v)\n this.renewPoint();\n this.coordinate = this.options.coordinate;\n this._projConvert && this._projConvert();\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.position.lat;\n },\n set: function set(v) {\n this.options.position.lat = Number(Number(v).toFixed(8));\n // this.scan && (this.scan.lat = v)\n // this.diffuse && (this.diffuse.lat = v)\n this.renewPoint();\n this.coordinate = this.options.coordinate;\n this._projConvert && this._projConvert();\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.position.alt;\n },\n set: function set(v) {\n this.options.position.alt = Number(Number(v).toFixed(2));\n // this.scan && (this.scan.alt = v)\n // this.diffuse && (this.diffuse.alt = v)\n this.renewPoint();\n this.coordinate = this.options.coordinate;\n }\n }, {\n key: \"near\",\n get: function get() {\n return this.options.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.far) {\n near = this.far;\n }\n this.options.near = near;\n this.renewPoint();\n this._elms.near && this._elms.near.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"far\",\n get: function get() {\n return this.options.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.near) {\n far = this.near;\n }\n this.options.far = far;\n this.renewPoint();\n this._elms.far && this._elms.far.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"scaleByDistance\",\n get: function get() {\n return this.options.scaleByDistance;\n },\n set: function set(v) {\n this.options.scaleByDistance = v;\n this.renewPoint();\n this._elms.scaleByDistance && this._elms.scaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"billboardShow\",\n get: function get() {\n return this.options.billboard.show;\n },\n set: function set(v) {\n this.options.billboard.show = v;\n this.entity && (this.entity.billboard.color = this.options.billboard.show ? undefined : new Cesium.Color(1.0, 1.0, 1.0, 0));\n this._elms.billboardShow && this._elms.billboardShow.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"billboardImage\",\n get: function get() {\n var url = this.options.billboard.image;\n if (url && !url.startsWith(\"http\")) {\n //说明是本地的json,在磁盘中存在的\n if (!url.includes(\":\")) {\n if (this.options.host) {\n var o = new URL(url, this.options.host);\n url = o.href;\n }\n }\n }\n return url;\n },\n set: function set(v) {\n var _this = this;\n this.options.billboard.image = this.replaceHost(v, this.options.host);\n var url = this.options.billboard.image || Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"getBillboardDefaultUrl\"])(this.options.billboard.defaultImage) || this.getSourceRootPath() + '/img/A-ablu-blank.png';\n this._elms.billboardImage && this._elms.billboardImage.forEach(function (item) {\n item.src = url;\n });\n var isGlf = false;\n var superGif;\n if (_this.entity.billboard.image && _this.entity.billboard.image.getVa) {}\n if (url && url.endsWith('gif')) {\n isGlf = true;\n var gifImg = document.createElement('img');\n gifImg.setAttribute('rel:animated_src', url);\n gifImg.setAttribute('rel:auto_play', '1');\n var imgDiv = document.createElement('div');\n imgDiv.appendChild(gifImg);\n var id = Cesium.createGuid();\n superGif = new SuperGif({\n gif: gifImg\n });\n this._superGif = superGif;\n this._superGif.id = id;\n var billboardH = 36;\n var index = 0;\n _this._frameImages = [];\n superGif.load(function (status) {\n if (status == 404) {\n var _width = 31;\n var _height = 36;\n document.createElement('canvas'), _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_1___default()(\"canvas\");\n canvas.width = 0;\n canvas.height = 0;\n billboardH = 0;\n _this.entity.billboard.imgWidth = 0;\n _this.entity.billboard.imgHeight = 0;\n _this.entity && (_this.entity.billboard.image = canvas);\n _this.entity.billboard.height = new Cesium.CallbackProperty(function () {\n return 0;\n }, false);\n _this.entity.label.pixelOffset = new Cesium.CallbackProperty(function () {\n return new Cesium.Cartesian2(0, 0);\n }, false);\n billboardH = _height * (31 / _width);\n return;\n }\n if (_this._superGif.id != id) {\n return;\n }\n var length = superGif.get_length();\n for (var i = 1; i <= length; i++) {\n superGif.move_to(i);\n _this._frameImages.push(superGif.get_canvas().toDataURL());\n }\n var canvas = superGif.get_canvas();\n var width = canvas.width;\n var height = canvas.height;\n billboardH = height * (31 / width);\n _this.entity.billboard.imgWidth = width;\n _this.entity.billboard.imgHeight = height;\n _this.entity && (_this.entity.billboard.image = new Cesium.CallbackProperty(function () {\n var img = _this._frameImages[index];\n index = index >= _this._frameImages.length - 1 ? 0 : index + 1;\n return img;\n }, false));\n _this.entity.billboard.height = new Cesium.CallbackProperty(function () {\n return billboardH;\n }, false);\n _this.entity.label.pixelOffset = new Cesium.CallbackProperty(function () {\n if (_this.options.billboard.show) {\n return new Cesium.Cartesian2(0, -billboardH * _this.options.billboard.scale - _this.options.label.fontSize / 2 - 5);\n } else {\n return new Cesium.Cartesian2(0, -_this.options.label.fontSize / 2 - 5);\n }\n }, false);\n });\n } else {\n var image = new Image();\n image.src = url;\n var _billboardH = 36;\n var canvas = document.createElement('canvas');\n image.onload = function () {\n var ratio = image.width / image.height;\n image.width = 100;\n image.height = 100 / ratio;\n var width = image.width;\n var height = image.height;\n var ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n canvas.width = width;\n canvas.height = height;\n ctx.drawImage(image, 0, 0, width, height);\n _billboardH = height * (31 / width);\n _this.entity.billboard.imgWidth = width;\n _this.entity.billboard.imgHeight = height;\n _this.entity && (_this.entity.billboard.image = canvas);\n _this.entity.billboard.height = new Cesium.CallbackProperty(function () {\n return _billboardH;\n }, false);\n _this.entity.label.pixelOffset = new Cesium.CallbackProperty(function () {\n if (_this.options.billboard.show) {\n return new Cesium.Cartesian2(0, -_billboardH * _this.options.billboard.scale - _this.options.label.fontSize / 2 - 5);\n } else {\n return new Cesium.Cartesian2(0, -_this.options.label.fontSize / 2 - 5);\n }\n }, false);\n _billboardH = height * (31 / width);\n };\n image.onerror = function (err) {\n var width = 31;\n var height = 36;\n canvas.width = 0;\n canvas.height = 0;\n _billboardH = 0;\n _this.entity.billboard.imgWidth = 0;\n _this.entity.billboard.imgHeight = 0;\n _this.entity && (_this.entity.billboard.image = canvas);\n _this.entity.billboard.height = new Cesium.CallbackProperty(function () {\n return 0;\n }, false);\n _this.entity.label.pixelOffset = new Cesium.CallbackProperty(function () {\n return new Cesium.Cartesian2(0, 0);\n }, false);\n _billboardH = height * (31 / width);\n };\n }\n }\n }, {\n key: \"billboardScale\",\n get: function get() {\n return this.options.billboard.scale;\n },\n set: function set(v) {\n this.options.billboard.scale = v;\n this.renewPoint();\n this._elms.billboardScale && this._elms.billboardScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n this.entity && (this.entity.label.show = v);\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.renewPoint();\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_26__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.renewPoint();\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.label.color = v || '#00ffff';\n this.renewPoint();\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this4.options.label.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.labelColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.labelColor = 'rgba(0,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.labelColor[i] = colorPicker;\n });\n }\n }\n\n // get diffuseShow() {\n // return this.options.diffuseShow\n // }\n // set diffuseShow(v) {\n // this.options.diffuseShow = v\n // this._elms.diffuseShow && this._elms.diffuseShow.forEach((item) => {\n // item.checked = v\n // })\n // if (v && this.scanShow) {\n // this.scanShow = false\n // }\n // if (this.diffuse) {\n // if (this.show) {\n // this.diffuse.show = this.options.diffuseShow\n // }\n // }\n // else {\n // this.diffuse = new CircleDiffuse(this.sdk, { show: this.diffuseShow, lng: this.lng, lat: this.lat, radius: this.diffuseRadius, duration: this.diffuseDuration, color: this.diffuseColor })\n // }\n // }\n\n // get diffuseRadius() {\n // return this.options.diffuseRadius\n // }\n // set diffuseRadius(v) {\n // this.options.diffuseRadius = v\n // this._elms.diffuseRadius && this._elms.diffuseRadius.forEach((item) => {\n // item.value = v\n // })\n // if (this.diffuse) {\n // this.diffuse.radius = this.options.diffuseRadius\n // }\n // }\n\n // get diffuseDuration() {\n // return this.options.diffuseDuration\n // }\n // set diffuseDuration(v) {\n // this.options.diffuseDuration = v\n // this._elms.diffuseDuration && this._elms.diffuseDuration.forEach((item) => {\n // item.value = v\n // })\n // if (this.diffuse) {\n // this.diffuse.duration = this.options.diffuseDuration\n // }\n // }\n\n // get diffuseColor() {\n // return this.options.diffuseColor\n // }\n // set diffuseColor(v) {\n // this.options.diffuseColor = v\n // if (this._elms.diffuseColor) {\n // this._elms.diffuseColor.forEach((item, i) => {\n // let diffuseColorPicker = new YJColorPicker({\n // el: item.el,\n // size: 'mini',//颜色box类型\n // alpha: false,//是否开启透明度\n // defaultColor: v,\n // disabled: false,//是否禁止打开颜色选择器\n // openPickerAni: 'opacity',//打开颜色选择器动画\n // sure: (c) => {\n // this.diffuseColor = c\n // },//点击确认按钮事件回调\n // clear: () => {\n // this.diffuseColor = 'rgba(255,255,255,1)'\n // },//点击清空按钮事件回调\n // })\n // this._elms.diffuseColor[i] = diffuseColorPicker\n // })\n // }\n // if (this.diffuse) {\n // this.diffuse.color = this.options.diffuseColor\n // }\n // }\n\n // get scanShow() {\n // return this.options.scanShow\n // }\n // set scanShow(v) {\n // this.options.scanShow = v\n // this._elms.scanShow && this._elms.scanShow.forEach((item) => {\n // item.checked = v\n // })\n // if (v && this.diffuseShow) {\n // this.diffuseShow = false\n // }\n // if (this.scan) {\n // if (this.show) {\n // this.scan.show = this.options.scanShow\n // }\n // }\n // else {\n // this.scan = new RadarScan(this.sdk, { show: this.scanShow, lng: this.lng, lat: this.lat, radius: this.scanRadius, duration: this.scanDuration, color: this.scanColor })\n // }\n // }\n\n // get scanRadius() {\n // return this.options.scanRadius\n // }\n // set scanRadius(v) {\n // this.options.scanRadius = v\n // this._elms.scanRadius && this._elms.scanRadius.forEach((item) => {\n // item.value = v\n // })\n // if (this.scan) {\n // this.scan.radius = this.options.scanRadius\n // }\n // }\n\n // get scanDuration() {\n // return this.options.scanDuration\n // }\n // set scanDuration(v) {\n // this.options.scanDuration = v\n // this._elms.scanDuration && this._elms.scanDuration.forEach((item) => {\n // item.value = v\n // })\n // if (this.scan) {\n // this.scan.duration = this.options.scanDuration\n // }\n // }\n\n // get scanColor() {\n // return this.options.scanColor\n // }\n // set scanColor(v) {\n // this.options.scanColor = v\n // if (this._elms.scanColor) {\n // this._elms.scanColor.forEach((item, i) => {\n // let scanColorPicker = new YJColorPicker({\n // el: item.el,\n // size: 'mini',//颜色box类型\n // alpha: false,//是否开启透明度\n // defaultColor: v,\n // disabled: false,//是否禁止打开颜色选择器\n // openPickerAni: 'opacity',//打开颜色选择器动画\n // sure: (c) => {\n // this.scanColor = c\n // },//点击确认按钮事件回调\n // clear: () => {\n // this.scanColor = 'rgba(255,255,255,1)'\n // },//点击清空按钮事件回调\n // })\n // this._elms.scanColor[i] = scanColorPicker\n // })\n // }\n // if (this.scan) {\n // this.scan.color = this.options.scanColor\n // }\n // }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this5.options.attribute.link.content;\n case 2:\n _this5.attributeLink = _context3.sent;\n table = _this5._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator2, _step2, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this5.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this5.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator2 = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step2.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator2.s();\n case 18:\n if ((_step2 = _iterator2.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator2.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator2.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this5.options.attribute.link.content.splice(i, 1);\n _this5.attributeLink = _this5.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this5.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this5.attributeLink = _this5.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this5.attributeLink = _this5.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator3 = _createForOfIteratorHelper(btn[n].attributes),\n _step3;\n try {\n var _loop4 = function _loop4() {\n var m = _step3.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.isc.content;\n },\n set: function set(v) {\n this.options.attribute.isc.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this6.options.attribute.vr.content;\n case 2:\n _this6.attributeVr = _context6.sent;\n table = _this6._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator4, _step4, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this6.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this6.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator4 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step4.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator4.s();\n case 18:\n if ((_step4 = _iterator4.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator4.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator4.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this6.options.attribute.vr.content.splice(i, 1);\n _this6.attributeVr = _this6.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this6.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this6.attributeVr = _this6.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this6.attributeVr = _this6.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator5 = _createForOfIteratorHelper(btn[n].attributes),\n _step5;\n try {\n var _loop8 = function _loop8() {\n var m = _step5.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"billboardDefaultImage\",\n get: function get() {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"getBillboardDefaultUrl\"])(this.options.billboard.defaultImage) || this.getSourceRootPath() + '/img/A-ablu-blank.png';\n },\n set: function set(v) {\n var url = this.replaceHost(v, this.options.host);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setBillboardDefaultUrl\"])(url, this.options.billboard.defaultImage);\n this._elms.billboardDefaultImage && this._elms.billboardDefaultImage.forEach(function (item) {\n item.src = url;\n });\n }\n }, {\n key: \"coordinate\",\n get: function get() {\n return this.options.coordinate;\n },\n set: function set(v) {\n return;\n this.options.coordinate = v;\n var position = this._proj.convert([{\n x: this.options.position.lng,\n y: this.options.position.lat,\n z: this.options.position.alt\n }], 'EPSG:4326', v).points;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content && position[0]) {\n this._DialogObject._element.content.getElementsByClassName('convert-x')[0].value = position[0].x;\n this._DialogObject._element.content.getElementsByClassName('convert-y')[0].value = position[0].y;\n this._DialogObject._element.content.getElementsByClassName('convert-z')[0].value = position[0].z;\n }\n this._elms.coordinate && this._elms.coordinate.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n var _this7 = this;\n var state,\n _this,\n contentElm,\n tabsElm,\n colorPicker,\n all_elm,\n lngEln,\n latEln,\n projCheckboxBoxElms,\n projCheckboxElms,\n projInputBoxElms,\n _args8 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n state = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : false;\n return _context8.abrupt(\"return\");\n case 8:\n this._DialogObject = _context8.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' billboard-object';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_16__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.isc.content;\n\n // let coordinateElm = contentElm.getElementsByClassName('coordinate-select')[0]\n // let option = ''\n // this._proj.epsg_map.forEach((value, key) => {\n // if (!this.options.coordinate) {\n // this.options.coordinate = key\n // this.originalOptions.coordinate = key\n // }\n // option += ``\n // })\n // coordinateElm.innerHTML = option\n // this.coordinate = this.options.coordinate\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('point-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n }); // let diffuseColorPicker = new YJColorPicker({\n // el: contentElm.getElementsByClassName(\"diffuseColor\")[0],\n // size: 'mini',//颜色box类型\n // alpha: false,//是否开启透明度\n // defaultColor: this.diffuseColor,\n // disabled: false,//是否禁止打开颜色选择器\n // openPickerAni: 'opacity',//打开颜色选择器动画\n // sure: (color) => {\n // this.diffuseColor = color\n // },//点击确认按钮事件回调\n // clear: () => {\n // this.diffuseColor = 'rgba(255,255,255,1)'\n // },//点击清空按钮事件回调\n // })\n // let scanColorPicker = new YJColorPicker({\n // el: contentElm.getElementsByClassName(\"scanColor\")[0],\n // size: 'mini',//颜色box类型\n // alpha: false,//是否开启透明度\n // defaultColor: this.scanColor,\n // disabled: false,//是否禁止打开颜色选择器\n // openPickerAni: 'opacity',//打开颜色选择器动画\n // sure: (color) => {\n // this.scanColor = color\n // },//点击确认按钮事件回调\n // clear: () => {\n // this.scanColor = 'rgba(255,255,255,1)'\n // },//点击清空按钮事件回调\n // })\n all_elm = contentElm.getElementsByTagName('*');\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.labelColor = [colorPicker];\n // this._elms.diffuseColor = [diffuseColorPicker]\n // this._elms.scanColor = [scanColorPicker]\n\n setTimeout(/*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3() {\n var col, row, tagData, attributeElm, legpObject, attributeSelectElm, i, coordinateData, coordinateDataLegpObject, coordinateDataLegpElm, _i6, heightBoxElm, heightElm, heightModeData, heightMode, objectsToExclude, _iterator6, _step6, _step6$value, key, value, heightModeObject, heightModeDataLegpElm, _i8, fontData, fontObject, fontDataLegpElm, _i10;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this7.attributeLink = _this7.options.attribute.link.content;\n _this7.attributeVr = _this7.options.attribute.vr.content;\n // this.attributeCamera = this.options.attribute.camera\n _this7.cameraSelect && _this7.cameraSelect();\n _this7.ISCSelect && _this7.ISCSelect();\n _this7.goodsSelect && _this7.goodsSelect();\n col = document.createElement('div');\n col.className = 'col';\n col.style.flex = '0 0 110px';\n col.innerHTML = \"\\n \\u5C5E\\u6027\\u6846\\n \\n \";\n row = _this7._DialogObject._element.content.getElementsByClassName('attribute')[0].getElementsByClassName('row')[0];\n row.appendChild(col);\n tagData = _this7.attributeSelect;\n attributeElm = _this7._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (!attributeElm) {\n _context7.next = 27;\n break;\n }\n legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_25__[\"legp\"])(attributeElm, '.attribute-select');\n legpObject.legp_search(tagData);\n attributeSelectElm = _this7._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n i = 0;\n case 18:\n if (!(i < tagData.length)) {\n _context7.next = 26;\n break;\n }\n if (!(tagData[i].key === _this7.options.attributeType)) {\n _context7.next = 23;\n break;\n }\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n return _context7.abrupt(\"break\", 26);\n case 23:\n i++;\n _context7.next = 18;\n break;\n case 26:\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this7.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n case 27:\n coordinateData = [];\n _this7.epsg_map.forEach(function (value, key) {\n coordinateData.push({\n name: \"\".concat(value.name, \"(\").concat(value.epsg, \")\"),\n value: key\n });\n });\n coordinateDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_25__[\"legp\"])(_this7._DialogObject._element.content.getElementsByClassName('coordinate-select-box')[0], '.coordinate-select');\n if (!coordinateDataLegpObject) {\n _context7.next = 44;\n break;\n }\n coordinateDataLegpObject.legp_search(coordinateData);\n coordinateDataLegpElm = _this7._DialogObject._element.content.getElementsByClassName('coordinate-select')[0].getElementsByTagName('input')[0];\n if (!_this7.coordinate) {\n _this7.coordinate = coordinateData[0].value;\n } else {\n _this7.coordinate = _this7.coordinate;\n }\n coordinateDataLegpElm.value = _this7.coordinate;\n _i6 = 0;\n case 36:\n if (!(_i6 < coordinateData.length)) {\n _context7.next = 43;\n break;\n }\n if (!(coordinateData[_i6].value === coordinateData.value)) {\n _context7.next = 40;\n break;\n }\n coordinateDataLegpObject.legp_searchActive(coordinateData[_i6].value);\n return _context7.abrupt(\"break\", 43);\n case 40:\n _i6++;\n _context7.next = 36;\n break;\n case 43:\n coordinateDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < coordinateData.length; _i7++) {\n if (coordinateData[_i7].value === coordinateDataLegpElm.value) {\n _this7.coordinate = coordinateData[_i7].value;\n break;\n }\n }\n });\n case 44:\n heightBoxElm = document.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附地表',\n value: '依附地表',\n key: '2'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '3'\n }];\n heightMode = _this7.heightMode;\n _context7.t0 = heightMode;\n _context7.next = _context7.t0 === 0 ? 51 : _context7.t0 === '0' ? 51 : _context7.t0 === 1 ? 53 : _context7.t0 === '1' ? 53 : _context7.t0 === 2 ? 55 : _context7.t0 === '2' ? 55 : _context7.t0 === 3 ? 55 : _context7.t0 === '3' ? 55 : 60;\n break;\n case 51:\n heightElm.value = _this7.alt;\n return _context7.abrupt(\"break\", 60);\n case 53:\n if (_this7.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(_this7.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this7.options.position.lng, _this7.options.position.lat)]).then(function (position) {\n heightElm.value = Number((_this7.alt - Number(position[0].height.toFixed(2))).toFixed(2));\n });\n } else {\n heightElm.value = Number(_this7.alt.toFixed(2));\n }\n return _context7.abrupt(\"break\", 60);\n case 55:\n objectsToExclude = [];\n _iterator6 = _createForOfIteratorHelper(_this7.sdk.entityMap);\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n _step6$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step6.value, 2), key = _step6$value[0], value = _step6$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n _this7.getClampToHeight(_this7.options.position, objectsToExclude).then(function (h) {\n _this7.alt = Number(h.toFixed(2));\n heightElm.value = _this7.alt;\n });\n return _context7.abrupt(\"break\", 60);\n case 60:\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_25__[\"legp\"])(_this7._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 78;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = _this7._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n heightModeDataLegpElm.value = heightModeData[_this7.heightMode].value;\n _i8 = 0;\n case 66:\n if (!(_i8 < heightModeData.length)) {\n _context7.next = 73;\n break;\n }\n if (!(heightModeData[_i8].value == heightModeDataLegpElm.value)) {\n _context7.next = 70;\n break;\n }\n heightModeObject.legp_searchActive(heightModeData[_i8].value);\n return _context7.abrupt(\"break\", 73);\n case 70:\n _i8++;\n _context7.next = 66;\n break;\n case 73:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < heightModeData.length; _i9++) {\n if (heightModeData[_i9].value === heightModeDataLegpElm.value) {\n heightMode = heightModeData[_i9].key;\n switch (heightMode) {\n case 0:\n case '0':\n _this7.alt = Number(heightElm.value);\n heightBoxElm.style.display = 'flex';\n _this7.heightMode = 0;\n break;\n case 1:\n case '1':\n if (_this7.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(_this7.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this7.options.position.lng, _this7.options.position.lat)]).then(function (position) {\n _this7.alt = Number(heightElm.value) + Number(position[0].height.toFixed(2));\n });\n } else {\n _this7.alt = Number(heightElm.value);\n }\n heightBoxElm.style.display = 'flex';\n _this7.heightMode = 1;\n break;\n case 2:\n case '2':\n _this7.heightMode = 2;\n break;\n case 3:\n case '3':\n var _objectsToExclude = [];\n var _iterator7 = _createForOfIteratorHelper(_this7.sdk.entityMap),\n _step7;\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var _step7$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step7.value, 2),\n _key = _step7$value[0],\n _value = _step7$value[1];\n if (_value.type === 'RadarScanStereoscopic' && _value.entity) {\n _objectsToExclude.push(_value.entity);\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n _this7.getClampToHeight(_this7.options.position, _objectsToExclude).then(function (h) {\n _this7.alt = Number(h.toFixed(2));\n });\n _this7.heightMode = 3;\n break;\n }\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (heightMode) {\n case 0:\n case '0':\n _this7.options.position.alt = Number(Number(heightElm.value).toFixed(2));\n break;\n case 1:\n case '1':\n if (_this7.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(_this7.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this7.options.position.lng, _this7.options.position.lat)]).then(function (position) {\n _this7.alt = Number(heightElm.value) + Number(position[0].height.toFixed(2));\n });\n } else {\n _this7.alt = Number(heightElm.value);\n }\n break;\n case 2:\n case '2':\n break;\n }\n _this7.renewPoint();\n _this7.coordinate = _this7.options.coordinate;\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.position.alt;\n });\n });\n _this7._elms.height = heightBoxElm;\n _this7._elms.heightMode = heightModeDataLegpElm;\n _this7.heightMode = _this7.heightMode;\n case 78:\n fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_26__[\"getFontList\"])();\n fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_25__[\"legp\"])(_this7._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (!fontObject) {\n _context7.next = 94;\n break;\n }\n fontObject.legp_search(fontData);\n fontDataLegpElm = _this7._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this7.labelFontFamily].value;\n _i10 = 0;\n case 85:\n if (!(_i10 < fontData.length)) {\n _context7.next = 92;\n break;\n }\n if (!(fontData[_i10].value == fontDataLegpElm.value)) {\n _context7.next = 89;\n break;\n }\n fontObject.legp_searchActive(fontData[_i10].value);\n return _context7.abrupt(\"break\", 92);\n case 89:\n _i10++;\n _context7.next = 85;\n break;\n case 92:\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this7.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this7._elms.labelFontFamily = [fontDataLegpElm];\n case 94:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3);\n })), 0);\n lngEln = contentElm.getElementsByClassName('lng')[0];\n latEln = contentElm.getElementsByClassName('lat')[0];\n lngEln.value = this.lng;\n latEln.value = this.lat;\n this._elms.lng.push(lngEln);\n this._elms.lat.push(latEln);\n projCheckboxBoxElms = this._DialogObject._element.content.getElementsByClassName('YJ-custom-checkbox-box');\n projCheckboxElms = this._DialogObject._element.content.getElementsByClassName('YJ-custom-checkbox');\n projInputBoxElms = this._DialogObject._element.content.getElementsByClassName('proj-input-box');\n projCheckboxElms[0].checked = true;\n projInputBoxElms[1].style.display = 'none';\n projInputBoxElms[2].style.display = 'none';\n projCheckboxBoxElms[0].addEventListener('click', function () {\n projCheckboxElms[0].checked = true;\n projInputBoxElms[0].style.display = 'block';\n projCheckboxElms[1].checked = false;\n projInputBoxElms[1].style.display = 'none';\n projCheckboxElms[2].checked = false;\n projInputBoxElms[2].style.display = 'none';\n });\n projCheckboxBoxElms[1].addEventListener('click', function () {\n projCheckboxElms[1].checked = true;\n projInputBoxElms[1].style.display = 'block';\n projCheckboxElms[0].checked = false;\n projInputBoxElms[0].style.display = 'none';\n projCheckboxElms[2].checked = false;\n projInputBoxElms[2].style.display = 'none';\n });\n projCheckboxBoxElms[2].addEventListener('click', function () {\n projCheckboxElms[2].checked = true;\n projInputBoxElms[2].style.display = 'block';\n projCheckboxElms[0].checked = false;\n projInputBoxElms[0].style.display = 'none';\n projCheckboxElms[1].checked = false;\n projInputBoxElms[1].style.display = 'none';\n });\n _this._projConvert = function () {\n if (!_this7._DialogObject || _this7._DialogObject.isDestroy) {\n return;\n }\n var lng, lat, lngD, lngM, lngS, latD, latM, latS, lngDM, latDM, lngDMS, latDMS, lngdnArr1, lngdnArr2, latdnArr1, latdnArr2, lngdnsArr1, lngdnsArr2, lngdnsArr3, latdnsArr1, latdnsArr2, latdnsArr3;\n lng = _this.lng;\n lat = _this.lat;\n lngDM = _this._proj.degreesToDMS(lng, true);\n latDM = _this._proj.degreesToDMS(lat, true);\n lngdnArr1 = lngDM.split('°');\n lngdnArr2 = lngdnArr1[1].split(\"'\");\n latdnArr1 = latDM.split('°');\n latdnArr2 = latdnArr1[1].split(\"'\");\n contentElm.getElementsByClassName('lng-dm-d')[0].value = lngdnArr1[0];\n contentElm.getElementsByClassName('lng-dm-m')[0].value = lngdnArr2[0];\n contentElm.getElementsByClassName('lat-dm-d')[0].value = latdnArr1[0];\n contentElm.getElementsByClassName('lat-dm-m')[0].value = latdnArr2[0];\n lngDMS = _this._proj.degreesToDMS(lng);\n latDMS = _this._proj.degreesToDMS(lat);\n lngdnsArr1 = lngDMS.split('°');\n lngdnsArr2 = lngdnsArr1[1].split(\"'\");\n lngdnsArr3 = lngdnsArr2[1].split('\"');\n latdnsArr1 = latDMS.split('°');\n latdnsArr2 = latdnsArr1[1].split(\"'\");\n latdnsArr3 = latdnsArr2[1].split('\"');\n contentElm.getElementsByClassName('lng-dms-d')[0].value = lngdnsArr1[0];\n contentElm.getElementsByClassName('lng-dms-m')[0].value = lngdnsArr2[0];\n contentElm.getElementsByClassName('lng-dms-s')[0].value = lngdnsArr3[0];\n contentElm.getElementsByClassName('lat-dms-d')[0].value = latdnsArr1[0];\n contentElm.getElementsByClassName('lat-dms-m')[0].value = latdnsArr2[0];\n contentElm.getElementsByClassName('lat-dms-s')[0].value = latdnsArr3[0];\n };\n _this._projConvert();\n _context8.next = 41;\n break;\n case 41:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"renewPoint\",\n value: function renewPoint() {\n var _this = this;\n var font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_26__[\"getFontFamily\"])(this.labelFontFamily) || 'Helvetica';\n if (this.entity) {\n this.entity.position = Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt);\n if (this.options.scaleByDistance) {\n this.entity.billboard.scaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.label.scaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.label.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n } else {\n this.entity.billboard.scaleByDistance = undefined;\n this.entity.billboard.pixelOffsetScaleByDistance = undefined;\n this.entity.label.scaleByDistance = undefined;\n this.entity.label.pixelOffsetScaleByDistance = undefined;\n }\n // this.entity.billboard.pixelOffset = new Cesium.CallbackProperty(\n // function () {\n // let billboardH =\n // _this.entity.billboard.imgHeight *\n // (31 / _this.entity.billboard.imgWidth)\n // return new Cesium.Cartesian2(\n // 0,\n // -(billboardH / 2) * _this.options.billboard.scale\n // )\n // },\n // false\n // )\n this.entity.label.pixelOffset = new Cesium.CallbackProperty(function () {\n if (_this.options.billboard.show) {\n var billboardH = _this.entity.billboard.imgHeight ? _this.entity.billboard.imgHeight * (31 / _this.entity.billboard.imgWidth) : 0;\n return new Cesium.Cartesian2(0, -billboardH * _this.options.billboard.scale - _this.options.label.fontSize / 2 - 5);\n } else {\n return new Cesium.Cartesian2(0, -_this.options.label.fontSize / 2 - 5);\n }\n }, false);\n this.entity.label.font = this.options.label.fontSize + 'px ' + font;\n this.entity.label.fillColor = Cesium.Color.fromCssColorString(this.options.label.color);\n this.entity.billboard.scale = this.options.billboard.scale;\n }\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.near = this.originalOptions.near;\n this.far = this.originalOptions.far;\n this.scaleByDistance = this.originalOptions.scaleByDistance;\n this.billboardShow = this.originalOptions.billboard.show;\n this.billboardImage = this.originalOptions.billboard.image;\n this.billboardScale = this.originalOptions.billboard.scale;\n this.labelText = this.originalOptions.label.text;\n this.labelShow = this.originalOptions.label.show;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelColor = this.originalOptions.label.color;\n this.lng = this.originalOptions.position.lng;\n this.lat = this.originalOptions.position.lat;\n this.alt = this.originalOptions.position.alt;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.isc.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n _context9.next = 2;\n return Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__[\"remove_entity_from_cluster\"])(this.sdk.viewer, this.entity);\n case 2:\n this.entity = null;\n if (!(!this.sdk.viewer || !this.sdk.viewer.entities)) {\n _context9.next = 5;\n break;\n }\n return _context9.abrupt(\"return\");\n case 5:\n // if (this.diffuse) {\n // this.diffuse.remove()\n // this.diffuse = null\n // }\n // if (this.scan) {\n // this.scan.remove()\n // this.scan = null\n // }\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n _context9.next = 10;\n return this.sdk.removeIncetance(this.options.id);\n case 10:\n _context9.next = 12;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_22__[\"syncData\"])(this.sdk, this.options.id);\n case 12:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }() // 点击弹框内图标切换\n }, {\n key: \"clickChangeImage\",\n value: function clickChangeImage() {\n this.Dialog.clickChangeImage && this.Dialog.clickChangeImage();\n }\n // 点击弹框内默认图标切换\n }, {\n key: \"clickChangeDefaultImage\",\n value: function clickChangeDefaultImage() {\n this.Dialog.clickChangeDefaultImage && this.Dialog.clickChangeDefaultImage();\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this8 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_15__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_15__[\"default\"].primaryCallBack = function (content) {\n _this8.options.richTextContent = content;\n };\n }\n }, {\n key: \"updateHeight\",\n value: function () {\n var _updateHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee6() {\n var height, height2, point1, point2, objectsToExclude, _iterator8, _step8, _step8$value, key, value, updatedCartesians, direction, c, ray, r, pickedObjects, i, promise;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!(!this.sdk || !this.sdk.viewer || !this.sdk.viewer.scene)) {\n _context10.next = 2;\n break;\n }\n return _context10.abrupt(\"return\");\n case 2:\n point1 = new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, 0);\n point2 = new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, 10000000000000);\n objectsToExclude = [];\n _iterator8 = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n _step8$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step8.value, 2), key = _step8$value[0], value = _step8$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n _context10.next = 9;\n return this.sdk.viewer.scene.clampToHeightMostDetailed([point1], objectsToExclude);\n case 9:\n updatedCartesians = _context10.sent;\n if (updatedCartesians && updatedCartesians[0]) {\n height = this.cartesian3Towgs84(updatedCartesians[0], this.sdk.viewer).alt;\n }\n direction = Cesium.Cartesian3.subtract(point1, point2, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, new Cesium.Cartesian3());\n ray = new Cesium.Ray(point2, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = pickedObjects.length - 1;\n case 17:\n if (!(i >= 0)) {\n _context10.next = 24;\n break;\n }\n if (!pickedObjects[i].position) {\n _context10.next = 21;\n break;\n }\n r = pickedObjects[i];\n return _context10.abrupt(\"break\", 24);\n case 21:\n i--;\n _context10.next = 17;\n break;\n case 24:\n if (r && r.position) {\n height2 = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n }\n _context10.prev = 25;\n _context10.next = 28;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(this.options.position.lng, this.options.position.lat)]);\n case 28:\n promise = _context10.sent;\n _context10.next = 33;\n break;\n case 31:\n _context10.prev = 31;\n _context10.t0 = _context10[\"catch\"](25);\n case 33:\n if ((height2 === void 0 || height2 < promise[0].height) && promise) {\n height2 = promise[0].height;\n }\n if (height === void 0 || height < height2) {\n height = height2;\n }\n if (!(height !== undefined)) {\n _context10.next = 40;\n break;\n }\n this.options.position.alt = Number(Number(height).toFixed(2));\n this.renewPoint();\n this.coordinate = this.options.coordinate;\n return _context10.abrupt(\"return\", true);\n case 40:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6, this, [[25, 31]]);\n }));\n function updateHeight() {\n return _updateHeight.apply(this, arguments);\n }\n return updateHeight;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee7() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n objectsToExclude,\n _iterator9,\n _step9,\n _step9$value,\n key,\n value,\n _objectsToExclude2,\n _iterator10,\n _step10,\n _step10$value,\n _key2,\n _value2,\n height,\n _args11 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n options = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context11.next = 26;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context11.next = 19;\n break;\n }\n objectsToExclude = [];\n _iterator9 = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n _step9$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step9.value, 2), key = _step9$value[0], value = _step9$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n _context11.next = 18;\n return this.getClampToHeight(position, objectsToExclude);\n case 18:\n position.alt = _context11.sent;\n case 19:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context11.next = 33;\n break;\n case 26:\n _objectsToExclude2 = [];\n _iterator10 = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n _step10$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step10.value, 2), _key2 = _step10$value[0], _value2 = _step10$value[1];\n if (_value2.type === 'RadarScanStereoscopic' && _value2.entity) {\n _objectsToExclude2.push(_value2.entity);\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n _context11.next = 31;\n return this.getClampToHeight(this.options.position, _objectsToExclude2);\n case 31:\n height = _context11.sent;\n this.sdk.viewer.camera.flyTo({\n orientation: options.orientation,\n destination: Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, height + (options.height || 500))\n });\n case 33:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n this.options.position.lng = v.position.lng;\n this.options.position.lat = v.position.lat;\n this.options.position.alt = v.position.alt;\n this.renewPoint();\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this9 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_18__[\"default\"](this.sdk);\n if (status === true) {\n this.picking = false;\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.previous = {\n position: _objectSpread({}, this.options.position)\n };\n var moveEvent = function moveEvent(movement, cartesian) {\n _this9.entity.position = new Cesium.CallbackProperty(function () {\n return cartesian;\n }, false);\n _this9.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n };\n var leftEvent = function leftEvent(movement, cartesian) {\n var positions = _this9.cartesian3Towgs84(cartesian, _this9.sdk.viewer);\n _this9.lng = positions.lng;\n _this9.lat = positions.lat;\n _this9.alt = positions.alt;\n _this9.previous = {\n position: _objectSpread({}, _this9.options.position)\n };\n _this9.event.mouse_move(function () {});\n _this9.event.mouse_left(function () {});\n _this9.event.mouse_right(function () {});\n _this9.event.gesture_pinck_start(function () {});\n _this9.event.gesture_pinck_end(function () {});\n _this9.entity.position = new Cesium.CallbackProperty(function () {\n return cartesian;\n }, false);\n if (_classPrivateFieldGet(_positionEditingCallback, _this9)) {\n _classPrivateFieldGet(_positionEditingCallback, _this9).call(_this9);\n _classPrivateFieldSet(_positionEditingCallback, _this9, null);\n }\n _this9.positionEditing = false;\n };\n this.event.mouse_move(moveEvent);\n this.event.mouse_left(leftEvent);\n this.event.mouse_right(function (movement, cartesian) {\n _this9.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this9.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n // 长按取消\n _this9.positionEditing = false;\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n } else {\n _classPrivateFieldSet(_positionEditingCallback, this, null);\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n this.event.destroy();\n this.event = null;\n }\n this.tip && this.tip.destroy();\n this.lng = this.previous.position.lng;\n this.lat = this.previous.position.lat;\n this.alt = this.previous.position.alt;\n this.renewPoint();\n }\n }\n }, {\n key: \"openPositionEditing\",\n value: function openPositionEditing(cd) {\n this.positionEditing = true;\n _classPrivateFieldSet(_positionEditingCallback, this, cd);\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this10 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: '',\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this10.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }, {\n key: \"setCustomView\",\n value: function () {\n var _setCustomView = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee8(val) {\n var camera, cameraPosition84, position, relativePosition, objectsToExclude, _iterator11, _step11, _step11$value, key, value;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee8$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n if (!val) {\n _context12.next = 4;\n break;\n }\n this.options.customView = val;\n _context12.next = 19;\n break;\n case 4:\n camera = this.sdk.viewer.camera;\n cameraPosition84 = this.cartesian3Towgs84(camera.position, this.sdk.viewer);\n position = {\n lng: 0,\n lat: 0\n };\n relativePosition = _objectSpread({}, cameraPosition84);\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context12.next = 16;\n break;\n }\n objectsToExclude = [];\n _iterator11 = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n _step11$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_2___default()(_step11.value, 2), key = _step11$value[0], value = _step11$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n _context12.next = 15;\n return this.getClampToHeight(position, objectsToExclude);\n case 15:\n position.alt = _context12.sent;\n case 16:\n relativePosition = {\n lng: cameraPosition84.lng - position.lng,\n lat: cameraPosition84.lat - position.lat,\n alt: cameraPosition84.alt - position.alt\n };\n this.options.customView = {\n orientation: {\n heading: Cesium.Math.toDegrees(camera.heading),\n pitch: Cesium.Math.toDegrees(camera.pitch),\n roll: Cesium.Math.toDegrees(camera.roll)\n },\n relativePosition: relativePosition\n };\n this.originalOptions && (this.originalOptions.customView = this.options.customView);\n case 19:\n case \"end\":\n return _context12.stop();\n }\n }, _callee8, this);\n }));\n function setCustomView(_x3) {\n return _setCustomView.apply(this, arguments);\n }\n return setCustomView;\n }()\n }], [{\n key: \"create\",\n value: function create(that) {\n var canvas;\n var billboardH = 36;\n var heightMode;\n var position = that.options.position;\n that.originalOptions = that.deepCopyObj(that.options);\n var isGlf = false;\n var superGif;\n var index = 0;\n var font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_26__[\"getFontFamily\"])(that.labelFontFamily) || 'Helvetica';\n var url = that.replaceHost(that.options.billboard.image, that.options.host);\n that._frameImages = [];\n if (url && url.endsWith('gif')) {\n isGlf = true;\n switch (that.options.heightMode) {\n case 2:\n case '2':\n heightMode = Cesium.HeightReference.CLAMP_TO_GROUND;\n break;\n }\n var gifImg = document.createElement('img');\n gifImg.setAttribute('rel:animated_src', url);\n gifImg.setAttribute('rel:auto_play', '1');\n var imgDiv = document.createElement('div');\n imgDiv.appendChild(gifImg);\n var id = Cesium.createGuid();\n superGif = new SuperGif({\n gif: gifImg\n });\n that._superGif = superGif;\n that._superGif.id = id; // 自定义id,用于判断gif实例是否改变\n\n superGif.load(function (status) {\n if (status == 404) {\n canvas = document.createElement('canvas');\n canvas.width = 0;\n canvas.height = 0;\n billboardH = 0;\n if (that.entity) {\n that.entity.billboard.imgWidth = 0;\n that.entity.billboard.imgHeight = 0;\n that.entity.billboard.image = canvas;\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__[\"addCluster\"])(that.sdk, that.entity);\n }\n return;\n }\n if (that._superGif.id != id) {\n return;\n }\n var length = superGif.get_length();\n for (var i = 1; i <= length; i++) {\n superGif.move_to(i);\n that._frameImages.push(superGif.get_canvas().toDataURL());\n }\n canvas = superGif.get_canvas();\n var width = canvas.width;\n var height = canvas.height;\n billboardH = height * (31 / width);\n if (that.entity) {\n that.entity.billboard.imgWidth = width;\n that.entity.billboard.imgHeight = height;\n that.entity.billboard.image = new Cesium.CallbackProperty(function () {\n var img = that._frameImages[index];\n index = index >= that._frameImages.length - 1 ? 0 : index + 1;\n return img;\n }, false);\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__[\"addCluster\"])(that.sdk, that.entity);\n }\n });\n } else {\n var image = new Image();\n image.src = url || that.getSourceRootPath() + '/img/A-ablu-blank.png';\n switch (that.options.heightMode) {\n case 2:\n case '2':\n heightMode = Cesium.HeightReference.CLAMP_TO_GROUND;\n break;\n }\n canvas = document.createElement('canvas');\n image.onload = function () {\n var ratio = image.width / image.height;\n image.width = 100;\n image.height = 100 / ratio;\n var width = image.width;\n var height = image.height;\n var ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n canvas.width = width;\n canvas.height = height;\n ctx.drawImage(image, 0, 0, width, height);\n billboardH = height * (31 / width);\n if (that.entity) {\n that.entity.billboard.imgWidth = width;\n that.entity.billboard.imgHeight = height;\n that.entity.billboard.image = canvas;\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__[\"addCluster\"])(that.sdk, that.entity);\n }\n };\n image.onerror = function (err) {\n canvas.width = 0;\n canvas.height = 0;\n billboardH = 0;\n if (that.entity) {\n that.entity.billboard.imgWidth = 0;\n that.entity.billboard.imgHeight = 0;\n that.entity.billboard.image = canvas;\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_19__[\"addCluster\"])(that.sdk, that.entity);\n }\n };\n }\n that.entity = new Cesium.Entity({\n show: that.options.show,\n id: that.options.id,\n position: Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt),\n billboard: {\n image: isGlf ? new Cesium.CallbackProperty(function () {\n var img = that._frameImages[index];\n index = index >= that._frameImages.length - 1 ? 0 : index + 1;\n return img;\n }, false) : canvas,\n scale: that.options.billboard.scale,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n heightReference: heightMode,\n color: that.options.billboard.show ? undefined : new Cesium.Color(1.0, 1.0, 1.0, 0),\n width: 31,\n height: new Cesium.CallbackProperty(function () {\n return billboardH;\n }, false),\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM\n // pixelOffset: new Cesium.CallbackProperty(function () {\n // return new Cesium.Cartesian2(\n // 0,\n // -(billboardH / 2) * that.options.billboard.scale\n // )\n // }, false)\n },\n label: {\n show: that.options.label.show,\n text: that.options.label.text,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n heightReference: heightMode,\n font: that.options.label.fontSize + 'px ' + font,\n fillColor: Cesium.Color.fromCssColorString(that.options.label.color),\n // verticalOrigin : Cesium.VerticalOrigin.BOTTOM,\n pixelOffset: new Cesium.CallbackProperty(function () {\n if (that.options.billboard.show) {\n return new Cesium.Cartesian2(0, -billboardH * that.options.billboard.scale - that.options.label.fontSize / 2 - 5);\n } else {\n return new Cesium.Cartesian2(0, -that.options.label.fontSize / 2 - 5);\n }\n }, false),\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 1,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE\n }\n });\n that.entity.billboard.imgWidth = 31;\n that.entity.billboard.imgHeight = 36;\n that.entity.position = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt);\n if (that.options.heightMode == 3) {\n that.updateHeight();\n }\n that.renewPoint();\n // that.diffuseShow = that.options.diffuseShow\n // that.scanShow = that.options.scanShow\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_22__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_28__[\"setSplitDirection\"])(0, that.options.id);\n }\n if (that.options.billboard.isSelect) {\n that.selectBillboard();\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_17__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BillboardObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQmlsbGJvYXJkT2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0JpbGxib2FyZE9iamVjdC9pbmRleC5qcz9hNTRmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDngrlcclxuICovXHJcbmltcG9ydCB7IGdldEhvc3QsIGdldFRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnXHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJ1xyXG5pbXBvcnQgY3lfc2xpZGVyIGZyb20gJy4uLy4uL0VsZW1lbnQvY3lfaHRtbF9zbGlkZXInXHJcbmltcG9ydCBjeV90YWJzIGZyb20gJy4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzJ1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSAnLi4vLi4vRWxlbWVudC9yaWNoVGV4dCdcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gJy4vX2VsZW1lbnQnXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2luZGV4J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IHtcclxuICBhZGRDbHVzdGVyLFxyXG4gIHJlbW92ZV9lbnRpdHlfZnJvbV9jbHVzdGVyXHJcbn0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2NsdXN0ZXIvY2x1c3RlcidcclxuaW1wb3J0IENpcmNsZURpZmZ1c2UgZnJvbSAnLi4vQ2lyY2xlRGlmZnVzZSdcclxuaW1wb3J0IFJhZGFyU2NhbiBmcm9tICcuLi9SYWRhclNjYW4nXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQge1xyXG4gIGdldEJpbGxib2FyZERlZmF1bHRVcmwsXHJcbiAgc2V0QmlsbGJvYXJkRGVmYXVsdFVybCxcclxuICBnZXRHcm91bmRDb3ZlclxyXG59IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbmltcG9ydCB7IFByb2ogfSBmcm9tICcuLi8uLi8uLi9Ub29scy9wcm9qJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCdcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHksIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7XHJcbiAgc2V0U3BsaXREaXJlY3Rpb24sXHJcbiAgc3luY1NwbGl0RGF0YSxcclxuICBzZXRBY3RpdmVJZCxcclxuICBnZXRTdGF0ZVxyXG59IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHtcclxuICBzZXRBY3RpdmVWaWV3ZXIsXHJcbiAgY2xvc2VSb3RhdGVBcm91bmQsXHJcbiAgY2xvc2VWaWV3Rm9sbG93XHJcbn0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmltcG9ydCB7IGdldEdvb2RzTGlzdCB9IGZyb20gJy4uLy4uLy4uL1Rvb2xzL2dldEdvb2RzTGlzdCdcclxuXHJcbmNsYXNzIEJpbGxib2FyZE9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gICNfcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2sgPSBudWxsXHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQGRlc2NyaXB0aW9uIOeCueagh+azqFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOagh+azqGlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufSDmoIfms6jmlbTkvZPnmoTmmL7pmpBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLnBvc2l0aW9uPXt9IOW/heWhq++8jOS9jee9rlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnBvc2l0aW9uLmxuZyDnu4/luqZcclxuICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5wb3NpdGlvbi5sYXQg57qs5bqmXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMucG9zaXRpb24uYWx0IOmrmOW6plxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmhlaWdodE1vZGU9MyDpq5jluqbmqKHlvI/vvIgw77ya5rW35ouU6auY5bqm77ybMe+8muebuOWvueWcsOihqO+8mzLvvJrkvp3pmYTlnLDooag7IDPvvJrkvp3pmYTmqKHlnovvvIlcclxuICAgKiBAcGFyYW0gW29wdGlvbnMuc2NhbGVCeURpc3RhbmNlPXRydWVdIHtib29sZWFufSDmmK/lkKblvIDlkK/ot5/pmo/op4bph47nvKnmlL5cclxuICAgKiBAcGFyYW0gW29wdGlvbnMubmVhcj0yMDAwXSB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5Hot53nprtcclxuICAgKiBAcGFyYW0gW29wdGlvbnMuZmFyPTEwMDAwMF0gIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/nOi3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmJpbGxib2FyZCB7b2JqZWN0fSDlm77moIflj4LmlbBcclxuICAgKiBAcGFyYW0gW29wdGlvbnMuYmlsbGJvYXJkLnNob3c9dHJ1ZV0ge2Jvb2xlYW59IOWbvuagh+aYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmJpbGxib2FyZC5pbWFnZSB7c3RyaW5nfSDlm77moIfot6/lvoRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5iaWxsYm9hcmQuZGVmYXVsdEltYWdlIHtzdHJpbmd9IOm7mOiupOWbvuagh+eahOWUr+S4gOagh+ivhlxyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5iaWxsYm9hcmQuc2NhbGU9M10ge251bWJlcn0g5Zu+5qCH5pS+5aSn5YCN5pWwXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5paH5a2X5Y+C5pWwXHJcbiAgICogQHBhcmFtIFtvcHRpb25zLmxhYmVsLnRleHRdIHtzdHJpbmd9IOaWh+Wtl+WGheWuuVxyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5sYWJlbC5zaG93PXRydWVdIHtib29sZWFufSDmloflrZfmmL7pmpBcclxuICAgKiBAcGFyYW0gW29wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wXSB7bnVtYmVyfSDmloflrZflrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5sYWJlbC5mb250U2l6ZT0zOV0ge251bWJlcn0g5paH5a2X5aSn5bCPLCDljZXkvY1weFxyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5sYWJlbC5jb2xvcj0jMDBmZmZmXSB7c3RyaW5nfSDmloflrZfpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30gIOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucy5hdHRyaWJ1dGUudnI9e30g5YWo5pmv5Zu+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQ9W11dIHthcnJheX0g5YWo5pmv5Zu+5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbXS5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W10udXJsIHtzdHJpbmd9IOWcsOWdgFxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwdGlvbnMuYXR0cmlidXRlLmNhbWVyYT17fSDmkYTlg4/lpLRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQ9W11dIHthcnJheX0g5pGE5YOP5aS05YaF5a65XHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuYXR0cmlidXRlLmlzYz17fSBpc2NcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUuaXNjLmNvbnRlbnQ9W11dIHthcnJheX0gSVND5YaF5a65XHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuYXR0cmlidXRlLmdvb2RzPXt9IOeJqei1hFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50PVtdXSB7YXJyYXl9IOeJqei1hOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50W10uSUQge3N0cmluZ30gSURcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFtdLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRbXS5jbnQge3N0cmluZ30g5pWw6YePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmljaFRleHRDb250ZW50IHtzdHJpbmd9IOWvjOaWh+acrOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIFxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICpAcGFyYW0gX0RpYWxvZyB7b2JqZWN0fSDlvLnmoYbkuovku7ZcclxuICAgKkBwYXJhbSBfRGlhbG9nLmNvbmZpcm1DYWxsQmFjayB7ZnVuY3Rpb259IOW8ueahhuehruiupOaXtueahOWbnuiwg1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5vcHRpb25zLm5lYXIgPSBvcHRpb25zLm5lYXIgfHwgb3B0aW9ucy5uZWFyID09PSAwID8gb3B0aW9ucy5uZWFyIDogMjAwMFxyXG4gICAgdGhpcy5vcHRpb25zLmZhciA9IG9wdGlvbnMuZmFyIHx8IG9wdGlvbnMuZmFyID09PSAwID8gb3B0aW9ucy5mYXIgOiAxMDAwMDBcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPVxyXG4gICAgICBvcHRpb25zLnNjYWxlQnlEaXN0YW5jZSB8fCBvcHRpb25zLnNjYWxlQnlEaXN0YW5jZSA9PT0gZmFsc2VcclxuICAgICAgICA/IG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgICAgICAgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9XHJcbiAgICAgIG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPVxyXG4gICAgICBvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDAgPyBvcHRpb25zLmhlaWdodE1vZGUgOiAzXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkID0gb3B0aW9ucy5iaWxsYm9hcmQgPSBvcHRpb25zLmJpbGxib2FyZCB8fCB7fVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmJpbGxib2FyZC5pc1NlbGVjdCA9IG9wdGlvbnMuYmlsbGJvYXJkLmlzU2VsZWN0IHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLnNob3cgPVxyXG4gICAgICBvcHRpb25zLmJpbGxib2FyZC5zaG93IHx8IG9wdGlvbnMuYmlsbGJvYXJkLnNob3cgPT09IGZhbHNlXHJcbiAgICAgICAgPyBvcHRpb25zLmJpbGxib2FyZC5zaG93XHJcbiAgICAgICAgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmltYWdlID1cclxuICAgICAgb3B0aW9ucy5iaWxsYm9hcmQuaW1hZ2UgfHxcclxuICAgICAgZ2V0QmlsbGJvYXJkRGVmYXVsdFVybChvcHRpb25zLmJpbGxib2FyZC5kZWZhdWx0SW1hZ2UpIHx8IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL0EtYWJsdS1ibGFuay5wbmcnXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmRlZmF1bHRJbWFnZSA9IG9wdGlvbnMuYmlsbGJvYXJkLmRlZmF1bHRJbWFnZVxyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZSA9XHJcbiAgICAgIG9wdGlvbnMuYmlsbGJvYXJkLnNjYWxlIHx8IG9wdGlvbnMuYmlsbGJvYXJkLnNjYWxlID09PSAwXHJcbiAgICAgICAgPyBvcHRpb25zLmJpbGxib2FyZC5zY2FsZVxyXG4gICAgICAgIDogM1xyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0ID0gb3B0aW9ucy5sYWJlbC50ZXh0IHx8IHRoaXMub3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9XHJcbiAgICAgIG9wdGlvbnMubGFiZWwuc2hvdyB8fCBvcHRpb25zLmxhYmVsLnNob3cgPT09IGZhbHNlXHJcbiAgICAgICAgPyBvcHRpb25zLmxhYmVsLnNob3dcclxuICAgICAgICA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgMzlcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyMwMGZmZmYnXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IE51bWJlcihcclxuICAgICAgTnVtYmVyKG9wdGlvbnMucG9zaXRpb24ubG5nIHx8IDApLnRvRml4ZWQoOClcclxuICAgIClcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSBOdW1iZXIoXHJcbiAgICAgIE51bWJlcihvcHRpb25zLnBvc2l0aW9uLmxhdCB8fCAwKS50b0ZpeGVkKDgpXHJcbiAgICApXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKFxyXG4gICAgICBOdW1iZXIob3B0aW9ucy5wb3NpdGlvbi5hbHQgfHwgMCkudG9GaXhlZCgyKVxyXG4gICAgKVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmRpZmZ1c2VTaG93ID0gb3B0aW9ucy5kaWZmdXNlU2hvdyB8fCBmYWxzZVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmRpZmZ1c2VSYWRpdXMgPSAob3B0aW9ucy5kaWZmdXNlUmFkaXVzIHx8IG9wdGlvbnMuZGlmZnVzZVJhZGl1cyA9PT0gMCkgPyBvcHRpb25zLmRpZmZ1c2VSYWRpdXMgOiAxMFxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmRpZmZ1c2VEdXJhdGlvbiA9IChvcHRpb25zLmRpZmZ1c2VEdXJhdGlvbiB8fCBvcHRpb25zLmRpZmZ1c2VEdXJhdGlvbiA9PT0gMCkgPyBvcHRpb25zLmRpZmZ1c2VEdXJhdGlvbiA6IDIwMDBcclxuICAgIC8vIHRoaXMub3B0aW9ucy5kaWZmdXNlQ29sb3IgPSBvcHRpb25zLmRpZmZ1c2VDb2xvciB8fCBcIiNGRjAwMDBcIlxyXG4gICAgLy8gdGhpcy5vcHRpb25zLnNjYW5TaG93ID0gb3B0aW9ucy5zY2FuU2hvdyB8fCBmYWxzZVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLnNjYW5SYWRpdXMgPSAob3B0aW9ucy5zY2FuUmFkaXVzIHx8IG9wdGlvbnMuc2NhblJhZGl1cyA9PT0gMCkgPyBvcHRpb25zLnNjYW5SYWRpdXMgOiAxMFxyXG4gICAgLy8gdGhpcy5vcHRpb25zLnNjYW5EdXJhdGlvbiA9IChvcHRpb25zLnNjYW5EdXJhdGlvbiB8fCBvcHRpb25zLnNjYW5EdXJhdGlvbiA9PT0gMCkgPyBvcHRpb25zLnNjYW5EdXJhdGlvbiA6IDIwMDBcclxuICAgIC8vIHRoaXMub3B0aW9ucy5zY2FuQ29sb3IgPSBvcHRpb25zLnNjYW5Db2xvciB8fCBcIiNGRjAwMDBcIlxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPVxyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmlzYyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuaXNjIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmlzYy5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5pc2MuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCB8fCBbXVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGUgPSBvcHRpb25zLmNvb3JkaW5hdGUgfHwgJydcclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLl9lbG1zID0ge31cclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlUG9zID0gb3B0aW9ucy5hdHRyaWJ1dGVQb3MgfHwge1xyXG4gICAgLy8gICB4OiA2MCxcclxuICAgIC8vICAgeTogNjAsXHJcbiAgICAvLyAgIHdpZHRoOiAyMDAsXHJcbiAgICAvLyAgIGhlaWdodDogMTIwXHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmVudGl0eVxyXG4gICAgdGhpcy5fcHJvaiA9IHRoaXMuc2RrLnByb2pcclxuXHJcblxyXG5cclxuXHJcbiAgICAvLyAvLyDpqozor4HnianotYRcclxuICAgIC8vIGxldCBnb29kc0NvbnRlbnQgPSBbXVxyXG4gICAgLy8gaWYob3B0aW9ucy5hdHRyaWJ1dGUgJiYgb3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgJiYgb3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQpKSB7XHJcbiAgICAvLyAgIGdvb2RzQ29udGVudCA9IFsuLi5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XVxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gW11cclxuICAgIC8vIGlmIChnb29kc0NvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICBnZXRHb29kc0xpc3QoKS50aGVuKChsaXN0KT0+e1xyXG4gICAgLy8gICAgIGZvciAobGV0IGkgPSBnb29kc0NvbnRlbnQubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAvLyAgICAgICBsZXQgZmFsZyA9IGZhbHNlXHJcbiAgICAvLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcclxuICAgIC8vICAgICAgICAgaWYgKGdvb2RzQ29udGVudFtpXS5JRCA9PT0gbGlzdFtqXS5JRCkge1xyXG4gICAgLy8gICAgICAgICAgIGZhbGcgPSB0cnVlXHJcbiAgICAvLyAgICAgICAgICAgYnJlYWtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgaWYoIWZhbGcpIHtcclxuICAgIC8vICAgICAgICAgZ29vZHNDb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSBbLi4uZ29vZHNDb250ZW50XVxyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gfVxyXG5cclxuXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgQmlsbGJvYXJkT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnQmlsbGJvYXJkT2JqZWN0J1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICBsZXQgY2FudmFzXHJcbiAgICBsZXQgYmlsbGJvYXJkSCA9IDM2XHJcbiAgICBsZXQgaGVpZ2h0TW9kZVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uXHJcbiAgICB0aGF0Lm9yaWdpbmFsT3B0aW9ucyA9IHRoYXQuZGVlcENvcHlPYmoodGhhdC5vcHRpb25zKVxyXG4gICAgbGV0IGlzR2xmID0gZmFsc2VcclxuICAgIGxldCBzdXBlckdpZlxyXG4gICAgbGV0IGluZGV4ID0gMFxyXG5cclxuICAgIGxldCBmb250ID0gZ2V0Rm9udEZhbWlseSh0aGF0LmxhYmVsRm9udEZhbWlseSkgfHwgJ0hlbHZldGljYSdcclxuICAgIGxldCB1cmwgPSB0aGF0LnJlcGxhY2VIb3N0KHRoYXQub3B0aW9ucy5iaWxsYm9hcmQuaW1hZ2UsIHRoYXQub3B0aW9ucy5ob3N0KVxyXG4gICAgdGhhdC5fZnJhbWVJbWFnZXMgPSBbXVxyXG4gICAgaWYgKHVybCAmJiB1cmwuZW5kc1dpdGgoJ2dpZicpKSB7XHJcbiAgICAgIGlzR2xmID0gdHJ1ZVxyXG4gICAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgaGVpZ2h0TW9kZSA9IENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5EXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZ2lmSW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJylcclxuICAgICAgZ2lmSW1nLnNldEF0dHJpYnV0ZSgncmVsOmFuaW1hdGVkX3NyYycsIHVybClcclxuICAgICAgZ2lmSW1nLnNldEF0dHJpYnV0ZSgncmVsOmF1dG9fcGxheScsICcxJylcclxuICAgICAgY29uc3QgaW1nRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgaW1nRGl2LmFwcGVuZENoaWxkKGdpZkltZylcclxuICAgICAgbGV0IGlkID0gQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgICBzdXBlckdpZiA9IG5ldyBTdXBlckdpZih7IGdpZjogZ2lmSW1nIH0pXHJcbiAgICAgIHRoYXQuX3N1cGVyR2lmID0gc3VwZXJHaWZcclxuICAgICAgdGhhdC5fc3VwZXJHaWYuaWQgPSBpZCAgLy8g6Ieq5a6a5LmJaWTvvIznlKjkuo7liKTmlq1naWblrp7kvovmmK/lkKbmlLnlj5hcclxuXHJcbiAgICAgIHN1cGVyR2lmLmxvYWQoZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gMFxyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IDBcclxuICAgICAgICAgIGJpbGxib2FyZEggPSAwXHJcbiAgICAgICAgICBpZiAodGhhdC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmltZ1dpZHRoID0gMFxyXG4gICAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gMFxyXG4gICAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSBjYW52YXNcclxuICAgICAgICAgICAgYWRkQ2x1c3Rlcih0aGF0LnNkaywgdGhhdC5lbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoYXQuX3N1cGVyR2lmLmlkICE9IGlkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHN1cGVyR2lmLmdldF9sZW5ndGgoKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdXBlckdpZi5tb3ZlX3RvKGkpXHJcbiAgICAgICAgICB0aGF0Ll9mcmFtZUltYWdlcy5wdXNoKHN1cGVyR2lmLmdldF9jYW52YXMoKS50b0RhdGFVUkwoKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FudmFzID0gc3VwZXJHaWYuZ2V0X2NhbnZhcygpXHJcbiAgICAgICAgbGV0IHdpZHRoID0gY2FudmFzLndpZHRoXHJcbiAgICAgICAgbGV0IGhlaWdodCA9IGNhbnZhcy5oZWlnaHRcclxuICAgICAgICBiaWxsYm9hcmRIID0gaGVpZ2h0ICogKDMxIC8gd2lkdGgpXHJcbiAgICAgICAgaWYgKHRoYXQuZW50aXR5KSB7XHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSB3aWR0aFxyXG4gICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmltZ0hlaWdodCA9IGhlaWdodFxyXG4gICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoYXQuX2ZyYW1lSW1hZ2VzW2luZGV4XVxyXG4gICAgICAgICAgICBpbmRleCA9IGluZGV4ID49IHRoYXQuX2ZyYW1lSW1hZ2VzLmxlbmd0aCAtIDEgPyAwIDogaW5kZXggKyAxXHJcbiAgICAgICAgICAgIHJldHVybiBpbWdcclxuICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgYWRkQ2x1c3Rlcih0aGF0LnNkaywgdGhhdC5lbnRpdHkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpXHJcbiAgICAgIGltYWdlLnNyYyA9XHJcbiAgICAgICAgdXJsIHx8XHJcbiAgICAgICAgdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvQS1hYmx1LWJsYW5rLnBuZydcclxuICAgICAgc3dpdGNoICh0aGF0Lm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGhlaWdodE1vZGUgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IHJhdGlvID0gaW1hZ2Uud2lkdGggLyBpbWFnZS5oZWlnaHRcclxuICAgICAgICBpbWFnZS53aWR0aCA9IDEwMFxyXG4gICAgICAgIGltYWdlLmhlaWdodCA9IDEwMCAvIHJhdGlvXHJcbiAgICAgICAgbGV0IHdpZHRoID0gaW1hZ2Uud2lkdGhcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSlcclxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aFxyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHRcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAgICAgIGJpbGxib2FyZEggPSBoZWlnaHQgKiAoMzEgLyB3aWR0aClcclxuICAgICAgICBpZiAodGhhdC5lbnRpdHkpIHtcclxuICAgICAgICAgIHRoYXQuZW50aXR5LmJpbGxib2FyZC5pbWdXaWR0aCA9IHdpZHRoXHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gaGVpZ2h0XHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSBjYW52YXNcclxuICAgICAgICAgIGFkZENsdXN0ZXIodGhhdC5zZGssIHRoYXQuZW50aXR5KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDBcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMFxyXG4gICAgICAgIGJpbGxib2FyZEggPSAwXHJcbiAgICAgICAgaWYgKHRoYXQuZW50aXR5KSB7XHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSAwXHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gMFxyXG4gICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gY2FudmFzXHJcbiAgICAgICAgICBhZGRDbHVzdGVyKHRoYXQuc2RrLCB0aGF0LmVudGl0eSlcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5lbnRpdHkgPSBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgcG9zaXRpb24ubG5nLFxyXG4gICAgICAgIHBvc2l0aW9uLmxhdCxcclxuICAgICAgICBwb3NpdGlvbi5hbHRcclxuICAgICAgKSxcclxuICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgaW1hZ2U6IGlzR2xmID8gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIGxldCBpbWcgPSB0aGF0Ll9mcmFtZUltYWdlc1tpbmRleF1cclxuICAgICAgICAgIGluZGV4ID0gaW5kZXggPj0gdGhhdC5fZnJhbWVJbWFnZXMubGVuZ3RoIC0gMSA/IDAgOiBpbmRleCArIDFcclxuICAgICAgICAgIHJldHVybiBpbWdcclxuICAgICAgICB9LCBmYWxzZSkgOiBjYW52YXMsXHJcbiAgICAgICAgc2NhbGU6IHRoYXQub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGUsXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgaGVpZ2h0UmVmZXJlbmNlOiBoZWlnaHRNb2RlLFxyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMuYmlsbGJvYXJkLnNob3dcclxuICAgICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgICA6IG5ldyBDZXNpdW0uQ29sb3IoMS4wLCAxLjAsIDEuMCwgMCksXHJcbiAgICAgICAgd2lkdGg6IDMxLFxyXG4gICAgICAgIGhlaWdodDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBiaWxsYm9hcmRIXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NXHJcbiAgICAgICAgLy8gcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgIC8vICAgICAwLFxyXG4gICAgICAgIC8vICAgICAtKGJpbGxib2FyZEggLyAyKSAqIHRoYXQub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVcclxuICAgICAgICAvLyAgIClcclxuICAgICAgICAvLyB9LCBmYWxzZSlcclxuICAgICAgfSxcclxuICAgICAgbGFiZWw6IHtcclxuICAgICAgICBzaG93OiB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyxcclxuICAgICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubGFiZWwudGV4dCxcclxuICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0R3JvdW5kQ292ZXIoKSA/IHVuZGVmaW5lZCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICBoZWlnaHRSZWZlcmVuY2U6IGhlaWdodE1vZGUsXHJcbiAgICAgICAgZm9udDogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplICsgJ3B4ICcgKyBmb250LFxyXG4gICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IpLFxyXG4gICAgICAgIC8vIHZlcnRpY2FsT3JpZ2luIDogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuYmlsbGJvYXJkLnNob3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydGVzaWFuMihcclxuICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgIC1iaWxsYm9hcmRIICogdGhhdC5vcHRpb25zLmJpbGxib2FyZC5zY2FsZSAtXHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplIC8gMiAtXHJcbiAgICAgICAgICAgICAgNVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgLXRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSAvIDIgLSA1XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgICAgb3V0bGluZVdpZHRoOiAxLFxyXG4gICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGF0LmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSAzMVxyXG4gICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmltZ0hlaWdodCA9IDM2XHJcbiAgICB0aGF0LmVudGl0eS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICBwb3NpdGlvbi5sbmcsXHJcbiAgICAgIHBvc2l0aW9uLmxhdCxcclxuICAgICAgcG9zaXRpb24uYWx0XHJcbiAgICApXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLmhlaWdodE1vZGUgPT0gMykge1xyXG4gICAgICB0aGF0LnVwZGF0ZUhlaWdodCgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5yZW5ld1BvaW50KClcclxuICAgIC8vIHRoYXQuZGlmZnVzZVNob3cgPSB0aGF0Lm9wdGlvbnMuZGlmZnVzZVNob3dcclxuICAgIC8vIHRoYXQuc2NhblNob3cgPSB0aGF0Lm9wdGlvbnMuc2NhblNob3dcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5iaWxsYm9hcmQuaXNTZWxlY3QpIHtcclxuICAgICAgdGhhdC5zZWxlY3RCaWxsYm9hcmQoKVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyDpgInkuK3mlYjmnpxcclxuICBzZWxlY3RCaWxsYm9hcmQoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY3JlZW5TcGFjZUV2ZW50SGFuZGxlci5zZXRJbnB1dEFjdGlvbihmdW5jdGlvbiAoY2xpY2spIHtcclxuICAgICAgdmFyIHBpY2tlZE9iamVjdCA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5waWNrKGNsaWNrLnBvc2l0aW9uKVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgQ2VzaXVtLmRlZmluZWQocGlja2VkT2JqZWN0KSAmJlxyXG4gICAgICAgIHBpY2tlZE9iamVjdC5pZCAmJlxyXG4gICAgICAgIHBpY2tlZE9iamVjdC5pZC5pZCA9PT0gJ2FpcnBvcnRCaWxsYm9hcmQnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICh0aGF0LmVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICAgIC8vIOWmguaenOeCueWHu+eahOaYr0JpbGxib2FyZO+8jOe7meWug+a3u+WKoOmAieS4reaViOaenFxyXG4gICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLllFTExPVyAvLyDmlLnlj5jpopzoibJcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5Y+v5Lul5re75Yqg5pu05aSa6YCJ5Lit5pWI5p6c77yM5L6L5aaC6L655qGG562JXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoYXQuZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICAgICAgdGhhdC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLldISVRFXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9DTElDSylcclxuICB9XHJcbiAgZ2V0IGF0dHJpYnV0ZVNlbGVjdCgpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn5a+M5paH5pysJyxcclxuICAgICAgICB2YWx1ZTogJ+WvjOaWh+acrCcsXHJcbiAgICAgICAga2V5OiAncmljaFRleHQnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB2YWx1ZTogJ+mTvuaOpScsXHJcbiAgICAgICAga2V5OiAnbGluaydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdJUOaRhOWDj+WktCcsXHJcbiAgICAgICAgdmFsdWU6ICdJUOaRhOWDj+WktCcsXHJcbiAgICAgICAga2V5OiAnY2FtZXJhJ1xyXG4gICAgICB9LFxyXG4gICAgICAvLyB7XHJcbiAgICAgIC8vICAgbmFtZTogJ0lTQ+aRhOWDj+WktCcsXHJcbiAgICAgIC8vICAgdmFsdWU6ICdJU0PmkYTlg4/lpLQnLFxyXG4gICAgICAvLyAgIGtleTogJ2lzYydcclxuICAgICAgLy8gfSxcclxuICAgICAgLy8ge1xyXG4gICAgICAvLyAgIG5hbWU6ICfkvKDmhJ/lmagnLFxyXG4gICAgICAvLyAgIHZhbHVlOiAn5Lyg5oSf5ZmoJyxcclxuICAgICAgLy8gICBrZXk6ICdzZW5zb3InXHJcbiAgICAgIC8vIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyxcclxuICAgICAgICB2YWx1ZTogJ+WFqOaZr+WbvicsXHJcbiAgICAgICAga2V5OiAndnInXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn54mp6LWEJyxcclxuICAgICAgICB2YWx1ZTogJ+eJqei1hCcsXHJcbiAgICAgICAga2V5OiAnZ29vZHMnXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICghdGhpcy5pc1Nob3dWaWV3KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gdlxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuc2hvdyA9IHRoaXMub3B0aW9ucy5zaG93KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4pIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4uY2hlY2tlZCA9IHRoaXMub3B0aW9ucy5zaG93XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1Nob3dWaWV3ID0gZmFsc2VcclxuICAgIC8vIGlmICh2KSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLmRpZmZ1c2VTaG93KSB7XHJcbiAgICAvLyAgICAgdGhpcy5kaWZmdXNlU2hvdyA9IHRydWVcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBpZiAodGhpcy5zY2FuU2hvdykge1xyXG4gICAgLy8gICAgIHRoaXMuc2NhblNob3cgPSB0cnVlXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICBpZiAodGhpcy5kaWZmdXNlKSB7XHJcbiAgICAvLyAgICAgdGhpcy5kaWZmdXNlLnNob3cgPSB2XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgaWYgKHRoaXMuc2Nhbikge1xyXG4gICAgLy8gICAgIHRoaXMuc2Nhbi5zaG93ID0gdlxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IHYgPyB2IDogMFxyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSB2IHx8IHYgPT0gMCA/IHYgOiAzXHJcbiAgICBsZXQgaGVpZ2h0TW9kZVxyXG4gICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBoZWlnaHRNb2RlID0gQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5OT05FXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBoZWlnaHRNb2RlID0gQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5OT05FXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBoZWlnaHRNb2RlID0gQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkRcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICczJzpcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGhlaWdodE1vZGUgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLk5PTkVcclxuICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdSYWRhclNjYW5TdGVyZW9zY29waWMnICYmIHZhbHVlLmVudGl0eSkge1xyXG4gICAgICAgICAgICBvYmplY3RzVG9FeGNsdWRlLnB1c2godmFsdWUuZW50aXR5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uLCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGggPT4ge1xyXG4gICAgICAgICAgdGhpcy5hbHQgPSBOdW1iZXIoaC50b0ZpeGVkKDIpKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaGVpZ2h0UmVmZXJlbmNlID0gaGVpZ2h0TW9kZVxyXG4gICAgICB0aGlzLmVudGl0eS5sYWJlbC5oZWlnaHRSZWZlcmVuY2UgPSBoZWlnaHRNb2RlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0XHJcbiAgfVxyXG4gIHNldCBsYWJlbFRleHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQgPSB2XHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHZcclxuICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5sYWJlbC50ZXh0ID0gdiArICcnKVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFRleHQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbFRleHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgfVxyXG4gIHNldCBsbmcodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IE51bWJlcihOdW1iZXIodikudG9GaXhlZCg4KSlcclxuICAgIC8vIHRoaXMuc2NhbiAmJiAodGhpcy5zY2FuLmxuZyA9IHYpXHJcbiAgICAvLyB0aGlzLmRpZmZ1c2UgJiYgKHRoaXMuZGlmZnVzZS5sbmcgPSB2KVxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgIHRoaXMuY29vcmRpbmF0ZSA9IHRoaXMub3B0aW9ucy5jb29yZGluYXRlXHJcbiAgICB0aGlzLl9wcm9qQ29udmVydCAmJiB0aGlzLl9wcm9qQ29udmVydCgpXHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGF0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRcclxuICB9XHJcbiAgc2V0IGxhdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDgpKVxyXG4gICAgLy8gdGhpcy5zY2FuICYmICh0aGlzLnNjYW4ubGF0ID0gdilcclxuICAgIC8vIHRoaXMuZGlmZnVzZSAmJiAodGhpcy5kaWZmdXNlLmxhdCA9IHYpXHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG4gICAgdGhpcy5jb29yZGluYXRlID0gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGVcclxuICAgIHRoaXMuX3Byb2pDb252ZXJ0ICYmIHRoaXMuX3Byb2pDb252ZXJ0KClcclxuICAgIHRoaXMuX2VsbXMubGF0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhbHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gIH1cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoMikpXHJcbiAgICAvLyB0aGlzLnNjYW4gJiYgKHRoaXMuc2Nhbi5hbHQgPSB2KVxyXG4gICAgLy8gdGhpcy5kaWZmdXNlICYmICh0aGlzLmRpZmZ1c2UuYWx0ID0gdilcclxuICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB0aGlzLmNvb3JkaW5hdGUgPSB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZVxyXG4gIH1cclxuXHJcbiAgZ2V0IG5lYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm5lYXJcclxuICB9XHJcbiAgc2V0IG5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMuZmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG4gICAgdGhpcy5fZWxtcy5uZWFyICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubmVhci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuZWFyXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mYXJcclxuICB9XHJcbiAgc2V0IGZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLm5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5mYXIgPSBmYXJcclxuICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB0aGlzLl9lbG1zLmZhciAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmZhci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBzY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgc2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UgJiZcclxuICAgICAgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYmlsbGJvYXJkU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLnNob3dcclxuICB9XHJcbiAgc2V0IGJpbGxib2FyZFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zaG93ID0gdlxyXG4gICAgdGhpcy5lbnRpdHkgJiZcclxuICAgICAgKHRoaXMuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2hvd1xyXG4gICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgOiBuZXcgQ2VzaXVtLkNvbG9yKDEuMCwgMS4wLCAxLjAsIDApKVxyXG4gICAgdGhpcy5fZWxtcy5iaWxsYm9hcmRTaG93ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYmlsbGJvYXJkU2hvdy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYmlsbGJvYXJkSW1hZ2UoKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5vcHRpb25zLmJpbGxib2FyZC5pbWFnZVxyXG4gICAgaWYgKHVybCAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIC8v6K+05piO5piv5pys5Zyw55qEanNvbu+8jOWcqOejgeebmOS4reWtmOWcqOeahFxyXG4gICAgICBpZiAoIXVybC5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QpIHtcclxuICAgICAgICAgIGxldCBvID0gbmV3IFVSTCh1cmwsIHRoaXMub3B0aW9ucy5ob3N0KVxyXG4gICAgICAgICAgdXJsID0gby5ocmVmXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsXHJcbiAgfVxyXG4gIHNldCBiaWxsYm9hcmRJbWFnZSh2KSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmltYWdlID0gdGhpcy5yZXBsYWNlSG9zdCh2LCB0aGlzLm9wdGlvbnMuaG9zdClcclxuICAgIGxldCB1cmwgPVxyXG4gICAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmltYWdlIHx8XHJcbiAgICAgIGdldEJpbGxib2FyZERlZmF1bHRVcmwodGhpcy5vcHRpb25zLmJpbGxib2FyZC5kZWZhdWx0SW1hZ2UpIHx8XHJcbiAgICAgIHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL0EtYWJsdS1ibGFuay5wbmcnXHJcblxyXG4gICAgdGhpcy5fZWxtcy5iaWxsYm9hcmRJbWFnZSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmJpbGxib2FyZEltYWdlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5zcmMgPSB1cmxcclxuICAgICAgfSlcclxuXHJcbiAgICBsZXQgaXNHbGYgPSBmYWxzZVxyXG4gICAgbGV0IHN1cGVyR2lmXHJcbiAgICBpZiAoX3RoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZSAmJiBfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlLmdldFZhKSB7IH1cclxuICAgIGlmICh1cmwgJiYgdXJsLmVuZHNXaXRoKCdnaWYnKSkge1xyXG4gICAgICBpc0dsZiA9IHRydWVcclxuXHJcbiAgICAgIGxldCBnaWZJbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKVxyXG4gICAgICBnaWZJbWcuc2V0QXR0cmlidXRlKCdyZWw6YW5pbWF0ZWRfc3JjJywgdXJsKVxyXG4gICAgICBnaWZJbWcuc2V0QXR0cmlidXRlKCdyZWw6YXV0b19wbGF5JywgJzEnKVxyXG4gICAgICBjb25zdCBpbWdEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICBpbWdEaXYuYXBwZW5kQ2hpbGQoZ2lmSW1nKVxyXG4gICAgICBsZXQgaWQgPSBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgICAgIHN1cGVyR2lmID0gbmV3IFN1cGVyR2lmKHsgZ2lmOiBnaWZJbWcgfSlcclxuICAgICAgdGhpcy5fc3VwZXJHaWYgPSBzdXBlckdpZlxyXG4gICAgICB0aGlzLl9zdXBlckdpZi5pZCA9IGlkXHJcbiAgICAgIGxldCBiaWxsYm9hcmRIID0gMzZcclxuICAgICAgbGV0IGluZGV4ID0gMFxyXG4gICAgICBfdGhpcy5fZnJhbWVJbWFnZXMgPSBbXVxyXG4gICAgICBzdXBlckdpZi5sb2FkKGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgbGV0IHdpZHRoID0gMzFcclxuICAgICAgICAgIGxldCBoZWlnaHQgPSAzNlxyXG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IDBcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSAwXHJcbiAgICAgICAgICBiaWxsYm9hcmRIID0gMFxyXG4gICAgICAgICAgX3RoaXMuZW50aXR5LmJpbGxib2FyZC5pbWdXaWR0aCA9IDBcclxuICAgICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gMFxyXG4gICAgICAgICAgX3RoaXMuZW50aXR5ICYmIChfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gY2FudmFzKVxyXG4gICAgICAgICAgX3RoaXMuZW50aXR5LmJpbGxib2FyZC5oZWlnaHQgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMFxyXG4gICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICBfdGhpcy5lbnRpdHkubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIDApXHJcbiAgICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICAgIGJpbGxib2FyZEggPSBoZWlnaHQgKiAoMzEgLyB3aWR0aClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoX3RoaXMuX3N1cGVyR2lmLmlkICE9IGlkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHN1cGVyR2lmLmdldF9sZW5ndGgoKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdXBlckdpZi5tb3ZlX3RvKGkpXHJcbiAgICAgICAgICBfdGhpcy5fZnJhbWVJbWFnZXMucHVzaChzdXBlckdpZi5nZXRfY2FudmFzKCkudG9EYXRhVVJMKCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHN1cGVyR2lmLmdldF9jYW52YXMoKVxyXG4gICAgICAgIGxldCB3aWR0aCA9IGNhbnZhcy53aWR0aFxyXG4gICAgICAgIGxldCBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0XHJcbiAgICAgICAgYmlsbGJvYXJkSCA9IGhlaWdodCAqICgzMSAvIHdpZHRoKVxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSB3aWR0aFxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gaGVpZ2h0XHJcbiAgICAgICAgX3RoaXMuZW50aXR5ICYmIChfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIGxldCBpbWcgPSBfdGhpcy5fZnJhbWVJbWFnZXNbaW5kZXhdXHJcbiAgICAgICAgICBpbmRleCA9IGluZGV4ID49IF90aGlzLl9mcmFtZUltYWdlcy5sZW5ndGggLSAxID8gMCA6IGluZGV4ICsgMVxyXG4gICAgICAgICAgcmV0dXJuIGltZ1xyXG4gICAgICAgIH0sIGZhbHNlKSlcclxuICAgICAgICBfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmhlaWdodCA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gYmlsbGJvYXJkSFxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgIF90aGlzLmVudGl0eS5sYWJlbC5waXhlbE9mZnNldCA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2hvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgLWJpbGxib2FyZEggKiBfdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZSAtXHJcbiAgICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSAvIDIgLVxyXG4gICAgICAgICAgICAgIDVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydGVzaWFuMigwLCAtX3RoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSAvIDIgLSA1KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpXHJcbiAgICAgIGltYWdlLnNyYyA9IHVybFxyXG4gICAgICBsZXQgYmlsbGJvYXJkSCA9IDM2XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcbiAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgcmF0aW8gPSBpbWFnZS53aWR0aCAvIGltYWdlLmhlaWdodFxyXG4gICAgICAgIGltYWdlLndpZHRoID0gMTAwXHJcbiAgICAgICAgaW1hZ2UuaGVpZ2h0ID0gMTAwIC8gcmF0aW9cclxuICAgICAgICBsZXQgd2lkdGggPSBpbWFnZS53aWR0aFxyXG4gICAgICAgIGxldCBoZWlnaHQgPSBpbWFnZS5oZWlnaHRcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KVxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoXHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodFxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpXHJcbiAgICAgICAgYmlsbGJvYXJkSCA9IGhlaWdodCAqICgzMSAvIHdpZHRoKVxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSB3aWR0aFxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID0gaGVpZ2h0XHJcbiAgICAgICAgX3RoaXMuZW50aXR5ICYmIChfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gY2FudmFzKVxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaGVpZ2h0ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBiaWxsYm9hcmRIXHJcbiAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgX3RoaXMuZW50aXR5LmxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zaG93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAtYmlsbGJvYXJkSCAqIF90aGlzLm9wdGlvbnMuYmlsbGJvYXJkLnNjYWxlIC1cclxuICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplIC8gMiAtXHJcbiAgICAgICAgICAgICAgNVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC1fdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplIC8gMiAtIDUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgYmlsbGJvYXJkSCA9IGhlaWdodCAqICgzMSAvIHdpZHRoKVxyXG4gICAgICB9XHJcbiAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gMzFcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gMzZcclxuICAgICAgICBjYW52YXMud2lkdGggPSAwXHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDBcclxuICAgICAgICBiaWxsYm9hcmRIID0gMFxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nV2lkdGggPSAwXHJcbiAgICAgICAgX3RoaXMuZW50aXR5LmJpbGxib2FyZC5pbWdIZWlnaHQgPSAwXHJcbiAgICAgICAgX3RoaXMuZW50aXR5ICYmIChfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gY2FudmFzKVxyXG4gICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaGVpZ2h0ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiAwXHJcbiAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgX3RoaXMuZW50aXR5LmxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgMClcclxuICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICBiaWxsYm9hcmRIID0gaGVpZ2h0ICogKDMxIC8gd2lkdGgpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYmlsbGJvYXJkU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZVxyXG4gIH1cclxuICBzZXQgYmlsbGJvYXJkU2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZSA9IHZcclxuICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB0aGlzLl9lbG1zLmJpbGxib2FyZFNjYWxlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYmlsbGJvYXJkU2NhbGUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LmxhYmVsLnNob3cgPSB2KVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuXHJcbiAgICBsZXQgbmFtZSA9IGdldEZvbnRGYW1pbHlOYW1lKHRoaXMubGFiZWxGb250RmFtaWx5KSB8fCAnJ1xyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmFtZVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IgPSB2IHx8ICcjMDBmZmZmJ1xyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY1xyXG4gICAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgZGlmZnVzZVNob3coKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmRpZmZ1c2VTaG93XHJcbiAgLy8gfVxyXG4gIC8vIHNldCBkaWZmdXNlU2hvdyh2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuZGlmZnVzZVNob3cgPSB2XHJcbiAgLy8gICB0aGlzLl9lbG1zLmRpZmZ1c2VTaG93ICYmIHRoaXMuX2VsbXMuZGlmZnVzZVNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gIC8vICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgLy8gICB9KVxyXG4gIC8vICAgaWYgKHYgJiYgdGhpcy5zY2FuU2hvdykge1xyXG4gIC8vICAgICB0aGlzLnNjYW5TaG93ID0gZmFsc2VcclxuICAvLyAgIH1cclxuICAvLyAgIGlmICh0aGlzLmRpZmZ1c2UpIHtcclxuICAvLyAgICAgaWYgKHRoaXMuc2hvdykge1xyXG4gIC8vICAgICAgIHRoaXMuZGlmZnVzZS5zaG93ID0gdGhpcy5vcHRpb25zLmRpZmZ1c2VTaG93XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmRpZmZ1c2UgPSBuZXcgQ2lyY2xlRGlmZnVzZSh0aGlzLnNkaywgeyBzaG93OiB0aGlzLmRpZmZ1c2VTaG93LCBsbmc6IHRoaXMubG5nLCBsYXQ6IHRoaXMubGF0LCByYWRpdXM6IHRoaXMuZGlmZnVzZVJhZGl1cywgZHVyYXRpb246IHRoaXMuZGlmZnVzZUR1cmF0aW9uLCBjb2xvcjogdGhpcy5kaWZmdXNlQ29sb3IgfSlcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBkaWZmdXNlUmFkaXVzKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaWZmdXNlUmFkaXVzXHJcbiAgLy8gfVxyXG4gIC8vIHNldCBkaWZmdXNlUmFkaXVzKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5kaWZmdXNlUmFkaXVzID0gdlxyXG4gIC8vICAgdGhpcy5fZWxtcy5kaWZmdXNlUmFkaXVzICYmIHRoaXMuX2VsbXMuZGlmZnVzZVJhZGl1cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgLy8gICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgLy8gICB9KVxyXG4gIC8vICAgaWYgKHRoaXMuZGlmZnVzZSkge1xyXG4gIC8vICAgICB0aGlzLmRpZmZ1c2UucmFkaXVzID0gdGhpcy5vcHRpb25zLmRpZmZ1c2VSYWRpdXNcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBkaWZmdXNlRHVyYXRpb24oKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmRpZmZ1c2VEdXJhdGlvblxyXG4gIC8vIH1cclxuICAvLyBzZXQgZGlmZnVzZUR1cmF0aW9uKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5kaWZmdXNlRHVyYXRpb24gPSB2XHJcbiAgLy8gICB0aGlzLl9lbG1zLmRpZmZ1c2VEdXJhdGlvbiAmJiB0aGlzLl9lbG1zLmRpZmZ1c2VEdXJhdGlvbi5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgLy8gICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgLy8gICB9KVxyXG4gIC8vICAgaWYgKHRoaXMuZGlmZnVzZSkge1xyXG4gIC8vICAgICB0aGlzLmRpZmZ1c2UuZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZGlmZnVzZUR1cmF0aW9uXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgZGlmZnVzZUNvbG9yKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaWZmdXNlQ29sb3JcclxuICAvLyB9XHJcbiAgLy8gc2V0IGRpZmZ1c2VDb2xvcih2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuZGlmZnVzZUNvbG9yID0gdlxyXG4gIC8vICAgaWYgKHRoaXMuX2VsbXMuZGlmZnVzZUNvbG9yKSB7XHJcbiAgLy8gICAgIHRoaXMuX2VsbXMuZGlmZnVzZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAvLyAgICAgICBsZXQgZGlmZnVzZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gIC8vICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgLy8gICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAvLyAgICAgICAgIGFscGhhOiBmYWxzZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gIC8vICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gIC8vICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgLy8gICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAvLyAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGlmZnVzZUNvbG9yID0gY1xyXG4gIC8vICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gIC8vICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAvLyAgICAgICAgICAgdGhpcy5kaWZmdXNlQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAvLyAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAvLyAgICAgICB9KVxyXG4gIC8vICAgICAgIHRoaXMuX2VsbXMuZGlmZnVzZUNvbG9yW2ldID0gZGlmZnVzZUNvbG9yUGlja2VyXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICB9XHJcbiAgLy8gICBpZiAodGhpcy5kaWZmdXNlKSB7XHJcbiAgLy8gICAgIHRoaXMuZGlmZnVzZS5jb2xvciA9IHRoaXMub3B0aW9ucy5kaWZmdXNlQ29sb3JcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBzY2FuU2hvdygpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhblNob3dcclxuICAvLyB9XHJcbiAgLy8gc2V0IHNjYW5TaG93KHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5zY2FuU2hvdyA9IHZcclxuICAvLyAgIHRoaXMuX2VsbXMuc2NhblNob3cgJiYgdGhpcy5fZWxtcy5zY2FuU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgLy8gICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAvLyAgIH0pXHJcbiAgLy8gICBpZiAodiAmJiB0aGlzLmRpZmZ1c2VTaG93KSB7XHJcbiAgLy8gICAgIHRoaXMuZGlmZnVzZVNob3cgPSBmYWxzZVxyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKHRoaXMuc2Nhbikge1xyXG4gIC8vICAgICBpZiAodGhpcy5zaG93KSB7XHJcbiAgLy8gICAgICAgdGhpcy5zY2FuLnNob3cgPSB0aGlzLm9wdGlvbnMuc2NhblNob3dcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuc2NhbiA9IG5ldyBSYWRhclNjYW4odGhpcy5zZGssIHsgc2hvdzogdGhpcy5zY2FuU2hvdywgbG5nOiB0aGlzLmxuZywgbGF0OiB0aGlzLmxhdCwgcmFkaXVzOiB0aGlzLnNjYW5SYWRpdXMsIGR1cmF0aW9uOiB0aGlzLnNjYW5EdXJhdGlvbiwgY29sb3I6IHRoaXMuc2NhbkNvbG9yIH0pXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgc2NhblJhZGl1cygpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhblJhZGl1c1xyXG4gIC8vIH1cclxuICAvLyBzZXQgc2NhblJhZGl1cyh2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuc2NhblJhZGl1cyA9IHZcclxuICAvLyAgIHRoaXMuX2VsbXMuc2NhblJhZGl1cyAmJiB0aGlzLl9lbG1zLnNjYW5SYWRpdXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gIC8vICAgICBpdGVtLnZhbHVlID0gdlxyXG4gIC8vICAgfSlcclxuICAvLyAgIGlmICh0aGlzLnNjYW4pIHtcclxuICAvLyAgICAgdGhpcy5zY2FuLnJhZGl1cyA9IHRoaXMub3B0aW9ucy5zY2FuUmFkaXVzXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgc2NhbkR1cmF0aW9uKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FuRHVyYXRpb25cclxuICAvLyB9XHJcbiAgLy8gc2V0IHNjYW5EdXJhdGlvbih2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuc2NhbkR1cmF0aW9uID0gdlxyXG4gIC8vICAgdGhpcy5fZWxtcy5zY2FuRHVyYXRpb24gJiYgdGhpcy5fZWxtcy5zY2FuRHVyYXRpb24uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gIC8vICAgICBpdGVtLnZhbHVlID0gdlxyXG4gIC8vICAgfSlcclxuICAvLyAgIGlmICh0aGlzLnNjYW4pIHtcclxuICAvLyAgICAgdGhpcy5zY2FuLmR1cmF0aW9uID0gdGhpcy5vcHRpb25zLnNjYW5EdXJhdGlvblxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHNjYW5Db2xvcigpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbkNvbG9yXHJcbiAgLy8gfVxyXG4gIC8vIHNldCBzY2FuQ29sb3Iodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLnNjYW5Db2xvciA9IHZcclxuICAvLyAgIGlmICh0aGlzLl9lbG1zLnNjYW5Db2xvcikge1xyXG4gIC8vICAgICB0aGlzLl9lbG1zLnNjYW5Db2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgLy8gICAgICAgbGV0IHNjYW5Db2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAvLyAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gIC8vICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgLy8gICAgICAgICBhbHBoYTogZmFsc2UsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAvLyAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAvLyAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gIC8vICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgLy8gICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gIC8vICAgICAgICAgICB0aGlzLnNjYW5Db2xvciA9IGNcclxuICAvLyAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAvLyAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuc2NhbkNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgLy8gICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgLy8gICAgICAgfSlcclxuICAvLyAgICAgICB0aGlzLl9lbG1zLnNjYW5Db2xvcltpXSA9IHNjYW5Db2xvclBpY2tlclxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKHRoaXMuc2Nhbikge1xyXG4gIC8vICAgICB0aGlzLnNjYW4uY29sb3IgPSB0aGlzLm9wdGlvbnMuc2NhbkNvbG9yXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0IHx8XHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHxcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnXHJcbiAgICAgICkubGVuZ3RoID09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV1cclxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID1cclxuICAgICAgICBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArXHJcbiAgICAgICAgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICtcclxuICAgICAgICBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIGluZGV4ID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdXHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0IC0gMTAgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICdpbnB1dCdcclxuICAgICAgICAgICAgKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogaSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgJycpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJlxyXG4gICAgICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSBldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKVxyXG4gICAgICAgIF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVJU0MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5pc2MuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUlTQyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmlzYy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8XHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdhdHRyaWJ1dGUtY29udGVudC12cidcclxuICAgICAgKS5sZW5ndGggPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV1cclxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPVxyXG4gICAgICAgIGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArXHJcbiAgICAgICAgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArXHJcbiAgICAgICAgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyBpbmRleCA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXVxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IGhlaWdodCAtIDEwICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IGkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgICAgICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSBldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKVxyXG4gICAgICAgIF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGJpbGxib2FyZERlZmF1bHRJbWFnZSgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGdldEJpbGxib2FyZERlZmF1bHRVcmwodGhpcy5vcHRpb25zLmJpbGxib2FyZC5kZWZhdWx0SW1hZ2UpIHx8XHJcbiAgICAgIHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL0EtYWJsdS1ibGFuay5wbmcnXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzZXQgYmlsbGJvYXJkRGVmYXVsdEltYWdlKHYpIHtcclxuICAgIGxldCB1cmwgPSB0aGlzLnJlcGxhY2VIb3N0KHYsIHRoaXMub3B0aW9ucy5ob3N0KVxyXG4gICAgc2V0QmlsbGJvYXJkRGVmYXVsdFVybCh1cmwsIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuZGVmYXVsdEltYWdlKVxyXG4gICAgdGhpcy5fZWxtcy5iaWxsYm9hcmREZWZhdWx0SW1hZ2UgJiZcclxuICAgICAgdGhpcy5fZWxtcy5iaWxsYm9hcmREZWZhdWx0SW1hZ2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnNyYyA9IHVybFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvb3JkaW5hdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGVcclxuICB9XHJcbiAgc2V0IGNvb3JkaW5hdGUodikge1xyXG4gICAgcmV0dXJuXHJcbiAgICB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZSA9IHZcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuX3Byb2ouY29udmVydChcclxuICAgICAgW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHg6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICB5OiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgICAgICAgejogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgJ0VQU0c6NDMyNicsXHJcbiAgICAgIHZcclxuICAgICkucG9pbnRzXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCAmJlxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgJiZcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgJiZcclxuICAgICAgcG9zaXRpb25bMF1cclxuICAgICkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdjb252ZXJ0LXgnXHJcbiAgICAgIClbMF0udmFsdWUgPSBwb3NpdGlvblswXS54XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2NvbnZlcnQteSdcclxuICAgICAgKVswXS52YWx1ZSA9IHBvc2l0aW9uWzBdLnlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnY29udmVydC16J1xyXG4gICAgICApWzBdLnZhbHVlID0gcG9zaXRpb25bMF0uelxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5jb29yZGluYXRlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuY29vcmRpbmF0ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24g57yW6L6R5qGGXHJcbiAgICogQHBhcmFtIHN0YXRlPWZhbHNlIHtib29sZWFufSDnirbmgIE6IHRydWXmiZPlvIAsIGZhbHNl5YWz6ZetXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm5cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2coXHJcbiAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiAn54K55bGe5oCnJyxcclxuICAgICAgICAgIGxlZnQ6ICcxODBweCcsXHJcbiAgICAgICAgICB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgICBjb25maXJtQ2FsbEJhY2s6IG9wdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IHRoaXMubGFiZWxUZXh0LnRyaW0oKVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICAgIGxldCBjZG9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgICAgY2RvcHRpb25zLmhvc3QgPSAnJ1xyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2soY2RvcHRpb25zKVxyXG4gICAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2hvd0NhbGxCYWNrOiBzaG93ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB1cGRhdGVIZWlnaHRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID1cclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGJpbGxib2FyZC1vYmplY3QnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5pc2MuY29udGVudFxyXG5cclxuICAgICAgLy8gbGV0IGNvb3JkaW5hdGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nvb3JkaW5hdGUtc2VsZWN0JylbMF1cclxuICAgICAgLy8gbGV0IG9wdGlvbiA9ICcnXHJcbiAgICAgIC8vIHRoaXMuX3Byb2ouZXBzZ19tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5vcHRpb25zLmNvb3JkaW5hdGUpIHtcclxuICAgICAgLy8gICAgIHRoaXMub3B0aW9ucy5jb29yZGluYXRlID0ga2V5XHJcbiAgICAgIC8vICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5jb29yZGluYXRlID0ga2V5XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIG9wdGlvbiArPSBgPG9wdGlvbiB2YWx1ZT1cIiR7a2V5fVwiPiR7dmFsdWUubmFtZX0gKCR7dmFsdWUuZXBzZ30pPC9vcHRpb24+YFxyXG4gICAgICAvLyB9KVxyXG4gICAgICAvLyBjb29yZGluYXRlRWxtLmlubmVySFRNTCA9IG9wdGlvblxyXG4gICAgICAvLyB0aGlzLmNvb3JkaW5hdGUgPSB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZVxyXG5cclxuICAgICAgLy8g5Yib5bu65qCH562+6aG1XHJcbiAgICAgIGxldCB0YWJzRWxtID0gbmV3IGN5X3RhYnMoJ3BvaW50LW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsQ29sb3InKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGxldCBkaWZmdXNlQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgIC8vICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImRpZmZ1c2VDb2xvclwiKVswXSxcclxuICAgICAgLy8gICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgLy8gICBhbHBoYTogZmFsc2UsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgLy8gICBkZWZhdWx0Q29sb3I6IHRoaXMuZGlmZnVzZUNvbG9yLFxyXG4gICAgICAvLyAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAvLyAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAvLyAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5kaWZmdXNlQ29sb3IgPSBjb2xvclxyXG4gICAgICAvLyAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgLy8gICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5kaWZmdXNlQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgLy8gICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIC8vIH0pXHJcbiAgICAgIC8vIGxldCBzY2FuQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgIC8vICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNjYW5Db2xvclwiKVswXSxcclxuICAgICAgLy8gICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgLy8gICBhbHBoYTogZmFsc2UsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgLy8gICBkZWZhdWx0Q29sb3I6IHRoaXMuc2NhbkNvbG9yLFxyXG4gICAgICAvLyAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAvLyAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAvLyAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5zY2FuQ29sb3IgPSBjb2xvclxyXG4gICAgICAvLyAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgLy8gICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5zY2FuQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgLy8gICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIC8vIH0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICAvLyB0aGlzLl9lbG1zLmRpZmZ1c2VDb2xvciA9IFtkaWZmdXNlQ29sb3JQaWNrZXJdXHJcbiAgICAgIC8vIHRoaXMuX2VsbXMuc2NhbkNvbG9yID0gW3NjYW5Db2xvclBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIC8vIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmFcclxuICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5JU0NTZWxlY3QgJiYgdGhpcy5JU0NTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcblxyXG4gICAgICAgIGxldCBjb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIGNvbC5jbGFzc05hbWUgPSAnY29sJ1xyXG4gICAgICAgIGNvbC5zdHlsZS5mbGV4ID0gJzAgMCAxMTBweCdcclxuICAgICAgICBjb2wuaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWxnuaAp+ahhjwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIj5cclxuICAgICAgICBgXHJcblxyXG4gICAgICAgIGxldCByb3cgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUnKVswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyb3cnKVswXVxyXG4gICAgICAgIHJvdy5hcHBlbmRDaGlsZChjb2wpXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2F0dHJpYnV0ZS1zZWxlY3QtYm94J1xyXG4gICAgICAgIClbMF1cclxuICAgICAgICBpZiAoYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgICBsZXQgbGVncE9iamVjdCA9IGxlZ3AoYXR0cmlidXRlRWxtLCAnLmF0dHJpYnV0ZS1zZWxlY3QnKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0ua2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSkge1xyXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSA9IHRhZ0RhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHRhZ0RhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGFnRGF0YVtpXS52YWx1ZSA9PT0gYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0YWdEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY29vcmRpbmF0ZURhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMuZXBzZ19tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgY29vcmRpbmF0ZURhdGEucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGAke3ZhbHVlLm5hbWV9KCR7dmFsdWUuZXBzZ30pYCxcclxuICAgICAgICAgICAgdmFsdWU6IGtleVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBjb29yZGluYXRlRGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2Nvb3JkaW5hdGUtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmNvb3JkaW5hdGUtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoY29vcmRpbmF0ZURhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgICBjb29yZGluYXRlRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2goY29vcmRpbmF0ZURhdGEpXHJcbiAgICAgICAgICBsZXQgY29vcmRpbmF0ZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nvb3JkaW5hdGUtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGUgPSBjb29yZGluYXRlRGF0YVswXS52YWx1ZVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlID0gdGhpcy5jb29yZGluYXRlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb29yZGluYXRlRGF0YUxlZ3BFbG0udmFsdWUgPSB0aGlzLmNvb3JkaW5hdGVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRpbmF0ZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGVEYXRhW2ldLnZhbHVlID09PSBjb29yZGluYXRlRGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvb3JkaW5hdGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZGluYXRlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChjb29yZGluYXRlRGF0YVtpXS52YWx1ZSA9PT0gY29vcmRpbmF0ZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGUgPSBjb29yZGluYXRlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodEVsbSA9IGhlaWdodEJveEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YSA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgICAga2V5OiAnMCdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIGtleTogJzEnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5L6d6ZmE5Zyw6KGoJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkvp3pmYTlnLDooagnLFxyXG4gICAgICAgICAgICBrZXk6ICcyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAga2V5OiAnMydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuXHJcbiAgICAgICAgc3dpdGNoIChoZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gdGhpcy5hbHRcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlci5hdmFpbGFiaWxpdHkpIHtcclxuICAgICAgICAgICAgICBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICApLnRoZW4ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gTnVtYmVyKFxyXG4gICAgICAgICAgICAgICAgICAodGhpcy5hbHQgLSBOdW1iZXIocG9zaXRpb25bMF0uaGVpZ2h0LnRvRml4ZWQoMikpKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBoZWlnaHRFbG0udmFsdWUgPSBOdW1iZXIodGhpcy5hbHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBjYXNlICczJzpcclxuICAgICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdSYWRhclNjYW5TdGVyZW9zY29waWMnICYmIHZhbHVlLmVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0c1RvRXhjbHVkZS5wdXNoKHZhbHVlLmVudGl0eSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHRoaXMub3B0aW9ucy5wb3NpdGlvbiwgb2JqZWN0c1RvRXhjbHVkZSkudGhlbihoID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFsdCA9IE51bWJlcihoLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gdGhpcy5hbHRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdoZWlnaHQtbW9kZS1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhlaWdodE1vZGVPYmplY3QpIHtcclxuICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1tb2RlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVt0aGlzLmhlaWdodE1vZGVdLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZSA9PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZSA9PT0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsdCA9IE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Qm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlci5hdmFpbGFiaWxpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUudGVycmFpblByb3ZpZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICApLnRoZW4ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihwb3NpdGlvblswXS5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWx0ID0gTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Qm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSAxXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSAyXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICBjYXNlICczJzpcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdSYWRhclNjYW5TdGVyZW9zY29waWMnICYmIHZhbHVlLmVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzVG9FeGNsdWRlLnB1c2godmFsdWUuZW50aXR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uLCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbHQgPSBOdW1iZXIoaC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gM1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBoZWlnaHRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgIE51bWJlcihoZWlnaHRFbG0udmFsdWUpLnRvRml4ZWQoMilcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIuYXZhaWxhYmlsaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgIENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgKS50aGVuKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIocG9zaXRpb25bMF0uaGVpZ2h0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFsdCA9IE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlID0gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGVcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiZcclxuICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuXHJcbiAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKVxyXG5cclxuICAgICAgbGV0IGxuZ0VsbiA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nJylbMF1cclxuICAgICAgbGV0IGxhdEVsbiA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0JylbMF1cclxuICAgICAgbG5nRWxuLnZhbHVlID0gdGhpcy5sbmdcclxuICAgICAgbGF0RWxuLnZhbHVlID0gdGhpcy5sYXRcclxuICAgICAgdGhpcy5fZWxtcy5sbmcucHVzaChsbmdFbG4pXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0LnB1c2gobGF0RWxuKVxyXG5cclxuICAgICAgbGV0IHByb2pDaGVja2JveEJveEVsbXMgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdZSi1jdXN0b20tY2hlY2tib3gtYm94J1xyXG4gICAgICApXHJcbiAgICAgIGxldCBwcm9qQ2hlY2tib3hFbG1zID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnWUotY3VzdG9tLWNoZWNrYm94J1xyXG4gICAgICApXHJcbiAgICAgIGxldCBwcm9qSW5wdXRCb3hFbG1zID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAncHJvai1pbnB1dC1ib3gnXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHByb2pDaGVja2JveEVsbXNbMF0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgcHJvaklucHV0Qm94RWxtc1sxXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIHByb2pJbnB1dEJveEVsbXNbMl0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG5cclxuICAgICAgcHJvakNoZWNrYm94Qm94RWxtc1swXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBwcm9qQ2hlY2tib3hFbG1zWzBdLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHByb2pDaGVja2JveEVsbXNbMV0uY2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1sxXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgcHJvakNoZWNrYm94RWxtc1syXS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICBwcm9qSW5wdXRCb3hFbG1zWzJdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgfSlcclxuICAgICAgcHJvakNoZWNrYm94Qm94RWxtc1sxXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBwcm9qQ2hlY2tib3hFbG1zWzFdLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1sxXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHByb2pDaGVja2JveEVsbXNbMF0uY2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1swXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgcHJvakNoZWNrYm94RWxtc1syXS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICBwcm9qSW5wdXRCb3hFbG1zWzJdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgfSlcclxuICAgICAgcHJvakNoZWNrYm94Qm94RWxtc1syXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBwcm9qQ2hlY2tib3hFbG1zWzJdLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1syXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHByb2pDaGVja2JveEVsbXNbMF0uY2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgICAgcHJvaklucHV0Qm94RWxtc1swXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgcHJvakNoZWNrYm94RWxtc1sxXS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICBwcm9qSW5wdXRCb3hFbG1zWzFdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgfSlcclxuXHJcbiAgICAgIF90aGlzLl9wcm9qQ29udmVydCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxuZyxcclxuICAgICAgICAgIGxhdCxcclxuICAgICAgICAgIGxuZ0QsXHJcbiAgICAgICAgICBsbmdNLFxyXG4gICAgICAgICAgbG5nUyxcclxuICAgICAgICAgIGxhdEQsXHJcbiAgICAgICAgICBsYXRNLFxyXG4gICAgICAgICAgbGF0UyxcclxuICAgICAgICAgIGxuZ0RNLFxyXG4gICAgICAgICAgbGF0RE0sXHJcbiAgICAgICAgICBsbmdETVMsXHJcbiAgICAgICAgICBsYXRETVMsXHJcbiAgICAgICAgICBsbmdkbkFycjEsXHJcbiAgICAgICAgICBsbmdkbkFycjIsXHJcbiAgICAgICAgICBsYXRkbkFycjEsXHJcbiAgICAgICAgICBsYXRkbkFycjIsXHJcbiAgICAgICAgICBsbmdkbnNBcnIxLFxyXG4gICAgICAgICAgbG5nZG5zQXJyMixcclxuICAgICAgICAgIGxuZ2Ruc0FycjMsXHJcbiAgICAgICAgICBsYXRkbnNBcnIxLFxyXG4gICAgICAgICAgbGF0ZG5zQXJyMixcclxuICAgICAgICAgIGxhdGRuc0FycjNcclxuICAgICAgICBsbmcgPSBfdGhpcy5sbmdcclxuICAgICAgICBsYXQgPSBfdGhpcy5sYXRcclxuICAgICAgICBsbmdETSA9IF90aGlzLl9wcm9qLmRlZ3JlZXNUb0RNUyhsbmcsIHRydWUpXHJcbiAgICAgICAgbGF0RE0gPSBfdGhpcy5fcHJvai5kZWdyZWVzVG9ETVMobGF0LCB0cnVlKVxyXG4gICAgICAgIGxuZ2RuQXJyMSA9IGxuZ0RNLnNwbGl0KCfCsCcpXHJcbiAgICAgICAgbG5nZG5BcnIyID0gbG5nZG5BcnIxWzFdLnNwbGl0KFwiJ1wiKVxyXG4gICAgICAgIGxhdGRuQXJyMSA9IGxhdERNLnNwbGl0KCfCsCcpXHJcbiAgICAgICAgbGF0ZG5BcnIyID0gbGF0ZG5BcnIxWzFdLnNwbGl0KFwiJ1wiKVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nLWRtLWQnKVswXS52YWx1ZSA9IGxuZ2RuQXJyMVswXVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nLWRtLW0nKVswXS52YWx1ZSA9IGxuZ2RuQXJyMlswXVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0LWRtLWQnKVswXS52YWx1ZSA9IGxhdGRuQXJyMVswXVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0LWRtLW0nKVswXS52YWx1ZSA9IGxhdGRuQXJyMlswXVxyXG5cclxuICAgICAgICBsbmdETVMgPSBfdGhpcy5fcHJvai5kZWdyZWVzVG9ETVMobG5nKVxyXG4gICAgICAgIGxhdERNUyA9IF90aGlzLl9wcm9qLmRlZ3JlZXNUb0RNUyhsYXQpXHJcbiAgICAgICAgbG5nZG5zQXJyMSA9IGxuZ0RNUy5zcGxpdCgnwrAnKVxyXG4gICAgICAgIGxuZ2Ruc0FycjIgPSBsbmdkbnNBcnIxWzFdLnNwbGl0KFwiJ1wiKVxyXG4gICAgICAgIGxuZ2Ruc0FycjMgPSBsbmdkbnNBcnIyWzFdLnNwbGl0KCdcIicpXHJcbiAgICAgICAgbGF0ZG5zQXJyMSA9IGxhdERNUy5zcGxpdCgnwrAnKVxyXG4gICAgICAgIGxhdGRuc0FycjIgPSBsYXRkbnNBcnIxWzFdLnNwbGl0KFwiJ1wiKVxyXG4gICAgICAgIGxhdGRuc0FycjMgPSBsYXRkbnNBcnIyWzFdLnNwbGl0KCdcIicpXHJcbiAgICAgICAgY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmctZG1zLWQnKVswXS52YWx1ZSA9IGxuZ2Ruc0FycjFbMF1cclxuICAgICAgICBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xuZy1kbXMtbScpWzBdLnZhbHVlID0gbG5nZG5zQXJyMlswXVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nLWRtcy1zJylbMF0udmFsdWUgPSBsbmdkbnNBcnIzWzBdXHJcbiAgICAgICAgY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYXQtZG1zLWQnKVswXS52YWx1ZSA9IGxhdGRuc0FycjFbMF1cclxuICAgICAgICBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhdC1kbXMtbScpWzBdLnZhbHVlID0gbGF0ZG5zQXJyMlswXVxyXG4gICAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0LWRtcy1zJylbMF0udmFsdWUgPSBsYXRkbnNBcnIzWzBdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF90aGlzLl9wcm9qQ29udmVydCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZXdQb2ludCgpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuXHJcbiAgICBsZXQgZm9udCA9IGdldEZvbnRGYW1pbHkodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICdIZWx2ZXRpY2EnXHJcblxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgKVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubmVhcixcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmFyLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQucGl4ZWxPZmZzZXRTY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubmVhcixcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmFyLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubmVhcixcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmFyLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5waXhlbE9mZnNldFNjYWxlQnlEaXN0YW5jZSA9IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcihcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5mYXIsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQucGl4ZWxPZmZzZXRTY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5waXhlbE9mZnNldFNjYWxlQnlEaXN0YW5jZSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShcclxuICAgICAgLy8gICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vICAgICBsZXQgYmlsbGJvYXJkSCA9XHJcbiAgICAgIC8vICAgICAgIF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ICpcclxuICAgICAgLy8gICAgICAgKDMxIC8gX3RoaXMuZW50aXR5LmJpbGxib2FyZC5pbWdXaWR0aClcclxuICAgICAgLy8gICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgIC8vICAgICAgIDAsXHJcbiAgICAgIC8vICAgICAgIC0oYmlsbGJvYXJkSCAvIDIpICogX3RoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVcclxuICAgICAgLy8gICAgIClcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyAgIGZhbHNlXHJcbiAgICAgIC8vIClcclxuICAgICAgdGhpcy5lbnRpdHkubGFiZWwucGl4ZWxPZmZzZXQgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zaG93KSB7XHJcbiAgICAgICAgICBsZXQgYmlsbGJvYXJkSCA9IF90aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1nSGVpZ2h0ID9cclxuICAgICAgICAgICAgX3RoaXMuZW50aXR5LmJpbGxib2FyZC5pbWdIZWlnaHQgKlxyXG4gICAgICAgICAgICAoMzEgLyBfdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltZ1dpZHRoKSA6IDBcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC1iaWxsYm9hcmRIICogX3RoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGUgLVxyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplIC8gMiAtXHJcbiAgICAgICAgICAgIDVcclxuICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydGVzaWFuMigwLCAtX3RoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSAvIDIgLSA1KVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoaXMuZW50aXR5LmxhYmVsLmZvbnQgPSB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgKyAncHggJyArIGZvbnRcclxuICAgICAgdGhpcy5lbnRpdHkubGFiZWwuZmlsbENvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2NhbGUgPSB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLnNjYWxlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmVhclxyXG4gICAgdGhpcy5mYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5mYXJcclxuICAgIHRoaXMuc2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgICB0aGlzLmJpbGxib2FyZFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5iaWxsYm9hcmQuc2hvd1xyXG4gICAgdGhpcy5iaWxsYm9hcmRJbWFnZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmJpbGxib2FyZC5pbWFnZVxyXG4gICAgdGhpcy5iaWxsYm9hcmRTY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmJpbGxib2FyZC5zY2FsZVxyXG4gICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC50ZXh0XHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sbmcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5wb3NpdGlvbi5sbmdcclxuICAgIHRoaXMubGF0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICB0aGlzLmFsdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVJU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmlzYy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgYXdhaXQgcmVtb3ZlX2VudGl0eV9mcm9tX2NsdXN0ZXIodGhpcy5zZGsudmlld2VyLCB0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKCF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuc2RrLnZpZXdlci5lbnRpdGllcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLmRpZmZ1c2UpIHtcclxuICAgIC8vICAgdGhpcy5kaWZmdXNlLnJlbW92ZSgpXHJcbiAgICAvLyAgIHRoaXMuZGlmZnVzZSA9IG51bGxcclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLnNjYW4pIHtcclxuICAgIC8vICAgdGhpcy5zY2FuLnJlbW92ZSgpXHJcbiAgICAvLyAgIHRoaXMuc2NhbiA9IG51bGxcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIC8vIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgLy8g54K55Ye75by55qGG5YaF5Zu+5qCH5YiH5o2iXHJcbiAgY2xpY2tDaGFuZ2VJbWFnZSgpIHtcclxuICAgIHRoaXMuRGlhbG9nLmNsaWNrQ2hhbmdlSW1hZ2UgJiYgdGhpcy5EaWFsb2cuY2xpY2tDaGFuZ2VJbWFnZSgpXHJcbiAgfVxyXG4gIC8vIOeCueWHu+W8ueahhuWGhem7mOiupOWbvuagh+WIh+aNolxyXG4gIGNsaWNrQ2hhbmdlRGVmYXVsdEltYWdlKCkge1xyXG4gICAgdGhpcy5EaWFsb2cuY2xpY2tDaGFuZ2VEZWZhdWx0SW1hZ2UgJiYgdGhpcy5EaWFsb2cuY2xpY2tDaGFuZ2VEZWZhdWx0SW1hZ2UoKVxyXG4gIH1cclxuXHJcbiAgX2FkZExpbmsoKSB7XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF1cclxuICAgICAgICAudmFsdWVcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnbGlua19hZGQnXHJcbiAgICAgICAgKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdsaW5rX2FkZCdcclxuICAgICAgKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXVxyXG4gICAgICAgIC52YWx1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAndnJfYWRkJ1xyXG4gICAgICAgIClbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAndnJfYWRkJ1xyXG4gICAgICApWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIC8vIHZhciB1ZSA9IFVFLmdldEVkaXRvcignYXBwJyk7XHJcbiAgICByaWNoVGV4dC5vcGVuKFxyXG4gICAgICB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50XHJcbiAgICApXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSBjb250ZW50ID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUhlaWdodCgpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5zZGsudmlld2VyLnNjZW5lKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGhlaWdodFxyXG4gICAgbGV0IGhlaWdodDJcclxuICAgIGxldCBwb2ludDEgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIDBcclxuICAgIClcclxuICAgIGxldCBwb2ludDIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIDEwMDAwMDAwMDAwMDAwXHJcbiAgICApXHJcblxyXG4gICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbXVxyXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1JhZGFyU2NhblN0ZXJlb3Njb3BpYycgJiYgdmFsdWUuZW50aXR5KSB7XHJcbiAgICAgICAgb2JqZWN0c1RvRXhjbHVkZS5wdXNoKHZhbHVlLmVudGl0eSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHVwZGF0ZWRDYXJ0ZXNpYW5zID0gYXdhaXQgdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHRNb3N0RGV0YWlsZWQoW3BvaW50MV0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICBpZiAodXBkYXRlZENhcnRlc2lhbnMgJiYgdXBkYXRlZENhcnRlc2lhbnNbMF0pIHtcclxuICAgICAgaGVpZ2h0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh1cGRhdGVkQ2FydGVzaWFuc1swXSwgdGhpcy5zZGsudmlld2VyKS5hbHRcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgIHBvaW50MSxcclxuICAgICAgcG9pbnQyLFxyXG4gICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgKVxyXG4gICAgbGV0IGMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgIGxldCByYXkgPSBuZXcgQ2VzaXVtLlJheShwb2ludDIsIGMpXHJcbiAgICBsZXQgciA9IHt9XHJcbiAgICBsZXQgcGlja2VkT2JqZWN0cyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSlcclxuICAgIGZvciAobGV0IGkgPSBwaWNrZWRPYmplY3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgciA9IHBpY2tlZE9iamVjdHNbaV1cclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAociAmJiByLnBvc2l0aW9uKSB7XHJcbiAgICAgIGhlaWdodDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHIucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcikuYWx0XHJcbiAgICB9XHJcbiAgICBsZXQgcHJvbWlzZVxyXG4gICAgdHJ5IHtcclxuICAgICAgcHJvbWlzZSA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgIGlmICgoaGVpZ2h0MiA9PT0gdm9pZCAwIHx8IGhlaWdodDIgPCBwcm9taXNlWzBdLmhlaWdodCkgJiYgcHJvbWlzZSkge1xyXG4gICAgICBoZWlnaHQyID0gcHJvbWlzZVswXS5oZWlnaHRcclxuICAgIH1cclxuICAgIGlmIChoZWlnaHQgPT09IHZvaWQgMCB8fCBoZWlnaHQgPCBoZWlnaHQyKSB7XHJcbiAgICAgIGhlaWdodCA9IGhlaWdodDJcclxuICAgIH1cclxuICAgIGlmIChoZWlnaHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKE51bWJlcihoZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICAgIHRoaXMuY29vcmRpbmF0ZSA9IHRoaXMub3B0aW9ucy5jb29yZGluYXRlXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uXHJcbiAgICApIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyhcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcgfHwgMC4wXHJcbiAgICAgICAgKSxcclxuICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjBcclxuICAgICAgICApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyhcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gW11cclxuICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1JhZGFyU2NhblN0ZXJlb3Njb3BpYycgJiYgdmFsdWUuZW50aXR5KSB7XHJcbiAgICAgICAgICAgIG9iamVjdHNUb0V4Y2x1ZGUucHVzaCh2YWx1ZS5lbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbiwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gW11cclxuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnUmFkYXJTY2FuU3RlcmVvc2NvcGljJyAmJiB2YWx1ZS5lbnRpdHkpIHtcclxuICAgICAgICAgIG9iamVjdHNUb0V4Y2x1ZGUucHVzaCh2YWx1ZS5lbnRpdHkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uLCBvYmplY3RzVG9FeGNsdWRlKVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBvcmllbnRhdGlvbjogb3B0aW9ucy5vcmllbnRhdGlvbixcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgIGhlaWdodCArIChvcHRpb25zLmhlaWdodCB8fCA1MDApXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IHYucG9zaXRpb24ubG5nXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gdi5wb3NpdGlvbi5sYXRcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSB2LnBvc2l0aW9uLmFsdFxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+WKn+iDvVxyXG4gICAqXHJcbiAgICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICAqIEBwYXJhbSBzdGF0dXMge2Jvb2xlYW59XHJcbiAgICpcclxuICAgKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1vdmVFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNhcnRlc2lhblxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG5cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMubG5nID0gcG9zaXRpb25zLmxuZ1xyXG4gICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgIHRoaXMuYWx0ID0gcG9zaXRpb25zLmFsdFxyXG4gICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogeyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2FydGVzaWFuXHJcbiAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgaWYodGhpcy4jX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICB0aGlzLiNfcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2soKVxyXG4gICAgICAgICAgdGhpcy4jX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKG1vdmVFdmVudClcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KGxlZnRFdmVudClcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLiNfcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2sgPSBudWxsXHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMubG5nID0gdGhpcy5wcmV2aW91cy5wb3NpdGlvbi5sbmdcclxuICAgICAgdGhpcy5sYXQgPSB0aGlzLnByZXZpb3VzLnBvc2l0aW9uLmxhdFxyXG4gICAgICB0aGlzLmFsdCA9IHRoaXMucHJldmlvdXMucG9zaXRpb24uYWx0XHJcbiAgICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIG9wZW5Qb3NpdGlvbkVkaXRpbmcoY2QpIHtcclxuICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy4jX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrID0gY2RcclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogJycsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSBvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwID8gb3B0aW9ucy54IDogMTBcclxuICAgIG9wdGlvbnMueSA9IG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDAgPyBvcHRpb25zLnkgOiAxMFxyXG4gICAgbGV0IHNpdGVJbmZvRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5kb21pZClcclxuICAgIGxldCBzaXRlSW5mb1Bvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKHBlcmNlbnRhZ2UgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fFxyXG4gICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhcclxuICAgICAgICAgIHNpdGVJbmZvUG9zaXRpb25cclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRDdXN0b21WaWV3KHZhbCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyA9IHZhbFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNhbWVyYSA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmFcclxuICAgICAgbGV0IGNhbWVyYVBvc2l0aW9uODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbixcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgKVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGxldCByZWxhdGl2ZVBvc2l0aW9uID0geyAuLi5jYW1lcmFQb3NpdGlvbjg0IH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gW11cclxuICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1JhZGFyU2NhblN0ZXJlb3Njb3BpYycgJiYgdmFsdWUuZW50aXR5KSB7XHJcbiAgICAgICAgICAgIG9iamVjdHNUb0V4Y2x1ZGUucHVzaCh2YWx1ZS5lbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbiwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgfVxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uID0ge1xyXG4gICAgICAgIGxuZzogY2FtZXJhUG9zaXRpb244NC5sbmcgLSBwb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgbGF0OiBjYW1lcmFQb3NpdGlvbjg0LmxhdCAtIHBvc2l0aW9uLmxhdCxcclxuICAgICAgICBhbHQ6IGNhbWVyYVBvc2l0aW9uODQuYWx0IC0gcG9zaXRpb24uYWx0XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ID0ge1xyXG4gICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FtZXJhLmhlYWRpbmcpLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYW1lcmEucGl0Y2gpLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhbWVyYS5yb2xsKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogcmVsYXRpdmVQb3NpdGlvblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zICYmXHJcbiAgICAgICAgKHRoaXMub3JpZ2luYWxPcHRpb25zLmN1c3RvbVZpZXcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJpbGxib2FyZE9iamVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFNQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFqRUE7QUFrRUE7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF5TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtEQTtBQXpEQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtEQTtBQXpEQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBSUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFNQTtBQUdBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFnREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBNEJBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQVNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBMWlCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZpQkE7QUFFQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdkJBO0FBQUE7QUFBQTtBQUFBO0FBeUJBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUtBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdkVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWxGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFrR0E7QUFDQTtBQUFBO0FBN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBSUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXBEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTV3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQThuRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/BillboardObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/CircleDiffuse/_element.js": /*!************************************************!*\ !*** ./src/Obj/Base/CircleDiffuse/_element.js ***! \************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u900F\\u660E\\u5EA6\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u6CE2\\u7EB9\\u5C42\\u6570\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u6269\\u6563\\u901F\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u534A\\u5F84\\u5355\\u4F4D\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ2lyY2xlRGlmZnVzZS9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9DaXJjbGVEaWZmdXNlL19lbGVtZW50LmpzPzkwN2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pgI/mmI7luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMFwiIG1heD1cIjFcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInRyYW5zcGFyZW5jeVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue7j+W6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTE4MFwiIG1heD1cIjE4MFwiIEBtb2RlbD1cImxuZ1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuazoue6ueWxguaVsDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCIxMFwiIEBtb2RlbD1cImNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mianmlaPpgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiMjBcIiBAbW9kZWw9XCJzcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtcmFkaXVzLXVuaXQtYm94XCIgc3R5bGU9XCJtYXJnaW46IDA7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Y2K5b6E5Y2V5L2NPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXJhZGl1cy11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW46IDA7XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW46IDA7XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2lyY2xlLWNvbnRlbnQtYm94XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWJzIGlkPVwiY2lyY2xlLWRpZmZ1c2UtZWRpdC10YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0yKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFicz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUErRUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/CircleDiffuse/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/CircleDiffuse/index.js": /*!*********************************************!*\ !*** ./src/Obj/Base/CircleDiffuse/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/CircleDiffuse/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Materail_CircleRippleMaterialProperty__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Materail/CircleRippleMaterialProperty */ \"./src/Obj/Materail/CircleRippleMaterialProperty.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar CircleDiffuse = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 扩散圆\r\n * @param sdk \r\n * @param options {object} 圆属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.lng {number} 经度\r\n * @param options.lat {number} 维度\r\n * @param options.color=#1FA8E3 {string} 基础颜色\r\n * @param options.speed=5 {number} 速度\r\n * @param options.count=3 {number} 波纹数量\r\n * @param options.circle=[]] {array} 圆属性\r\n * @param options.circle[].radius {number} 半径\r\n * @param options.circle[].color {string} 颜色\r\n * @param options.label {object} 标签对象\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function CircleDiffuse(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, CircleDiffuse);\n _this2 = _callSuper(this, CircleDiffuse, [sdk, options]);\n _this2.options.lng = options.lng;\n _this2.options.lat = options.lat;\n _this2.options.color = options.color || '#1FA8E3';\n _this2.options.transparency = options.transparency || options.transparency === 0 ? options.transparency : 1;\n if (_this2.options.transparency > 1) {\n _this2.options.transparency = 1;\n }\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 5;\n _this2.options.count = options.count || options.count === 0 ? options.count : 3;\n if (options.count || options.count === 0) {\n _this2.options.count = options.count;\n if (options.count > 99) {\n _this2.options.count = 99;\n }\n } else {\n _this2.options.count = 3;\n }\n _this2.options.circle = options.circle || [{\n radius: 10\n }];\n for (var i = 0; i < _this2.options.circle.length; i++) {\n if (_this2.options.circle[i].radius > 999999) {\n _this2.options.circle[i].radius = 999999;\n }\n }\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_this2.sdk);\n _this2.options.positionEditin = false;\n options.label = options.label || {};\n _this2._elms = {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.instruct = options.instruct || '';\n _this2.options.operatingPoint = options.operatingPoint || '';\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n var radius = 0;\n for (var _i = 0; _i < _this2.options.circle.length; _i++) {\n if (Number(_this2.options.circle[_i].radius) > radius) {\n radius = Number(_this2.options.circle[_i].radius);\n }\n }\n _this2._radius = radius;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n CircleDiffuse.create(_this2);\n // this.sdk.addIncetance(this.options.id, {\n // type: 'CircleDiffuse',\n // options: options\n // })\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(CircleDiffuse, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(CircleDiffuse, [{\n key: \"type\",\n get: function get() {\n return 'CircleDiffuse';\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n this.entity.show = this.options.show;\n if (this.options.label.show) {\n this.label.show = this.options.show;\n }\n } else {\n this.entity.show = false;\n if (this.options.label.show) {\n this.label.show = false;\n }\n }\n this.isShowView = false;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"syncSplitData\"])(this.sdk, this.options.id);\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.options.positionEditing;\n },\n set: function set(status) {\n var _this3 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_19__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n this.lastOptions = {\n lng: this.options.lng,\n lat: this.options.lat\n };\n this.event.mouse_move(function (movement, cartesian) {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.lastOptions = undefined;\n _this3.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this3.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.positionEditing = false;\n } else {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.lastOptions = undefined;\n _this3.positionEditing = false;\n }\n });\n });\n } else {\n setTimeout(function () {\n _this3.picking = true;\n }, 500);\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n }\n this.tip && this.tip.destroy();\n if (this.lastOptions) {\n this.lng = this.lastOptions.lng;\n this.lat = this.lastOptions.lat;\n }\n this.lastOptions = undefined;\n }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = v;\n this.label.position = [v, this.lat];\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = v;\n this.label.position = [this.lng, v];\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"radius\",\n get: function get() {\n return this._radius;\n }\n }, {\n key: \"circle\",\n get: function get() {\n return this.options.circle;\n },\n set: function set(v) {\n console.log(v);\n this.options.circle = v || [{\n radius: 10\n }];\n for (var i = 0; i < this.options.circle.length; i++) {\n if (this.options.circle[i].radius > 999999) {\n this.options.circle[i].radius = 999999;\n }\n }\n this._createCircleElm();\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n CircleDiffuse.create(this);\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"transparency\",\n get: function get() {\n return this.options.transparency;\n },\n set: function set(v) {\n if (v > 1) {\n this.options.transparency = 1;\n } else {\n this.options.transparency = v;\n }\n CircleDiffuse.create(this);\n this._elms.transparency && this._elms.transparency.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"count\",\n get: function get() {\n return this.options.count;\n },\n set: function set(v) {\n if (v > 99) {\n this.options.count = 99;\n } else {\n this.options.count = v;\n }\n CircleDiffuse.create(this);\n this._elms.count && this._elms.count.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"getSdk\"])().sdkD;\n this.options.label.show = v;\n if (this.show && (!this.showView || this.showView == 3 || !sdkD)) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this4.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this4.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"instruct\",\n get: function get() {\n return this.options.instruct;\n },\n set: function set(v) {\n this.options.instruct = v;\n this._elms.instruct && this._elms.instruct.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"operatingPoint\",\n get: function get() {\n return this.options.operatingPoint;\n },\n set: function set(v) {\n this.options.operatingPoint = v;\n this._elms.operatingPoint && this._elms.operatingPoint.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this8.options.attribute.link.content;\n case 2:\n _this8.attributeLink = _context3.sent;\n table = _this8._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop(_i2) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i2)) {\n _context2.next = 36;\n break;\n }\n height = item[_i2].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i2].innerHTML = _html;\n textareaElm = item[_i2].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i2].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this8.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this8.options.attribute.link.content[index].url;\n btn = item[_i2].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i2 = 0;\n case 8:\n if (!(_i2 < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i2), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i2++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this8.options.attribute.link.content.splice(i, 1);\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this8.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i3) {\n var btn = item[_i3].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i3 = 0; _i3 < item.length; _i3++) {\n _loop3(_i3);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i4;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this9.options.attribute.vr.content;\n case 2:\n _this9.attributeVr = _context6.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop5(_i4) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i4)) {\n _context5.next = 36;\n break;\n }\n height = item[_i4].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i4].innerHTML = _html2;\n textareaElm = item[_i4].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i4].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.vr.content[index].url;\n btn = item[_i4].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i4 = 0;\n case 8:\n if (!(_i4 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i4), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i4++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this9.options.attribute.vr.content.splice(i, 1);\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i5) {\n var btn = item[_i5].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i5);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i5 = 0; _i5 < item.length; _i5++) {\n _loop7(_i5);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n height,\n _args7 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n options = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context7.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context7.next = 16;\n break;\n }\n _context7.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context7.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context7.next = 27;\n break;\n case 23:\n _context7.next = 25;\n return this.getClampToHeight({\n lng: this.options.lng,\n lat: this.options.lat\n });\n case 25:\n height = _context7.sent;\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.radius * 6 + height),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n duration: 1\n });\n case 27:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }() // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4(state) {\n var _this10 = this;\n var _this, contentElm, tabsElm, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context8.next = 28;\n break;\n }\n _context8.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.options, {\n title: '扩散光波属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this10.name = _this10.name.trim();\n if (!_this10.name) {\n _this10.name = '未命名对象';\n }\n _this10.options.label.position = {\n lng: _this10.label.position[0],\n lat: _this10.label.position[1],\n alt: _this10.label.position[2]\n };\n _this10.originalOptions = _this10.deepCopyObj(_this10.options);\n _this10._DialogObject.close();\n _this10.Dialog.confirmCallBack && _this10.Dialog.confirmCallBack(_this10.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(_this10.sdk, _this10.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"syncSplitData\"])(_this10.sdk, _this10.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this10.reset();\n _this10.Dialog.resetCallBack && _this10.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this10.Dialog.removeCallBack && _this10.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this10.reset();\n _this10.positionEditing = false;\n _this10.Dialog.closeCallBack && _this10.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this10.options.show = show;\n _this10.originalOptions.show = show;\n _this10.show = show;\n _this10.Dialog.showCallBack && _this10.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this10.positionEditing = !_this10.positionEditing;\n }\n }, true);\n case 6:\n this._DialogObject = _context8.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' circle-ciffuse';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this._createCircleElm();\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('circle-diffuse-edit-tabs', undefined, this.sdk);\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this10.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this10.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this10.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this10.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this10.attributeLink = _this10.options.attribute.link.content;\n _this10.attributeVr = _this10.options.attribute.vr.content;\n _this10.ISCSelect && _this10.ISCSelect();\n _this10.goodsSelect && _this10.goodsSelect();\n _this10.cameraSelect && _this10.cameraSelect();\n var unitData = [{\n name: '米',\n value: '米'\n }, {\n name: '千米',\n value: '千米'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('input-radius-unit-box')[0], \".input-radius-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = '米';\n unitDataLegpElm.addEventListener('input', function () {\n var circleContentElm = _this10._DialogObject._element.content.getElementsByClassName('circle-content-box')[0];\n var circleElms = circleContentElm.getElementsByClassName('input-number');\n switch (unitDataLegpElm.value) {\n case '米':\n for (var i = 0; i < circleElms.length; i++) {\n var unitElm = circleElms[i].getElementsByClassName('unit')[0];\n var valueElm = circleElms[i].getElementsByTagName('input')[0];\n if (unitElm.innerHTML === 'km') {\n unitElm.innerHTML = 'm';\n valueElm.value = Math.floor(valueElm.value * 1000 * 100) / 100;\n }\n }\n break;\n case '千米':\n for (var _i6 = 0; _i6 < circleElms.length; _i6++) {\n var _unitElm = circleElms[_i6].getElementsByClassName('unit')[0];\n var _valueElm = circleElms[_i6].getElementsByTagName('input')[0];\n if (_unitElm.innerHTML === 'm') {\n _unitElm.innerHTML = 'km';\n _valueElm.value = Math.floor(Number((_valueElm.value / 1000).toFixed(5)) * 100000) / 100000;\n }\n }\n break;\n default:\n break;\n }\n });\n }\n var tagData = _this10.attributeSelect;\n var attributeElm = _this10._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this10._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this10.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this10.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this10.labelFontFamily].value;\n for (var _i8 = 0; _i8 < fontData.length; _i8++) {\n if (fontData[_i8].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i8].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < fontData.length; _i9++) {\n if (fontData[_i9].value === fontDataLegpElm.value) {\n _this10.labelFontFamily = fontData[_i9].key;\n break;\n }\n }\n });\n _this10._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n case 28:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.color = this.originalOptions.color;\n this.duration = this.originalOptions.duration;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.instruct = this.originalOptions.instruct;\n this.operatingPoint = this.originalOptions.operatingPoint;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n var radius = 0;\n for (var i = 0; i < this.options.circle.length; i++) {\n if (Number(this.options.circle[i].radius) > radius) {\n radius = Number(this.options.circle[i].radius);\n }\n }\n this._radius = radius;\n CircleDiffuse.create(this);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n this.label && this.label.remove();\n this.entity && this.sdk.viewer.entities.remove(this.entity);\n this.entity2 && this.sdk.viewer.entities.remove(this.entity2);\n this.entity = null;\n this.entity2 = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context9.next = 10;\n return this.sdk.removeIncetance(this.options.id);\n case 10:\n _context9.next = 12;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(this.sdk, this.options.id);\n case 12:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"instructSubmit\",\n value: function instructSubmit() {\n this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct);\n this.originalOptions.instruct = this.instruct;\n }\n }, {\n key: \"operatingPointSubmit\",\n value: function operatingPointSubmit() {\n this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint);\n this.originalOptions.operatingPoint = this.operatingPoint;\n }\n }, {\n key: \"_createCircleElm\",\n value: function _createCircleElm() {\n var _this11 = this;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var unitDataLegpElm = this._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm ? unitDataLegpElm.value : '米';\n var circleContentElm = this._DialogObject._element.content.getElementsByClassName('circle-content-box')[0];\n circleContentElm.innerHTML = '';\n var _loop9 = function _loop9(i) {\n var circleElm = document.createElement('div');\n circleElm.className = 'row';\n var addString = '';\n var deleteString = '';\n if (i === 0 && i === _this11.options.circle.length - 1) {\n deleteString = '';\n }\n if (i === _this11.options.circle.length - 1) {\n addString = \"\";\n }\n circleElm.innerHTML = \"\\n
\\n \\u534A\\u5F84\\n
\\n \\n \".concat(unit === '米' ? 'm' : 'km', \"\\n \\n
\\n
\\n
\\n
\\n \\u6269\\u6563\\u989C\\u8272\\n
\\n
\\n \").concat(addString, \"\\n \").concat(deleteString, \"\\n
\\n \");\n var inputElm = circleElm.getElementsByClassName('input')[0];\n inputElm.value = _this11.options.circle[i].radius / (unit === '米' ? 1 : 1000);\n inputElm.addEventListener('input', function (e) {\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) / (unit === '米' ? 1 : 1000) && value >= Number(e.target.min)) {\n if (unit === '米') {\n value = Math.floor(value * 100) / 100;\n } else {\n value = Math.floor(value * 100000) / 100000;\n }\n _this11.options.circle[i].radius = value * (unit === '米' ? 1 : 1000);\n var radius = 0;\n for (var _i10 = 0; _i10 < _this11.options.circle.length; _i10++) {\n if (Number(_this11.options.circle[_i10].radius) > radius) {\n radius = Number(_this11.options.circle[_i10].radius);\n }\n }\n _this11._radius = radius;\n // inputElm.value = value\n CircleDiffuse.create(_this11);\n }\n }\n }\n });\n inputElm.addEventListener('blur', function (e) {\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max) / (unit === '米' ? 1 : 1000)) {\n value = Number(e.target.max) / (unit === '米' ? 1 : 1000);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (unit === '米') {\n value = Math.floor(value * 100) / 100;\n } else {\n value = Math.floor(value * 100000) / 100000;\n }\n _this11.options.circle[i].radius = value * (unit === '米' ? 1 : 1000);\n var radius = 0;\n for (var _i11 = 0; _i11 < _this11.options.circle.length; _i11++) {\n if (Number(_this11.options.circle[_i11].radius) > radius) {\n radius = Number(_this11.options.circle[_i11].radius);\n }\n }\n _this11._radius = radius;\n inputElm.value = value;\n CircleDiffuse.create(_this11);\n }\n });\n\n // 颜色组件\n var colorPicker = new YJColorPicker({\n el: circleElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: false,\n //是否开启透明度\n defaultColor: _this11.options.circle[i].color || _this11.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.options.circle[i].color = color;\n CircleDiffuse.create(_this11);\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.options.circle[i].color = 'rgba(255,255,255,1)';\n CircleDiffuse.create(_this11);\n } //点击清空按钮事件回调\n });\n // 减\n var minusElm = circleElm.getElementsByClassName('circle-minus')[0];\n minusElm && minusElm.addEventListener('click', function () {\n _this11.options.circle.splice(i, 1);\n var radius = 0;\n for (var _i12 = 0; _i12 < _this11.options.circle.length; _i12++) {\n if (Number(_this11.options.circle[_i12].radius) > radius) {\n radius = Number(_this11.options.circle[_i12].radius);\n }\n }\n _this11._radius = radius;\n CircleDiffuse.create(_this11);\n _this11._createCircleElm();\n });\n // 加\n var addElm = circleElm.getElementsByClassName('circle-add')[0];\n addElm && addElm.addEventListener('click', function () {\n _this11.options.circle.push({\n radius: 0,\n color: 'rgba(255,255,255,1)'\n });\n var radius = 0;\n for (var _i13 = 0; _i13 < _this11.options.circle.length; _i13++) {\n if (Number(_this11.options.circle[_i13].radius) > radius) {\n radius = Number(_this11.options.circle[_i13].radius);\n }\n }\n _this11._radius = radius;\n CircleDiffuse.create(_this11);\n _this11._createCircleElm();\n });\n circleContentElm.appendChild(circleElm);\n };\n for (var i = 0; i < this.options.circle.length; i++) {\n _loop9(i);\n }\n }\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this12 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].primaryCallBack = function (content) {\n _this12.options.richTextContent = content;\n };\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this13 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this13.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var colors = {};\n for (var i = 0; i < that.options.circle.length; i++) {\n colors[that.options.circle[i].radius / that.radius] = Cesium.Color.fromCssColorString(that.options.circle[i].color || that.options.color);\n }\n var zIndex = that.sdk._entityZIndex;\n if (that.entity) {\n zIndex = that.entity.ellipse.zIndex._value;\n that.sdk.viewer.entities.remove(that.entity);\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n position: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegrees(that.options.lng, that.options.lat);\n }, false),\n name: \"波纹圆\",\n ellipse: {\n semiMinorAxis: new Cesium.CallbackProperty(function () {\n return that.radius;\n }, false),\n semiMajorAxis: new Cesium.CallbackProperty(function () {\n return that.radius;\n }, false),\n material: new _Materail_CircleRippleMaterialProperty__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n id: that.options.id,\n colors: colors,\n transparency: that.options.transparency,\n speed: that.options.speed,\n count: that.options.count,\n gradient: 0.2\n }),\n zIndex: zIndex\n }\n });\n } else {\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n position: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegrees(that.options.lng, that.options.lat);\n }, false),\n name: \"波纹圆\",\n ellipse: {\n semiMinorAxis: new Cesium.CallbackProperty(function () {\n return that.radius;\n }, false),\n semiMajorAxis: new Cesium.CallbackProperty(function () {\n return that.radius;\n }, false),\n material: new _Materail_CircleRippleMaterialProperty__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n id: that.options.id,\n colors: colors,\n transparency: that.options.transparency,\n speed: that.options.speed,\n count: that.options.count,\n gradient: 0.2\n }),\n zIndex: zIndex\n }\n });\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"setSplitDirection\"])(0, that.options.id);\n }\n that.sdk._entityZIndex++;\n if (that.sdk.viewer._element.className === 'cesium-viewer 2d') {\n that.entity.ellipse.height = 1;\n }\n CircleDiffuse.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(that.sdk, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee6(that) {\n var height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (that.options.label.position) {\n _context10.next = 5;\n break;\n }\n _context10.next = 3;\n return that.getClampToHeight({\n lng: that.options.lng,\n lat: that.options.lat\n });\n case 3:\n height = _context10.sent;\n that.options.label.position = {\n lng: that.options.lng,\n lat: that.options.lat,\n alt: height\n };\n case 5:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: true\n });\n case 6:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CircleDiffuse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ2lyY2xlRGlmZnVzZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9DaXJjbGVEaWZmdXNlL2luZGV4LmpzP2MzMDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IHJpY2hUZXh0IGZyb20gXCIuLi8uLi9FbGVtZW50L3JpY2hUZXh0XCI7XHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgTGFiZWxPYmplY3QgZnJvbSAnLi4vTGFiZWxPYmplY3QnXHJcbmltcG9ydCB7IHN5bmNEYXRhLCBnZXRTZGsgYXMgZ2V0MkRTZGsgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCBDaXJjbGVEaWZmdXNlTWF0ZXJpYWxQcm9wZXJ0eSBmcm9tICcuLi8uLi9NYXRlcmFpbC9DaXJjbGVSaXBwbGVNYXRlcmlhbFByb3BlcnR5J1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIENpcmNsZURpZmZ1c2UgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAZGVzY3JpcHRpb24g5omp5pWj5ZyGXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlnIblsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDmoIfms6hpZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYXQge251bWJlcn0g57u05bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9IzFGQThFMyB7c3RyaW5nfSDln7rnoYDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcGVlZD01IHtudW1iZXJ9IOmAn+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvdW50PTMge251bWJlcn0g5rOi57q55pWw6YePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY2lyY2xlPVtdXSB7YXJyYXl9IOWchuWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNpcmNsZVtdLnJhZGl1cyB7bnVtYmVyfSDljYrlvoRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jaXJjbGVbXS5jb2xvciB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSBvcHRpb25zLmxuZ1xyXG4gICAgdGhpcy5vcHRpb25zLmxhdCA9IG9wdGlvbnMubGF0XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICcjMUZBOEUzJ1xyXG4gICAgdGhpcy5vcHRpb25zLnRyYW5zcGFyZW5jeSA9IChvcHRpb25zLnRyYW5zcGFyZW5jeSB8fCBvcHRpb25zLnRyYW5zcGFyZW5jeSA9PT0gMCkgPyBvcHRpb25zLnRyYW5zcGFyZW5jeSA6IDFcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNwYXJlbmN5ID4gMSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudHJhbnNwYXJlbmN5ID0gMVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gKG9wdGlvbnMuc3BlZWQgfHwgb3B0aW9ucy5zcGVlZCA9PT0gMCkgPyBvcHRpb25zLnNwZWVkIDogNVxyXG4gICAgdGhpcy5vcHRpb25zLmNvdW50ID0gKG9wdGlvbnMuY291bnQgfHwgb3B0aW9ucy5jb3VudCA9PT0gMCkgPyBvcHRpb25zLmNvdW50IDogM1xyXG4gICAgaWYgKG9wdGlvbnMuY291bnQgfHwgb3B0aW9ucy5jb3VudCA9PT0gMCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY291bnQgPSBvcHRpb25zLmNvdW50XHJcbiAgICAgIGlmIChvcHRpb25zLmNvdW50ID4gOTkpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY291bnQgPSA5OVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNvdW50ID0gM1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5jaXJjbGUgPSBvcHRpb25zLmNpcmNsZSB8fCBbeyByYWRpdXM6IDEwIH1dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYodGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXM+OTk5OTk5KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMgPSA5OTk5OTlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbkVkaXRpbiA9IGZhbHNlXHJcbiAgICBvcHRpb25zLmxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB7fVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsID0ge1xyXG4gICAgICB0ZXh0OiB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgc2hvdzogb3B0aW9ucy5sYWJlbC5zaG93IHx8IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogb3B0aW9ucy5sYWJlbC5wb3NpdGlvbixcclxuICAgICAgZm9udFNpemU6IChvcHRpb25zLmxhYmVsLmZvbnRTaXplIHx8IG9wdGlvbnMubGFiZWwuZm9udFNpemUgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA6IDIwLFxyXG4gICAgICBmb250RmFtaWx5OiBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPyBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgOiAwLFxyXG4gICAgICBjb2xvcjogb3B0aW9ucy5sYWJlbC5jb2xvciB8fCAnI2ZmZmZmZicsXHJcbiAgICAgIGxpbmVXaWR0aDogKG9wdGlvbnMubGFiZWwubGluZVdpZHRoIHx8IG9wdGlvbnMubGFiZWwubGluZVdpZHRoID09PSAwKSA/IG9wdGlvbnMubGFiZWwubGluZVdpZHRoIDogNCxcclxuICAgICAgcGl4ZWxPZmZzZXQ6IChvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IHx8IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPT09IDApID8gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA6IDIwLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yIHx8IFsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddLFxyXG4gICAgICBsaW5lQ29sb3I6IG9wdGlvbnMubGFiZWwubGluZUNvbG9yIHx8ICcjMDBmZmZmODAnLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHx8IGZhbHNlLFxyXG4gICAgICBuZWFyOiAob3B0aW9ucy5sYWJlbC5uZWFyIHx8IG9wdGlvbnMubGFiZWwubmVhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLm5lYXIgOiAyMDAwLFxyXG4gICAgICBmYXI6IChvcHRpb25zLmxhYmVsLmZhciB8fCBvcHRpb25zLmxhYmVsLmZhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZhciA6IDEwMDAwMCxcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5pbnN0cnVjdCA9IG9wdGlvbnMuaW5zdHJ1Y3QgfHwgJydcclxuICAgIHRoaXMub3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IG9wdGlvbnMub3BlcmF0aW5nUG9pbnQgfHwgJydcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuXHJcbiAgICBsZXQgcmFkaXVzID0gMFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuY2lyY2xlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChOdW1iZXIodGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMpID4gcmFkaXVzKSB7XHJcbiAgICAgICAgcmFkaXVzID0gTnVtYmVyKHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXNcclxuXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIENpcmNsZURpZmZ1c2UuY3JlYXRlKHRoaXMpXHJcbiAgICAvLyB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB7XHJcbiAgICAvLyAgIHR5cGU6ICdDaXJjbGVEaWZmdXNlJyxcclxuICAgIC8vICAgb3B0aW9uczogb3B0aW9uc1xyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IGNvbG9ycyA9IHt9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29sb3JzW3RoYXQub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzIC8gdGhhdC5yYWRpdXNdID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY2lyY2xlW2ldLmNvbG9yIHx8IHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgIH1cclxuXHJcbiAgICBsZXQgekluZGV4ID0gdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgaWYgKHRoYXQuZW50aXR5KSB7XHJcbiAgICAgIHpJbmRleCA9IHRoYXQuZW50aXR5LmVsbGlwc2UuekluZGV4Ll92YWx1ZVxyXG4gICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQuZW50aXR5KVxyXG4gICAgICB0aGF0LmVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLmxuZywgdGhhdC5vcHRpb25zLmxhdClcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgbmFtZTogXCLms6LnurnlnIZcIixcclxuICAgICAgICBlbGxpcHNlOiB7XHJcbiAgICAgICAgICBzZW1pTWlub3JBeGlzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhhdC5yYWRpdXNcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIHNlbWlNYWpvckF4aXM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGF0LnJhZGl1c1xyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDaXJjbGVEaWZmdXNlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgIGNvbG9yczogY29sb3JzLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVuY3k6IHRoYXQub3B0aW9ucy50cmFuc3BhcmVuY3ksXHJcbiAgICAgICAgICAgIHNwZWVkOiB0aGF0Lm9wdGlvbnMuc3BlZWQsXHJcbiAgICAgICAgICAgIGNvdW50OiB0aGF0Lm9wdGlvbnMuY291bnQsXHJcbiAgICAgICAgICAgIGdyYWRpZW50OiAwLjJcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgekluZGV4OiB6SW5kZXhcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5sbmcsIHRoYXQub3B0aW9ucy5sYXQpXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIG5hbWU6IFwi5rOi57q55ZyGXCIsXHJcbiAgICAgICAgZWxsaXBzZToge1xyXG4gICAgICAgICAgc2VtaU1pbm9yQXhpczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoYXQucmFkaXVzXHJcbiAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICBzZW1pTWFqb3JBeGlzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhhdC5yYWRpdXNcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2lyY2xlRGlmZnVzZU1hdGVyaWFsUHJvcGVydHkoe1xyXG4gICAgICAgICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgICBjb2xvcnM6IGNvbG9ycyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbmN5OiB0aGF0Lm9wdGlvbnMudHJhbnNwYXJlbmN5LFxyXG4gICAgICAgICAgICBzcGVlZDogdGhhdC5vcHRpb25zLnNwZWVkLFxyXG4gICAgICAgICAgICBjb3VudDogdGhhdC5vcHRpb25zLmNvdW50LFxyXG4gICAgICAgICAgICBncmFkaWVudDogMC4yXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHpJbmRleDogekluZGV4XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICAgIH1cclxuICAgICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICAgIGlmICh0aGF0LnNkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lID09PSAnY2VzaXVtLXZpZXdlciAyZCcpIHtcclxuICAgICAgICB0aGF0LmVudGl0eS5lbGxpcHNlLmhlaWdodCA9IDFcclxuICAgICAgfVxyXG4gICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZUxhYmVsKHRoYXQpXHJcbiAgICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogdGhhdC5vcHRpb25zLmxuZywgbGF0OiB0aGF0Lm9wdGlvbnMubGF0IH0pXHJcbiAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGF0Lm9wdGlvbnMubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5sYXQsIGFsdDogaGVpZ2h0IH1cclxuICAgIH1cclxuICAgIC8vIOagh+etvlxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6IHRoYXQub3B0aW9ucy5uYW1lLFxyXG4gICAgICBmb250U2l6ZTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5OiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSxcclxuICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgcGl4ZWxPZmZzZXQ6IHRoYXQub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICBsaW5lQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IsXHJcbiAgICAgIGxpbmVXaWR0aDogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMubGFiZWwubmVhcixcclxuICAgICAgZmFyOiB0aGF0Lm9wdGlvbnMubGFiZWwuZmFyLFxyXG4gICAgICBncm91bmQ6IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnQ2lyY2xlRGlmZnVzZSdcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGxldCBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmICghdGhpcy5pc1Nob3dWaWV3IHx8ICFzZGtEKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMyB8fCAhc2RrRCkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LnNob3cgPSB0aGlzLm9wdGlvbnMuc2hvdyBcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsLnNob3cpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHRoaXMub3B0aW9ucy5zaG93IFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsLnNob3cpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzU2hvd1ZpZXcgPSBmYWxzZVxyXG4gICAgICBcclxuICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4uY2hlY2tlZCA9IHZcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICpcclxuICogQG1lbWJlck9mIFNvdXJjZVxyXG4gKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gKlxyXG4gKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5sYXN0T3B0aW9ucyA9IHtcclxuICAgICAgICBsbmc6IHRoaXMub3B0aW9ucy5sbmcsXHJcbiAgICAgICAgbGF0OiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgdGhpcy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgdGhpcy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5sYXN0T3B0aW9ucyA9IHVuZGVmaW5lZFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICB0aGlzLmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICAgICAgdGhpcy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5sYXN0T3B0aW9ucyA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIGlmKHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5lbnRpdHkgJiYgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgyNTUsMjU1LDI1NSwxKWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIGlmICh0aGlzLmxhc3RPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLmxhc3RPcHRpb25zLmxuZ1xyXG4gICAgICAgIHRoaXMubGF0ID0gdGhpcy5sYXN0T3B0aW9ucy5sYXRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RPcHRpb25zID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIGdldCBsbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxuZ1xyXG4gIH1cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YsIHRoaXMubGF0XVxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgfVxyXG4gIHNldCBsYXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhdCA9IHZcclxuICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5sbmcsIHZdXHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJhZGl1cygpIHtcclxuICAgIHJldHVybiB0aGlzLl9yYWRpdXNcclxuICB9XHJcblxyXG4gIGdldCBjaXJjbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNpcmNsZVxyXG4gIH1cclxuICBzZXQgY2lyY2xlKHYpIHtcclxuICAgIGNvbnNvbGUubG9nKHYpXHJcbiAgICB0aGlzLm9wdGlvbnMuY2lyY2xlID0gdiB8fCBbeyByYWRpdXM6IDEwIH1dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYodGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXM+OTk5OTk5KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMgPSA5OTk5OTlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fY3JlYXRlQ2lyY2xlRWxtKClcclxuICB9XHJcblxyXG4gIGdldCBzcGVlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3BlZWRcclxuICB9XHJcbiAgc2V0IHNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IHZcclxuICAgIENpcmNsZURpZmZ1c2UuY3JlYXRlKHRoaXMpXHJcbiAgICB0aGlzLl9lbG1zLnNwZWVkICYmIHRoaXMuX2VsbXMuc3BlZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc3BhcmVuY3koKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRyYW5zcGFyZW5jeVxyXG4gIH1cclxuICBzZXQgdHJhbnNwYXJlbmN5KHYpIHtcclxuICAgIGlmICh2ID4gMSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudHJhbnNwYXJlbmN5ID0gMVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy50cmFuc3BhcmVuY3kgPSB2XHJcbiAgICB9XHJcbiAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgdGhpcy5fZWxtcy50cmFuc3BhcmVuY3kgJiYgdGhpcy5fZWxtcy50cmFuc3BhcmVuY3kuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBjb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY291bnRcclxuICB9XHJcbiAgc2V0IGNvdW50KHYpIHtcclxuICAgIGlmICh2ID4gOTkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNvdW50ID0gOTlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY291bnQgPSB2XHJcbiAgICB9XHJcbiAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgdGhpcy5fZWxtcy5jb3VudCAmJiB0aGlzLl9lbG1zLmNvdW50LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgbGV0IHNka0QgPSBnZXQyRFNkaygpLnNka0RcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSkge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaW5zdHJ1Y3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluc3RydWN0XHJcbiAgfVxyXG4gIHNldCBpbnN0cnVjdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaW5zdHJ1Y3QgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmluc3RydWN0ICYmIHRoaXMuX2VsbXMuaW5zdHJ1Y3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBvcGVyYXRpbmdQb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcbiAgc2V0IG9wZXJhdGluZ1BvaW50KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHZcclxuICAgIHRoaXMuX2VsbXMub3BlcmF0aW5nUG9pbnQgJiYgdGhpcy5fZWxtcy5vcGVyYXRpbmdQb2ludC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVJU0MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUlTQyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB2ckRlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVHb29kcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVHb29kcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQgfSlcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMucmFkaXVzICogNiArIGhlaWdodCksXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkdXJhdGlvbjogMSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfmianmlaPlhYnms6LlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLmxhYmVsLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMubGFiZWwucG9zaXRpb25bMV0sIGFsdDogdGhpcy5sYWJlbC5wb3NpdGlvblsyXSB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBjaXJjbGUtY2lmZnVzZSdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudFxyXG5cclxuICAgICAgdGhpcy5fY3JlYXRlQ2lyY2xlRWxtKClcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdjaXJjbGUtZGlmZnVzZS1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG5cclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgdGhpcy5JU0NTZWxlY3QgJiYgdGhpcy5JU0NTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG5cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+exsydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfljYPnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+WNg+exsydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzLXVuaXQtYm94JylbMF0sIFwiLmlucHV0LXJhZGl1cy11bml0XCIpXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cy11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9ICfnsbMnXHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjaXJjbGVDb250ZW50RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2lyY2xlLWNvbnRlbnQtYm94JylbMF1cclxuICAgICAgICAgICAgbGV0IGNpcmNsZUVsbXMgPSBjaXJjbGVDb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LW51bWJlcicpXHJcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAn57GzJzpcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2lyY2xlRWxtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdW5pdEVsbSA9IGNpcmNsZUVsbXNbaV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndW5pdCcpWzBdXHJcbiAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZUVsbSA9IGNpcmNsZUVsbXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgICAgICAgICAgaWYgKHVuaXRFbG0uaW5uZXJIVE1MID09PSAna20nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pdEVsbS5pbm5lckhUTUwgPSAnbSdcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUVsbS52YWx1ZSA9IE1hdGguZmxvb3IodmFsdWVFbG0udmFsdWUgKiAxMDAwICogMTAwKSAvIDEwMFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+WNg+exsyc6XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNpcmNsZUVsbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHVuaXRFbG0gPSBjaXJjbGVFbG1zW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VuaXQnKVswXVxyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWVFbG0gPSBjaXJjbGVFbG1zW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICAgICAgICAgIGlmICh1bml0RWxtLmlubmVySFRNTCA9PT0gJ20nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pdEVsbS5pbm5lckhUTUwgPSAna20nXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVFbG0udmFsdWUgPSBNYXRoLmZsb29yKE51bWJlcigodmFsdWVFbG0udmFsdWUgLyAxMDAwKS50b0ZpeGVkKDUpKSAqIDEwMDAwMCkgLyAxMDAwMDBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sIFwiLmF0dHJpYnV0ZS1zZWxlY3RcIilcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5sbmcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sbmdcclxuICAgIHRoaXMubGF0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGF0XHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5kdXJhdGlvblxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmluc3RydWN0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3RcclxuICAgIHRoaXMub3BlcmF0aW5nUG9pbnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVJU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIGxldCByYWRpdXMgPSAwXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKE51bWJlcih0aGlzLm9wdGlvbnMuY2lyY2xlW2ldLnJhZGl1cykgPiByYWRpdXMpIHtcclxuICAgICAgICByYWRpdXMgPSBOdW1iZXIodGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JhZGl1cyA9IHJhZGl1c1xyXG4gICAgQ2lyY2xlRGlmZnVzZS5jcmVhdGUodGhpcylcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5lbnRpdHkgJiYgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5MiAmJiB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5MilcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy5lbnRpdHkyID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgaW5zdHJ1Y3RTdWJtaXQoKSB7XHJcbiAgICB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCAmJiB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCh0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0LCB0aGlzLmluc3RydWN0KVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3QgPSB0aGlzLmluc3RydWN0XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpbmdQb2ludFN1Ym1pdCgpIHtcclxuICAgIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0ICYmIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0KHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQsIHRoaXMub3BlcmF0aW5nUG9pbnQpXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHRoaXMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcblxyXG4gIF9jcmVhdGVDaXJjbGVFbG0oKSB7XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzLXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICBsZXQgdW5pdCA9IHVuaXREYXRhTGVncEVsbSA/IHVuaXREYXRhTGVncEVsbS52YWx1ZSA6ICfnsbMnXHJcbiAgICAgIGxldCBjaXJjbGVDb250ZW50RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2lyY2xlLWNvbnRlbnQtYm94JylbMF1cclxuICAgICAgY2lyY2xlQ29udGVudEVsbS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2lyY2xlRWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgY2lyY2xlRWxtLmNsYXNzTmFtZSA9ICdyb3cnXHJcbiAgICAgICAgbGV0IGFkZFN0cmluZyA9ICcnXHJcbiAgICAgICAgbGV0IGRlbGV0ZVN0cmluZyA9ICc8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLW1pbnVzXCI+PHN2ZyBjbGFzcz1cImljb24tbWludXNcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1taW51c1wiPjwvdXNlPjwvc3ZnPjwvYnV0dG9uPidcclxuICAgICAgICBpZiAoaSA9PT0gMCAmJiBpID09PSB0aGlzLm9wdGlvbnMuY2lyY2xlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGRlbGV0ZVN0cmluZyA9ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID09PSB0aGlzLm9wdGlvbnMuY2lyY2xlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGFkZFN0cmluZyA9IGA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWFkZFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj48c3ZnIGNsYXNzPVwiaWNvbi1hZGQyXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tYWRkMlwiPjwvdXNlPjwvc3ZnPjwvYnV0dG9uPmBcclxuICAgICAgICB9XHJcbiAgICAgICAgY2lyY2xlRWxtLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWNiuW+hDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OVwiIHN0eWxlPVwid2lkdGg6IDEzMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPiR7dW5pdCA9PT0gJ+exsycgPyAnbScgOiAna20nfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mianmlaPpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XCI+XHJcbiAgICAgICAgICAgICAgICAke2FkZFN0cmluZ31cclxuICAgICAgICAgICAgICAgICR7ZGVsZXRlU3RyaW5nfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgXHJcbiAgICAgICAgbGV0IGlucHV0RWxtID0gY2lyY2xlRWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzIC8gKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApXHJcbiAgICAgICAgaW5wdXRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cy11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGxldCB1bml0ID0gdW5pdERhdGFMZWdwRWxtLnZhbHVlXHJcbiAgICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgfHwgZS50YXJnZXQudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIGlmICgoKCFlLnRhcmdldC5tYXgpICYmICghZS50YXJnZXQubWluKSkgfHwgKCh2YWx1ZSA8PSAoTnVtYmVyKGUudGFyZ2V0Lm1heCkgLyAodW5pdCA9PT0gJ+exsycgPyAxIDogMTAwMCkpKSAmJiB2YWx1ZSA+PSBOdW1iZXIoZS50YXJnZXQubWluKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bml0ID09PSAn57GzJykge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUgKiAxMDApIC8gMTAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlICogMTAwMDAwKSAvIDEwMDAwMFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMgPSB2YWx1ZSAqICh1bml0ID09PSAn57GzJyA/IDEgOiAxMDAwKVxyXG4gICAgICAgICAgICAgICAgbGV0IHJhZGl1cyA9IDBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmNpcmNsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzKSA+IHJhZGl1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IE51bWJlcih0aGlzLm9wdGlvbnMuY2lyY2xlW2ldLnJhZGl1cylcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzXHJcbiAgICAgICAgICAgICAgICAvLyBpbnB1dEVsbS52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaW5wdXRFbG0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICAgICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzLXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgbGV0IHVuaXQgPSB1bml0RGF0YUxlZ3BFbG0udmFsdWVcclxuICAgICAgICAgIGlmIChlLnRhcmdldC52YWx1ZSB8fCBlLnRhcmdldC52YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gKE51bWJlcihlLnRhcmdldC5tYXgpIC8gKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApKSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gKE51bWJlcihlLnRhcmdldC5tYXgpIC8gKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1bml0ID09PSAn57GzJykge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSAqIDEwMCkgLyAxMDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUgKiAxMDAwMDApIC8gMTAwMDAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMgPSB2YWx1ZSAqICh1bml0ID09PSAn57GzJyA/IDEgOiAxMDAwKVxyXG4gICAgICAgICAgICBsZXQgcmFkaXVzID0gMFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoTnVtYmVyKHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzKSA+IHJhZGl1cykge1xyXG4gICAgICAgICAgICAgICAgcmFkaXVzID0gTnVtYmVyKHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXNcclxuICAgICAgICAgICAgaW5wdXRFbG0udmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBjaXJjbGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogZmFsc2UsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5jb2xvciB8fCB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jaXJjbGVbaV0uY29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNpcmNsZVtpXS5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8g5YePXHJcbiAgICAgICAgbGV0IG1pbnVzRWxtID0gY2lyY2xlRWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NpcmNsZS1taW51cycpWzBdXHJcbiAgICAgICAgbWludXNFbG0gJiYgbWludXNFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY2lyY2xlLnNwbGljZShpLCAxKVxyXG4gICAgICAgICAgbGV0IHJhZGl1cyA9IDBcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmNpcmNsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyKHRoaXMub3B0aW9ucy5jaXJjbGVbaV0ucmFkaXVzKSA+IHJhZGl1cykge1xyXG4gICAgICAgICAgICAgIHJhZGl1cyA9IE51bWJlcih0aGlzLm9wdGlvbnMuY2lyY2xlW2ldLnJhZGl1cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzXHJcbiAgICAgICAgICBDaXJjbGVEaWZmdXNlLmNyZWF0ZSh0aGlzKVxyXG4gICAgICAgICAgdGhpcy5fY3JlYXRlQ2lyY2xlRWxtKClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIOWKoFxyXG4gICAgICAgIGxldCBhZGRFbG0gPSBjaXJjbGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2lyY2xlLWFkZCcpWzBdXHJcbiAgICAgICAgYWRkRWxtICYmIGFkZEVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jaXJjbGUucHVzaCh7XHJcbiAgICAgICAgICAgIHJhZGl1czogMCxcclxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCByYWRpdXMgPSAwXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5jaXJjbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE51bWJlcih0aGlzLm9wdGlvbnMuY2lyY2xlW2ldLnJhZGl1cykgPiByYWRpdXMpIHtcclxuICAgICAgICAgICAgICByYWRpdXMgPSBOdW1iZXIodGhpcy5vcHRpb25zLmNpcmNsZVtpXS5yYWRpdXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHJhZGl1c1xyXG4gICAgICAgICAgQ2lyY2xlRGlmZnVzZS5jcmVhdGUodGhpcylcclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNpcmNsZUVsbSgpXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgY2lyY2xlQ29udGVudEVsbS5hcHBlbmRDaGlsZChjaXJjbGVFbG0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBfYWRkUnIoKSB7XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRWcigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVScih2cikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgIHVybDogdnJcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgcmljaFRleHQub3Blbih0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5uYW1lLCB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50KVxyXG4gICAgcmljaFRleHQucHJpbWFyeUNhbGxCYWNrID0gKGNvbnRlbnQpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG4gICAgbGV0IHNpdGVJbmZvRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5kb21pZClcclxuICAgIGxldCBzaXRlSW5mb1Bvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlRGlmZnVzZVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0dBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUE0RkE7QUFDQTtBQUFBO0FBdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQXVCQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBbEVBO0FBQUE7QUFBQTtBQUFBO0FBb0VBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQW5DQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF2T0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQS9JQTtBQUFBO0FBQUE7QUFnSkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXY3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWkzQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/CircleDiffuse/index.js\n"); /***/ }), /***/ "./src/Obj/Base/CircleObject/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Base/CircleObject/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ2lyY2xlT2JqZWN0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0NpcmNsZU9iamVjdC9fZWxlbWVudC5qcz8zYWU3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSwgbGFiZWxTdHlsZUVsbTEsIGxhYmVsU3R5bGVFbG0yIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9lbG1faHRtbCdcclxuXHJcbmZ1bmN0aW9uIGh0bWwodGhhdCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA2MCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCI+5oqV5b2x6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC10ZXh0XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwiYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWxlY3QtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPERJVi1jeS10YWJzIGlkPVwiY2lyY2xlLW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1tb2RlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1tb2RlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+WuWAvOe7n+S4gOWinuWKoDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maXJtIGhlaWdodC1jb25maXJtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBzcGF0aWFsLWluZm8tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nu4/luqbvvIhY77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue6rOW6pu+8iFnvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6auY5bqm77yIWu+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIumdoumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumdouminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZUNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJsaW5lV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTEoKX1cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTIoKX1cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgPC9ESVYtY3ktdGFicz5cclxuICAgIDwvZGl2PlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQWlGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/CircleObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/CircleObject/index.js": /*!********************************************!*\ !*** ./src/Obj/Base/CircleObject/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/CircleObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 圆\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar CircleObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 创建圆\r\n * @param options.id {string} 标注id\r\n * @param options.name {string} 名称\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.color=\"#ff000080\" {string} 颜色\r\n * @param options.center {object} 中心位置\r\n * @param options.center.lng {number} 经度\r\n * @param options.center.lat {number} 纬度\r\n * @param options.center.alt {number} 高度\r\n * @param options.radius=10 {number}半径\r\n * @param options.line {object} 边框\r\n * @param options.line.width=3 {number} 边框宽\r\n * @param options.line.color=\"#ff000080\" {string} 边框颜色\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function CircleObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, CircleObject);\n _this2 = _callSuper(this, CircleObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"#ff000080\";\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.radius = options.radius || options.radius === 0 ? options.radius : 10;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.center = options.center || {};\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n options.label = options.label || {};\n _this2._elms = {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.nodePoints = [];\n _this2.operate = {};\n _this2.Dialog = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n CircleObject.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(CircleObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(CircleObject, [{\n key: \"type\",\n get: function get() {\n return 'CircleObject';\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this3 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this3.options.heightMode = v || v == 0 ? v : 2;\n _this3.positionEditing = false;\n if (!_this3.entity) {\n return;\n }\n var heightModeName = '';\n CircleObject.closeNodeEdit(_this3);\n var ground = false;\n var disabled = false;\n _this3.renewPositions();\n _this3.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this3.positions), [_this3.positions[0], _this3.positions[1]]);\n _this3.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this3.positions);\n switch (_this3.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this3.label.ground = ground;\n _this3.entity.polyline.clampToGround = ground;\n _this3.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this3.entity.polygon.perPositionHeight = !ground ? true : false;\n _this3._elms.heightMode && (_this3._elms.heightMode.value = heightModeName);\n _this3._elms.heightModeObject && _this3._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.center.alt;\n },\n set: function set(v) {\n var _this4 = this;\n if (!v || isNaN(Number(v))) {\n this.options.center.alt = 0;\n } else {\n this.options.center.alt = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positions);\n _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positions), [_this4.positions[0], _this4.positions[1]]);\n _this4.entity.polyline.clampToGround = !ground ? false : true;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this4.options.center.alt;\n });\n }\n }, {\n key: \"radius\",\n get: function get() {\n return this.options.radius;\n },\n set: function set(v) {\n this.options.radius = v;\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positions);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions), [this.positions[0], this.positions[1]]);\n }\n }, {\n key: \"center\",\n get: function get() {\n return this.options.center;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.center = v;\n this.height = this.height;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this5.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this5.options.center.lat;\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this7.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this7._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && (!this.showView || this.showView == 3)) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this12.options.attribute.link.content;\n case 2:\n _this12.attributeLink = _context3.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this12.options.attribute.link.content.splice(i, 1);\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this12.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this13.options.attribute.vr.content;\n case 2:\n _this13.attributeVr = _context6.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this13.options.attribute.vr.content.splice(i, 1);\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this13.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this14 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 32;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\\u5706\\u5FC3\\u5750\\u6807
\\n
\\n
\\n
\\n \";\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.center.lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.center.lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n CircleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.center.lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n CircleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.center.lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n CircleObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n _context7.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '圆属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this14.name = _this14.name.trim();\n if (!_this14.name) {\n _this14.name = '未命名对象';\n }\n _this14.options.label.position = {\n lng: _this14.label.position[0],\n lat: _this14.label.position[1],\n alt: _this14.label.position[2]\n };\n _this14.originalOptions = _this14.deepCopyObj(_this14.options);\n _this14._DialogObject.close();\n _this14.Dialog.confirmCallBack && _this14.Dialog.confirmCallBack(_this14.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this14.reset();\n _this14.Dialog.resetCallBack && _this14.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this14.Dialog.removeCallBack && _this14.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this14.reset();\n _this14.positionEditing = false;\n _this14.Dialog.closeCallBack && _this14.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this14.options.show = show;\n _this14.originalOptions.show = show;\n _this14.show = show;\n _this14.Dialog.showCallBack && _this14.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this14.positionEditing = !_this14.positionEditing;\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n CircleObject.nodeEdit(_this14, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 7:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' circle';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('circle-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n CircleObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this14.attributeLink = _this14.options.attribute.link.content;\n _this14.attributeVr = _this14.options.attribute.vr.content;\n _this14.cameraSelect && _this14.cameraSelect();\n _this14.goodsSelect && _this14.goodsSelect();\n var tagData = _this14.attributeSelect;\n var attributeElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this14.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this14.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this14.options['area-unit'];\n for (var _i6 = 0; _i6 < unitData.length; _i6++) {\n if (unitData[_i6].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i6].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < unitData.length; _i7++) {\n if (unitData[_i7].value === unitDataLegpElm.value) {\n _this14.areaUnit = unitData[_i7].value;\n break;\n }\n }\n });\n }\n var heightBoxElm = _this14._DialogObject._element.content.getElementsByClassName('height-box')[0];\n var heightElm = heightBoxElm.getElementsByClassName('height')[0];\n var heightConfirmElm = _this14._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (_this14.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n var heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n var heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (heightModeObject) {\n heightModeObject.legp_search(heightModeData);\n var heightModeDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n for (var _i8 = 0; _i8 < heightModeData.length; _i8++) {\n if (heightModeData[_i8].key == _this14.heightMode) {\n heightModeDataLegpElm.value = heightModeData[_i8].value;\n heightModeObject.legp_searchActive(heightModeData[_i8].value);\n break;\n }\n }\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < heightModeData.length; _i9++) {\n if (heightModeData[_i9].value === heightModeDataLegpElm.value) {\n _this14.heightMode = heightModeData[_i9].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this14.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n _this14._elms.height = heightElm;\n _this14._elms.heightBox = heightBoxElm;\n _this14._elms.heightMode = heightModeDataLegpElm;\n _this14._elms.heightConfirm = heightConfirmElm;\n _this14._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this14.operate.positionEditing) {\n _this14.positionEditing = false;\n _this14.height = _this14.height + Number(heightElm.value);\n } else {\n CircleObject.closeNodeEdit(_this14);\n _this14.heightMode = _this14.heightMode;\n setTimeout(function () {\n _this14.height = _this14.height + Number(heightElm.value);\n }, 100);\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this14.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this14.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this14._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this15 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.radius = this.originalOptions.radius;\n this.color = this.originalOptions.color;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelColor = this.originalOptions.label.color;\n this.lineWidth = this.originalOptions.line.width;\n this.lineLength = this.originalOptions.line.length;\n this.lineColor = this.originalOptions.line.color;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n this.heightMode = this.originalOptions.heightMode;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this15.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this15.options.center.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this15.options.center.alt;\n });\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positions,\n positionArray,\n height,\n pos84,\n point1,\n point2,\n direction,\n c,\n ray,\n r,\n pickedObjects,\n i,\n promise,\n a,\n _i12,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 16;\n break;\n }\n _context9.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context9.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 60;\n break;\n case 23:\n positions = this.entity.polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions;\n positionArray = [];\n height = 0;\n pos84 = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n point1 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 0);\n point2 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 10000000);\n direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, direction);\n ray = new Cesium.Ray(point1, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = 0;\n case 35:\n if (!(i < pickedObjects.length)) {\n _context9.next = 42;\n break;\n }\n if (!pickedObjects[i].position) {\n _context9.next = 39;\n break;\n }\n r = pickedObjects[i];\n return _context9.abrupt(\"break\", 42);\n case 39:\n i++;\n _context9.next = 35;\n break;\n case 42:\n if (!(r && r.position)) {\n _context9.next = 46;\n break;\n }\n height = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n _context9.next = 55;\n break;\n case 46:\n _context9.prev = 46;\n _context9.next = 49;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat)]);\n case 49:\n promise = _context9.sent;\n height = promise[0].height;\n _context9.next = 55;\n break;\n case 53:\n _context9.prev = 53;\n _context9.t0 = _context9[\"catch\"](46);\n case 55:\n a = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, height);\n positionArray.push(a.x, a.y, a.z);\n for (_i12 = 1; _i12 < positions.length; _i12++) {\n positionArray.push(positions[_i12].x, positions[_i12].y, positions[_i12].z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 60:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this, [[46, 53]]);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this16 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this16.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this17 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n var _this = this;\n this.operate.positionEditing = status;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.previous = {\n positions: _objectSpread({}, this.options.center)\n };\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n this.renewPositions();\n this.event.mouse_move(function (movement, cartesian) {\n var positions = _this17.cartesian3Towgs84(cartesian, _this17.sdk.viewer);\n positions.alt = _this17.options.center.alt;\n // this.renewPositions(positions)\n var height = 0;\n var ground = false;\n switch (_this17.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = _this17.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions.lng, positions.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray = _this17.createCircle(positions, _this17.options.radius);\n var fromDegreesArray2 = [];\n if (!ground) {\n for (var i = 0; i < fromDegreesArray.length; i += 2) {\n fromDegreesArray2.push(fromDegreesArray[i], fromDegreesArray[i + 1], positions.alt + height);\n }\n _this17.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n _this17.label && (_this17.label.position = [positions.lng, positions.lat, positions.alt + height]);\n } else {\n _this17.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this17.sdk.viewer.entities.values);\n _this17.getClampToHeight({\n lng: positions.lng,\n lat: positions.lat\n }, objectsToExclude).then(function (height) {\n _this17.label && (_this17.label.position = [positions.lng, positions.lat, height]);\n });\n }\n _this17.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var positions = _this17.cartesian3Towgs84(cartesian, _this17.sdk.viewer);\n _this17.options.center.lng = Number(positions.lng.toFixed(8));\n _this17.options.center.lat = Number(positions.lat.toFixed(8));\n _this17.center = _this17.options.center;\n _this17.event.mouse_move(function () {});\n _this17.event.mouse_left(function () {});\n _this17.event.mouse_right(function () {});\n _this17.event.gesture_pinck_start(function () {});\n _this17.previous = {\n positions: _objectSpread({}, _this17.options.center)\n };\n _this17.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this17.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this17.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this17.positionEditing = false;\n } else {\n var positions = _this17.cartesian3Towgs84(cartesian, _this17.sdk.viewer);\n _this17.options.center.lng = Number(positions.lng.toFixed(8));\n _this17.options.center.lat = Number(positions.lat.toFixed(8));\n _this17.center = _this17.options.center;\n _this17.event.mouse_move(function () {});\n _this17.event.mouse_left(function () {});\n _this17.event.mouse_right(function () {});\n _this17.event.gesture_pinck_start(function () {});\n _this17.event.gesture_pinck_end(function () {});\n _this17.previous = {\n positions: _objectSpread({}, _this17.options.center)\n };\n _this17.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, true);\n }\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this18 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.center.lng, this.options.center.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this18.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(center) {\n var _this19 = this;\n if (this._error) {\n return;\n }\n var ground = false;\n if (!center) {\n center = this.options.center;\n }\n var height = 0;\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(center.lng, center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray = this.createCircle(center, this.options.radius);\n var fromDegreesArray2 = [];\n if (!ground) {\n for (var i = 0; i < fromDegreesArray.length; i += 2) {\n fromDegreesArray2.push(fromDegreesArray[i], fromDegreesArray[i + 1], center.alt + height);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [center.lng, center.lat, center.alt + height]);\n } else {\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n setTimeout(function () {\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this19.sdk.viewer.entities.values);\n _this19.getClampToHeight({\n lng: center.lng,\n lat: center.lat\n }, objectsToExclude).then(function (height) {\n _this19.label && (_this19.label.position = [center.lng, center.lat, height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n this.options.areaByMeter = Number((Cesium.Math.PI * this.options.radius * this.options.radius).toFixed(2));\n this.areaUnit = this.areaUnit;\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var fromDegreesArray = that.createCircle(that.options.center, that.options.radius);\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(that.options.center.lng, that.options.center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.center.lng,\n lat: that.options.center.lat,\n alt: that.options.center.alt + height\n };\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n var fromDegreesArray2 = [];\n var positionsA;\n for (var i = 0; i < fromDegreesArray.length; i += 2) {\n fromDegreesArray2.push(fromDegreesArray[i], fromDegreesArray[i + 1], that.options.center.alt + height);\n }\n that.options.label.ground = ground;\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n positionsA = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: !ground ? new Cesium.PolygonHierarchy(that.positions) : new Cesium.PolygonHierarchy(positionsA),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positions), [that.positions[0], that.positions[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n CircleObject.createLabel(that);\n that.options.areaByMeter = Number((Cesium.Math.PI * that.options.radius * that.options.radius).toFixed(2));\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {} else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7() {\n var objectsToExclude, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _context11.next = 3;\n return that.getClampToHeight(that.options.center, objectsToExclude);\n case 3:\n height = _context11.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.center.lng, that.options.center.lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 6:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return function createNodePoints() {\n return _ref.apply(this, arguments);\n };\n }();\n that.event && that.event.destroy();\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('左键确认,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var newpositions = [];\n var fromDegreesArray = [];\n var endpoint = _objectSpread({}, that.options.center);\n var moveRadius = null;\n var entity;\n fromDegreesArray = that.createCircle(that.options.center, that.options.radius);\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray));\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }, false);\n setTimeout(function () {\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: that.options.center.lng,\n lat: that.options.center.lat\n }, objectsToExclude).then(function (height) {\n that.label.position = [that.options.center.lng, that.options.center.lat, height];\n });\n }, 50);\n setTimeout(function () {\n that.event.mouse_left(function (movement, cartesian) {\n if (entity) {\n that.sdk.viewer.entities.remove(entity);\n entity = null;\n }\n endpoint = that.cartesian3Towgs84(cartesian, that.viewer);\n var radius = that.computeDistance2([that.options.center, endpoint]);\n that.radius = radius;\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n that.heightMode = that.heightMode;\n });\n that.event.mouse_right(function (movement, cartesian) {\n if (entity) {\n that.sdk.viewer.entities.remove(entity);\n entity = null;\n }\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n that.heightMode = that.heightMode;\n });\n that.event.mouse_move(function (movement, cartesian) {\n entity && (entity.show = true);\n endpoint = that.cartesian3Towgs84(cartesian, that.viewer);\n moveRadius = that.computeDistance2([that.options.center, endpoint]);\n fromDegreesArray = that.createCircle(that.options.center, moveRadius);\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n createNodePoints();\n }, 200);\n entity = that.sdk.viewer.entities.add(new Cesium.Entity({\n show: false,\n position: new Cesium.CallbackProperty(function (e) {\n if (endpoint) {\n var c = that.computeMidpoint(that.options.center, endpoint);\n return Cesium.Cartesian3.fromDegrees(c.lng, c.lat, endpoint.alt);\n } else {\n return Cesium.Cartesian3();\n }\n }, false),\n label: {\n text: new Cesium.CallbackProperty(function (e) {\n if (moveRadius > 1000) {\n return '半径:' + (moveRadius / 1000).toFixed(2) + ' 公里';\n }\n return '半径:' + moveRadius + ' 米';\n }, false),\n font: '20px Microsoft YaHei',\n distanceDisplayCondition: 10000000,\n scale: 1,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n fillColor: Cesium.Color.fromCssColorString('#f5ce0a'),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE\n },\n polyline: {\n positions: new Cesium.CallbackProperty(function (e) {\n return Cesium.Cartesian3.fromDegreesArray([that.options.center.lng, that.options.center.lat, endpoint.lng, endpoint.lat]);\n }, false),\n width: 2,\n material: Cesium.Color.fromCssColorString('#c1c505').withAlpha(0.5),\n clampToGround: true,\n zIndex: 99999999\n }\n }));\n that.nodePoints.push(entity);\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop9 = function _loop9() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop10 = function _loop10() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop10();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop9()) continue;\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CircleObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ2lyY2xlT2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0NpcmNsZU9iamVjdC9pbmRleC5qcz82MWU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDlnIZcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tIFwiLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnNcIjtcclxuaW1wb3J0IHJpY2hUZXh0IGZyb20gXCIuLi8uLi9FbGVtZW50L3JpY2hUZXh0XCI7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZGF0YWxpc3QnO1xyXG5pbXBvcnQgeyBnZXRGb250TGlzdCwgZ2V0Rm9udEZhbWlseU5hbWUgfSBmcm9tICcuLi8uLi9FbGVtZW50L2ZvbnRTZWxlY3QnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIENpcmNsZU9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAZGVzY3JpcHRpb24g5Yib5bu65ZyGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5qCH5rOoaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPVwiI2ZmMDAwMDgwXCIge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY2VudGVyIHtvYmplY3R9IOS4reW/g+S9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNlbnRlci5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY2VudGVyLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jZW50ZXIuYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJhZGl1cz0xMCB7bnVtYmVyfeWNiuW+hFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUge29iamVjdH0g6L655qGGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS53aWR0aD0zIHtudW1iZXJ9IOi+ueahhuWuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUuY29sb3I9XCIjZmYwMDAwODBcIiB7c3RyaW5nfSDovrnmoYbpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHRNb2RlPTJ7bnVtYmVyfSDpq5jluqbmqKHlvI/vvIgw77ya5rW35ouU6auY5bqm77ybMe+8muebuOWvueWcsOihqO+8mzLvvJrkvp3pmYTmqKHlvI/vvIlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hcmVhVW5pdD0n5bmz5pa557GzJyB7c3RyaW5nfSDpnaLnp6/ljZXkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsge29iamVjdH0g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8IFwiI2ZmMDAwMDgwXCJcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKG9wdGlvbnMuaGVpZ2h0TW9kZSB8fCBvcHRpb25zLmhlaWdodE1vZGUgPT0gMCkgPyBvcHRpb25zLmhlaWdodE1vZGUgOiAyXHJcbiAgICB0aGlzLm9wdGlvbnMucmFkaXVzID0gKG9wdGlvbnMucmFkaXVzIHx8IG9wdGlvbnMucmFkaXVzID09PSAwKSA/IG9wdGlvbnMucmFkaXVzIDogMTBcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5jZW50ZXIgPSBvcHRpb25zLmNlbnRlciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUgPSBvcHRpb25zLmxpbmUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gKCh0aGlzLm9wdGlvbnMubGluZS53aWR0aCB8fCB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9PT0gMCkgPyB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA6IDMpXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHRoaXMub3B0aW9ucy5saW5lLmNvbG9yIHx8ICdyZ2JhKDI1NSwgMCwgMCwgMSknXHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gb3B0aW9uc1snYXJlYS11bml0J10gfHwgJ+W5s+aWueexsydcclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMuRGlhbG9nID0ge31cclxuXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgQ2lyY2xlT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ0NpcmNsZU9iamVjdCdcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID8gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgOiAwXHJcbiAgfVxyXG4gIHNldCBoZWlnaHRNb2RlKHYpIHtcclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gW11cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9ICh2IHx8IHYgPT0gMCkgPyB2IDogMlxyXG4gICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgaGVpZ2h0TW9kZU5hbWUgPSAnJ1xyXG4gICAgICBDaXJjbGVPYmplY3QuY2xvc2VOb2RlRWRpdCh0aGlzKVxyXG4gICAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9ucyxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1swXSxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1sxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zXHJcbiAgICAgIClcclxuICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+a1t+aLlOmrmOW6pidcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn55u45a+55Zyw6KGoJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgICBkaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+S+nemZhOaooeWeiydcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYWJlbC5ncm91bmQgPSBncm91bmRcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IGdyb3VuZFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5hcmNUeXBlID0gIWdyb3VuZCA/IENlc2l1bS5BcmNUeXBlLk5PTkUgOiBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQyxcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gIWdyb3VuZCA/IHRydWUgOiBmYWxzZVxyXG4gICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgJiYgKHRoaXMuX2VsbXMuaGVpZ2h0TW9kZS52YWx1ZSA9IGhlaWdodE1vZGVOYW1lKVxyXG4gICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QgJiYgKHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICBoZWlnaHRNb2RlTmFtZVxyXG4gICAgICApKVxyXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCAmJiAodGhpcy5fZWxtcy5oZWlnaHRCb3guY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3ggZGlzYWJsZWQnKTtcclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gJiYgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCAmJiAodGhpcy5fZWxtcy5oZWlnaHRCb3guY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3gnKTtcclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gJiYgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2VudGVyLmFsdFxyXG4gIH1cclxuXHJcbiAgc2V0IGhlaWdodCh2KSB7XHJcbiAgICBpZiAoIXYgfHwgaXNOYU4oTnVtYmVyKHYpKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmFsdCA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmFsdCA9IE51bWJlcihOdW1iZXIodikudG9GaXhlZCgyKSlcclxuICAgIH1cclxuICAgIGxldCBncm91bmRcclxuICAgIGlmICh0aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICBncm91bmQgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhpcy5wb3NpdGlvbnMpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9ucyxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1swXSxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1sxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDXHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5hbHRcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCByYWRpdXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1c1xyXG4gIH1cclxuICBzZXQgcmFkaXVzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5yYWRpdXMgPSB2XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoaXMucG9zaXRpb25zKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAuLi50aGlzLnBvc2l0aW9ucyxcclxuICAgICAgdGhpcy5wb3NpdGlvbnNbMF0sXHJcbiAgICAgIHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBnZXQgY2VudGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jZW50ZXJcclxuICB9XHJcbiAgc2V0IGNlbnRlcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY2VudGVyID0gdlxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodFxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIubG5nXHJcbiAgICAgIH0pXHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5sYXRcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHYgfHwgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJ1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMCwwLDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUuY29sb3JcclxuICB9XHJcbiAgc2V0IGxpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHYgfHwgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJ1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWxpbmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmxpbmUuY29sb3IpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5saW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmxpbmUuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9ICdyZ2JhKDI1NSwwLDAsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgfVxyXG4gIHNldCBsaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHYgfHwgdiA9PT0gMCkgPyB2IDogMylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICAgIHRoaXMuX2VsbXMubGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGluZVdpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXJlYVxyXG4gIH1cclxuXHJcbiAgc2V0IGFyZWEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWEgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWEgJiYgdGhpcy5fZWxtcy5hcmVhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYVVuaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gIH1cclxuICBzZXQgYXJlYVVuaXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYVVuaXQgJiYgdGhpcy5fZWxtcy5hcmVhVW5pdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlcikge1xyXG4gICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSkge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LmNyZWF0ZUNpcmNsZSh0aGF0Lm9wdGlvbnMuY2VudGVyLCB0aGF0Lm9wdGlvbnMucmFkaXVzKVxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuXHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMuY2VudGVyLmxuZywgdGhhdC5vcHRpb25zLmNlbnRlci5sYXQpKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5jZW50ZXIubGF0LCBhbHQ6IHRoYXQub3B0aW9ucy5jZW50ZXIuYWx0ICsgaGVpZ2h0IH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgIGxldCBwb3NpdGlvbnNBXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChmcm9tRGVncmVlc0FycmF5W2ldLCBmcm9tRGVncmVlc0FycmF5W2kgKyAxXSwgdGhhdC5vcHRpb25zLmNlbnRlci5hbHQgKyBoZWlnaHQpXHJcbiAgICB9XHJcbiAgICB0aGF0Lm9wdGlvbnMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICB0aGF0LnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkyKVxyXG4gICAgcG9zaXRpb25zQSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiAhZ3JvdW5kID8gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zKSA6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShwb3NpdGlvbnNBKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogIWdyb3VuZCA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhhdC5wb3NpdGlvbnMsIHRoYXQucG9zaXRpb25zWzBdLCB0aGF0LnBvc2l0aW9uc1sxXV0sXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5saW5lLndpZHRoLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5saW5lLmNvbG9yKSxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIGFyY1R5cGU6ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICBDaXJjbGVPYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciA9IE51bWJlcigoQ2VzaXVtLk1hdGguUEkgKiB0aGF0Lm9wdGlvbnMucmFkaXVzICogdGhhdC5vcHRpb25zLnJhZGl1cykudG9GaXhlZCgyKSk7XHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9uc1snYXJlYS11bml0J10pIHtcclxuICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgIH1cclxuXHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcblxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgLy8g5qCH562+XHJcbiAgICB0aGF0LmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IFt0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgIGdyb3VuZDogdGhhdC5vcHRpb25zLmxhYmVsLmdyb3VuZCxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVTcGF0aWFsSW5mb1RhYmxlQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgdGFibGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NwYXRpYWwtaW5mby10YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRCb2R5RWxtID0gdGFibGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgdEJvZHlFbG0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBfdGhpcy5fZWxtcy5sbmcgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5sYXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5hbHQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0ID0gW11cclxuICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIHRyLmNsYXNzTmFtZSA9ICd0cidcclxuICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWxpZ24tY2VudGVyXCI+5ZyG5b+D5Z2Q5qCHPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbG5nIGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxhdCBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhbHQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgYFxyXG4gICAgICAgIGxldCBsbmdCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmcnKVswXVxyXG4gICAgICAgIGxldCBsbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICBsbmcuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZykudG9GaXhlZCg4KVxyXG4gICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgbGV0IGxuZ0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgIGxuZ0lucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICBsbmdJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgbG5nSW5wdXQubWluID0gLTE4MFxyXG4gICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgIGxuZ0lucHV0LnZhbHVlID0gKF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZykudG9GaXhlZCg4KVxyXG5cclxuICAgICAgICBsZXQgbGF0Qm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0JylbMF1cclxuICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgbGF0LmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQpLnRvRml4ZWQoOClcclxuICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgIGxldCBsYXRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICBsYXRJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgbGF0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgbGF0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgIGxhdElucHV0Lm1pbiA9IC05MFxyXG4gICAgICAgIGxhdElucHV0Lm1heCA9IDkwXHJcbiAgICAgICAgbGF0SW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgIGxldCBhbHRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbHQnKVswXVxyXG4gICAgICAgIGxldCBhbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICBhbHQuaW5uZXJIVE1MID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG4gICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgbGV0IGFsdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICBhbHRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICBhbHRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICBhbHRJbnB1dC5tYXggPSA5OTk5OTk5OTlcclxuICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMilcclxuXHJcbiAgICAgICAgbG5nQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZ0lucHV0KVxyXG4gICAgICAgICAgbG5nSW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBDaXJjbGVPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgIF90aGlzLmhlaWdodE1vZGUgPSBfdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nID0gTnVtYmVyKE51bWJlcihsbmdJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGxuZy5pbm5lckhUTUwgPSBfdGhpcy5vcHRpb25zLmNlbnRlci5sbmcudG9GaXhlZCg4KVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgbGF0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdElucHV0KVxyXG4gICAgICAgICAgbGF0SW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBDaXJjbGVPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgIF90aGlzLmhlaWdodE1vZGUgPSBfdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMuY2VudGVyLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0ID0gTnVtYmVyKE51bWJlcihsYXRJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSBfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWx0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKF90aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0SW5wdXQpXHJcbiAgICAgICAgICBhbHRJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIENpcmNsZU9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBOdW1iZXIoTnVtYmVyKGFsdElucHV0LnZhbHVlKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgYWx0LmlubmVySFRNTCA9IE51bWJlcihfdGhpcy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nLnB1c2gobG5nKVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0LnB1c2gobGF0KVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0LnB1c2gobGF0SW5wdXQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0LnB1c2goYWx0SW5wdXQpXHJcbiAgICAgICAgdEJvZHlFbG0uYXBwZW5kQ2hpbGQodHIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn5ZyG5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhpcy5sYWJlbC5wb3NpdGlvblswXSwgbGF0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzFdLCBhbHQ6IHRoaXMubGFiZWwucG9zaXRpb25bMl0gfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgQ2lyY2xlT2JqZWN0Lm5vZGVFZGl0KHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgY2lyY2xlJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdjaXJjbGUtb2JqZWN0LWVkaXQtdGFicycsIHVuZGVmaW5lZCwgdGhpcy5zZGspXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGluZWNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsaW5lQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbENvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgQ2lyY2xlT2JqZWN0LkV2ZW50QmluZGluZyh0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvciA9IFtsaW5lY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xhYmVsbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sIFwiLmF0dHJpYnV0ZS1zZWxlY3RcIilcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW3tcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5bmz5pa55Y2D57GzJyxcclxuICAgICAgICAgIHZhbHVlOiAn5bmz5pa55Y2D57GzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S6qScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S6qSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflhazpobcnLFxyXG4gICAgICAgICAgdmFsdWU6ICflhazpobcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQtYm94JylbMF0sIFwiLmlucHV0LXNlbGVjdC11bml0XCIpXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodW5pdERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJlYVVuaXQgPSB1bml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodEVsbSA9IGhlaWdodEJveEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICAgIGxldCBoZWlnaHRDb25maXJtRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWNvbmZpcm0nKVswXVxyXG4gICAgICAgIGhlaWdodEVsbS52YWx1ZSA9IDEwXHJcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgICBrZXk6ICcwJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIGtleTogJzEnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAga2V5OiAnMicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdoZWlnaHQtbW9kZS1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhlaWdodE1vZGVPYmplY3QpIHtcclxuICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1tb2RlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS5rZXkgPT0gdGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IGhlaWdodE1vZGVEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0ID0gaGVpZ2h0RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCA9IGhlaWdodEJveEVsbVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gPSBoZWlnaHRDb25maXJtRWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QgPSBoZWlnaHRNb2RlT2JqZWN0XHJcblxyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgQ2lyY2xlT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICB9LCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMucmFkaXVzID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucmFkaXVzXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMuYXJlYSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmFyZWFcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9uc1snYXJlYS11bml0J11cclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5saW5lTGVuZ3RoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5sZW5ndGhcclxuICAgIHRoaXMubGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmhlaWdodE1vZGVcclxuXHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5sbmdcclxuICAgICAgfSlcclxuICAgIHRoaXMuX2VsbXMubGF0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdFxyXG4gICAgICB9KVxyXG4gICAgdGhpcy5fZWxtcy5hbHQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIuYWx0XHJcbiAgICAgIH0pXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWVcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeS5nZXRWYWx1ZShDZXNpdW0uSnVsaWFuRGF0ZS5ub3coKSkucG9zaXRpb25zXHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGhlaWdodCA9IDBcclxuICAgICAgbGV0IHBvczg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgbGV0IHBvaW50MSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCAwKTtcclxuICAgICAgbGV0IHBvaW50MiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCAxMDAwMDAwMCk7XHJcbiAgICAgIGxldCBkaXJlY3Rpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwb2ludDIsIHBvaW50MSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICBsZXQgYyA9IENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShkaXJlY3Rpb24sIGRpcmVjdGlvbik7XHJcbiAgICAgIGxldCByYXkgPSBuZXcgQ2VzaXVtLlJheShwb2ludDEsIGMpO1xyXG4gICAgICBsZXQgciA9IHt9XHJcbiAgICAgIGxldCBwaWNrZWRPYmplY3RzID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmRyaWxsUGlja0Zyb21SYXkocmF5KTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHBpY2tlZE9iamVjdHNbaV0ucG9zaXRpb24pIHtcclxuICAgICAgICAgIHIgPSBwaWNrZWRPYmplY3RzW2ldXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAociAmJiByLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChyLnBvc2l0aW9uLCB0aGlzLnNkay52aWV3ZXIpLmFsdFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsZXQgcHJvbWlzZSA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKHRoaXMuc2RrLnZpZXdlci50ZXJyYWluUHJvdmlkZXIsIFtDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0KV0pO1xyXG4gICAgICAgICAgaGVpZ2h0ID0gcHJvbWlzZVswXS5oZWlnaHRcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCBoZWlnaHQpXHJcbiAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ueCwgcG9zaXRpb25zW2ldLnksIHBvc2l0aW9uc1tpXS56KVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBCb3VuZGluZ1NwaGVyZSA9IENlc2l1bS5Cb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25BcnJheSlcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKEJvdW5kaW5nU3BoZXJlLCB7XHJcbiAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJk+W8gOWvjOaWh+acrOahhlxyXG4gICAqL1xyXG4gIG9wZW5SaWNoVGV4dEVkaXRvcihlKSB7XHJcbiAgICByaWNoVGV4dC5vcGVuKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLm5hbWUsIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQpXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSAoY29udGVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICBwb3NpdGlvbnM6IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMC45KWApKVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgcG9zaXRpb25zLmFsdCA9IHRoaXMub3B0aW9ucy5jZW50ZXIuYWx0XHJcbiAgICAgICAgLy8gdGhpcy5yZW5ld1Bvc2l0aW9ucyhwb3NpdGlvbnMpXHJcbiAgICAgICAgbGV0IGhlaWdodCA9IDBcclxuICAgICAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zaXRpb25zLmxuZywgcG9zaXRpb25zLmxhdCkpIHx8IDBcclxuICAgICAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMuY3JlYXRlQ2lyY2xlKHBvc2l0aW9ucywgdGhpcy5vcHRpb25zLnJhZGl1cylcclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgICAgIGlmICghZ3JvdW5kKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChmcm9tRGVncmVlc0FycmF5W2ldLCBmcm9tRGVncmVlc0FycmF5W2kgKyAxXSwgcG9zaXRpb25zLmFsdCArIGhlaWdodClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkyXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgcG9zaXRpb25zLmxuZyxcclxuICAgICAgICAgICAgcG9zaXRpb25zLmxhdCxcclxuICAgICAgICAgICAgcG9zaXRpb25zLmFsdCArIGhlaWdodFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGlzLnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgICAgbG5nOiBwb3NpdGlvbnMubG5nLFxyXG4gICAgICAgICAgICBsYXQ6IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnMubG5nLFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9ucy5sYXQsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxuZyA9IE51bWJlcigocG9zaXRpb25zLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdCA9IE51bWJlcigocG9zaXRpb25zLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMub3B0aW9ucy5jZW50ZXJcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxuZyA9IE51bWJlcigocG9zaXRpb25zLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5sYXQgPSBOdW1iZXIoKHBvc2l0aW9ucy5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5vcHRpb25zLmNlbnRlclxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zKVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gWy4uLl90aGlzLnBvc2l0aW9ucywgX3RoaXMucG9zaXRpb25zWzBdLCBfdGhpcy5wb3NpdGlvbnNbMV1dXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuZW50aXR5ICYmIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMSlgKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zKVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbLi4uX3RoaXMucG9zaXRpb25zLCBfdGhpcy5wb3NpdGlvbnNbMF0sIF90aGlzLnBvc2l0aW9uc1sxXV1cclxuICAgICAgfSwgdHJ1ZSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9kZUVkaXQodGhhdCwgY2IgPSAoKSA9PiB7IH0pIHtcclxuICAgIHRoYXQucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB0aGF0LmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgIGxldCBlbmRwb2ludCA9IHsgLi4udGhhdC5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIGxldCBtb3ZlUmFkaXVzID0gbnVsbFxyXG4gICAgICBsZXQgZW50aXR5XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LmNyZWF0ZUNpcmNsZSh0aGF0Lm9wdGlvbnMuY2VudGVyLCB0aGF0Lm9wdGlvbnMucmFkaXVzKVxyXG5cclxuXHJcblxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZVxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5hcmNUeXBlID0gQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IGZhbHNlXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSkpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGF0LnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICAgIHRoYXRcclxuICAgICAgICAgIC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgICAgbG5nOiB0aGF0Lm9wdGlvbnMuY2VudGVyLmxuZyxcclxuICAgICAgICAgICAgbGF0OiB0aGF0Lm9wdGlvbnMuY2VudGVyLmxhdFxyXG4gICAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAgIC50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLmNlbnRlci5sbmcsXHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLmNlbnRlci5sYXQsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0pXHJcbiAgICAgIH0sIDUwKTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKGVudGl0eSlcclxuICAgICAgICAgICAgZW50aXR5ID0gbnVsbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZW5kcG9pbnQgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC52aWV3ZXIpXHJcbiAgICAgICAgICBsZXQgcmFkaXVzID0gdGhhdC5jb21wdXRlRGlzdGFuY2UyKFt0aGF0Lm9wdGlvbnMuY2VudGVyLCBlbmRwb2ludF0pXHJcbiAgICAgICAgICB0aGF0LnJhZGl1cyA9IHJhZGl1c1xyXG5cclxuICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgIHRoYXQuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGF0LnRpcC5kZXN0cm95KClcclxuXHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoZW50aXR5KVxyXG4gICAgICAgICAgICBlbnRpdHkgPSBudWxsXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgICAgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoYXQudGlwLmRlc3Ryb3koKVxyXG5cclxuICAgICAgICAgIHRoYXQuaGVpZ2h0TW9kZSA9IHRoYXQuaGVpZ2h0TW9kZVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgZW50aXR5ICYmIChlbnRpdHkuc2hvdyA9IHRydWUpXHJcbiAgICAgICAgICBlbmRwb2ludCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnZpZXdlcilcclxuICAgICAgICAgIG1vdmVSYWRpdXMgPSB0aGF0LmNvbXB1dGVEaXN0YW5jZTIoW3RoYXQub3B0aW9ucy5jZW50ZXIsIGVuZHBvaW50XSlcclxuICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LmNyZWF0ZUNpcmNsZSh0aGF0Lm9wdGlvbnMuY2VudGVyLCBtb3ZlUmFkaXVzKVxyXG4gICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY3JlYXRlTm9kZVBvaW50cygpXHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVQb2ludHMoKSB7XHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHRoYXQub3B0aW9ucy5jZW50ZXIsIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLCB0aGF0Lm9wdGlvbnMuY2VudGVyLmxhdCwgaGVpZ2h0KSxcclxuICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbmRwb2ludCkge1xyXG4gICAgICAgICAgICAgIGxldCBjID0gdGhhdC5jb21wdXRlTWlkcG9pbnQodGhhdC5vcHRpb25zLmNlbnRlciwgZW5kcG9pbnQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGMubG5nLCBjLmxhdCwgZW5kcG9pbnQuYWx0KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHRleHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChtb3ZlUmFkaXVzID4gMTAwMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYrlvoTvvJonICsgKG1vdmVSYWRpdXMgLyAxMDAwKS50b0ZpeGVkKDIpICsgJyDlhazph4wnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiAn5Y2K5b6E77yaJyArIG1vdmVSYWRpdXMgKyAnIOexsydcclxuICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICBmb250OiAnMjBweCBNaWNyb3NvZnQgWWFIZWknLFxyXG4gICAgICAgICAgICBkaXN0YW5jZURpc3BsYXlDb25kaXRpb246IDEwMDAwMDAwLFxyXG4gICAgICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZjVjZTBhJyksXHJcbiAgICAgICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKGUpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShbdGhhdC5vcHRpb25zLmNlbnRlci5sbmcsIHRoYXQub3B0aW9ucy5jZW50ZXIubGF0LCBlbmRwb2ludC5sbmcsIGVuZHBvaW50LmxhdF0pXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgIG1hdGVyaWFsOlxyXG4gICAgICAgICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNjMWM1MDUnKS53aXRoQWxwaGEoMC41KSxcclxuICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgekluZGV4OiA5OTk5OTk5OVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzLnB1c2goZW50aXR5KVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBFdmVudEJpbmRpbmcodGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7IHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkIH0pXHJcbiAgICAgICAgICAgICAgZWxlbWVudHNbaV0uY2hlY2tlZCA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhhdC5fZWxtc1ttLnZhbHVlXSkge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0ucHVzaChlbGVtZW50c1tpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGF0Ll9lbG1zW20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNoYW5nZSc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlLCB2YWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZW1vdmVOYW1lLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RElWKG9wdGlvbnMgPSB7IGRvbWlkOiBcIlwiLCB4OiAxMCwgeTogMTAgfSkge1xyXG4gICAgb3B0aW9ucy54ID0gKG9wdGlvbnMueCB8fCBvcHRpb25zLnggPT09IDApID8gb3B0aW9ucy54IDogMTBcclxuICAgIG9wdGlvbnMueSA9IChvcHRpb25zLnkgfHwgb3B0aW9ucy55ID09PSAwKSA/IG9wdGlvbnMueSA6IDEwXHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuY2VudGVyLmxuZywgdGhpcy5vcHRpb25zLmNlbnRlci5sYXQpXHJcblxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnBvc3RSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcigocGVyY2VudGFnZSkgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhzaXRlSW5mb1Bvc2l0aW9uKTtcclxuICAgICAgICBpZiAod2lucG9zKSB7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5sZWZ0ID0gKHdpbnBvcy54ICsgb3B0aW9ucy54KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWdkOagh1xyXG4gIHJlbmV3UG9zaXRpb25zKGNlbnRlcikge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcblxyXG4gICAgaWYgKCFjZW50ZXIpIHtcclxuICAgICAgY2VudGVyID0gdGhpcy5vcHRpb25zLmNlbnRlclxyXG4gICAgfVxyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjZW50ZXIubG5nLCBjZW50ZXIubGF0KSkgfHwgMFxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMuY3JlYXRlQ2lyY2xlKGNlbnRlciwgdGhpcy5vcHRpb25zLnJhZGl1cylcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICBpZiAoIWdyb3VuZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKGZyb21EZWdyZWVzQXJyYXlbaV0sIGZyb21EZWdyZWVzQXJyYXlbaSArIDFdLCBjZW50ZXIuYWx0ICsgaGVpZ2h0KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheTJcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICBjZW50ZXIubG5nLFxyXG4gICAgICAgIGNlbnRlci5sYXQsXHJcbiAgICAgICAgY2VudGVyLmFsdCArIGhlaWdodFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGlzLnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICBsbmc6IGNlbnRlci5sbmcsXHJcbiAgICAgICAgICBsYXQ6IGNlbnRlci5sYXRcclxuICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICBjZW50ZXIubG5nLFxyXG4gICAgICAgICAgICBjZW50ZXIubGF0LFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSwgMTAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+aKleW9semdouenr1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyID0gTnVtYmVyKChDZXNpdW0uTWF0aC5QSSAqIHRoaXMub3B0aW9ucy5yYWRpdXMgKiB0aGlzLm9wdGlvbnMucmFkaXVzKS50b0ZpeGVkKDIpKVxyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMuYXJlYVVuaXRcclxuICAgIHJldHVybiBmcm9tRGVncmVlc0FycmF5XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQXVCQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBMkdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4Q0E7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWxlQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9lQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWhHQTtBQUFBO0FBQUE7QUFBQTtBQWtHQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUFBO0FBeUpBO0FBQ0E7QUFBQTtBQXBKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXdRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWp5Q0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdzNCQTtBQUNBO0FBQ0E7QUFDQTtBQXNGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBZkE7QUFBQTtBQUFBO0FBckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFrQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyRUE7QUFBQTtBQUFBO0FBcUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1RkE7QUFBQTtBQUtBO0FBd0ZBO0FBQUE7QUFBQTtBQXdGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/CircleObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/CurvelineObject/_element.js": /*!**************************************************!*\ !*** ./src/Obj/Base/CurvelineObject/_element.js ***! \**************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u7EBF\\u6761\\u989C\\u8272\\n
\\n
\\n
\\n \\u7EBF\\u6761\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n \\u7EBF\\u6761\\u5F62\\u5F0F\\n
\\n
\\n
\\n
\\n
\\n \\u7EBF\\u6BB5\\u7F13\\u51B2\\n \\n
\\n
\\n \\u7F13\\u51B2\\u5BBD\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u7F13\\u51B2\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n \\u52A8\\u753B\\u987A\\u5411\\n \\n
\\n
\\n \\u6D41\\u52A8\\u901F\\u7387\\n
\\n \\n \\n
\\n
\\n
\\n \\u95F4\\u8DDD\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n \\u9996\\u5C3E\\u76F8\\u8FDE\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ3VydmVsaW5lT2JqZWN0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0N1cnZlbGluZU9iamVjdC9fZWxlbWVudC5qcz85MjU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSwgbGFiZWxTdHlsZUVsbTEsIGxhYmVsU3R5bGVFbG0yIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9lbG1faHRtbCdcclxuXHJcbmZ1bmN0aW9uIGh0bWwodGhhdCkge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTYlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VsZWN0LXVuaXRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGlucHV0LXRleHRcIiByZWFkb25seT1cInJlYWRvbmx5XCIgdHlwZT1cInRleHRcIiBzdHlsZT1cImZsZXg6IDAgMCAxMzBweDtcIiBAbW9kZWw9XCJsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWxlY3QtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJwb2x5bGluZS1vYmplY3QtZWRpdC10YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLnqbrpl7Tkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaGVpZ2h0LW1vZGUtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDtcIj7pq5jluqbmqKHlvI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVpZ2h0LW1vZGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5a5YC857uf5LiA5aKe5YqgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBoZWlnaHRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZpcm0gaGVpZ2h0LWNvbmZpcm1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlIHNwYXRpYWwtaW5mby10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue7j+W6pu+8iFjvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57qs5bqm77yIWe+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7pq5jluqbvvIha77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLnur/mnaHpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nur/mnaHpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzMyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57q/5p2h5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTlcIiBAbW9kZWw9XCJsaW5lV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGlucHV0LXNlbGVjdC1saW5lLXR5cGUtYm94XCIgc3R5bGU9XCJmbGV4OiAwIDAgMzclO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6v+adoeW9ouW8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGluZS10eXBlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6v+autee8k+WGsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJleHRlbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzMyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57yT5Yay5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBkYXRhLW1pbj1cIjAuMDFcIiBtYXg9XCI5OTk5OTlcIiBAbW9kZWw9XCJleHRlbmRXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDM3JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nvJPlhrLpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIGlkPVwiZGFzaFRleHR1cmVEb21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWKqOeUu+mhuuWQkTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJyb3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzMyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5rWB5Yqo6YCf546HPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTlcIiBzdGVwPVwiMVwiIEBtb2RlbD1cInNwZWVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDM3JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsaW5lU3BhY2VcIj7pl7Tot508L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBsaW5lU3BhY2VcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiNC41XCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cInNwYWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6aaW5bC+55u46L+ePC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cIm5vc2VUb1RhaWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzMyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMzclO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0yKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIDwhLS0gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi54Gv5YWJ5o6n5Yi2XCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5oyH5LukPC9zcGFuPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwiaW5zdHJ1Y3RcIj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnlcIiBAY2xpY2s9XCJpbnN0cnVjdFN1Ym1pdFwiPuaPkOS6pDwvYnV0dG9uPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLorr7nva7mk43kvZzngrlcIj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgPGRpdj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7orr7nva7mk43kvZzngrk8L3NwYW4+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJvcGVyYXRpbmdQb2ludFwiPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeVwiIEBjbGljaz1cIm9wZXJhdGluZ1BvaW50U3VibWl0XCI+5o+Q5LqkPC9idXR0b24+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+LS0+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQWlLQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/CurvelineObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/CurvelineObject/eventBinding.js": /*!******************************************************!*\ !*** ./src/Obj/Base/CurvelineObject/eventBinding.js ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ3VydmVsaW5lT2JqZWN0L2V2ZW50QmluZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9DdXJ2ZWxpbmVPYmplY3QvZXZlbnRCaW5kaW5nLmpzP2ZiZjAiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgZXZlbnRCaW5kaW5nIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgfVxyXG4gIHN0YXRpYyBldmVudCA9IHt9XHJcblxyXG4gIGdldEV2ZW50KG5hbWUpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV1cclxuICB9XHJcblxyXG4gIGdldEV2ZW50QWxsKCkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFxyXG4gIH1cclxuXHJcbiAgc2V0RXZlbnQobmFtZSwgZXZlbnQpIHtcclxuICAgIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXSA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBvbih0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWUgXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZigoZS50YXJnZXQubWF4KSAmJiB2YWx1ZT5OdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZigoZS50YXJnZXQubWluKSAmJiB2YWx1ZTxOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZigoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlPE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudHNbaV0ubm9kZU5hbWU9PSdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZWxlbWVudFttLnZhbHVlXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjaGFuZ2UnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIGlmKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUhPScnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlc1ttXSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIGZvcihsZXQgbj0wO248cmVtb3ZlTmFtZS5sZW5ndGg7bisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgRXZlbnRCaW5kaW5nID0gbmV3IGV2ZW50QmluZGluZygpO1xyXG5leHBvcnQgZGVmYXVsdCBFdmVudEJpbmRpbmc7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4RUE7QUFBQTtBQUFBO0FBd0VBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvRkE7QUFBQTtBQUtBO0FBMkZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/CurvelineObject/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/CurvelineObject/index.js": /*!***********************************************!*\ !*** ./src/Obj/Base/CurvelineObject/index.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/CurvelineObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/CurvelineObject/eventBinding.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 线\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar CurvelineObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 曲线\r\n * @param options {object} 线属性\r\n * @param options.name{string} 名称\r\n * @param options.width=3{number} 线宽\r\n * @param options.color=#ff0000 {string} 颜色\r\n * @param options.type=0 {number} 材质类型 0-实线 1-虚线 2-泛光...\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对高度;2:依附模式)\r\n * @param options.noseToTail=false {boolean} 首尾相连\r\n * @param options.extend=false {boolean} 线缓冲\r\n * @param options.extendWidth=10 {number} 线缓冲宽度\r\n * @param options.extendColor=rgba(255,255,80,0.3) {number} 线缓冲颜色\r\n * @param options.show=true {boolean} 显隐\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {string} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * \r\n * \r\n * @param _Dialog {object} 弹框事件\r\n * @param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function CurvelineObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, CurvelineObject);\n _this2 = _callSuper(this, CurvelineObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.width = options.width || options.width === 0 ? options.width : 3;\n _this2.options.color = options.color || '#ff0000';\n _this2.options.type = options.type ? Number(options.type) : 0;\n _this2.options.noseToTail = options.noseToTail || false;\n _this2.options.extend = options.extend || false;\n _this2.options.rotate = options.rotate || options.rotate === false ? options.rotate : true;\n _this2.options.space = options.space || 1;\n _this2.options.speed = options.speed || 10;\n // this.options.dashSize = options.dashSize || 0.03\n _this2.options.wordsName = options.wordsName || '空间长度';\n _this2.options.extendWidth = options.extendWidth || options.extendWidth === 0 ? options.extendWidth : 10;\n _this2.options.extendColor = options.extendColor || 'rgba(255,255,80,0.3)';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2._elms = [];\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n // this.options.attribute.camera = this.options.attribute.camera || {}\n // this.options.attribute.camera.content =\n // this.options.attribute.camera.content || []\n // this.options.attribute.vr = this.options.attribute.vr || {}\n // this.options.attribute.vr.content =\n // this.options.attribute.vr.content || []\n // this.options.attribute.goods = this.options.attribute.goods || {}\n // this.options.attribute.goods.content =\n // this.options.attribute.goods.content || []\n\n delete _this2.options.attribute.camera;\n delete _this2.options.attribute.vr;\n delete _this2.options.attribute.goods;\n _this2.operate = {};\n _this2.nodePoints = [];\n _this2.unitNum = 0;\n _this2.inputSpeed = options.speed && Math.pow(options.speed, -1) * 100 || 10;\n _this2.Dialog = _Dialog;\n if (!_this2.options.positions || _this2.options.positions.length < 2) {\n _this2._error = '线段最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n for (var i = 0; i < _this2.options.positions.length; i++) {\n _this2.options.positions[i].lng = Number(Number(_this2.options.positions[i].lng).toFixed(8));\n _this2.options.positions[i].lat = Number(Number(_this2.options.positions[i].lat).toFixed(8));\n _this2.options.positions[i].alt = Number(Number(_this2.options.positions[i].alt).toFixed(2));\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n CurvelineObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(CurvelineObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(CurvelineObject, [{\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || '#ff0000';\n // this.entity.polyline.material = this.getMaterial(v, this.options.type)\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n // this.options.speed = v !== 0 ? Math.pow(v, -1) * 100 : 0\n this.inputSpeed = v !== 0 ? Math.pow(v, -1) * 100 : 0;\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n }\n // get dashSize() {\n // return this.options.dashSize\n // }\n\n // set dashSize(v) {\n // this.options.dashSize = v\n // let params = { ...this.options }\n // params.speed = this.inputSpeed\n // // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params)\n // }\n }, {\n key: \"rotate\",\n get: function get() {\n return this.options.rotate;\n },\n set: function set(v) {\n this.options.rotate = v;\n this.closeNodeEdit();\n this._elms.rotate && this._elms.rotate.forEach(function (item) {\n item.checked = v;\n });\n this.options.rotate = v;\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options);\n }\n }, {\n key: \"space\",\n get: function get() {\n return this.options.space;\n },\n set: function set(v) {\n this.options.space = v;\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this.options.length;\n },\n set: function set(v) {\n this.options.length = v;\n //判断数值是否大于1000m\n\n this._elms.length && this._elms.length.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"fitLength\",\n get: function get() {\n return this.options.fitLength;\n },\n set: function set(v) {\n this.options.fitLength = v;\n this._elms.fitLength && this._elms.fitLength.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"wordsName\",\n get: function get() {\n return this.options.wordsName;\n },\n set: function set(v) {\n this.options.wordsName = v;\n this._elms.wordsName && this._elms.wordsName.forEach(function (item) {\n item.value = v;\n });\n var _this = this;\n if (!this.noseToTail) {\n this.computeDistance(this.smoothHandle(this.options.positions), 2, v).then(function (res) {\n _this.lengthByMeter = res;\n });\n } else {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n }\n }\n\n // get fitLengthUnit() {\n // return this.options['fit-length-unit']\n // }\n // set fitLengthUnit(v) {\n // this.options['fit-length-unit'] = v\n // this._elms.fitLengthUnit &&\n // this._elms.fitLengthUnit.forEach(item => {\n // item.value = v\n // })\n // if (this.options.fitLengthByMeter) {\n // switch (v) {\n // case '米':\n // this.fitLength = this.options.fitLengthByMeter\n // break\n // case '千米':\n // this.fitLength = Number(\n // (this.options.fitLengthByMeter / 1000).toFixed(5)\n // )\n // break\n // default:\n // this.fitLength = this.options.fitLengthByMeter\n // }\n // }\n // }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.width;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.width = v || v == 0 ? v : 3;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = _this4.options.width;\n });\n if (this.entity && this.entity.polyline) {\n this.entity.polyline.width = this.entity.polyline.width + v - this.entity.polyline.oriWidth;\n this.entity.polyline.oriWidth = this.options.width;\n }\n // this.entity &&\n // this.entity.polyline &&\n // (this.entity.polyline.width = this.options.width) && (this.entity.polyline.oriWidth = this.options.width)\n }\n }, {\n key: \"lineType\",\n get: function get() {\n return this.options.type;\n },\n set: function set(v) {\n var _this5 = this;\n var lineTypeData = [{\n name: '实线',\n value: '实线',\n key: 0,\n icon: 'line'\n }, {\n name: '虚线',\n value: '虚线',\n key: 1,\n icon: 'dash-line'\n }, {\n name: '泛光',\n value: '泛光',\n key: 2,\n icon: 'light-line'\n }, {\n name: '尾迹光线',\n value: '尾迹光线',\n key: 3,\n icon: 'tail-line'\n }, {\n name: '多尾迹光线',\n value: '多尾迹光线',\n key: 4,\n icon: 'mult-tail-line'\n }, {\n name: '流动虚线1',\n value: '流动虚线1',\n key: 5,\n icon: 'flow-dash-line1'\n }, {\n name: '流动虚线2',\n value: '流动虚线2',\n key: 6,\n icon: 'flow-dash-line2'\n }, {\n name: '流动箭头1',\n value: '流动箭头1',\n key: 7,\n icon: 'pic-line1'\n }, {\n name: '流动箭头2',\n value: '流动箭头2',\n key: 8,\n icon: 'pic-line2'\n }, {\n name: '流动箭头3',\n value: '流动箭头3',\n key: 9,\n icon: 'pic-line3'\n }, {\n name: '流动箭头4',\n value: '流动箭头4',\n key: 10,\n icon: 'pic-line4'\n }, {\n name: '流动箭头5',\n value: '流动箭头5',\n key: 11,\n icon: 'pic-line5'\n }, {\n name: '流动箭头6',\n value: '流动箭头6',\n key: 12,\n icon: 'pic-line6'\n }];\n this.options.type = Number(v);\n var _loop = function _loop(i) {\n if (lineTypeData[i].key === Number(v)) {\n _this5._elms.lineType && _this5._elms.lineType.forEach(function (item) {\n item.value = lineTypeData[i].value;\n if (2 < item.value && item.value < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n if (2 < item.value && item.value < 5) {\n //尾迹参数\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'none');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'none');\n } else {\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'flex');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'flex');\n }\n });\n return 1; // break\n }\n };\n for (var i = 0; i < lineTypeData.length; i++) {\n if (_loop(i)) break;\n }\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n this.entity && this.entity.polyline && (this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params));\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options.noseToTail;\n },\n set: function set(v) {\n this.options.noseToTail = v;\n this.closeNodeEdit();\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n if (this.entity) {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n }\n // if (v) {\n // if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()\n // } else {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()\n // }\n\n // } else {\n // if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()\n // } else {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()\n // }\n // }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this6 = this;\n this.positionEditing = false;\n this.options.heightMode = v || v == 0 ? v : 2;\n var heightModeName = '';\n this.closeNodeEdit();\n var ground = false;\n var disabled = false;\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n this.entity.polyline.clampToGround = ground;\n this.extend = false;\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n this.entity.polyline.clampToGround = ground;\n this.extend = false;\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n this.entity.polyline.clampToGround = ground;\n heightModeName = '依附模型';\n break;\n }\n\n // this.options.lengthByMeter = this.computeDistance2(\n // this.smoothHandle(this.options.positions),\n // 2,\n // ground\n // )\n this.lengthUnit = this.lengthUnit;\n this._elms.heightMode && (this._elms.heightMode.value = heightModeName);\n this._elms.heightModeObject && this._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n this._elms.heightConfirm && this._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n this._elms.heightConfirm && this._elms.heightConfirm.removeAttribute('disabled');\n }\n setTimeout(function () {\n if (ground) {\n _this6.label.ground = ground;\n _this6._elms.heightMode && (_this6._elms.heightMode.value = '依附模型');\n _this6.label.position = [_this6.options.positions[0].lng, _this6.options.positions[0].lat];\n } else {\n _this6.label.ground = ground;\n _this6.label.position = [_this6.options.positions[0].lng, _this6.options.positions[0].lat, fromDegreesArray[2]];\n _this6.options.label.position = {\n lng: _this6.options.positions[0].lng,\n lat: _this6.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n }\n }, 0);\n }\n }, {\n key: \"extend\",\n get: function get() {\n return this.options.extend;\n },\n set: function set(v) {\n this.options.extend = v;\n this.closeNodeEdit();\n if (v) {\n this.heightMode = 2;\n }\n this._elms.extend && this._elms.extend.forEach(function (item) {\n item.checked = v;\n });\n if (this.entity) {\n if (this.options.extend) {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.renewPolygon(fromDegreesArray);\n } else {\n this.entity.polygon = undefined;\n }\n }\n }\n }, {\n key: \"extendWidth\",\n get: function get() {\n return this.options.extendWidth;\n },\n set: function set(v) {\n this.options.extendWidth = v;\n this._elms.extendWidth && this._elms.extendWidth.forEach(function (item) {\n item.value = v;\n });\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.renewPolygon(fromDegreesArray);\n }\n }, {\n key: \"extendColor\",\n get: function get() {\n return this.options.extendColor;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.extendColor = v;\n if (this._elms.extendColor) {\n this._elms.extendColor.forEach(function (item, i) {\n var extendColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.extendColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.extendColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.extendColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.extendColor[i] = extendColorPicker;\n });\n }\n this.entity && this.entity.polygon && (this.entity.polygon.material = Cesium.Color.fromCssColorString(this.options.extendColor));\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n setTimeout(function () {\n _this8.label.position = [_this8.options.positions[0].lng, _this8.options.positions[0].lat, _this8.options.positions[0].alt];\n }, 0);\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this12 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this12.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this12._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop2, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this13.options.attribute.link.content;\n case 2:\n _this13.attributeLink = _context3.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop3 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop3() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop3$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop3);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop3(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop2, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop2(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this13.options.attribute.link.content.splice(i, 1);\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this13.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop4 = function _loop4(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop5 = function _loop5() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop5()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop4(_i2);\n }\n }\n\n // get attributeCamera() {\n // return this.options.attribute.camera.content\n // }\n\n // set attributeCamera(v) {\n // this.options.attribute.camera.content = v\n // }\n\n // get attributeVr() {\n // return this.options.attribute.vr.content\n // }\n\n // set attributeVr(v) {\n // this.options.attribute.vr.content = v\n // if (\n // !this._DialogObject ||\n // !this._DialogObject._element ||\n // !this._DialogObject._element.content ||\n // this._DialogObject._element.content.getElementsByClassName(\n // 'attribute-content-vr'\n // ).length == 0\n // ) {\n // return\n // }\n // let table = this._DialogObject._element.content\n // .getElementsByClassName('attribute-content-vr')[1]\n // .getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // tableContent.innerHTML = ''\n // if (this.options.attribute.vr.content.length > 0) {\n // table.getElementsByClassName('table-empty')[0].style.display = 'none'\n // } else {\n // table.getElementsByClassName('table-empty')[0].style.display = 'flex'\n // }\n // for (let i = 0; i < this.options.attribute.vr.content.length; i++) {\n // let tr =\n // `\n //
\n //
` +\n // this.options.attribute.vr.content[i].name +\n // `
\n //
` +\n // this.options.attribute.vr.content[i].url +\n // `
\n //
\n // \n // \n //
\n //
`\n // let trElm = document.createRange().createContextualFragment(tr)\n // tableContent.appendChild(trElm)\n // }\n // let item = tableContent.getElementsByClassName('tr')\n // let fun = {\n // vrEdit: async index => {\n // this.attributeVr = await this.options.attribute.vr.content\n // let table = this._DialogObject._element.content\n // .getElementsByClassName('attribute-content-vr')[1]\n // .getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // let item = tableContent.getElementsByClassName('tr')\n // for (let i = 0; i < item.length; i++) {\n // if (index === i) {\n // let height = item[i].offsetHeight\n // let html = `\n //
\n // \n //
\n //
\n // \n //
\n //
\n // \n // \n //
`\n // item[i].innerHTML = html\n // let textareaElm = item[i].getElementsByClassName('link-edit')[0]\n // textareaElm.style.height = height - 10 + 'px'\n // let td = item[i].getElementsByClassName('td')\n // td[0].getElementsByClassName(\n // 'input'\n // )[0].value = this.options.attribute.vr.content[index].name\n // td[1].getElementsByClassName(\n // 'input'\n // )[0].value = this.options.attribute.vr.content[index].url\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // if (!btn[n] || !btn[n].attributes) {\n // continue\n // }\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', e => {\n // if (typeof fun[m.value] === 'function') {\n // fun[m.value](\n // {\n // name: td[0].getElementsByClassName('input')[0].value,\n // url: td[1].getElementsByClassName('input')[0].value\n // },\n // i\n // )\n // }\n // })\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // break\n // }\n // }\n // },\n // vrDelete: i => {\n // this.options.attribute.vr.content.splice(i, 1)\n // this.attributeVr = this.options.attribute.vr.content\n // },\n\n // confirmEdit: (value, i) => {\n // let name = value.name && value.name.replace(/\\s/g, '')\n // let url = value.url && value.url.replace(/\\s/g, '')\n // if (name && url) {\n // this.options.attribute.vr.content[i] = value\n // } else {\n // window.ELEMENT &&\n // window.ELEMENT.Message({\n // message: '名称或链接不能为空!',\n // type: 'warning',\n // duration: 1500\n // })\n // }\n // this.attributeVr = this.options.attribute.vr.content\n // },\n // cancelEdit: () => {\n // this.attributeVr = this.options.attribute.vr.content\n // },\n // fileSelect: (value, i) => {\n // let fileElm = item[i].getElementsByClassName('file-select')[0]\n // fileElm.click()\n // fileElm.removeEventListener('change', fileSelect)\n // fileElm.addEventListener('change', fileSelect)\n // }\n // }\n // let fileSelect = event => {\n // if (event.target.value) {\n // let td = item[\n // event.target.getAttribute('index')\n // ].getElementsByClassName('td')\n // td[1].getElementsByClassName('input')[0].value = event.target.value\n // event.target.value = null\n // }\n // }\n // for (let i = 0; i < item.length; i++) {\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // if (!btn[n] || !btn[n].attributes) {\n // continue\n // }\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', e => {\n // if (typeof fun[m.value] === 'function') {\n // fun[m.value](i)\n // }\n // })\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // }\n // }\n\n // get attributeGoods() {\n // return this.options.attribute.goods.content\n // }\n\n // set attributeGoods(v) {\n // this.options.attribute.goods.content = v\n // }\n }, {\n key: \"judgeLine\",\n value: function judgeLine(entity, newParam) {\n if (!entity.polyline.oriRepeat) {\n var param = {\n color: newParam.color,\n image: this.getSourceRootPath() + \"/img/arrow/1.png\",\n space: newParam.space,\n speed: newParam.speed\n };\n param.speed = newParam.rotate ? param.speed : 0 - param.speed;\n var canvasEle = document.createElement('canvas');\n var ctx = canvasEle.getContext('2d');\n var myImg = new Image();\n // myImg.src = that.getSourceRootPath() + '/img/arrow/1.png'\n myImg.src = param.image;\n var that = this;\n myImg.onload = function () {\n canvasEle.width = myImg.width * (param.space + 1);\n canvasEle.height = myImg.height;\n var oriRepeat = that.getSceenLine(entity, param, canvasEle);\n oriRepeat && (entity.polyline.oriRepeat = oriRepeat);\n var positionProperty = entity.polyline.positions;\n var positions = positionProperty.getValue(that.sdk.viewer.clock.currentTime);\n if (!Cesium.defined(positions)) {\n return new Cesium.Cartesian2(1.0, 1.0);\n // return 1.0;\n }\n var distance = 0;\n for (var i = 0; i < positions.length - 1; ++i) {\n distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n }\n var repeatX = distance / entity.polyline.width.getValue();\n // 根据地图缩放程度调整repeatX\n var cameraHeight = that.sdk.viewer.camera.positionCartographic.height;\n var boundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(-1000000, 0, 0),\n // 中心点坐标\n 500000 // 半径(距离)\n );\n\n // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)\n var drawingBufferWidth = that.sdk.viewer.canvas.clientWidth;\n var drawingBufferHeight = that.sdk.viewer.canvas.clientHeight;\n\n // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小\n var groundResolution = that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight);\n repeatX *= groundResolution / cameraHeight / (param.space * (canvasEle.width / canvasEle.height * 5) + 1);\n // if (entity.polyline.material.oriRepeat) {\n\n if (that.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE3D) {\n var speed = repeatX / entity.polyline.oriRepeat;\n entity.polyline.oriSpeed = speed;\n entity.polyline.oriRepeatX = repeatX;\n } else {\n var sdk3d = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"get3DView\"])();\n var sdk3dEntity = sdk3d.viewer.entities.getById(that.options.id);\n entity.polyline.oriSpeed = sdk3dEntity.polyline.oriSpeed;\n entity.polyline.oriRepeatX = sdk3dEntity.polyline.oriRepeatX;\n }\n };\n }\n }\n /**获取当前满屏横线速度 */\n }, {\n key: \"getSceenLine\",\n value: function getSceenLine(entity, options, canvasEle) {\n var point1 = new Cesium.Cartesian2(0, this.sdk.viewer.canvas.clientHeight);\n var point2 = new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight);\n // var cartesian1 = this.sdk.viewer.scene.pickPosition(point1)\n // var cartesian2 = this.sdk.viewer.scene.pickPosition(point2)\n\n var ray = this.sdk.viewer.camera.getPickRay(point1);\n var cartesian1 = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n var ray2 = this.sdk.viewer.camera.getPickRay(point2);\n var cartesian2 = this.sdk.viewer.scene.globe.pick(ray2, this.sdk.viewer.scene);\n // if (!cartesian1 || !cartesian2) {\n // let ray = this.sdk.viewer.camera.getPickRay(point1);\n // cartesian1 = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n\n // let ray2 = this.sdk.viewer.camera.getPickRay(point2);\n // cartesian2 = this.sdk.viewer.scene.globe.pick(ray2, this.sdk.viewer.scene);\n // }\n if (cartesian1 && cartesian2) {\n var distance = Cesium.Cartesian3.distance(cartesian1, cartesian2);\n var repeatX = distance / entity.polyline.width.getValue();\n // 根据地图缩放程度调整repeatX\n var cameraHeight = this.sdk.viewer.camera.positionCartographic.height;\n var boundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(-1000000, 0, 0),\n // 中心点坐标\n 500000 // 半径(距离)\n );\n\n // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)\n var drawingBufferWidth = this.sdk.viewer.canvas.clientWidth;\n var drawingBufferHeight = this.sdk.viewer.canvas.clientHeight;\n\n // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小\n var groundResolution = this.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight);\n // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);\n if (groundResolution > 700) {\n repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);\n } else {\n repeatX = undefined;\n }\n if (this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE3D) {\n return repeatX;\n } else {\n var sdk3d = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"get3DView\"])();\n var sdk3dEntity = sdk3d.viewer.entities.getById(this.options.id);\n return sdk3dEntity.polyline.oriRepeatX;\n }\n }\n }\n /**\r\n * 编辑框\r\n * @param {boolean} state true打开,false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(state) {\n var _this14 = this;\n var _this, tabClick, contentElm, tabsElm, colorPicker, labelColorPicker, extendColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context4.next = 32;\n break;\n }\n // this.attributeCamera = this.options.attribute.camera.content\n // this.attributeGoods = this.options.attribute.goods.content\n tabClick = function tabClick(e) {\n if (e === '2' || e === 2) {\n //点击线条样式\n if (2 < _this.options.type && _this.options.type < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n }\n }; // 创建标签页\n _context4.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '曲线属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this14.name = _this14.name.trim();\n if (!_this14.name) {\n _this14.name = '未命名对象';\n }\n _this14.options.label.position = {\n lng: _this14.label.position[0],\n lat: _this14.label.position[1],\n alt: _this14.label.position[2]\n };\n _this14.originalOptions = _this14.deepCopyObj(_this14.options);\n _this14._DialogObject.close();\n _this14.Dialog.confirmCallBack && _this14.Dialog.confirmCallBack(_this14.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this14.reset();\n _this14.Dialog.resetCallBack && _this14.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this14.Dialog.removeCallBack && _this14.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this14.reset();\n _this14.Dialog.closeCallBack && _this14.Dialog.closeCallBack();\n for (var i = 0; i < _this14.nodePoints.length; i++) {\n _this14.sdk.viewer.entities.remove(_this14.nodePoints[i]);\n }\n _this14.nodePoints = [];\n _this14.positionEditing = false;\n },\n showCallBack: function showCallBack(show) {\n _this14.options.show = show;\n _this14.originalOptions.show = show;\n _this14.show = show;\n _this14.Dialog.showCallBack && _this14.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this14.positionEditing = !_this14.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n _this14.positionEditing = false;\n _this14.noseToTail = false;\n _this14.heightMode = 0;\n _this14.nodeEdit();\n }\n });\n case 7:\n this._DialogObject = _context4.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' polyline';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('polyline-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n extendColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('extendColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.extendColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.extendColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.extendColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelLineColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorStart')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorEnd')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName('*');\n _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.extendColor = [extendColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this14.attributeLink = _this14.options.attribute.link.content;\n // this.attributeVr = this.options.attribute.vr.content\n // this.cameraSelect && this.cameraSelect()\n // this.goodsSelect && this.goodsSelect()\n var tagData = _this14.attributeSelect;\n var attributeElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(attributeElm, '.attribute-select');\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this14.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i3 = 0; _i3 < tagData.length; _i3++) {\n if (tagData[_i3].value === attributeSelectElm.value) {\n _this14.attributeType = tagData[_i3].key;\n break;\n }\n }\n });\n }\n var nameData = [{\n name: '空间长度',\n value: '空间长度'\n }, {\n name: '投影长度',\n value: '投影长度'\n }, {\n name: '地表长度',\n value: '地表长度'\n }];\n var nameDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], '.input-select-unit');\n if (nameDataLegpObject) {\n nameDataLegpObject.legp_search(nameData);\n var nameDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n _this14._elms.wordsName = [nameDataLegpElm];\n nameDataLegpElm.value = _this14.options.wordsName;\n for (var _i4 = 0; _i4 < nameData.length; _i4++) {\n if (nameData[_i4].value === nameDataLegpElm.value) {\n nameDataLegpObject.legp_searchActive(nameData[_i4].value);\n break;\n }\n }\n nameDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < nameData.length; _i5++) {\n if (nameData[_i5].value === nameDataLegpElm.value) {\n _this14.wordsName = nameData[_i5].value;\n break;\n }\n }\n });\n }\n\n // 原始长度单位\n var unitData = [{\n name: '米',\n value: '米'\n }, {\n name: '千米',\n value: '千米'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], '.input-select-unit', 1);\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[1].getElementsByTagName('input')[0];\n _this14._elms.lengthUnit = [unitDataLegpElm];\n for (var _i6 = 0; _i6 < unitData.length; _i6++) {\n if (unitData[_i6].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i6].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < unitData.length; _i7++) {\n if (unitData[_i7].value === unitDataLegpElm.value) {\n _this14.lengthUnit = unitData[_i7].value;\n break;\n }\n }\n });\n }\n\n // 拟合长度单位\n // let fitUnitData = [\n // {\n // name: '米',\n // value: '米'\n // },\n // {\n // name: '千米',\n // value: '千米'\n // }\n // ]\n\n // let fitUnitDataLegpObject = legp(\n // this._DialogObject._element.content.getElementsByClassName(\n // 'input-select-fit-unit-box'\n // )[0],\n // '.input-select-fit-unit'\n // )\n // if (fitUnitDataLegpObject) {\n // fitUnitDataLegpObject.legp_search(fitUnitData)\n // let fitUnitDataLegpElm = this._DialogObject._element.content\n // .getElementsByClassName('input-select-fit-unit')[0]\n // .getElementsByTagName('input')[0]\n // this._elms.fitLengthUnit = [fitUnitDataLegpElm]\n // fitUnitDataLegpElm.value = this.options['fit-length-unit']\n // for (let i = 0; i < fitUnitData.length; i++) {\n // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {\n // fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value)\n // break\n // }\n // }\n // fitUnitDataLegpElm.addEventListener('input', () => {\n // for (let i = 0; i < fitUnitData.length; i++) {\n // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {\n // this.fitLengthUnit = fitUnitData[i].value\n // break\n // }\n // }\n // })\n // }\n\n var lineTypeData = [{\n name: '实线',\n value: '实线',\n key: 0,\n icon: 'line'\n }, {\n name: '虚线',\n value: '虚线',\n key: 1,\n icon: 'dash-line'\n }, {\n name: '泛光',\n value: '泛光',\n key: 2,\n icon: 'light-line'\n }, {\n name: '尾迹光线',\n value: '尾迹光线',\n key: 3,\n icon: 'tail-line'\n }, {\n name: '多尾迹光线',\n value: '多尾迹光线',\n key: 4,\n icon: 'mult-tail-line'\n }, {\n name: '流动虚线1',\n value: '流动虚线1',\n key: 5,\n icon: 'flow-dash-line1'\n }, {\n name: '流动虚线2',\n value: '流动虚线2',\n key: 6,\n icon: 'flow-dash-line2'\n }, {\n name: '流动箭头1',\n value: '流动箭头1',\n key: 7,\n icon: 'pic-line1'\n }, {\n name: '流动箭头2',\n value: '流动箭头2',\n key: 8,\n icon: 'pic-line2'\n }, {\n name: '流动箭头3',\n value: '流动箭头3',\n key: 9,\n icon: 'pic-line3'\n }, {\n name: '流动箭头4',\n value: '流动箭头4',\n key: 10,\n icon: 'pic-line4'\n }, {\n name: '流动箭头5',\n value: '流动箭头5',\n key: 11,\n icon: 'pic-line5'\n }, {\n name: '流动箭头6',\n value: '流动箭头6',\n key: 12,\n icon: 'pic-line6'\n }];\n var lineTypeDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-line-type-box')[0], '.input-select-line-type');\n if (lineTypeDataLegpObject) {\n lineTypeDataLegpObject.legp_search(lineTypeData);\n var iActiveElm2 = document.createElement('i');\n iActiveElm2.className = 'icon icon-active';\n _this14._DialogObject._element.content.getElementsByClassName('input-select-line-type')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm2);\n var lineTypeDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-line-type')[0].getElementsByTagName('input')[0];\n _this14._elms.lineType = [lineTypeDataLegpElm];\n for (var _i8 = 0; _i8 < lineTypeData.length; _i8++) {\n if (lineTypeData[_i8].key === _this14.options.type) {\n lineTypeDataLegpObject.legp_searchActive(lineTypeData[_i8].value);\n lineTypeDataLegpElm.value = lineTypeData[_i8].value;\n iActiveElm2.className = \"icon icon-active \".concat(lineTypeData[_i8].icon);\n break;\n }\n }\n lineTypeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < lineTypeData.length; _i9++) {\n if (lineTypeData[_i9].value === lineTypeDataLegpElm.value) {\n _this14.lineType = lineTypeData[_i9].key;\n iActiveElm2.className = \"icon icon-active \".concat(lineTypeData[_i9].icon);\n\n //控制参数显隐\n if (2 < _this14.lineType && _this14.lineType < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n if (2 < _this14.lineType && _this14.lineType < 5) {\n //尾迹参数\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'none');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'none');\n } else {\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'flex');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'flex');\n }\n break;\n }\n }\n });\n }\n var heightBoxElm = _this14._DialogObject._element.content.getElementsByClassName('height-box')[0];\n var heightElm = heightBoxElm.getElementsByClassName('height')[0];\n var heightConfirmElm = _this14._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (_this14.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n var heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n var heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (heightModeObject) {\n heightModeObject.legp_search(heightModeData);\n var heightModeDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n for (var _i10 = 0; _i10 < heightModeData.length; _i10++) {\n if (heightModeData[_i10].key == _this14.heightMode) {\n heightModeDataLegpElm.value = heightModeData[_i10].value;\n heightModeObject.legp_searchActive(heightModeData[_i10].value);\n break;\n }\n }\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < heightModeData.length; _i11++) {\n if (heightModeData[_i11].value === heightModeDataLegpElm.value) {\n _this14.heightMode = heightModeData[_i11].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this14.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n _this14._elms.height = heightElm;\n _this14._elms.heightBox = heightBoxElm;\n _this14._elms.heightMode = heightModeDataLegpElm;\n _this14._elms.heightConfirm = heightConfirmElm;\n _this14._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n _this14.positionEditing = false;\n for (var _i12 = 0; _i12 < _this14.options.positions.length; _i12++) {\n _this14.options.positions[_i12].alt = Number((_this14.options.positions[_i12].alt + Number(heightElm.value)).toFixed(2));\n _this14._elms.alt[_i12].innerHTML = _this14.options.positions[_i12].alt;\n }\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n }\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n _this14._elms.lng = [];\n _this14._elms.lngInput = [];\n _this14._elms.lat = [];\n _this14._elms.latInput = [];\n _this14._elms.alt = [];\n _this14._elms.altInput = [];\n var _loop6 = function _loop6(_i13) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(_i13 + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this14.options.positions[_i13].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this14.options.positions[_i13].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this14.options.positions[_i13].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this14.options.positions[_i13].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this14.options.positions[_i13].alt.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this14.options.positions[_i13].alt.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this14.options.positions[_i13].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this14.options.positions[_i13].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this14.options.positions[_i13].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this14.options.positions[_i13].lng.toFixed(8);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this14.options.positions[_i13].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this14.options.positions[_i13].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this14.options.positions[_i13].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this14.options.positions[_i13].lat.toFixed(8);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n altBox.addEventListener('dblclick', function () {\n if (_this14.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this14.options.positions[_i13].alt.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this14.options.positions[_i13].alt.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this14.options.positions[_i13].alt = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = _this14.options.positions[_i13].alt.toFixed(2);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n _this14._elms.lng.push(lng);\n _this14._elms.lngInput.push(lngInput);\n _this14._elms.lat.push(lat);\n _this14._elms.latInput.push(latInput);\n _this14._elms.alt.push(alt);\n _this14._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var _i13 = 0; _i13 < _this14.options.positions.length; _i13++) {\n _loop6(_i13);\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this14.labelFontFamily].value;\n for (var _i14 = 0; _i14 < fontData.length; _i14++) {\n if (fontData[_i14].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i14].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i15 = 0; _i15 < fontData.length; _i15++) {\n if (fontData[_i15].value === fontDataLegpElm.value) {\n _this14.labelFontFamily = fontData[_i15].key;\n break;\n }\n }\n });\n _this14._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context4.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context4.stop();\n }\n }, _callee2, this);\n }));\n function edit(_x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }() // 平滑处理\n )\n }, {\n key: \"smoothHandle\",\n value: function smoothHandle(positions) {\n var newPositions = [];\n var time = [];\n var fromDegreesArrayHeights = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n time.push(i / (positions.length - 1));\n }\n var spline = new Cesium.CatmullRomSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n var length = positions.length * 20;\n for (var _i16 = 0; _i16 <= length; _i16++) {\n var cartesian3 = spline.evaluate(_i16 / length);\n newPositions.push(this.cartesian3Towgs84(cartesian3, this.sdk.viewer));\n }\n return newPositions;\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(positionsArray, cd) {\n if (this._error) {\n return;\n }\n var positions = JSON.parse(JSON.stringify(positionsArray));\n var ground;\n switch (this.heightMode) {\n case 0:\n case '0':\n ground = false;\n break;\n case 1:\n case '1':\n for (var i = 0; i < positions.length; i++) {\n var height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions[i].lng, positions[i].lat));\n positions[i].alt = height ? Number((positions[i].alt + Number(height)).toFixed(2)) : Number(positions[i].alt.toFixed(2));\n }\n ground = false;\n break;\n case 2:\n case '2':\n ground = true;\n break;\n }\n var newPositions;\n var fromDegreesArray = [];\n if (this.options.noseToTail && this.options.noseToTail !== 'false') {\n newPositions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(positions), [positions[0]]);\n } else {\n newPositions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(positions);\n }\n newPositions = this.smoothHandle(newPositions);\n for (var _i17 = 0; _i17 < newPositions.length; _i17++) {\n fromDegreesArray.push(newPositions[_i17].lng, newPositions[_i17].lat, newPositions[_i17].alt);\n }\n\n // 计算长度\n // let array = []\n // for (let i = 0; i < fromDegreesArray.length; i += 3) {\n // array.push({\n // lng: fromDegreesArray[i],\n // lat: fromDegreesArray[i + 1],\n // alt: fromDegreesArray[i + 2]\n // })\n // }\n // this.options.fitLengthByMeter = this.computeDistance2(\n // array,\n // 2,\n // ground\n // )\n // this.fitLengthUnit = this.options['fit-length-unit']\n // this.options.lengthByMeter = this.computeDistance2(this.smoothHandle(positions), 2, ground)\n // this.lengthUnit = this.options['length-unit']\n\n if (this.options.noseToTail && this.options.noseToTail !== 'false' || this.options.smooth && this.options.smooth !== 'false') {\n var array = [];\n for (var _i18 = 0; _i18 < fromDegreesArray.length; _i18 += 3) {\n array.push({\n lng: fromDegreesArray[_i18],\n lat: fromDegreesArray[_i18 + 1],\n alt: fromDegreesArray[_i18 + 2]\n });\n }\n // this.options.fitLengthByMeter = this.computeDistance(\n // array,\n // 2,\n // ground\n // )\n var _this15 = this;\n this.computeDistance(array, 2, this.options.wordsName).then(function (res) {\n _this15.lengthByMeter = res;\n cd && cd();\n });\n } else {\n var _this16 = this;\n this.computeDistance(_this16.smoothHandle(positions), 2, this.options.wordsName).then(function (res) {\n _this16.lengthByMeter = res;\n cd && cd();\n });\n }\n return fromDegreesArray;\n }\n\n // 更新多边形(线扩展)\n }, {\n key: \"renewPolygon\",\n value: function renewPolygon(fromDegreesArray) {\n var linePositions = [];\n if (this.options.extend && this.options.extend !== 'false') {\n var outerHole = [];\n for (var i = 0; i < fromDegreesArray.length; i += 3) {\n linePositions.push([fromDegreesArray[i], fromDegreesArray[i + 1]]);\n }\n var linestring = turf.lineString(linePositions);\n var buffered = turf.buffer(linestring, this.options.extendWidth / 1000, {\n units: 'kilometers'\n });\n for (var _i19 = 0; _i19 < buffered.geometry.coordinates[0].length; _i19++) {\n outerHole.push(buffered.geometry.coordinates[0][_i19][0], buffered.geometry.coordinates[0][_i19][1]);\n }\n var holes = []; // 孔\n for (var _i20 = 1; _i20 < buffered.geometry.coordinates.length; _i20++) {\n var array = [];\n for (var m = 0; m < buffered.geometry.coordinates[_i20].length; m++) {\n array.push(buffered.geometry.coordinates[_i20][m][0], buffered.geometry.coordinates[_i20][m][1]);\n }\n holes.push({\n positions: Cesium.Cartesian3.fromDegreesArray(array)\n });\n }\n this.entity.polygon = new Cesium.PolygonGraphics({\n hierarchy: {\n positions: Cesium.Cartesian3.fromDegreesArray(outerHole),\n holes: holes\n },\n material: Cesium.Color.fromCssColorString(this.options.extendColor)\n });\n } else {\n this.entity.polygon = undefined;\n }\n }\n }, {\n key: \"reset\",\n value: function () {\n var _reset = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (this.entity) {\n _context5.next = 2;\n break;\n }\n return _context5.abrupt(\"return\");\n case 2:\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineWidth = this.originalOptions.width;\n this.lineType = this.originalOptions.type;\n this.noseToTail = this.originalOptions.noseToTail;\n this.extend = this.originalOptions.extend;\n this.extendWidth = this.originalOptions.extendWidth;\n this.extendColor = this.originalOptions.extendColor;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n // this.attributeVr = this.options.attribute.vr.content\n // this.attributeCamera = this.options.attribute.camera.content\n // this.attributeGoods = this.options.attribute.goods.content\n this.rotate = this.originalOptions.rotate;\n this.speed = this.originalOptions.speed;\n // this.dashSize = this.originalOptions.dashSize\n this.space = this.originalOptions.space;\n // this.cameraSelect && this.cameraSelect()\n // this.goodsSelect && this.goodsSelect()\n\n this.heightMode = this.options.heightMode;\n\n // let height\n // if (this.ground) {\n // height = await that.getClampToHeight({\n // lng: this.options.positions[0].lng,\n // lat: this.options.positions[0].lat\n // })\n // } else {\n // height = this.options.positions[0].alt\n // }\n // this.options.label.position = {\n // lng: this.options.positions[0].lng,\n // lat: this.options.positions[0].lat,\n // alt: height\n // }\n // this.label.position = [\n // this.options.label.position.lng,\n // this.options.label.position.lat,\n // this.options.label.position.alt\n // ]\n case 28:\n case \"end\":\n return _context5.stop();\n }\n }, _callee3, this);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n // let input = document.createElement('input');\n // input.type = \"file\";\n // input.accept = \".mp4, .pdf\"\n // input.click()\n // input.addEventListener('change', (event) => {\n // if (input.value) {\n // this.options.attribute.link.content.push({\n // name: '链接',\n // url: input.value\n // })\n // this.attributeLink = this.options.attribute.link.content\n // }\n // })\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n\n // _addRr() {\n // if (\n // this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value\n // ) {\n // this.options.attribute.vr.content.push({\n // name: '全景图',\n // url: this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value\n // })\n // this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value = ''\n // this.attributeVr = this.options.attribute.vr.content\n // } else {\n // this.Dialog.clickAddVr && this.Dialog.clickAddVr()\n // }\n // }\n\n // addAttributeRr(vr) {\n // this.options.attribute.vr.content.push({\n // name: '全景图',\n // url: vr\n // })\n // this.attributeVr = this.options.attribute.vr.content\n // }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n height,\n i,\n a,\n _i21,\n _a,\n _i22,\n _a2,\n BoundingSphere,\n _args6 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n options = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};\n if (!this._error) {\n _context6.next = 3;\n break;\n }\n return _context6.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeViewFollow\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setActiveViewer\"])(0);\n if (!this.options.customView) {\n _context6.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context6.next = 18;\n break;\n }\n _context6.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context6.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context6.next = 43;\n break;\n case 25:\n positionArray = [];\n _context6.t0 = this.options.heightMode;\n _context6.next = _context6.t0 === '0' ? 29 : _context6.t0 === 0 ? 29 : _context6.t0 === '1' ? 31 : _context6.t0 === 1 ? 31 : _context6.t0 === '2' ? 36 : _context6.t0 === 2 ? 36 : 41;\n break;\n case 29:\n for (i = 0; i < this.options.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt);\n positionArray.push(a.x, a.y, a.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 31:\n _context6.next = 33;\n return this.getClampToHeight(this.options.positions[0]);\n case 33:\n height = _context6.sent;\n for (_i21 = 0; _i21 < this.options.positions.length; _i21++) {\n _a = Cesium.Cartesian3.fromDegrees(this.options.positions[_i21].lng, this.options.positions[_i21].lat, height + this.options.positions[_i21].alt);\n positionArray.push(_a.x, _a.y, _a.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 36:\n _context6.next = 38;\n return this.getClampToHeight(this.options.positions[0]);\n case 38:\n height = _context6.sent;\n for (_i22 = 0; _i22 < this.options.positions.length; _i22++) {\n _a2 = Cesium.Cartesian3.fromDegrees(this.options.positions[_i22].lng, this.options.positions[_i22].lat, height);\n positionArray.push(_a2.x, _a2.y, _a2.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 41:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 43:\n case \"end\":\n return _context6.stop();\n }\n }, _callee4, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this17 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].primaryCallBack = function (content) {\n _this17.options.richTextContent = content;\n };\n }\n\n // static nodeEdit2(that, cb = () => { }) {\n // that.positionEditing = false\n // if (YJ.Measure.GetMeasureStatus()) {\n // cb('上一次测量未结束')\n // } else {\n // YJ.Measure.SetMeasureStatus(true)\n // that.tip = new MouseTip('请选择一个顶点,右键取消', that.sdk)\n // that.event = new MouseEvent(that.sdk)\n // that.nodePoints = []\n // let selectPoint\n // let originalPosition\n // let newpositions = []\n // let fromDegreesArray = []\n // for (let i = 0; i < that.options.positions.length; i++) {\n // fromDegreesArray.push(\n // that.options.positions[i].lng,\n // that.options.positions[i].lat,\n // that.options.positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n\n // that.event.mouse_left((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // originalPosition = that.options.positions[selectPoint.index]\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // position: Cesium.Cartesian3.fromDegrees(\n // that.options.positions[selectPoint.index].lng,\n // that.options.positions[selectPoint.index].lat,\n // that.options.positions[selectPoint.index].alt\n // ),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY\n // }\n // })\n // that.nodePoints.splice(selectPoint.index, 0, entity)\n // that.options.positions.splice(\n // selectPoint.index,\n // 0,\n // that.options.positions[selectPoint.index]\n // )\n // let fromDegreesArray = that.renewPositions(that.options.positions)\n // that.renewPolygon(fromDegreesArray)\n // that.options.lengthByMeter = that.computeDistance2(\n // that.options.positions,\n // 2,\n // that.ground\n // )\n // that.lengthUnit = that.options['length-unit']\n // } else {\n // var pick = that.sdk.viewer.scene.pick(movement.position)\n // if (\n // pick &&\n // pick.id &&\n // pick.id.name &&\n // pick.id.name === 'node-secondary-edit-point'\n // ) {\n // selectPoint = pick.id\n // that.nodePoints.splice(pick.id.index, 1)\n // that.sdk.viewer.entities.remove(pick.id)\n // that.tip.set_text('左键开始,右键结束,CTRL+右键撤销')\n // originalPosition = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // }\n // }\n // })\n\n // that.event.mouse_right((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = originalPosition\n // cb(null, that.options.positions)\n // }\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(\n // positions[i].lng,\n // positions[i].lat,\n // positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(\n // fromDegreesArray\n // )\n // for (let i = 0; i < that.nodePoints.length; i++) {\n // that.sdk.viewer.entities.remove(that.nodePoints[i])\n // }\n // that.nodePoints = []\n // that.event.destroy()\n // that.tip.destroy()\n // })\n\n // that.event.mouse_move((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(\n // positions[i].lng,\n // positions[i].lat,\n // positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(\n // fromDegreesArray\n // )\n // if (that.options.positions.length === 1) {\n // that.label.position = [\n // that.options.positions[0].lng,\n // that.options.positions[0].lat,\n // that.options.positions[0].alt\n // ]\n // that.options.label.position = {\n // lng: that.options.positions[0].lng,\n // lat: that.options.positions[0].lat,\n // alt: that.options.positions[0].alt\n // }\n // }\n // }\n // that.tip.setPosition(\n // cartesian,\n // movement.endPosition.x,\n // movement.endPosition.y\n // )\n // })\n\n // that.event.mouse_right_keyboard_ctrl((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions.pop()\n // that.sdk.viewer.entities.remove(\n // that.nodePoints[that.nodePoints.length - 1]\n // )\n // that.nodePoints.pop()\n // if (selectPoint.index === that.options.positions.length) {\n // if (that.nodePoints[selectPoint.index - 1]) {\n // selectPoint = that.nodePoints[selectPoint.index - 1]\n // } else {\n // selectPoint.index = 0\n // }\n // }\n // }\n // })\n\n // that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n // return newpositions\n // }, false)\n\n // for (let i = 0; i < that.options.positions.length; i++) {\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: Cesium.Cartesian3.fromDegrees(\n // that.options.positions[i].lng,\n // that.options.positions[i].lat,\n // that.options.positions[i].alt\n // ),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY\n // }\n // })\n // that.nodePoints.push(entity)\n // }\n // }\n // }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit() {\n var _this18 = this;\n this.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {} else {\n this.closeNodeEdit();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('请选择一个顶点,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk);\n this.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_18__[\"default\"](this.sdk);\n var selectPoint;\n this.event.mouse_left(function (movement, cartesian) {\n var pick = _this18.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n _this18.ControllerObject.position = _this18.options.positions[selectPoint.index];\n _this18.ControllerObject.editTranslational();\n _this18.tip && _this18.tip.destroy();\n _this18.ControllerObject.controllerCallBack = function (params) {\n if (selectPoint.index === 0) {\n _this18.label.position = [params.position.lng, params.position.lat, params.position.alt];\n _this18.options.label.position = {\n lng: params.position.lng,\n lat: params.position.lat,\n alt: params.position.alt\n };\n }\n _this18.options.positions[selectPoint.index] = params.position;\n _this18._elms.lng && (_this18._elms.lng[selectPoint.index].innerHTML = params.position.lng.toFixed(8));\n _this18._elms.lngInput && (_this18._elms.lngInput[selectPoint.index].value = params.position.lng.toFixed(8));\n _this18._elms.lat && (_this18._elms.lat[selectPoint.index].innerHTML = params.position.lat.toFixed(8));\n _this18._elms.latInput && (_this18._elms.latInput[selectPoint.index].value = params.position.lat.toFixed(8));\n _this18._elms.alt && (_this18._elms.alt[selectPoint.index].innerHTML = params.position.alt.toFixed(2));\n _this18._elms.altInput && (_this18._elms.altInput[selectPoint.index].value = params.position.alt.toFixed(2));\n selectPoint.position = Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt);\n };\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n for (var i = 0; i < _this18.nodePoints.length; i++) {\n _this18.sdk.viewer.entities.remove(_this18.nodePoints[i]);\n }\n _this18.nodePoints = [];\n _this18.event.destroy();\n _this18.tip && _this18.tip.destroy();\n _this18.tip = null;\n _this18.ControllerObject.destroy();\n var fromDegreesArray = _this18.renewPositions(_this18.options.positions);\n _this18.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n });\n this.event.mouse_move(function (movement, cartesian) {\n _this18.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n }, false);\n for (var i = 0; i < this.options.positions.length; i++) {\n var entity = this.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n position: Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt),\n billboard: {\n image: this.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n this.nodePoints.push(entity);\n }\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit() {\n this.ControllerObject && this.ControllerObject.destroy();\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.tip = null;\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n }\n\n /**\r\n * 删除\r\n */\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label && this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context7.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context7.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context7.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n )\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this19 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.closeNodeEdit();\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk);\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var positions = JSON.parse(JSON.stringify(this.options.positions));\n var positions2 = this.renewPositions(this.options.positions);\n // let positions2 = JSON.parse(JSON.stringify(positions))\n // for (let i = 0; i < positions2.length; i++) {\n // let height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions2[i].lng, positions2[i].lat))\n // positions2[i] = Cesium.Cartesian3.fromDegrees(\n // positions2[i].lng,\n // positions2[i].lat,\n // Number((positions2[i].alt + Number(height)).toFixed(2))\n // )\n // }\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.options.positions)\n };\n for (var i = 0; i < positions.length; i++) {\n positions[i] = Cesium.Cartesian3.fromDegrees(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n var center = positions[Math.floor(positions.length / 2)];\n var disparity = [];\n for (var _i23 = 0; _i23 < positions.length; _i23++) {\n disparity.push({\n x: center.x - positions[_i23].x,\n y: center.y - positions[_i23].y,\n z: center.z - positions[_i23].z\n });\n }\n var newpositions = [];\n var newpositions84 = [];\n this.event.mouse_move(function (movement, cartesian) {\n newpositions = [];\n newpositions84 = [];\n for (var _i24 = 0; _i24 < disparity.length; _i24++) {\n var newP = {\n x: cartesian.x - disparity[_i24].x,\n y: cartesian.y - disparity[_i24].y,\n z: cartesian.z - disparity[_i24].z\n };\n var pos84 = _this19.cartesian3Towgs84(newP, _this19.sdk.viewer);\n pos84.alt = _this19.options.positions[_i24].alt;\n // let height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat))\n // pos84.alt = Number((pos84.alt + Number(height)).toFixed(2))\n // newP = Cesium.Cartesian3.fromDegrees(\n // pos84.lng,\n // pos84.lat,\n // pos84.alt\n // )\n newpositions.push(newP);\n newpositions84.push(pos84);\n }\n var position84 = newpositions84[0];\n positions2 = _this19.renewPositions(newpositions84);\n _this19.label.position = [position84.lng, position84.lat, position84.alt];\n _this19.options.label.position = {\n lng: position84.lng,\n lat: position84.lat,\n alt: position84.alt\n };\n _this19.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n newpositions = [];\n newpositions84 = [];\n for (var _i25 = 0; _i25 < disparity.length; _i25++) {\n var newP = {\n x: cartesian.x - disparity[_i25].x,\n y: cartesian.y - disparity[_i25].y,\n z: cartesian.z - disparity[_i25].z\n };\n var pos84 = _this19.cartesian3Towgs84(newP, _this19.sdk.viewer);\n pos84.alt = _this19.options.positions[_i25].alt;\n newpositions.push(newP);\n newpositions84.push(pos84);\n }\n var positionsLngLat = [];\n for (var _i26 = 0; _i26 < newpositions84.length; _i26++) {\n var position = newpositions84[_i26];\n positionsLngLat.push(position);\n _this19._elms.lng && (_this19._elms.lng[_i26].innerHTML = position.lng.toFixed(8));\n _this19._elms.lngInput && (_this19._elms.lngInput[_i26].value = position.lng.toFixed(8));\n _this19._elms.lat && (_this19._elms.lat[_i26].innerHTML = position.lat.toFixed(8));\n _this19._elms.latInput && (_this19._elms.latInput[_i26].value = position.lat.toFixed(8));\n _this19._elms.alt && (_this19._elms.alt[_i26].innerHTML = position.alt.toFixed(2));\n _this19._elms.altInput && (_this19._elms.altInput[_i26].value = position.alt.toFixed(2));\n }\n _this19.options.positions = positionsLngLat;\n _this19.previous.positions = positionsLngLat;\n\n // this.entity.polyline.positionsLngLat = positionsLngLat\n var fromDegreesArray = _this19.renewPositions(_this19.options.positions, function () {\n if (_this19._positionEditingCallback) {\n _this19._positionEditingCallback();\n _this19._positionEditingCallback = null;\n }\n });\n _this19.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this19.renewPolygon(fromDegreesArray);\n _this19.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n _this19.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this19.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n // 长按取消\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n _this19.positionEditing = false;\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArrayHeights(positions2);\n }, false);\n } else {\n if (!this.sdk || !this.sdk.viewer || !this.label || !this.label.entity) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n switch (this.heightMode) {\n case 0:\n case '0':\n case 1:\n case '1':\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat, fromDegreesArray[2]];\n this.options.label.position = {\n lng: this.options.positions[0].lng,\n lat: this.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n break;\n case 2:\n case '2':\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat];\n this.options.label.position = {\n lng: this.options.positions[0].lng,\n lat: this.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n break;\n }\n }\n }\n }, {\n key: \"openPositionEditing\",\n value: function openPositionEditing(cd) {\n this.positionEditing = true;\n this._positionEditingCallback = cd;\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _Cesium$Cartesian,\n _this20 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: '',\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var points = [];\n for (var i = 0; i < this.options.positions.length; i++) {\n points.push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n var line = turf.lineString(points);\n var length = turf.length(line, {\n units: 'kilometers'\n });\n var sliced = turf.lineSliceAlong(line, 0, length / 2, {\n units: 'kilometers'\n });\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]));\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this20.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n var height, ground, objectsToExclude;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(that.sdk.viewer.entities.values);\n _context8.t0 = that.options.heightMode;\n _context8.next = _context8.t0 === '0' ? 4 : _context8.t0 === 0 ? 4 : _context8.t0 === '1' ? 7 : _context8.t0 === 1 ? 7 : _context8.t0 === '2' ? 14 : _context8.t0 === 2 ? 14 : 19;\n break;\n case 4:\n ground = false;\n height = that.options.positions[0].alt;\n return _context8.abrupt(\"break\", 19);\n case 7:\n ground = false;\n _context8.next = 10;\n return that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n }, objectsToExclude);\n case 10:\n _context8.t1 = _context8.sent;\n _context8.t2 = that.options.positions[0].alt;\n height = _context8.t1 + _context8.t2;\n return _context8.abrupt(\"break\", 19);\n case 14:\n ground = true;\n _context8.next = 17;\n return that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n }, objectsToExclude);\n case 17:\n height = _context8.sent;\n return _context8.abrupt(\"break\", 19);\n case 19:\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat,\n alt: height\n };\n }\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: ground\n });\n case 21:\n case \"end\":\n return _context8.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x3) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"create\",\n value: function create(that) {\n var ground;\n if (that.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n var positions = that.options.positions;\n var fromDegreesArray = that.renewPositions(positions);\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polyline: {\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n width: that.options.width,\n clampToGround: ground,\n // material: that.getMaterial(that.options.color, that.options.type),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.entity.polyline.oriWidth = that.options.width;\n that.judgeLine(that.entity, that.options);\n var params = _objectSpread({}, that.options);\n params.speed = that.inputSpeed;\n that.entity.polyline.material = that.getMaterial(that.options.color, that.options.type, that.entity, params);\n that.sdk._entityZIndex++;\n CurvelineObject.createLabel(that);\n // that.entity.polyline.positionsLngLat = positions\n that.renewPolygon(fromDegreesArray);\n // that.options.lengthByMeter = that.computeDistance2(that.smoothHandle(positions), 2, ground)\n // that.lengthUnit = that.options['length-unit']\n // syncData(that.sdk, that.options.id)\n // if (that.options.show) {\n // setSplitDirection(0, that.options.id)\n // }\n\n that.computeDistance(that.smoothHandle(positions), 2, that.options.wordsName).then(function (res) {\n that.lengthByMeter = res;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(that.sdk, that.options.id);\n });\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"setSplitDirection\"])(0, that.options.id);\n }\n\n // if (this.options.noseToTail) {\n // let array = []\n // for (let i = 0; i < fromDegreesArray.length; i += 2) {\n // array.push({ lng: fromDegreesArray[i], lat: fromDegreesArray[i + 1] })\n // }\n // this.options.fit_length = tool.computeDistance2(array)\n // }\n // else {\n // this.options.fit_length = tool.computeDistance2(positions)\n // }\n // if (this.options.fit_length_unit === 'km') {\n // this.options.fit_length = this.options.fit_length / 1000\n // }\n\n var scene = that.sdk.viewer.scene;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CurvelineObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvQ3VydmVsaW5lT2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0N1cnZlbGluZU9iamVjdC9pbmRleC5qcz80NDJjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZGVzY3JpcHRpb24g57q/XHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJ1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnLi9fZWxlbWVudCdcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vaW5kZXgnXHJcbmltcG9ydCBjeV90YWJzIGZyb20gJy4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzJ1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSAnLi4vLi4vRWxlbWVudC9yaWNoVGV4dCdcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuL2V2ZW50QmluZGluZydcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuLi8uLi8uLi9Db250cm9sbGVyL2luZGV4J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSwgZ2V0M0RWaWV3IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCdcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBDdXJ2ZWxpbmVPYmplY3QgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOabsue6v1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOe6v+WxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWV7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy53aWR0aD0ze251bWJlcn0g57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9I2ZmMDAwMCB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50eXBlPTAge251bWJlcn0g5p2Q6LSo57G75Z6LIDAt5a6e57q/IDEt6Jma57q/IDIt5rOb5YWJLi4uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0TW9kZT0ye251bWJlcn0g6auY5bqm5qih5byP77yIMO+8mua1t+aLlOmrmOW6pu+8mzHvvJrnm7jlr7npq5jluqbvvJsy77ya5L6d6ZmE5qih5byP77yJXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubm9zZVRvVGFpbD1mYWxzZSB7Ym9vbGVhbn0g6aaW5bC+55u46L+eXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZXh0ZW5kPWZhbHNlIHtib29sZWFufSDnur/nvJPlhrJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5leHRlbmRXaWR0aD0xMCB7bnVtYmVyfSDnur/nvJPlhrLlrr3luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5leHRlbmRDb2xvcj1yZ2JhKDI1NSwyNTUsODAsMC4zKSB7bnVtYmVyfSDnur/nvJPlhrLpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvumakFxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMucG9zaXRpb25zIOW/heWhq++8jOe7j+e6rOW6puWSjOmrmOW6pueahOWIl+ihqO+8jOWAvOS6pOabvyBbe2xvbixsYXQsYWx0fSwuLi5dXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwudGV4dCB7c3RyaW5nfSDmoIfnrb7mlofmnKxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IHtzdHJpbmd9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogXHJcbiAgICogXHJcbiAgICogQHBhcmFtIF9EaWFsb2cge29iamVjdH0g5by55qGG5LqL5Lu2XHJcbiAgICogQHBhcmFtIF9EaWFsb2cuY29uZmlybUNhbGxCYWNrIHtmdW5jdGlvbn0g5by55qGG56Gu6K6k5pe255qE5Zue6LCDXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgdGhpcy5vcHRpb25zLndpZHRoID0gKChvcHRpb25zLndpZHRoIHx8IG9wdGlvbnMud2lkdGggPT09IDApID8gb3B0aW9ucy53aWR0aCA6IDMpXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICcjZmYwMDAwJ1xyXG4gICAgdGhpcy5vcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgPyBOdW1iZXIob3B0aW9ucy50eXBlKSA6IDBcclxuICAgIHRoaXMub3B0aW9ucy5ub3NlVG9UYWlsID0gb3B0aW9ucy5ub3NlVG9UYWlsIHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kID0gb3B0aW9ucy5leHRlbmQgfHwgZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUgPSAob3B0aW9ucy5yb3RhdGUgfHwgb3B0aW9ucy5yb3RhdGUgPT09IGZhbHNlKSA/IG9wdGlvbnMucm90YXRlIDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnNwYWNlID0gb3B0aW9ucy5zcGFjZSB8fCAxXHJcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSBvcHRpb25zLnNwZWVkIHx8IDEwXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuZGFzaFNpemUgPSBvcHRpb25zLmRhc2hTaXplIHx8IDAuMDNcclxuICAgIHRoaXMub3B0aW9ucy53b3Jkc05hbWUgPSBvcHRpb25zLndvcmRzTmFtZSB8fCAn56m66Ze06ZW/5bqmJ1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZFdpZHRoID1cclxuICAgICAgb3B0aW9ucy5leHRlbmRXaWR0aCB8fCBvcHRpb25zLmV4dGVuZFdpZHRoID09PSAwXHJcbiAgICAgICAgPyBvcHRpb25zLmV4dGVuZFdpZHRoXHJcbiAgICAgICAgOiAxMFxyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZENvbG9yID0gb3B0aW9ucy5leHRlbmRDb2xvciB8fCAncmdiYSgyNTUsMjU1LDgwLDAuMyknXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9XHJcbiAgICAgIG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSAob3B0aW9ucy5oZWlnaHRNb2RlIHx8IG9wdGlvbnMuaGVpZ2h0TW9kZSA9PSAwKSA/IG9wdGlvbnMuaGVpZ2h0TW9kZSA6IDJcclxuICAgIHRoaXMuX2VsbXMgPSBbXVxyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOlxyXG4gICAgICAgIG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMFxyXG4gICAgICAgICAgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICAgICAgICA6IDIwLFxyXG4gICAgICBmb250RmFtaWx5OiBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPyBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgOiAwLFxyXG4gICAgICBjb2xvcjogb3B0aW9ucy5sYWJlbC5jb2xvciB8fCAnI2ZmZmZmZicsXHJcbiAgICAgIGxpbmVXaWR0aDpcclxuICAgICAgICBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMFxyXG4gICAgICAgICAgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgICAgICAgOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDpcclxuICAgICAgICBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IHx8IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgICAgICAgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjpcclxuICAgICAgICBvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwXHJcbiAgICAgICAgICA/IG9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgICAgICAgOiAyMDAwLFxyXG4gICAgICBmYXI6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5mYXJcclxuICAgICAgICAgIDogMTAwMDAwXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPVxyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCB7fVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIC8vIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyIHx8IHt9XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPVxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgfHwgW11cclxuICAgIC8vIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPVxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuXHJcblxyXG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmFcclxuICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnJcclxuICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHNcclxuXHJcblxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLnVuaXROdW0gPSAwXHJcbiAgICB0aGlzLmlucHV0U3BlZWQgPSAob3B0aW9ucy5zcGVlZCAmJiBNYXRoLnBvdyhvcHRpb25zLnNwZWVkLCAtMSkgKiAxMDApIHx8IDEwXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn57q/5q615pyA5bCR6ZyA6KaB5Lik5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLl9lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyA9IE51bWJlcihOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQgPSBOdW1iZXIoTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ID0gTnVtYmVyKE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkudG9GaXhlZCgyKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgICAgQ3VydmVsaW5lT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdiB8fCAnI2ZmMDAwMCdcclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh2LCB0aGlzLm9wdGlvbnMudHlwZSlcclxuICAgIGxldCBwYXJhbXMgPSB7IC4uLnRoaXMub3B0aW9ucyB9XHJcbiAgICBwYXJhbXMuc3BlZWQgPSB0aGlzLmlucHV0U3BlZWRcclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgdGhpcy5vcHRpb25zKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgdGhpcy5vcHRpb25zLnR5cGUsIHRoaXMuZW50aXR5LCBwYXJhbXMpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDAsMCwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdlxyXG4gICAgLy8gdGhpcy5vcHRpb25zLnNwZWVkID0gdiAhPT0gMCA/IE1hdGgucG93KHYsIC0xKSAqIDEwMCA6IDBcclxuICAgIHRoaXMuaW5wdXRTcGVlZCA9IHYgIT09IDAgPyBNYXRoLnBvdyh2LCAtMSkgKiAxMDAgOiAwXHJcbiAgICBsZXQgcGFyYW1zID0geyAuLi50aGlzLm9wdGlvbnMgfVxyXG4gICAgcGFyYW1zLnNwZWVkID0gdGhpcy5pbnB1dFNwZWVkXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgcGFyYW1zKVxyXG4gIH1cclxuICAvLyBnZXQgZGFzaFNpemUoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmRhc2hTaXplXHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgZGFzaFNpemUodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmRhc2hTaXplID0gdlxyXG4gIC8vICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5vcHRpb25zIH1cclxuICAvLyAgIHBhcmFtcy5zcGVlZCA9IHRoaXMuaW5wdXRTcGVlZFxyXG4gIC8vICAgLy8gdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgdGhpcy5vcHRpb25zLnR5cGUsIHRoaXMuZW50aXR5LCB0aGlzLm9wdGlvbnMpXHJcbiAgLy8gICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHBhcmFtcylcclxuICAvLyB9XHJcblxyXG4gIGdldCByb3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJvdGF0ZVxyXG4gIH1cclxuXHJcbiAgc2V0IHJvdGF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlID0gdlxyXG4gICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgIHRoaXMuX2VsbXMucm90YXRlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMucm90YXRlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUgPSB2XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHRoaXMub3B0aW9ucylcclxuICB9XHJcblxyXG4gIGdldCBzcGFjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3BhY2VcclxuICB9XHJcblxyXG4gIHNldCBzcGFjZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3BhY2UgPSB2XHJcbiAgICBsZXQgcGFyYW1zID0geyAuLi50aGlzLm9wdGlvbnMgfVxyXG4gICAgcGFyYW1zLnNwZWVkID0gdGhpcy5pbnB1dFNwZWVkXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgcGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxlbmd0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBzZXQgbGVuZ3RoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sZW5ndGggPSB2XHJcbiAgICAvL+WIpOaWreaVsOWAvOaYr+WQpuWkp+S6jjEwMDBtXHJcblxyXG4gICAgdGhpcy5fZWxtcy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5fZWxtcy5sZW5ndGguZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGZpdExlbmd0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZml0TGVuZ3RoXHJcbiAgfVxyXG5cclxuICBzZXQgZml0TGVuZ3RoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5maXRMZW5ndGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmZpdExlbmd0aCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmZpdExlbmd0aC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgd29yZHNOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy53b3Jkc05hbWVcclxuICB9XHJcbiAgc2V0IHdvcmRzTmFtZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMud29yZHNOYW1lID0gdlxyXG4gICAgdGhpcy5fZWxtcy53b3Jkc05hbWUgJiZcclxuICAgICAgdGhpcy5fZWxtcy53b3Jkc05hbWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG5cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGlmICghdGhpcy5ub3NlVG9UYWlsKSB7XHJcbiAgICAgIHRoaXMuY29tcHV0ZURpc3RhbmNlKFxyXG4gICAgICAgIHRoaXMuc21vb3RoSGFuZGxlKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgdlxyXG4gICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBfdGhpcy5sZW5ndGhCeU1ldGVyID0gcmVzXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBmaXRMZW5ndGhVbml0KCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9uc1snZml0LWxlbmd0aC11bml0J11cclxuICAvLyB9XHJcbiAgLy8gc2V0IGZpdExlbmd0aFVuaXQodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zWydmaXQtbGVuZ3RoLXVuaXQnXSA9IHZcclxuICAvLyAgIHRoaXMuX2VsbXMuZml0TGVuZ3RoVW5pdCAmJlxyXG4gIC8vICAgICB0aGlzLl9lbG1zLmZpdExlbmd0aFVuaXQuZm9yRWFjaChpdGVtID0+IHtcclxuICAvLyAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgaWYgKHRoaXMub3B0aW9ucy5maXRMZW5ndGhCeU1ldGVyKSB7XHJcbiAgLy8gICAgIHN3aXRjaCAodikge1xyXG4gIC8vICAgICAgIGNhc2UgJ+exsyc6XHJcbiAgLy8gICAgICAgICB0aGlzLmZpdExlbmd0aCA9IHRoaXMub3B0aW9ucy5maXRMZW5ndGhCeU1ldGVyXHJcbiAgLy8gICAgICAgICBicmVha1xyXG4gIC8vICAgICAgIGNhc2UgJ+WNg+exsyc6XHJcbiAgLy8gICAgICAgICB0aGlzLmZpdExlbmd0aCA9IE51bWJlcihcclxuICAvLyAgICAgICAgICAgKHRoaXMub3B0aW9ucy5maXRMZW5ndGhCeU1ldGVyIC8gMTAwMCkudG9GaXhlZCg1KVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgYnJlYWtcclxuICAvLyAgICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgICAgdGhpcy5maXRMZW5ndGggPSB0aGlzLm9wdGlvbnMuZml0TGVuZ3RoQnlNZXRlclxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgbGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy53aWR0aFxyXG4gIH1cclxuXHJcbiAgc2V0IGxpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMud2lkdGggPSAodiB8fCB2ID09IDApID8gdiA6IDNcclxuICAgIHRoaXMuX2VsbXMubGluZVdpZHRoICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGluZVdpZHRoLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy53aWR0aFxyXG4gICAgICB9KVxyXG4gICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuZW50aXR5LnBvbHlsaW5lKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdGhpcy5lbnRpdHkucG9seWxpbmUud2lkdGggKyB2IC0gdGhpcy5lbnRpdHkucG9seWxpbmUub3JpV2lkdGhcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUub3JpV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGhcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZW50aXR5ICYmXHJcbiAgICAvLyAgIHRoaXMuZW50aXR5LnBvbHlsaW5lICYmXHJcbiAgICAvLyAgICh0aGlzLmVudGl0eS5wb2x5bGluZS53aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCkgJiYgKHRoaXMuZW50aXR5LnBvbHlsaW5lLm9yaVdpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlXHJcbiAgfVxyXG5cclxuICBzZXQgbGluZVR5cGUodikge1xyXG4gICAgbGV0IGxpbmVUeXBlRGF0YSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gbGluZVwiPjwvaT7lrp7nur8nLFxyXG4gICAgICAgIHZhbHVlOiAn5a6e57q/JyxcclxuICAgICAgICBrZXk6IDAsXHJcbiAgICAgICAgaWNvbjogJ2xpbmUnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGRhc2gtbGluZVwiPjwvaT7omZrnur8nLFxyXG4gICAgICAgIHZhbHVlOiAn6Jma57q/JyxcclxuICAgICAgICBrZXk6IDEsXHJcbiAgICAgICAgaWNvbjogJ2Rhc2gtbGluZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gbGlnaHQtbGluZVwiPjwvaT7ms5vlhYknLFxyXG4gICAgICAgIHZhbHVlOiAn5rOb5YWJJyxcclxuICAgICAgICBrZXk6IDIsXHJcbiAgICAgICAgaWNvbjogJ2xpZ2h0LWxpbmUnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHRhaWwtbGluZVwiPjwvaT7lsL7ov7nlhYnnur8nLFxyXG4gICAgICAgIHZhbHVlOiAn5bC+6L+55YWJ57q/JyxcclxuICAgICAgICBrZXk6IDMsXHJcbiAgICAgICAgaWNvbjogJ3RhaWwtbGluZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gbXVsdC10YWlsLWxpbmVcIj48L2k+5aSa5bC+6L+55YWJ57q/JyxcclxuICAgICAgICB2YWx1ZTogJ+WkmuWwvui/ueWFiee6vycsXHJcbiAgICAgICAga2V5OiA0LFxyXG4gICAgICAgIGljb246ICdtdWx0LXRhaWwtbGluZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gZmxvdy1kYXNoLWxpbmUxXCI+PC9pPua1geWKqOiZmue6vzEnLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo6Jma57q/MScsXHJcbiAgICAgICAga2V5OiA1LFxyXG4gICAgICAgIGljb246ICdmbG93LWRhc2gtbGluZTEnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGZsb3ctZGFzaC1saW5lMlwiPjwvaT7mtYHliqjomZrnur8yJyxcclxuICAgICAgICB2YWx1ZTogJ+a1geWKqOiZmue6vzInLFxyXG4gICAgICAgIGtleTogNixcclxuICAgICAgICBpY29uOiAnZmxvdy1kYXNoLWxpbmUyJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTFcIj48L2k+5rWB5Yqo566t5aS0MScsXHJcbiAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQxJyxcclxuICAgICAgICBrZXk6IDcsXHJcbiAgICAgICAgaWNvbjogJ3BpYy1saW5lMSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmUyXCI+PC9pPua1geWKqOeureWktDInLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0MicsXHJcbiAgICAgICAga2V5OiA4LFxyXG4gICAgICAgIGljb246ICdwaWMtbGluZTInXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lM1wiPjwvaT7mtYHliqjnrq3lpLQzJyxcclxuICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDMnLFxyXG4gICAgICAgIGtleTogOSxcclxuICAgICAgICBpY29uOiAncGljLWxpbmUzJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTRcIj48L2k+5rWB5Yqo566t5aS0NCcsXHJcbiAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQ0JyxcclxuICAgICAgICBrZXk6IDEwLFxyXG4gICAgICAgIGljb246ICdwaWMtbGluZTQnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lNVwiPjwvaT7mtYHliqjnrq3lpLQ1JyxcclxuICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDUnLFxyXG4gICAgICAgIGtleTogMTEsXHJcbiAgICAgICAgaWNvbjogJ3BpYy1saW5lNSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmU2XCI+PC9pPua1geWKqOeureWktDYnLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0NicsXHJcbiAgICAgICAga2V5OiAxMixcclxuICAgICAgICBpY29uOiAncGljLWxpbmU2J1xyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgICB0aGlzLm9wdGlvbnMudHlwZSA9IE51bWJlcih2KVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lVHlwZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxpbmVUeXBlRGF0YVtpXS5rZXkgPT09IE51bWJlcih2KSkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMubGluZVR5cGUgJiZcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGluZVR5cGUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IGxpbmVUeXBlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICBpZiAoMiA8IGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZSA8IDEzKSB7Ly/otLTlm77lj4LmlbBcclxuICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykuc3R5bGUuZGlzcGxheSA9ICdub25lJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoMiA8IGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZSA8IDUpIHsvL+Wwvui/ueWPguaVsFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBwYXJhbXMgPSB7IC4uLnRoaXMub3B0aW9ucyB9XHJcbiAgICBwYXJhbXMuc3BlZWQgPSB0aGlzLmlucHV0U3BlZWRcclxuICAgIHRoaXMuZW50aXR5ICYmXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lICYmXHJcbiAgICAgICh0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbG9yLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy50eXBlLFxyXG4gICAgICAgIHRoaXMuZW50aXR5LFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgICApKVxyXG4gIH1cclxuICBnZXQgbm9zZVRvVGFpbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubm9zZVRvVGFpbFxyXG4gIH1cclxuXHJcbiAgc2V0IG5vc2VUb1RhaWwodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgPSB2XHJcbiAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgdGhpcy5fZWxtcy5ub3NlVG9UYWlsICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubm9zZVRvVGFpbC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICB9XHJcbiAgICAvLyBpZiAodikge1xyXG4gICAgLy8gICBpZiAodGhpcy5vcHRpb25zLmZpdExlbmd0aEJ5TWV0ZXIgPiAxMDAwIHx8IHRoaXMub3B0aW9ucy5maXRMZW5ndGhCeU1ldGVyID09IDEwMDApIHtcclxuICAgIC8vICAgICBsZXQgZG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVsxXVxyXG4gICAgLy8gICAgIGRvbSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVsxXSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVsxXS5jbGljaygpXHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgbGV0IGRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMV1cclxuICAgIC8vICAgICBkb20gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMF0gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMF0uY2xpY2soKVxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGhCeU1ldGVyID4gMTAwMCB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoQnlNZXRlciA9PSAxMDAwKSB7XHJcbiAgICAvLyAgICAgbGV0IGRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMV1cclxuICAgIC8vICAgICBkb20gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMV0gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMV0uY2xpY2soKVxyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIGxldCBkb20gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzFdXHJcbiAgICAvLyAgICAgZG9tICYmIGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdkZCcpWzBdICYmIGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdkZCcpWzBdLmNsaWNrKClcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldCBoZWlnaHRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID8gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgOiAwXHJcbiAgfVxyXG4gIHNldCBoZWlnaHRNb2RlKHYpIHtcclxuICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKHYgfHwgdiA9PSAwKSA/IHYgOiAyXHJcbiAgICBsZXQgaGVpZ2h0TW9kZU5hbWUgPSAnJ1xyXG4gICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgIGxldCBncm91bmQgPSBmYWxzZVxyXG4gICAgbGV0IGRpc2FibGVkID0gZmFsc2VcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAgIClcclxuICAgIHRoaXMucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IGdyb3VuZFxyXG4gICAgICAgIHRoaXMuZXh0ZW5kID0gZmFsc2VcclxuICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfmtbfmi5Tpq5jluqYnXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgICAgdGhpcy5leHRlbmQgPSBmYWxzZVxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+ebuOWvueWcsOihqCdcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBkaXNhYmxlZCA9IHRydWVcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5L6d6ZmE5qih5Z6LJ1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmxlbmd0aEJ5TWV0ZXIgPSB0aGlzLmNvbXB1dGVEaXN0YW5jZTIoXHJcbiAgICAvLyAgIHRoaXMuc21vb3RoSGFuZGxlKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpLFxyXG4gICAgLy8gICAyLFxyXG4gICAgLy8gICBncm91bmRcclxuICAgIC8vIClcclxuICAgIHRoaXMubGVuZ3RoVW5pdCA9IHRoaXMubGVuZ3RoVW5pdFxyXG4gICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUgPSBoZWlnaHRNb2RlTmFtZSlcclxuICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICBoZWlnaHRNb2RlTmFtZVxyXG4gICAgKSlcclxuICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCAmJiAodGhpcy5fZWxtcy5oZWlnaHRCb3guY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3ggZGlzYWJsZWQnKTtcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoZ3JvdW5kKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5ncm91bmQgPSBncm91bmRcclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgJiYgKHRoaXMuX2VsbXMuaGVpZ2h0TW9kZS52YWx1ZSA9ICfkvp3pmYTmqKHlnosnKVxyXG4gICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5WzJdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgIGxuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgICAgICAgYWx0OiBmcm9tRGVncmVlc0FycmF5WzJdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIGdldCBleHRlbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4dGVuZFxyXG4gIH1cclxuXHJcbiAgc2V0IGV4dGVuZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kID0gdlxyXG4gICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgIGlmICh2KSB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IDJcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuZXh0ZW5kICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuZXh0ZW5kLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5kKSB7XHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgdGhpcy5yZW5ld1BvbHlnb24oZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5Z29uID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBleHRlbmRXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXh0ZW5kV2lkdGhcclxuICB9XHJcblxyXG4gIHNldCBleHRlbmRXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmV4dGVuZFdpZHRoICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuZXh0ZW5kV2lkdGguZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGV4dGVuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHRlbmRDb2xvclxyXG4gIH1cclxuICBzZXQgZXh0ZW5kQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZENvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMuZXh0ZW5kQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5leHRlbmRDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGV4dGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5leHRlbmRDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbmRDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbmRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5leHRlbmRDb2xvcltpXSA9IGV4dGVuZENvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eSAmJlxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uICYmXHJcbiAgICAgICh0aGlzLmVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kQ29sb3JcclxuICAgICAgKSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIF1cclxuICAgICAgfSwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxMaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGdldCBsYWJlbExpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRbXHJcbiAgICAgICAgICBpXHJcbiAgICAgICAgXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSwgdl1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICdhdHRyaWJ1dGUtY29udGVudCdcclxuICAgIClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUxpbmsodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QgfHxcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHxcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnYXR0cmlidXRlLWNvbnRlbnQtbGluaydcclxuICAgICAgKS5sZW5ndGggPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXVxyXG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPVxyXG4gICAgICAgIGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICtcclxuICAgICAgICBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgK1xyXG4gICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICBsaW5rRWRpdDogYXN5bmMgaW5kZXggPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgLSAxMCArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5bbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiBpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgJycpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgICAgICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bXHJcbiAgICAgICAgICBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXHJcbiAgICAgICAgXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5bbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBhdHRyaWJ1dGVDYW1lcmEoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gIC8vICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8XHJcbiAgLy8gICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fFxyXG4gIC8vICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gIC8vICAgICAgICdhdHRyaWJ1dGUtY29udGVudC12cidcclxuICAvLyAgICAgKS5sZW5ndGggPT0gMFxyXG4gIC8vICAgKSB7XHJcbiAgLy8gICAgIHJldHVyblxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV1cclxuICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAvLyAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAvLyAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gIC8vICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgLy8gICB9XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICBsZXQgdHIgPVxyXG4gIC8vICAgICAgIGBcclxuICAvLyAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgLy8gICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAvLyAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArXHJcbiAgLy8gICAgICAgYDwvZGl2PlxyXG4gIC8vICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgLy8gICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArXHJcbiAgLy8gICAgICAgYDwvZGl2PlxyXG4gIC8vICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgLy8gICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgLy8gICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgPC9kaXY+YFxyXG4gIC8vICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAvLyAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gIC8vICAgbGV0IGZ1biA9IHtcclxuICAvLyAgICAgdnJFZGl0OiBhc3luYyBpbmRleCA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIC8vICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgLy8gICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXVxyXG4gIC8vICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAvLyAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgLy8gICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgLy8gICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gIC8vICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gIC8vICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgLy8gICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gIC8vICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgLy8gICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IGhlaWdodCAtIDEwICsgJ3B4J1xyXG4gIC8vICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAvLyAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAvLyAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgLy8gICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAvLyAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAvLyAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgLy8gICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gIC8vICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAvLyAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAvLyAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gIC8vICAgICAgICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgdnJEZWxldGU6IGkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcblxyXG4gIC8vICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgLy8gICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gIC8vICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAvLyAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAvLyAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgLy8gICAgICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAvLyAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gIC8vICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gIC8vICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgLy8gICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgLy8gICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gIC8vICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IGZpbGVTZWxlY3QgPSBldmVudCA9PiB7XHJcbiAgLy8gICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAvLyAgICAgICBsZXQgdGQgPSBpdGVtW1xyXG4gIC8vICAgICAgICAgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKVxyXG4gIC8vICAgICAgIF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gIC8vICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAvLyAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAvLyAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAvLyAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgIGNvbnRpbnVlXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgLy8gICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pXHJcbiAgLy8gICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgLy8gICAgICAgICAgIGJyZWFrXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIC8vIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUxhYmVsKHRoYXQpIHtcclxuICAgIGxldCBoZWlnaHRcclxuICAgIGxldCBncm91bmRcclxuICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBoZWlnaHQgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgbG5nOiB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgIGxhdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRcclxuICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKSArIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICBsYXQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgICAgIGxuZzogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgbGF0OiB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICBhbHQ6IGhlaWdodFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGF0LmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IFtcclxuICAgICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLFxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsXHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdFxyXG4gICAgICBdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhcixcclxuICAgICAgZ3JvdW5kOiBncm91bmRcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgIGxldCBncm91bmRcclxuICAgIGlmICh0aGF0LmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICBncm91bmQgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhhdC5yZW5ld1Bvc2l0aW9ucyhwb3NpdGlvbnMpXHJcbiAgICB0aGF0LmVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpLFxyXG4gICAgICAgIHdpZHRoOiB0aGF0Lm9wdGlvbnMud2lkdGgsXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogZ3JvdW5kLFxyXG4gICAgICAgIC8vIG1hdGVyaWFsOiB0aGF0LmdldE1hdGVyaWFsKHRoYXQub3B0aW9ucy5jb2xvciwgdGhhdC5vcHRpb25zLnR5cGUpLFxyXG4gICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLm9yaVdpZHRoID0gdGhhdC5vcHRpb25zLndpZHRoXHJcbiAgICB0aGF0Lmp1ZGdlTGluZSh0aGF0LmVudGl0eSwgdGhhdC5vcHRpb25zKVxyXG5cclxuICAgIGxldCBwYXJhbXMgPSB7IC4uLnRoYXQub3B0aW9ucyB9XHJcbiAgICBwYXJhbXMuc3BlZWQgPSB0aGF0LmlucHV0U3BlZWRcclxuICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhhdC5nZXRNYXRlcmlhbChcclxuICAgICAgdGhhdC5vcHRpb25zLmNvbG9yLFxyXG4gICAgICB0aGF0Lm9wdGlvbnMudHlwZSxcclxuICAgICAgdGhhdC5lbnRpdHksXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG5cclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgQ3VydmVsaW5lT2JqZWN0LmNyZWF0ZUxhYmVsKHRoYXQpXHJcbiAgICAvLyB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnNMbmdMYXQgPSBwb3NpdGlvbnNcclxuICAgIHRoYXQucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAvLyB0aGF0Lm9wdGlvbnMubGVuZ3RoQnlNZXRlciA9IHRoYXQuY29tcHV0ZURpc3RhbmNlMih0aGF0LnNtb290aEhhbmRsZShwb3NpdGlvbnMpLCAyLCBncm91bmQpXHJcbiAgICAvLyB0aGF0Lmxlbmd0aFVuaXQgPSB0aGF0Lm9wdGlvbnNbJ2xlbmd0aC11bml0J11cclxuICAgIC8vIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICAvLyBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgIC8vICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHRoYXQuY29tcHV0ZURpc3RhbmNlKFxyXG4gICAgICB0aGF0LnNtb290aEhhbmRsZShwb3NpdGlvbnMpLFxyXG4gICAgICAyLFxyXG4gICAgICB0aGF0Lm9wdGlvbnMud29yZHNOYW1lXHJcbiAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgdGhhdC5sZW5ndGhCeU1ldGVyID0gcmVzXHJcbiAgICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9KVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLm5vc2VUb1RhaWwpIHtcclxuICAgIC8vICAgbGV0IGFycmF5ID0gW11cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAvLyAgICAgYXJyYXkucHVzaCh7IGxuZzogZnJvbURlZ3JlZXNBcnJheVtpXSwgbGF0OiBmcm9tRGVncmVlc0FycmF5W2kgKyAxXSB9KVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5maXRfbGVuZ3RoID0gdG9vbC5jb21wdXRlRGlzdGFuY2UyKGFycmF5KVxyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5maXRfbGVuZ3RoID0gdG9vbC5jb21wdXRlRGlzdGFuY2UyKHBvc2l0aW9ucylcclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMuZml0X2xlbmd0aF91bml0ID09PSAna20nKSB7XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5maXRfbGVuZ3RoID0gdGhpcy5vcHRpb25zLmZpdF9sZW5ndGggLyAxMDAwXHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IHNjZW5lID0gdGhhdC5zZGsudmlld2VyLnNjZW5lXHJcbiAgfVxyXG4gIGp1ZGdlTGluZShlbnRpdHksIG5ld1BhcmFtKSB7XHJcbiAgICBpZiAoIWVudGl0eS5wb2x5bGluZS5vcmlSZXBlYXQpIHtcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIGNvbG9yOiBuZXdQYXJhbS5jb2xvcixcclxuICAgICAgICBpbWFnZTogdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgYC9pbWcvYXJyb3cvMS5wbmdgLFxyXG4gICAgICAgIHNwYWNlOiBuZXdQYXJhbS5zcGFjZSxcclxuICAgICAgICBzcGVlZDogbmV3UGFyYW0uc3BlZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyYW0uc3BlZWQgPSBuZXdQYXJhbS5yb3RhdGUgPyBwYXJhbS5zcGVlZCA6IDAgLSBwYXJhbS5zcGVlZFxyXG5cclxuICAgICAgY29uc3QgY2FudmFzRWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhc0VsZS5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICAgIGNvbnN0IG15SW1nID0gbmV3IEltYWdlKClcclxuICAgICAgLy8gbXlJbWcuc3JjID0gdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYXJyb3cvMS5wbmcnXHJcbiAgICAgIG15SW1nLnNyYyA9IHBhcmFtLmltYWdlXHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBteUltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2FudmFzRWxlLndpZHRoID0gbXlJbWcud2lkdGggKiAocGFyYW0uc3BhY2UgKyAxKVxyXG4gICAgICAgIGNhbnZhc0VsZS5oZWlnaHQgPSBteUltZy5oZWlnaHRcclxuXHJcbiAgICAgICAgbGV0IG9yaVJlcGVhdCA9IHRoYXQuZ2V0U2NlZW5MaW5lKGVudGl0eSwgcGFyYW0sIGNhbnZhc0VsZSlcclxuICAgICAgICBvcmlSZXBlYXQgJiYgKGVudGl0eS5wb2x5bGluZS5vcmlSZXBlYXQgPSBvcmlSZXBlYXQpXHJcblxyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25Qcm9wZXJ0eSA9IGVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHBvc2l0aW9uUHJvcGVydHkuZ2V0VmFsdWUodGhhdC5zZGsudmlld2VyLmNsb2NrLmN1cnJlbnRUaW1lKTtcclxuXHJcbiAgICAgICAgaWYgKCFDZXNpdW0uZGVmaW5lZChwb3NpdGlvbnMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEuMCwgMS4wKTtcclxuICAgICAgICAgIC8vIHJldHVybiAxLjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2UgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgICAgICAgZGlzdGFuY2UgKz0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbaSArIDFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZXBlYXRYID0gZGlzdGFuY2UgLyBlbnRpdHkucG9seWxpbmUud2lkdGguZ2V0VmFsdWUoKTtcclxuICAgICAgICAvLyDmoLnmja7lnLDlm77nvKnmlL7nqIvluqbosIPmlbRyZXBlYXRYXHJcbiAgICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG4gICAgICAgIHZhciBib3VuZGluZ1NwaGVyZSA9IG5ldyBDZXNpdW0uQm91bmRpbmdTcGhlcmUoXHJcbiAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoLTEwMDAwMDAsIDAsIDApLCAvLyDkuK3lv4PngrnlnZDmoIdcclxuICAgICAgICAgIDUwMDAwMCAvLyDljYrlvoTvvIjot53nprvvvIlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDojrflj5bnu5jlm77nvJPlhrLljLrnmoTlrr3luqblkozpq5jluqbvvIjpgJrluLjmmK/lsY/luZXnmoTliIbovqjnjofvvIlcclxuICAgICAgICB2YXIgZHJhd2luZ0J1ZmZlcldpZHRoID0gdGhhdC5zZGsudmlld2VyLmNhbnZhcy5jbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgZHJhd2luZ0J1ZmZlckhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyDkvb/nlKggZ2V0UGl4ZWxTaXplIOaWueazleiOt+WPluWMheWbtOeQg+WcqOWxj+W5leS4iueahOWDj+e0oOWkp+Wwj1xyXG4gICAgICAgIHZhciBncm91bmRSZXNvbHV0aW9uID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmNhbWVyYS5nZXRQaXhlbFNpemUoYm91bmRpbmdTcGhlcmUsIGRyYXdpbmdCdWZmZXJXaWR0aCwgZHJhd2luZ0J1ZmZlckhlaWdodClcclxuICAgICAgICByZXBlYXRYICo9IGdyb3VuZFJlc29sdXRpb24gLyBjYW1lcmFIZWlnaHQgLyAocGFyYW0uc3BhY2UgKiAoY2FudmFzRWxlLndpZHRoIC8gY2FudmFzRWxlLmhlaWdodCAqIDUpICsgMSk7XHJcbiAgICAgICAgLy8gaWYgKGVudGl0eS5wb2x5bGluZS5tYXRlcmlhbC5vcmlSZXBlYXQpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoYXQuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSBDZXNpdW0uU2NlbmVNb2RlLlNDRU5FM0QpIHtcclxuICAgICAgICAgIGxldCBzcGVlZCA9IHJlcGVhdFggLyBlbnRpdHkucG9seWxpbmUub3JpUmVwZWF0XHJcbiAgICAgICAgICBlbnRpdHkucG9seWxpbmUub3JpU3BlZWQgPSBzcGVlZFxyXG4gICAgICAgICAgZW50aXR5LnBvbHlsaW5lLm9yaVJlcGVhdFggPSByZXBlYXRYXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBzZGszZCA9IGdldDNEVmlldygpXHJcbiAgICAgICAgICBsZXQgc2RrM2RFbnRpdHkgPSBzZGszZC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBlbnRpdHkucG9seWxpbmUub3JpU3BlZWQgPSBzZGszZEVudGl0eS5wb2x5bGluZS5vcmlTcGVlZFxyXG4gICAgICAgICAgZW50aXR5LnBvbHlsaW5lLm9yaVJlcGVhdFggPSBzZGszZEVudGl0eS5wb2x5bGluZS5vcmlSZXBlYXRYXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICAvKirojrflj5blvZPliY3mu6HlsY/mqKrnur/pgJ/luqYgKi9cclxuICBnZXRTY2VlbkxpbmUoZW50aXR5LCBvcHRpb25zLCBjYW52YXNFbGUpIHtcclxuICAgIGxldCBwb2ludDEgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgdGhpcy5zZGsudmlld2VyLmNhbnZhcy5jbGllbnRIZWlnaHQpXHJcbiAgICBsZXQgcG9pbnQyID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKHRoaXMuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50V2lkdGggLyAyLCB0aGlzLnNkay52aWV3ZXIuY2FudmFzLmNsaWVudEhlaWdodClcclxuICAgIC8vIHZhciBjYXJ0ZXNpYW4xID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihwb2ludDEpXHJcbiAgICAvLyB2YXIgY2FydGVzaWFuMiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrUG9zaXRpb24ocG9pbnQyKVxyXG5cclxuICAgIGxldCByYXkgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkocG9pbnQxKTtcclxuICAgIGxldCBjYXJ0ZXNpYW4xID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB0aGlzLnNkay52aWV3ZXIuc2NlbmUpO1xyXG5cclxuICAgIGxldCByYXkyID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5nZXRQaWNrUmF5KHBvaW50Mik7XHJcbiAgICBsZXQgY2FydGVzaWFuMiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheTIsIHRoaXMuc2RrLnZpZXdlci5zY2VuZSk7XHJcbiAgICAvLyBpZiAoIWNhcnRlc2lhbjEgfHwgIWNhcnRlc2lhbjIpIHtcclxuICAgIC8vICAgbGV0IHJheSA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb2ludDEpO1xyXG4gICAgLy8gICBjYXJ0ZXNpYW4xID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB0aGlzLnNkay52aWV3ZXIuc2NlbmUpO1xyXG5cclxuICAgIC8vICAgbGV0IHJheTIgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkocG9pbnQyKTtcclxuICAgIC8vICAgY2FydGVzaWFuMiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheTIsIHRoaXMuc2RrLnZpZXdlci5zY2VuZSk7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoY2FydGVzaWFuMSAmJiBjYXJ0ZXNpYW4yKSB7XHJcblxyXG5cclxuICAgICAgdmFyIGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UoY2FydGVzaWFuMSwgY2FydGVzaWFuMik7XHJcblxyXG4gICAgICB2YXIgcmVwZWF0WCA9IGRpc3RhbmNlIC8gZW50aXR5LnBvbHlsaW5lLndpZHRoLmdldFZhbHVlKCk7XHJcbiAgICAgIC8vIOagueaNruWcsOWbvue8qeaUvueoi+W6puiwg+aVtHJlcGVhdFhcclxuICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG4gICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSBuZXcgQ2VzaXVtLkJvdW5kaW5nU3BoZXJlKFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygtMTAwMDAwMCwgMCwgMCksIC8vIOS4reW/g+eCueWdkOagh1xyXG4gICAgICAgIDUwMDAwMCAvLyDljYrlvoTvvIjot53nprvvvIlcclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICAvLyDojrflj5bnu5jlm77nvJPlhrLljLrnmoTlrr3luqblkozpq5jluqbvvIjpgJrluLjmmK/lsY/luZXnmoTliIbovqjnjofvvIlcclxuICAgICAgdmFyIGRyYXdpbmdCdWZmZXJXaWR0aCA9IHRoaXMuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50V2lkdGg7XHJcbiAgICAgIHZhciBkcmF3aW5nQnVmZmVySGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLmNhbnZhcy5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgICAvLyDkvb/nlKggZ2V0UGl4ZWxTaXplIOaWueazleiOt+WPluWMheWbtOeQg+WcqOWxj+W5leS4iueahOWDj+e0oOWkp+Wwj1xyXG4gICAgICB2YXIgZ3JvdW5kUmVzb2x1dGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYW1lcmEuZ2V0UGl4ZWxTaXplKGJvdW5kaW5nU3BoZXJlLCBkcmF3aW5nQnVmZmVyV2lkdGgsIGRyYXdpbmdCdWZmZXJIZWlnaHQpXHJcbiAgICAgIC8vIHJlcGVhdFggKj0gZ3JvdW5kUmVzb2x1dGlvbiAvIGNhbWVyYUhlaWdodCAvICgobXlJbWcud2lkdGggLyBteUltZy5oZWlnaHQgKiA1KSArIDEpO1xyXG4gICAgICBpZiAoZ3JvdW5kUmVzb2x1dGlvbiA+IDcwMCkge1xyXG4gICAgICAgIHJlcGVhdFggKj0gZ3JvdW5kUmVzb2x1dGlvbiAvIGNhbWVyYUhlaWdodCAvIChvcHRpb25zLnNwYWNlICogKGNhbnZhc0VsZS53aWR0aCAvIGNhbnZhc0VsZS5oZWlnaHQgKiA1KSArIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcGVhdFggPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gQ2VzaXVtLlNjZW5lTW9kZS5TQ0VORTNEKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdFhcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgc2RrM2QgPSBnZXQzRFZpZXcoKVxyXG4gICAgICAgIGxldCBzZGszZEVudGl0eSA9IHNkazNkLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICByZXR1cm4gc2RrM2RFbnRpdHkucG9seWxpbmUub3JpUmVwZWF0WFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOe8lui+keahhlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGUgdHJ1ZeaJk+W8gO+8jGZhbHNl5YWz6ZetXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+absue6v+WxnuaApycsXHJcbiAgICAgICAgbGVmdDogJzE4MHB4JyxcclxuICAgICAgICB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiBvcHRpb25zID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIGxuZzogdGhpcy5sYWJlbC5wb3NpdGlvblswXSxcclxuICAgICAgICAgICAgbGF0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzFdLFxyXG4gICAgICAgICAgICBhbHQ6IHRoaXMubGFiZWwucG9zaXRpb25bMl1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLm5vZGVQb2ludHNbaV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiBzaG93ID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5LqM5qyh57yW6L6R5Zue6LCDXHJcbiAgICAgICAgc2Vjb25kYXJ5RWRpdENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLm5vc2VUb1RhaWwgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gMFxyXG4gICAgICAgICAgdGhpcy5ub2RlRWRpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgcG9seWxpbmUnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICAgICAgLy8gdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICAgIC8vIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgICAgZnVuY3Rpb24gdGFiQ2xpY2soZSkge1xyXG4gICAgICAgIGlmIChlID09PSAnMicgfHwgZSA9PT0gMikgey8v54K55Ye757q/5p2h5qC35byPXHJcbiAgICAgICAgICBpZiAoMiA8IF90aGlzLm9wdGlvbnMudHlwZSAmJiBfdGhpcy5vcHRpb25zLnR5cGUgPCAxMykgey8v6LS05Zu+5Y+C5pWwXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicyhcclxuICAgICAgICAncG9seWxpbmUtb2JqZWN0LWVkaXQtdGFicycsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHRoaXMuc2RrXHJcbiAgICAgIClcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb2xvcicpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuY29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3JcclxuICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbENvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBleHRlbmRDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHRlbmRDb2xvcicpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuZXh0ZW5kQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV4dGVuZENvbG9yID0gY29sb3JcclxuICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV4dGVuZENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsTGluZUNvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQnKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsQmFja2dyb3VuZENvbG9yRW5kJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpXHJcbiAgICAgIEV2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2xhYmVsQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMuZXh0ZW5kQ29sb3IgPSBbZXh0ZW5kQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IgPSBbbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgLy8gdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIC8vIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICAvLyB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdhdHRyaWJ1dGUtc2VsZWN0LWJveCdcclxuICAgICAgICApWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgJy5hdHRyaWJ1dGUtc2VsZWN0JylcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn56m66Ze06ZW/5bqmJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfnqbrpl7Tplb/luqYnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5oqV5b2x6ZW/5bqmJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmipXlvbHplb/luqYnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5Zyw6KGo6ZW/5bqmJyxcclxuICAgICAgICAgICAgdmFsdWU6ICflnLDooajplb/luqYnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBsZXQgbmFtZURhdGFMZWdwT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5pbnB1dC1zZWxlY3QtdW5pdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKG5hbWVEYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgbmFtZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKG5hbWVEYXRhKVxyXG4gICAgICAgICAgbGV0IG5hbWVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy53b3Jkc05hbWUgPSBbbmFtZURhdGFMZWdwRWxtXVxyXG4gICAgICAgICAgbmFtZURhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLndvcmRzTmFtZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobmFtZURhdGFbaV0udmFsdWUgPT09IG5hbWVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIG5hbWVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShuYW1lRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuYW1lRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAobmFtZURhdGFbaV0udmFsdWUgPT09IG5hbWVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3Jkc05hbWUgPSBuYW1lRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDljp/lp4vplb/luqbljZXkvY1cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+exsydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfljYPnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+WNg+exsydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGxldCB1bml0RGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2lucHV0LXNlbGVjdC11bml0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmlucHV0LXNlbGVjdC11bml0JyxcclxuICAgICAgICAgIDFcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzFdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sZW5ndGhVbml0ID0gW3VuaXREYXRhTGVncEVsbV1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodW5pdERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoVW5pdCA9IHVuaXREYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOaLn+WQiOmVv+W6puWNleS9jVxyXG4gICAgICAgIC8vIGxldCBmaXRVbml0RGF0YSA9IFtcclxuICAgICAgICAvLyAgIHtcclxuICAgICAgICAvLyAgICAgbmFtZTogJ+exsycsXHJcbiAgICAgICAgLy8gICAgIHZhbHVlOiAn57GzJ1xyXG4gICAgICAgIC8vICAgfSxcclxuICAgICAgICAvLyAgIHtcclxuICAgICAgICAvLyAgICAgbmFtZTogJ+WNg+exsycsXHJcbiAgICAgICAgLy8gICAgIHZhbHVlOiAn5Y2D57GzJ1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIF1cclxuXHJcbiAgICAgICAgLy8gbGV0IGZpdFVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgLy8gICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgIC8vICAgICAnaW5wdXQtc2VsZWN0LWZpdC11bml0LWJveCdcclxuICAgICAgICAvLyAgIClbMF0sXHJcbiAgICAgICAgLy8gICAnLmlucHV0LXNlbGVjdC1maXQtdW5pdCdcclxuICAgICAgICAvLyApXHJcbiAgICAgICAgLy8gaWYgKGZpdFVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgIC8vICAgZml0VW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKGZpdFVuaXREYXRhKVxyXG4gICAgICAgIC8vICAgbGV0IGZpdFVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgLy8gICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtZml0LXVuaXQnKVswXVxyXG4gICAgICAgIC8vICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAvLyAgIHRoaXMuX2VsbXMuZml0TGVuZ3RoVW5pdCA9IFtmaXRVbml0RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgLy8gICBmaXRVbml0RGF0YUxlZ3BFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnNbJ2ZpdC1sZW5ndGgtdW5pdCddXHJcbiAgICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGZpdFVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gICAgIGlmIChmaXRVbml0RGF0YVtpXS52YWx1ZSA9PT0gZml0VW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgLy8gICAgICAgZml0VW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZpdFVuaXREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgIC8vICAgICAgIGJyZWFrXHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGZpdFVuaXREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXRVbml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vICAgICAgIGlmIChmaXRVbml0RGF0YVtpXS52YWx1ZSA9PT0gZml0VW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmZpdExlbmd0aFVuaXQgPSBmaXRVbml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgIC8vICAgICAgICAgYnJlYWtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH0pXHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBsZXQgbGluZVR5cGVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGxpbmVcIj48L2k+5a6e57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICflrp7nur8nLFxyXG4gICAgICAgICAgICBrZXk6IDAsXHJcbiAgICAgICAgICAgIGljb246ICdsaW5lJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBkYXNoLWxpbmVcIj48L2k+6Jma57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICfomZrnur8nLFxyXG4gICAgICAgICAgICBrZXk6IDEsXHJcbiAgICAgICAgICAgIGljb246ICdkYXNoLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGxpZ2h0LWxpbmVcIj48L2k+5rOb5YWJJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfms5vlhYknLFxyXG4gICAgICAgICAgICBrZXk6IDIsXHJcbiAgICAgICAgICAgIGljb246ICdsaWdodC1saW5lJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiB0YWlsLWxpbmVcIj48L2k+5bC+6L+55YWJ57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICflsL7ov7nlhYnnur8nLFxyXG4gICAgICAgICAgICBrZXk6IDMsXHJcbiAgICAgICAgICAgIGljb246ICd0YWlsLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIG11bHQtdGFpbC1saW5lXCI+PC9pPuWkmuWwvui/ueWFiee6vycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5aSa5bC+6L+55YWJ57q/JyxcclxuICAgICAgICAgICAga2V5OiA0LFxyXG4gICAgICAgICAgICBpY29uOiAnbXVsdC10YWlsLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGZsb3ctZGFzaC1saW5lMVwiPjwvaT7mtYHliqjomZrnur8xJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjomZrnur8xJyxcclxuICAgICAgICAgICAga2V5OiA1LFxyXG4gICAgICAgICAgICBpY29uOiAnZmxvdy1kYXNoLWxpbmUxJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBmbG93LWRhc2gtbGluZTJcIj48L2k+5rWB5Yqo6Jma57q/MicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo6Jma57q/MicsXHJcbiAgICAgICAgICAgIGtleTogNixcclxuICAgICAgICAgICAgaWNvbjogJ2Zsb3ctZGFzaC1saW5lMidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmUxXCI+PC9pPua1geWKqOeureWktDEnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDEnLFxyXG4gICAgICAgICAgICBrZXk6IDcsXHJcbiAgICAgICAgICAgIGljb246ICdwaWMtbGluZTEnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lMlwiPjwvaT7mtYHliqjnrq3lpLQyJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQyJyxcclxuICAgICAgICAgICAga2V5OiA4LFxyXG4gICAgICAgICAgICBpY29uOiAncGljLWxpbmUyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTNcIj48L2k+5rWB5Yqo566t5aS0MycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0MycsXHJcbiAgICAgICAgICAgIGtleTogOSxcclxuICAgICAgICAgICAgaWNvbjogJ3BpYy1saW5lMydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmU0XCI+PC9pPua1geWKqOeureWktDQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDQnLFxyXG4gICAgICAgICAgICBrZXk6IDEwLFxyXG4gICAgICAgICAgICBpY29uOiAncGljLWxpbmU0J1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTVcIj48L2k+5rWB5Yqo566t5aS0NScsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0NScsXHJcbiAgICAgICAgICAgIGtleTogMTEsXHJcbiAgICAgICAgICAgIGljb246ICdwaWMtbGluZTUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lNlwiPjwvaT7mtYHliqjnrq3lpLQ2JyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQ2JyxcclxuICAgICAgICAgICAga2V5OiAxMixcclxuICAgICAgICAgICAgaWNvbjogJ3BpYy1saW5lNidcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2lucHV0LXNlbGVjdC1saW5lLXR5cGUtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuaW5wdXQtc2VsZWN0LWxpbmUtdHlwZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2gobGluZVR5cGVEYXRhKVxyXG5cclxuICAgICAgICAgIGxldCBpQWN0aXZlRWxtMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxyXG4gICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gJ2ljb24gaWNvbi1hY3RpdmUnXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtbGluZS10eXBlJylbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3lfZGF0YWxpc3QnKVswXS5hcHBlbmRDaGlsZChpQWN0aXZlRWxtMilcclxuXHJcbiAgICAgICAgICBsZXQgbGluZVR5cGVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtbGluZS10eXBlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxpbmVUeXBlID0gW2xpbmVUeXBlRGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVUeXBlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGluZVR5cGVEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLnR5cGUpIHtcclxuICAgICAgICAgICAgICBsaW5lVHlwZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGxpbmVUeXBlRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBsaW5lVHlwZURhdGFMZWdwRWxtLnZhbHVlID0gbGluZVR5cGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHtsaW5lVHlwZURhdGFbaV0uaWNvbn1gXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGluZVR5cGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lVHlwZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAobGluZVR5cGVEYXRhW2ldLnZhbHVlID09PSBsaW5lVHlwZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlID0gbGluZVR5cGVEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHtsaW5lVHlwZURhdGFbaV0uaWNvbn1gXHJcblxyXG4gICAgICAgICAgICAgICAgLy/mjqfliLblj4LmlbDmmL7pmpBcclxuICAgICAgICAgICAgICAgIGlmICgyIDwgdGhpcy5saW5lVHlwZSAmJiB0aGlzLmxpbmVUeXBlIDwgMTMpIHsvL+i0tOWbvuWPguaVsFxyXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKDIgPCB0aGlzLmxpbmVUeXBlICYmIHRoaXMubGluZVR5cGUgPCA1KSB7Ly/lsL7ov7nlj4LmlbBcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCcpXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodEVsbSA9IGhlaWdodEJveEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICAgIGxldCBoZWlnaHRDb25maXJtRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWNvbmZpcm0nKVswXVxyXG4gICAgICAgIGhlaWdodEVsbS52YWx1ZSA9IDEwXHJcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgICBrZXk6ICcwJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIGtleTogJzEnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAga2V5OiAnMicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdoZWlnaHQtbW9kZS1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhlaWdodE1vZGVPYmplY3QpIHtcclxuICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1tb2RlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS5rZXkgPT0gdGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IGhlaWdodE1vZGVEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0ID0gaGVpZ2h0RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCA9IGhlaWdodEJveEVsbVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gPSBoZWlnaHRDb25maXJtRWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QgPSBoZWlnaHRNb2RlT2JqZWN0XHJcblxyXG4gICAgICAgICAgaGVpZ2h0Q29uZmlybUVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCA9IE51bWJlcigodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5XHJcbiAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGFibGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NwYXRpYWwtaW5mby10YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRCb2R5RWxtID0gdGFibGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sbmcgPSBbXVxyXG4gICAgICAgIHRoaXMuX2VsbXMubG5nSW5wdXQgPSBbXVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGF0ID0gW11cclxuICAgICAgICB0aGlzLl9lbG1zLmxhdElucHV0ID0gW11cclxuICAgICAgICB0aGlzLl9lbG1zLmFsdCA9IFtdXHJcbiAgICAgICAgdGhpcy5fZWxtcy5hbHRJbnB1dCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgICAgdHIuY2xhc3NOYW1lID0gJ3RyJ1xyXG4gICAgICAgICAgdHIuaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2kgKyAxfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbG5nIGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbGF0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWx0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgYFxyXG4gICAgICAgICAgbGV0IGxuZ0JveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xuZycpWzBdXHJcbiAgICAgICAgICBsZXQgbG5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsbmcuaW5uZXJIVE1MID0gKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgICAgbGV0IGxuZ0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgbG5nSW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgbG5nSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBsbmdJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBsbmdJbnB1dC5taW4gPSAtMTgwXHJcbiAgICAgICAgICBsbmdJbnB1dC5tYXggPSAxODBcclxuICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGxhdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhdCcpWzBdXHJcbiAgICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgICAgbGV0IGxhdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgbGF0SW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgbGF0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBsYXRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBsYXRJbnB1dC5taW4gPSAtOTBcclxuICAgICAgICAgIGxhdElucHV0Lm1heCA9IDkwXHJcbiAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9ICh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KVxyXG5cclxuICAgICAgICAgIGxldCBhbHRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbHQnKVswXVxyXG4gICAgICAgICAgbGV0IGFsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgYWx0LmlubmVySFRNTCA9ICh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIGxldCBhbHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGFsdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICAgIGFsdElucHV0Lm1heCA9IDk5OTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQpLnRvRml4ZWQoMilcclxuXHJcbiAgICAgICAgICBsbmdCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nSW5wdXQpXHJcbiAgICAgICAgICAgIGxuZ0lucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyA9IE51bWJlcihOdW1iZXIobG5nSW5wdXQudmFsdWUpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZy5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgZnJvbURlZ3JlZXNBcnJheVsyXV1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgbGF0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsYXRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSBOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdElucHV0KVxyXG4gICAgICAgICAgICBsYXRJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQgPSBOdW1iZXIoTnVtYmVyKGxhdElucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFt0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsIGZyb21EZWdyZWVzQXJyYXlbMl1dXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGFsdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0SW5wdXQpXHJcbiAgICAgICAgICAgIGFsdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCA9IE51bWJlcihOdW1iZXIoYWx0SW5wdXQudmFsdWUpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdC5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdC50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgZnJvbURlZ3JlZXNBcnJheVsyXV1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sbmcucHVzaChsbmcpXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhdC5wdXNoKGxhdClcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGF0SW5wdXQucHVzaChsYXRJbnB1dClcclxuICAgICAgICAgIHRoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5hbHRJbnB1dC5wdXNoKGFsdElucHV0KVxyXG4gICAgICAgICAgdEJvZHlFbG0uYXBwZW5kQ2hpbGQodHIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOW5s+a7keWkhOeQhlxyXG4gIHNtb290aEhhbmRsZShwb3NpdGlvbnMpIHtcclxuICAgIGxldCBuZXdQb3NpdGlvbnMgPSBbXVxyXG4gICAgbGV0IHRpbWUgPSBbXVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzLnB1c2goXHJcbiAgICAgICAgcG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICBwb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgIHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgKVxyXG4gICAgICB0aW1lLnB1c2goaSAvIChwb3NpdGlvbnMubGVuZ3RoIC0gMSkpXHJcbiAgICB9XHJcbiAgICBsZXQgc3BsaW5lID0gbmV3IENlc2l1bS5DYXRtdWxsUm9tU3BsaW5lKHtcclxuICAgICAgdGltZXM6IHRpbWUsXHJcbiAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICB9KVxyXG4gICAgbGV0IGxlbmd0aCA9IHBvc2l0aW9ucy5sZW5ndGggKiAyMFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNhcnRlc2lhbjMgPSBzcGxpbmUuZXZhbHVhdGUoaSAvIGxlbmd0aClcclxuICAgICAgbmV3UG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4zLCB0aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1Bvc2l0aW9uc1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMocG9zaXRpb25zQXJyYXksIGNkKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwb3NpdGlvbnNBcnJheSkpXHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KSlcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5hbHQgPSBoZWlnaHQgPyBOdW1iZXIoKHBvc2l0aW9uc1tpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0KSkudG9GaXhlZCgyKSkgOiBOdW1iZXIoKHBvc2l0aW9uc1tpXS5hbHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGxldCBuZXdQb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgIT09ICdmYWxzZSdcclxuICAgICkge1xyXG4gICAgICBuZXdQb3NpdGlvbnMgPSBbLi4ucG9zaXRpb25zLCBwb3NpdGlvbnNbMF1dXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdQb3NpdGlvbnMgPSBbLi4ucG9zaXRpb25zXVxyXG4gICAgfVxyXG4gICAgbmV3UG9zaXRpb25zID0gdGhpcy5zbW9vdGhIYW5kbGUobmV3UG9zaXRpb25zKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gICAgICAgIG5ld1Bvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgbmV3UG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICBuZXdQb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8g6K6h566X6ZW/5bqmXHJcbiAgICAvLyBsZXQgYXJyYXkgPSBbXVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAvLyAgIGFycmF5LnB1c2goe1xyXG4gICAgLy8gICAgIGxuZzogZnJvbURlZ3JlZXNBcnJheVtpXSxcclxuICAgIC8vICAgICBsYXQ6IGZyb21EZWdyZWVzQXJyYXlbaSArIDFdLFxyXG4gICAgLy8gICAgIGFsdDogZnJvbURlZ3JlZXNBcnJheVtpICsgMl1cclxuICAgIC8vICAgfSlcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMub3B0aW9ucy5maXRMZW5ndGhCeU1ldGVyID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKFxyXG4gICAgLy8gICBhcnJheSxcclxuICAgIC8vICAgMixcclxuICAgIC8vICAgZ3JvdW5kXHJcbiAgICAvLyApXHJcbiAgICAvLyB0aGlzLmZpdExlbmd0aFVuaXQgPSB0aGlzLm9wdGlvbnNbJ2ZpdC1sZW5ndGgtdW5pdCddXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMubGVuZ3RoQnlNZXRlciA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMih0aGlzLnNtb290aEhhbmRsZShwb3NpdGlvbnMpLCAyLCBncm91bmQpXHJcbiAgICAvLyB0aGlzLmxlbmd0aFVuaXQgPSB0aGlzLm9wdGlvbnNbJ2xlbmd0aC11bml0J11cclxuXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgICB0aGlzLm9wdGlvbnMubm9zZVRvVGFpbCAhPT0gJ2ZhbHNlJykgfHxcclxuICAgICAgKHRoaXMub3B0aW9ucy5zbW9vdGggJiYgdGhpcy5vcHRpb25zLnNtb290aCAhPT0gJ2ZhbHNlJylcclxuICAgICkge1xyXG4gICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICBhcnJheS5wdXNoKHtcclxuICAgICAgICAgIGxuZzogZnJvbURlZ3JlZXNBcnJheVtpXSxcclxuICAgICAgICAgIGxhdDogZnJvbURlZ3JlZXNBcnJheVtpICsgMV0sXHJcbiAgICAgICAgICBhbHQ6IGZyb21EZWdyZWVzQXJyYXlbaSArIDJdXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLm9wdGlvbnMuZml0TGVuZ3RoQnlNZXRlciA9IHRoaXMuY29tcHV0ZURpc3RhbmNlKFxyXG4gICAgICAvLyAgIGFycmF5LFxyXG4gICAgICAvLyAgIDIsXHJcbiAgICAgIC8vICAgZ3JvdW5kXHJcbiAgICAgIC8vIClcclxuICAgICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgICB0aGlzLmNvbXB1dGVEaXN0YW5jZShcclxuICAgICAgICBhcnJheSxcclxuICAgICAgICAyLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy53b3Jkc05hbWVcclxuICAgICAgKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgX3RoaXMubGVuZ3RoQnlNZXRlciA9IHJlc1xyXG4gICAgICAgIGNkICYmIGNkKClcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgICAgdGhpcy5jb21wdXRlRGlzdGFuY2UoXHJcbiAgICAgICAgX3RoaXMuc21vb3RoSGFuZGxlKHBvc2l0aW9ucyksXHJcbiAgICAgICAgMixcclxuICAgICAgICB0aGlzLm9wdGlvbnMud29yZHNOYW1lXHJcbiAgICAgICkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIF90aGlzLmxlbmd0aEJ5TWV0ZXIgPSByZXNcclxuICAgICAgICBjZCAmJiBjZCgpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZyb21EZWdyZWVzQXJyYXlcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWkmui+ueW9ou+8iOe6v+aJqeWxle+8iVxyXG4gIHJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KSB7XHJcbiAgICBsZXQgbGluZVBvc2l0aW9ucyA9IFtdXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuZCAmJiB0aGlzLm9wdGlvbnMuZXh0ZW5kICE9PSAnZmFsc2UnKSB7XHJcbiAgICAgIGxldCBvdXRlckhvbGUgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICBsaW5lUG9zaXRpb25zLnB1c2goW2Zyb21EZWdyZWVzQXJyYXlbaV0sIGZyb21EZWdyZWVzQXJyYXlbaSArIDFdXSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbGluZXN0cmluZyA9IHR1cmYubGluZVN0cmluZyhsaW5lUG9zaXRpb25zKVxyXG4gICAgICBsZXQgYnVmZmVyZWQgPSB0dXJmLmJ1ZmZlcihcclxuICAgICAgICBsaW5lc3RyaW5nLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5leHRlbmRXaWR0aCAvIDEwMDAsXHJcbiAgICAgICAgeyB1bml0czogJ2tpbG9tZXRlcnMnIH1cclxuICAgICAgKVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG91dGVySG9sZS5wdXNoKFxyXG4gICAgICAgICAgYnVmZmVyZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1baV1bMF0sXHJcbiAgICAgICAgICBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXVtpXVsxXVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBsZXQgaG9sZXMgPSBbXSAvLyDlrZRcclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgYXJyYXkucHVzaChcclxuICAgICAgICAgICAgYnVmZmVyZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1bMF0sXHJcbiAgICAgICAgICAgIGJ1ZmZlcmVkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dWzFdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhvbGVzLnB1c2goeyBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoYXJyYXkpIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbiA9IG5ldyBDZXNpdW0uUG9seWdvbkdyYXBoaWNzKHtcclxuICAgICAgICBoaWVyYXJjaHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShvdXRlckhvbGUpLFxyXG4gICAgICAgICAgaG9sZXM6IGhvbGVzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuZXh0ZW5kQ29sb3IpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLndpZHRoXHJcbiAgICB0aGlzLmxpbmVUeXBlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudHlwZVxyXG4gICAgdGhpcy5ub3NlVG9UYWlsID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubm9zZVRvVGFpbFxyXG4gICAgdGhpcy5leHRlbmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5leHRlbmRcclxuICAgIHRoaXMuZXh0ZW5kV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5leHRlbmRXaWR0aFxyXG4gICAgdGhpcy5leHRlbmRDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmV4dGVuZENvbG9yXHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMubGFiZWxDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgICB0aGlzLmxhYmVsRm9udFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgICB0aGlzLmxhYmVsU2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgICB0aGlzLmxhYmVsTmVhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLm5lYXJcclxuICAgIHRoaXMubGFiZWxGYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mYXJcclxuICAgIHRoaXMubGFiZWxMaW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgIHRoaXMubGFiZWxQaXhlbE9mZnNldCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAvLyB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAvLyB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgIC8vIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgIHRoaXMucm90YXRlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm90YXRlXHJcbiAgICB0aGlzLnNwZWVkID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3BlZWRcclxuICAgIC8vIHRoaXMuZGFzaFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5kYXNoU2l6ZVxyXG4gICAgdGhpcy5zcGFjZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNwYWNlXHJcbiAgICAvLyB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAvLyB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlXHJcblxyXG4gICAgLy8gbGV0IGhlaWdodFxyXG4gICAgLy8gaWYgKHRoaXMuZ3JvdW5kKSB7XHJcbiAgICAvLyAgIGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAvLyAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgIC8vICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgLy8gICBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgLy8gICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgLy8gICBhbHQ6IGhlaWdodFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyxcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCxcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdFxyXG4gICAgLy8gXVxyXG4gIH1cclxuXHJcbiAgX2FkZExpbmsoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF1cclxuICAgICAgICAudmFsdWVcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnbGlua19hZGQnXHJcbiAgICAgICAgKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdsaW5rX2FkZCdcclxuICAgICAgKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgICAgLy8gbGV0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgLy8gaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xyXG4gICAgICAvLyBpbnB1dC5hY2NlcHQgPSBcIi5tcDQsIC5wZGZcIlxyXG4gICAgICAvLyBpbnB1dC5jbGljaygpXHJcbiAgICAgIC8vIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChldmVudCkgPT4ge1xyXG4gICAgICAvLyAgIGlmIChpbnB1dC52YWx1ZSkge1xyXG4gICAgICAvLyAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIC8vICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAvLyAgICAgICB1cmw6IGlucHV0LnZhbHVlXHJcbiAgICAgIC8vICAgICB9KVxyXG4gICAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLy8gX2FkZFJyKCkge1xyXG4gIC8vICAgaWYgKFxyXG4gIC8vICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gIC8vICAgICAgICd2cl9hZGQnXHJcbiAgLy8gICAgIClbMF0udmFsdWVcclxuICAvLyAgICkge1xyXG4gIC8vICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgLy8gICAgICAgbmFtZTogJ+WFqOaZr+WbvicsXHJcbiAgLy8gICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gIC8vICAgICAgICAgJ3ZyX2FkZCdcclxuICAvLyAgICAgICApWzBdLnZhbHVlXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgLy8gICAgICAgJ3ZyX2FkZCdcclxuICAvLyAgICAgKVswXS52YWx1ZSA9ICcnXHJcbiAgLy8gICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRWcigpXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBhZGRBdHRyaWJ1dGVScih2cikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gIC8vICAgICBuYW1lOiAn5YWo5pmv5Zu+JyxcclxuICAvLyAgICAgdXJsOiB2clxyXG4gIC8vICAgfSlcclxuICAvLyAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmjnuWIsFxyXG4gICAqL1xyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbVZpZXcpIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGhlaWdodFxyXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2goYS54LCBhLnksIGEueilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0pXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgICAgICBoZWlnaHQgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSlcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9uQXJyYXkpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgLy8gdmFyIHVlID0gVUUuZ2V0RWRpdG9yKCdhcHAnKTtcclxuICAgIHJpY2hUZXh0Lm9wZW4oXHJcbiAgICAgIHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnRcclxuICAgIClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IGNvbnRlbnQgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc3RhdGljIG5vZGVFZGl0Mih0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gIC8vICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gIC8vICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgLy8gICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgLy8gICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAvLyAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gIC8vICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gIC8vICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAvLyAgICAgbGV0IG9yaWdpbmFsUG9zaXRpb25cclxuICAvLyAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgLy8gICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgLy8gICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgLy8gICAgICAgKVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIG5ld3Bvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gIC8vICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAvLyAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAvLyAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gIC8vICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gIC8vICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gIC8vICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgLy8gICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAvLyAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sbmcsXHJcbiAgLy8gICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LFxyXG4gIC8vICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdFxyXG4gIC8vICAgICAgICAgICApLFxyXG4gIC8vICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAvLyAgICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAvLyAgICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgLy8gICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAvLyAgICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2UoXHJcbiAgLy8gICAgICAgICAgIHNlbGVjdFBvaW50LmluZGV4LFxyXG4gIC8vICAgICAgICAgICAwLFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LnJlbmV3UG9zaXRpb25zKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgLy8gICAgICAgICB0aGF0LnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLmxlbmd0aEJ5TWV0ZXIgPSB0aGF0LmNvbXB1dGVEaXN0YW5jZTIoXHJcbiAgLy8gICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMsXHJcbiAgLy8gICAgICAgICAgIDIsXHJcbiAgLy8gICAgICAgICAgIHRoYXQuZ3JvdW5kXHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgICB0aGF0Lmxlbmd0aFVuaXQgPSB0aGF0Lm9wdGlvbnNbJ2xlbmd0aC11bml0J11cclxuICAvLyAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgdmFyIHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAvLyAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgcGljayAmJlxyXG4gIC8vICAgICAgICAgICBwaWNrLmlkICYmXHJcbiAgLy8gICAgICAgICAgIHBpY2suaWQubmFtZSAmJlxyXG4gIC8vICAgICAgICAgICBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50J1xyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMuc3BsaWNlKHBpY2suaWQuaW5kZXgsIDEpXHJcbiAgLy8gICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUocGljay5pZClcclxuICAvLyAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+W3pumUruW8gOWni++8jOWPs+mUrue7k+adn++8jENUUkwr5Y+z6ZSu5pKk6ZSAJylcclxuICAvLyAgICAgICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoXHJcbiAgLy8gICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gIC8vICAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlclxyXG4gIC8vICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KVxyXG5cclxuICAvLyAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gIC8vICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICBjYihudWxsLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gIC8vICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gIC8vICAgICAgICAgICBwb3NpdGlvbnNbaV0ubG5nLFxyXG4gIC8vICAgICAgICAgICBwb3NpdGlvbnNbaV0ubGF0LFxyXG4gIC8vICAgICAgICAgICBwb3NpdGlvbnNbaV0uYWx0XHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIG5ld3Bvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gIC8vICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgLy8gICAgICAgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAvLyAgICAgICB0aGF0LnRpcC5kZXN0cm95KClcclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gIC8vICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gIC8vICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgLy8gICAgICAgICAgIHRoYXQuc2RrLnZpZXdlclxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAvLyAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAvLyAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChcclxuICAvLyAgICAgICAgICAgICBwb3NpdGlvbnNbaV0ubG5nLFxyXG4gIC8vICAgICAgICAgICAgIHBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgLy8gICAgICAgICAgICAgcG9zaXRpb25zW2ldLmFsdFxyXG4gIC8vICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBuZXdwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAvLyAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgLy8gICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgLy8gICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgLy8gICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgLy8gICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHRcclxuICAvLyAgICAgICAgICAgXVxyXG4gIC8vICAgICAgICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgLy8gICAgICAgICAgICAgbG5nOiB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAvLyAgICAgICAgICAgICBsYXQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gIC8vICAgICAgICAgICAgIGFsdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHRcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB0aGF0LnRpcC5zZXRQb3NpdGlvbihcclxuICAvLyAgICAgICAgIGNhcnRlc2lhbixcclxuICAvLyAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgLy8gICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgLy8gICAgICAgKVxyXG4gIC8vICAgICB9KVxyXG5cclxuICAvLyAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodF9rZXlib2FyZF9jdHJsKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgLy8gICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLnBvcCgpXHJcbiAgLy8gICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHNbdGhhdC5ub2RlUG9pbnRzLmxlbmd0aCAtIDFdXHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgICB0aGF0Lm5vZGVQb2ludHMucG9wKClcclxuICAvLyAgICAgICAgIGlmIChzZWxlY3RQb2ludC5pbmRleCA9PT0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAvLyAgICAgICAgICAgaWYgKHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdKSB7XHJcbiAgLy8gICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSB0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXVxyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHNlbGVjdFBvaW50LmluZGV4ID0gMFxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KVxyXG5cclxuICAvLyAgICAgdGhhdC5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAvLyAgICAgICByZXR1cm4gbmV3cG9zaXRpb25zXHJcbiAgLy8gICAgIH0sIGZhbHNlKVxyXG5cclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gIC8vICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gIC8vICAgICAgICAgaW5kZXg6IGksXHJcbiAgLy8gICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgLy8gICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAvLyAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAvLyAgICAgICAgICksXHJcbiAgLy8gICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAvLyAgICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgLy8gICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAvLyAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAvLyAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KVxyXG4gIC8vICAgICAgIHRoYXQubm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgbm9kZUVkaXQoKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgPSBuZXcgQ29udHJvbGxlcih0aGlzLnNkaylcclxuXHJcbiAgICAgIGxldCBzZWxlY3RQb2ludFxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB2YXIgcGljayA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHBpY2sgJiZcclxuICAgICAgICAgIHBpY2suaWQgJiZcclxuICAgICAgICAgIHBpY2suaWQubmFtZSAmJlxyXG4gICAgICAgICAgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID1cclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5jb250cm9sbGVyQ2FsbEJhY2sgPSBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIGxuZzogcGFyYW1zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgIGxhdDogcGFyYW1zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgICAgICAgIGFsdDogcGFyYW1zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHBhcmFtcy5wb3NpdGlvblxyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxuZyAmJiAodGhpcy5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHBhcmFtcy5wb3NpdGlvbi5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5sbmdJbnB1dCAmJiAodGhpcy5fZWxtcy5sbmdJbnB1dFtzZWxlY3RQb2ludC5pbmRleF0udmFsdWUgPSBwYXJhbXMucG9zaXRpb24ubG5nLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMubGF0ICYmICh0aGlzLl9lbG1zLmxhdFtzZWxlY3RQb2ludC5pbmRleF0uaW5uZXJIVE1MID0gcGFyYW1zLnBvc2l0aW9uLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxhdElucHV0ICYmICh0aGlzLl9lbG1zLmxhdElucHV0W3NlbGVjdFBvaW50LmluZGV4XS52YWx1ZSA9IHBhcmFtcy5wb3NpdGlvbi5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgKHRoaXMuX2VsbXMuYWx0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSBwYXJhbXMucG9zaXRpb24uYWx0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMuYWx0SW5wdXQgJiYgKHRoaXMuX2VsbXMuYWx0SW5wdXRbc2VsZWN0UG9pbnQuaW5kZXhdLnZhbHVlID0gcGFyYW1zLnBvc2l0aW9uLmFsdC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBzZWxlY3RQb2ludC5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHBhcmFtcy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICAgICAgcGFyYW1zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgICAgICBwYXJhbXMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG5cclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlTm9kZUVkaXQoKSB7XHJcbiAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgJiYgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCA9IG51bGxcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliKDpmaRcclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+WKn+iDvVxyXG4gICAqXHJcbiAgICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICAqIEBwYXJhbSBzdGF0dXMge2Jvb2xlYW59XHJcbiAgICpcclxuICAgKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkgfHwgIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfngrnlh7vpvKDmoIflt6bplK7noa7orqTvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5sYWJlbCAmJlxyXG4gICAgICAgICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKFxyXG4gICAgICAgICAgYHJnYmEoMjU1LDI1NSwyNTUsMC45KWBcclxuICAgICAgICApKVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSlcclxuICAgICAgbGV0IHBvc2l0aW9uczIgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgIC8vIGxldCBwb3NpdGlvbnMyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwb3NpdGlvbnMpKVxyXG4gICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uczIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBsZXQgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvc2l0aW9uczJbaV0ubG5nLCBwb3NpdGlvbnMyW2ldLmxhdCkpXHJcbiAgICAgIC8vICAgcG9zaXRpb25zMltpXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAvLyAgICAgcG9zaXRpb25zMltpXS5sbmcsXHJcbiAgICAgIC8vICAgICBwb3NpdGlvbnMyW2ldLmxhdCxcclxuICAgICAgLy8gICAgIE51bWJlcigocG9zaXRpb25zMltpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0KSkudG9GaXhlZCgyKSlcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW2ldID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICBwb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgcG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGNlbnRlciA9IHBvc2l0aW9uc1tNYXRoLmZsb29yKHBvc2l0aW9ucy5sZW5ndGggLyAyKV1cclxuICAgICAgbGV0IGRpc3Bhcml0eSA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgICAgeDogY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueCxcclxuICAgICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgbGV0IG5ld3Bvc2l0aW9uczg0ID0gW11cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICBuZXdwb3NpdGlvbnM4NCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBuZXdQID0ge1xyXG4gICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgICAgICBuZXdQLFxyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvczg0LmFsdCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICAvLyBsZXQgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0KSlcclxuICAgICAgICAgIC8vIHBvczg0LmFsdCA9IE51bWJlcigocG9zODQuYWx0ICsgTnVtYmVyKGhlaWdodCkpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAvLyBuZXdQID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAvLyAgIHBvczg0LmxuZyxcclxuICAgICAgICAgIC8vICAgcG9zODQubGF0LFxyXG4gICAgICAgICAgLy8gICBwb3M4NC5hbHRcclxuICAgICAgICAgIC8vIClcclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKG5ld1ApXHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnM4NC5wdXNoKHBvczg0KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcG9zaXRpb244NCA9IG5ld3Bvc2l0aW9uczg0WzBdXHJcbiAgICAgICAgcG9zaXRpb25zMiA9IHRoaXMucmVuZXdQb3NpdGlvbnMobmV3cG9zaXRpb25zODQpXHJcbiAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtwb3NpdGlvbjg0LmxuZywgcG9zaXRpb244NC5sYXQsIHBvc2l0aW9uODQuYWx0XVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgIGxuZzogcG9zaXRpb244NC5sbmcsXHJcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uODQubGF0LFxyXG4gICAgICAgICAgYWx0OiBwb3NpdGlvbjg0LmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICBuZXdwb3NpdGlvbnM4NCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBuZXdQID0ge1xyXG4gICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgICAgICBuZXdQLFxyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvczg0LmFsdCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaChuZXdQKVxyXG4gICAgICAgICAgbmV3cG9zaXRpb25zODQucHVzaChwb3M4NClcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uc0xuZ0xhdCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdwb3NpdGlvbnM4NC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uID0gbmV3cG9zaXRpb25zODRbaV1cclxuICAgICAgICAgIHBvc2l0aW9uc0xuZ0xhdC5wdXNoKHBvc2l0aW9uKVxyXG5cclxuICAgICAgICAgIHRoaXMuX2VsbXMubG5nICYmICh0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSBwb3NpdGlvbi5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubG5nSW5wdXQgJiYgKHRoaXMuX2VsbXMubG5nSW5wdXRbaV0udmFsdWUgPSBwb3NpdGlvbi5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGF0ICYmICh0aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSBwb3NpdGlvbi5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGF0SW5wdXQgJiYgKHRoaXMuX2VsbXMubGF0SW5wdXRbaV0udmFsdWUgPSBwb3NpdGlvbi5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMuYWx0ICYmICh0aGlzLl9lbG1zLmFsdFtpXS5pbm5lckhUTUwgPSBwb3NpdGlvbi5hbHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMuYWx0SW5wdXQgJiYgKHRoaXMuX2VsbXMuYWx0SW5wdXRbaV0udmFsdWUgPSBwb3NpdGlvbi5hbHQudG9GaXhlZCgyKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMgPSBwb3NpdGlvbnNMbmdMYXRcclxuICAgICAgICB0aGlzLnByZXZpb3VzLnBvc2l0aW9ucyA9IHBvc2l0aW9uc0xuZ0xhdFxyXG5cclxuICAgICAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnNMbmdMYXQgPSBwb3NpdGlvbnNMbmdMYXRcclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucywgKCk9PntcclxuICAgICAgICAgIGlmKHRoaXMuX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrKClcclxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2sgPSBudWxsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy5yZW5ld1BvbHlnb24oZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICAgIHBvc2l0aW9uczJcclxuICAgICAgICApXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmxhYmVsIHx8ICF0aGlzLmxhYmVsLmVudGl0eSkge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoXHJcbiAgICAgICAgICBgcmdiYSgyNTUsMjU1LDI1NSwxKWBcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG4gICAgICBpZiAodGhpcy5ldmVudCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXlbMl1cclxuICAgICAgICAgIF1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgICAgbGF0OiB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICAgICAgYWx0OiBmcm9tRGVncmVlc0FycmF5WzJdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIGxuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICAgIGFsdDogZnJvbURlZ3JlZXNBcnJheVsyXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZ1xyXG4gIH1cclxuICBvcGVuUG9zaXRpb25FZGl0aW5nKGNkKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IHRydWVcclxuICAgIHRoaXMuX3Bvc2l0aW9uRWRpdGluZ0NhbGxiYWNrID0gY2RcclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogJycsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSBvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwID8gb3B0aW9ucy54IDogMTBcclxuICAgIG9wdGlvbnMueSA9IG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDAgPyBvcHRpb25zLnkgOiAxMFxyXG5cclxuICAgIGxldCBwb2ludHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvaW50cy5wdXNoKFtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdFxyXG4gICAgICBdKVxyXG4gICAgfVxyXG4gICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcocG9pbnRzKVxyXG4gICAgbGV0IGxlbmd0aCA9IHR1cmYubGVuZ3RoKGxpbmUsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KVxyXG4gICAgbGV0IHNsaWNlZCA9IHR1cmYubGluZVNsaWNlQWxvbmcobGluZSwgMCwgbGVuZ3RoIC8gMiwge1xyXG4gICAgICB1bml0czogJ2tpbG9tZXRlcnMnXHJcbiAgICB9KVxyXG5cclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAuLi5zbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aCAtIDFdXHJcbiAgICApXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKHBlcmNlbnRhZ2UgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fFxyXG4gICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhcclxuICAgICAgICAgIHNpdGVJbmZvUG9zaXRpb25cclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEN1cnZlbGluZU9iamVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFwQkE7QUFBQTtBQWtCQTtBQUdBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtEQTtBQXpEQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBb0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBNkRBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQXZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckRBO0FBc0RBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0SEE7QUFBQTtBQUFBO0FBd0hBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdnRCQTtBQUFBO0FBQUE7QUFBQTtBQXl0QkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF6REE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0REE7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUF5QkE7QUFBQTtBQXRCQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBMUdBO0FBQUE7QUFBQTtBQUFBO0FBNEdBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQW9PQTtBQUNBO0FBQUE7QUEvTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE5OERBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBZUE7QUFBQTtBQVpBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXZEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWcxREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/CurvelineObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/EllipseObject/_element.js": /*!************************************************!*\ !*** ./src/Obj/Base/EllipseObject/_element.js ***! \************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRWxsaXBzZU9iamVjdC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9FbGxpcHNlT2JqZWN0L19lbGVtZW50LmpzP2MyYzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwJTtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIj7mipXlvbHpnaLnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGlucHV0LXRleHRcIiByZWFkb25seT1cInJlYWRvbmx5XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJhcmVhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlbGVjdC11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJjaXJjbGUtb2JqZWN0LWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLnqbrpl7Tkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaGVpZ2h0LW1vZGUtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDtcIj7pq5jluqbmqKHlvI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVpZ2h0LW1vZGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5a5YC857uf5LiA5aKe5YqgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBoZWlnaHRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZpcm0gaGVpZ2h0LWNvbmZpcm1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlIHNwYXRpYWwtaW5mby10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue7j+W6pu+8iFjvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57qs5bqm77yIWe+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7pq5jluqbvvIha77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi6Z2i6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6Z2i6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovrnnur/popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovrnnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OVwiIEBtb2RlbD1cImxpbmVXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+azqOmjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+etvumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBaUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/EllipseObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/EllipseObject/index.js": /*!*********************************************!*\ !*** ./src/Obj/Base/EllipseObject/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/EllipseObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 椭圆\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EllipseObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 创建椭圆\r\n * @param options {object} 圆属性\r\n * @param options.id {string} 标注id\r\n * @param options.name {string} 名称\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.center {object} 中心位置\r\n * @param options.color=\"rgba(255, 0, 0, 0.5)\" {string} 颜色\r\n * @param options.center.lng {object} 经度\r\n * @param options.center.lat {object} 维度\r\n * @param options.semiMinorAxis=10 {number} 短半轴长度\r\n * @param options.semiMajorAxis=20 {number} 长半轴长度\r\n * @param options.bearing=0 {number} 旋转角度\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(255, 0, 0, 1)\" {string} 边框颜色\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function EllipseObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, EllipseObject);\n _this2 = _callSuper(this, EllipseObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"rgba(255, 0, 0, 0.5)\";\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.semiMinorAxis = options.semiMinorAxis || options.semiMinorAxis === 0 ? options.semiMinorAxis : 10;\n _this2.options.semiMajorAxis = options.semiMajorAxis || options.semiMajorAxis === 0 ? options.semiMajorAxis : 20;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.center = options.center || {};\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n options.label = options.label || {};\n _this2._elms = {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.nodePoints = [];\n _this2.operate = {};\n _this2.Dialog = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n EllipseObject.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(EllipseObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(EllipseObject, [{\n key: \"type\",\n get: function get() {\n return 'EllipseObject';\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this3 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this3.options.heightMode = v || v == 0 ? v : 2;\n _this3.positionEditing = false;\n if (!_this3.entity) {\n return;\n }\n var heightModeName = '';\n EllipseObject.closeNodeEdit(_this3);\n var ground = false;\n var disabled = false;\n _this3.renewPositions();\n _this3.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this3.positions), [_this3.positions[0], _this3.positions[1]]);\n _this3.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this3.positions);\n switch (_this3.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this3.label.ground = ground;\n _this3.entity.polyline.clampToGround = ground;\n _this3.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this3.entity.polygon.perPositionHeight = !ground ? true : false;\n _this3._elms.heightMode && (_this3._elms.heightMode.value = heightModeName);\n _this3._elms.heightModeObject && _this3._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.center.alt;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n if (!v || isNaN(Number(v))) {\n this.options.center.alt = 0;\n } else {\n this.options.center.alt = Number(Number(v).toFixed(2));\n }\n this.previous = null;\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positions);\n _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positions), [_this4.positions[0], _this4.positions[1]]);\n _this4.entity.polyline.clampToGround = !ground ? false : true;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this4.options.center.alt;\n });\n }\n }, {\n key: \"semiMinorAxis\",\n get: function get() {\n return this.options.semiMinorAxis;\n },\n set: function set(v) {\n this.options.semiMinorAxis = v;\n this.height = this.height;\n }\n }, {\n key: \"semiMajorAxis\",\n get: function get() {\n return this.options.semiMajorAxis;\n },\n set: function set(v) {\n this.options.semiMajorAxis = v;\n this.height = this.height;\n }\n }, {\n key: \"center\",\n get: function get() {\n return this.options.center;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.center = v;\n this.height = this.height;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this5.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this5.options.center.lat;\n });\n }\n }, {\n key: \"bearing\",\n get: function get() {\n return this.options.bearing;\n },\n set: function set(v) {\n this.options.bearing = v;\n this.height = this.height;\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n this.entity.polyline.width = this.lineWidth;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this7.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this7._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = _this8.options.line.width;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this12 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this12.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this12._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this13.options.attribute.link.content;\n case 2:\n _this13.attributeLink = _context3.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this13.options.attribute.link.content.splice(i, 1);\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this13.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this14 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this14.options.attribute.vr.content;\n case 2:\n _this14.attributeVr = _context6.sent;\n table = _this14._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this14.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this14.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this14.options.attribute.vr.content.splice(i, 1);\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this14.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this15 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 32;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\\u5706\\u5FC3\\u5750\\u6807
\\n
\\n
\\n
\\n \";\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.center.lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.center.lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n EllipseObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.center.lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n EllipseObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.center.lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n EllipseObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n _context7.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '椭圆属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this15.name = _this15.name.trim();\n if (!_this15.name) {\n _this15.name = '未命名对象';\n }\n _this15.options.label.position = {\n lng: _this15.label.position[0],\n lat: _this15.label.position[1],\n alt: _this15.label.position[2]\n };\n _this15.originalOptions = _this15.deepCopyObj(_this15.options);\n _this15._DialogObject.close();\n _this15.Dialog.confirmCallBack && _this15.Dialog.confirmCallBack(_this15.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this15.sdk, _this15.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this15.sdk, _this15.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this15.reset();\n _this15.Dialog.resetCallBack && _this15.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this15.Dialog.removeCallBack && _this15.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this15.reset();\n _this15.previous = null;\n _this15.positionEditing = false;\n _this15.Dialog.closeCallBack && _this15.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this15.options.show = show;\n _this15.originalOptions.show = show;\n _this15.show = show;\n _this15.Dialog.showCallBack && _this15.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this15.positionEditing = !_this15.positionEditing;\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n EllipseObject.nodeEdit(_this15, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 7:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' circle';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('circle-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this15.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this15.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this15.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this15.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n EllipseObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this15.attributeLink = _this15.options.attribute.link.content;\n _this15.attributeVr = _this15.options.attribute.vr.content;\n _this15.cameraSelect && _this15.cameraSelect();\n _this15.goodsSelect && _this15.goodsSelect();\n var tagData = _this15.attributeSelect;\n var attributeElm = _this15._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this15._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this15.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this15.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this15._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this15._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this15.options['area-unit'];\n for (var _i6 = 0; _i6 < unitData.length; _i6++) {\n if (unitData[_i6].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i6].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < unitData.length; _i7++) {\n if (unitData[_i7].value === unitDataLegpElm.value) {\n _this15.areaUnit = unitData[_i7].value;\n break;\n }\n }\n });\n }\n var heightBoxElm = _this15._DialogObject._element.content.getElementsByClassName('height-box')[0];\n var heightElm = heightBoxElm.getElementsByClassName('height')[0];\n var heightConfirmElm = _this15._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (_this15.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n var heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n var heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this15._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (heightModeObject) {\n heightModeObject.legp_search(heightModeData);\n var heightModeDataLegpElm = _this15._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n for (var _i8 = 0; _i8 < heightModeData.length; _i8++) {\n if (heightModeData[_i8].key == _this15.heightMode) {\n heightModeDataLegpElm.value = heightModeData[_i8].value;\n heightModeObject.legp_searchActive(heightModeData[_i8].value);\n break;\n }\n }\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < heightModeData.length; _i9++) {\n if (heightModeData[_i9].value === heightModeDataLegpElm.value) {\n _this15.heightMode = heightModeData[_i9].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this15.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n _this15._elms.height = heightElm;\n _this15._elms.heightBox = heightBoxElm;\n _this15._elms.heightMode = heightModeDataLegpElm;\n _this15._elms.heightConfirm = heightConfirmElm;\n _this15._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this15.operate.positionEditing) {\n _this15.positionEditing = false;\n _this15.height = _this15.height + Number(heightElm.value);\n } else {\n EllipseObject.closeNodeEdit(_this15);\n setTimeout(function () {\n _this15.height = _this15.height + Number(heightElm.value);\n }, 100);\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this15._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this15._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this15.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this15.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this15._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this16 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.radius = this.originalOptions.radius;\n this.semiMinorAxis = this.originalOptions.semiMinorAxis;\n this.semiMajorAxis = this.originalOptions.semiMajorAxis;\n this.bearing = this.originalOptions.bearing;\n this.color = this.originalOptions.color;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelColor = this.originalOptions.label.color;\n this.lineWidth = this.originalOptions.line.width;\n this.lineLength = this.originalOptions.line.length;\n this.lineColor = this.originalOptions.line.color;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n this.heightMode = this.originalOptions.heightMode;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this16.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this16.options.center.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this16.options.center.alt;\n });\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positions,\n positionArray,\n height,\n pos84,\n point1,\n point2,\n direction,\n c,\n ray,\n r,\n pickedObjects,\n i,\n promise,\n a,\n _i12,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!this.options.customView) {\n _context9.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 16;\n break;\n }\n _context9.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context9.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 60;\n break;\n case 23:\n positions = this.entity.polyline.positions.getValue();\n positionArray = [];\n height = 0;\n pos84 = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n point1 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 0);\n point2 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 10000000);\n direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, direction);\n ray = new Cesium.Ray(point1, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = 0;\n case 35:\n if (!(i < pickedObjects.length)) {\n _context9.next = 42;\n break;\n }\n if (!pickedObjects[i].position) {\n _context9.next = 39;\n break;\n }\n r = pickedObjects[i];\n return _context9.abrupt(\"break\", 42);\n case 39:\n i++;\n _context9.next = 35;\n break;\n case 42:\n if (!(r && r.position)) {\n _context9.next = 46;\n break;\n }\n height = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n _context9.next = 55;\n break;\n case 46:\n _context9.prev = 46;\n _context9.next = 49;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat)]);\n case 49:\n promise = _context9.sent;\n height = promise[0].height;\n _context9.next = 55;\n break;\n case 53:\n _context9.prev = 53;\n _context9.t0 = _context9[\"catch\"](46);\n case 55:\n a = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, height);\n positionArray.push(a.x, a.y, a.z);\n for (_i12 = 1; _i12 < positions.length; _i12++) {\n positionArray.push(positions[_i12].x, positions[_i12].y, positions[_i12].z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 60:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this, [[46, 53]]);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this17 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this17.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this18 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n var _this = this;\n this.operate.positionEditing = status;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n if (status === true) {\n this.previous = {\n center: this.deepCopyObj(this.options.center)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n this.renewPositions();\n var fromDegreesArray = [];\n fromDegreesArray = this.createEllipse(this.options.center, {\n bearing: this.options.bearing,\n semiMinorAxis: this.options.semiMinorAxis,\n semiMajorAxis: this.options.semiMajorAxis\n });\n this.event.mouse_move(function (movement, cartesian) {\n fromDegreesArray = [];\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n positions.alt = _this18.options.center.alt;\n _this18.renewPositions(positions);\n _this18.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n fromDegreesArray = [];\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n _this18.options.center.lng = Number(positions.lng.toFixed(8));\n _this18.options.center.lat = Number(positions.lat.toFixed(8));\n _this18.center = _this18.options.center;\n _this18.event.mouse_move(function () {});\n _this18.event.mouse_left(function () {});\n _this18.event.mouse_right(function () {});\n _this18.event.gesture_pinck_start(function () {});\n _this18.previous = {\n center: _this18.deepCopyObj(_this18.options.center)\n };\n _this18.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this18.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this18.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this18.positionEditing = false;\n } else {\n fromDegreesArray = [];\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n _this18.options.center.lng = positions.lng;\n _this18.options.center.lat = positions.lat;\n _this18.center = _this18.options.center;\n fromDegreesArray = _this18.createEllipse(_this18.options.center, {\n bearing: _this18.options.bearing,\n semiMinorAxis: _this18.options.semiMinorAxis,\n semiMajorAxis: _this18.options.semiMajorAxis\n });\n _this18.label.position = [positions.lng, positions.lat];\n _this18.event.mouse_move(function () {});\n _this18.event.mouse_left(function () {});\n _this18.event.mouse_right(function () {});\n _this18.event.gesture_pinck_start(function () {});\n _this18.previous = {\n center: _this18.deepCopyObj(_this18.options.center)\n };\n _this18.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, false);\n } else {\n if (!this.previous) {\n this.previous = {\n center: this.deepCopyObj(this.options.center)\n };\n }\n this.options.center = this.deepCopyObj(this.previous.center);\n this.tip && this.tip.destroy();\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, true);\n }\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this19 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.center.lng, this.options.center.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this19.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(center) {\n var _this20 = this;\n if (this._error) {\n return;\n }\n var ground = false;\n if (!center) {\n center = this.options.center;\n }\n var height = 0;\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(center.lng, center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n this.positions = this.createEllipse(center, {\n bearing: this.options.bearing,\n semiMinorAxis: this.options.semiMinorAxis,\n semiMajorAxis: this.options.semiMajorAxis,\n height: center.alt + height\n });\n if (!ground) {\n this.label && (this.label.position = [center.lng, center.lat, center.alt + height]);\n } else {\n setTimeout(function () {\n _this20.getClampToHeight({\n lng: center.lng,\n lat: center.lat\n }).then(function (height) {\n _this20.label && (_this20.label.position = [center.lng, center.lat, height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n this.options.areaByMeter = Number((Cesium.Math.PI * this.options.semiMinorAxis * this.options.semiMajorAxis).toFixed(2));\n this.areaUnit = this.areaUnit;\n return this.positions;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(that.options.center.lng, that.options.center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.center.lng,\n lat: that.options.center.lat,\n alt: that.options.center.alt + height\n };\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.options.label.ground = ground;\n var positions = that.createEllipse(that.options.center, {\n bearing: that.options.bearing,\n semiMinorAxis: that.options.semiMinorAxis,\n semiMajorAxis: that.options.semiMajorAxis,\n height: that.options.center.alt + height\n });\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(positions),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(positions), [positions[0], positions[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n EllipseObject.createLabel(that);\n that.options.areaByMeter = Number((Cesium.Math.PI * that.options.semiMinorAxis * that.options.semiMajorAxis).toFixed(2));\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {} else {\n // let originalPosition\n // let newpositions = []\n // let fromDegreesArray = []\n // let endpoint = {...that.options.center}\n // let moveRadius = null\n // let entity\n // fromDegreesArray = that.createEllipse(that.options.center, {bearing: that.options.bearing, semiMinorAxis: that.options.semiMinorAxis, semiMajorAxis: that.options.semiMajorAxis})\n var getBearing = function getBearing(start, end) {\n var rad = Math.PI / 180,\n lat1 = start.y * rad,\n lat2 = end.y * rad,\n lon1 = start.x * rad,\n lon2 = end.x * rad;\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n var radians = Math.atan2(a, b);\n var degrees = radians % (2 * Math.PI);\n var bearing = 450 - (degrees * 180 / Math.PI < 0 ? 360 + degrees * 180 / Math.PI : degrees * 180 / Math.PI);\n return bearing;\n };\n var createNodePoints = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(pos, type) {\n var pos84, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n pos84 = that.cartesian3Towgs84(pos, that.sdk.viewer);\n _context11.next = 3;\n return that.getClampToHeight(pos84, objectsToExclude);\n case 3:\n height = _context11.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n type: type,\n position: Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 6:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return function createNodePoints(_x5, _x6) {\n return _ref.apply(this, arguments);\n };\n }();\n that.event && that.event.destroy();\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个编辑点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var pointCenter = Cesium.Cartesian3.fromDegrees(that.center.lng, that.center.lat);\n var semiMinorAxis = that.options.semiMinorAxis;\n var semiMajorAxis = that.options.semiMajorAxis;\n var bearing = that.options.bearing;\n var fromDegreesArray = that.createEllipse(that.options.center, {\n bearing: that.options.bearing,\n semiMinorAxis: that.options.semiMinorAxis,\n semiMajorAxis: that.options.semiMajorAxis\n });\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(fromDegreesArray);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(fromDegreesArray), [fromDegreesArray[0], fromDegreesArray[1]]);\n }, false);\n var positions = that.entity.polyline.positions.getValue();\n var length = positions.length;\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n setTimeout(function () {\n that.event.mouse_left(function (movement, cartesian) {\n if (selectPoint) {\n that.options.semiMinorAxis = semiMinorAxis;\n that.options.semiMajorAxis = semiMajorAxis;\n that.options.bearing = bearing;\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n selectPoint = null;\n YJ.Measure.SetMeasureStatus(false);\n that.heightMode = that.heightMode;\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point' && (pick.id._type === 'semiMinorAxis' || pick.id._type === 'semiMajorAxis')) {\n that.tip.set_text('左键确认,右键取消');\n selectPoint = pick.id;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n var endPoint = cartesian;\n var endPoint84 = that.cartesian3Towgs84(endPoint, that.sdk.viewer);\n pointCenter = Cesium.Cartesian3.fromDegrees(that.center.lng, that.center.lat, endPoint84.alt);\n var distance = Cesium.Cartesian3.distance(pointCenter, endPoint);\n var start = {\n x: that.center.lng,\n y: that.center.lat\n };\n var end = {\n x: endPoint84.lng,\n y: endPoint84.lat\n };\n bearing = getBearing(start, end);\n if (selectPoint._type === 'semiMinorAxis') {\n semiMinorAxis = distance;\n bearing = bearing + 90;\n }\n if (selectPoint._type === 'semiMajorAxis') {\n semiMajorAxis = distance;\n }\n fromDegreesArray = that.createEllipse(that.center, {\n bearing: bearing,\n semiMinorAxis: semiMinorAxis,\n semiMajorAxis: semiMajorAxis\n });\n }\n }\n });\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n var endPoint = cartesian;\n var endPoint84 = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n pointCenter = Cesium.Cartesian3.fromDegrees(that.center.lng, that.center.lat, endPoint84.alt);\n var distance = Cesium.Cartesian3.distance(pointCenter, endPoint);\n var start = {\n x: that.center.lng,\n y: that.center.lat\n };\n var end = {\n x: endPoint84.lng,\n y: endPoint84.lat\n };\n bearing = getBearing(start, end);\n if (selectPoint._type === 'semiMinorAxis') {\n semiMinorAxis = distance;\n bearing = bearing + 90;\n }\n if (selectPoint._type === 'semiMajorAxis') {\n semiMajorAxis = distance;\n }\n fromDegreesArray = that.createEllipse(that.center, {\n bearing: bearing,\n semiMinorAxis: semiMinorAxis,\n semiMajorAxis: semiMajorAxis\n });\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right(function (movement, cartesian) {\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n that.heightMode = that.heightMode;\n });\n that.getClampToHeight({\n lng: that.center.lng,\n lat: that.center.lat\n }, objectsToExclude).then(function (height) {\n that.label && (that.label.position = [that.center.lng, that.center.lat, height]);\n });\n createNodePoints(positions[0], 'semiMajorAxis');\n createNodePoints(positions[(length - 2) / 4], 'semiMinorAxis');\n createNodePoints(positions[(length - 2) / 2], 'semiMajorAxis');\n createNodePoints(positions[length - 2 - (length - 2) / 4], 'semiMinorAxis');\n }, 200);\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop9 = function _loop9() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop10 = function _loop10() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop10();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop9()) continue;\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (EllipseObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRWxsaXBzZU9iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9FbGxpcHNlT2JqZWN0L2luZGV4LmpzP2JkOGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOakreWchlxyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSBcIi4uLy4uL0VsZW1lbnQvcmljaFRleHRcIjtcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgTGFiZWxPYmplY3QgZnJvbSAnLi4vTGFiZWxPYmplY3QnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgRWxsaXBzZU9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAZGVzY3JpcHRpb24g5Yib5bu65qSt5ZyGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5ZyG5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5qCH5rOoaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNlbnRlciB7b2JqZWN0fSDkuK3lv4PkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb2xvcj1cInJnYmEoMjU1LCAwLCAwLCAwLjUpXCIge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY2VudGVyLmxuZyB7b2JqZWN0fSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jZW50ZXIubGF0IHtvYmplY3R9IOe7tOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNlbWlNaW5vckF4aXM9MTAge251bWJlcn0g55+t5Y2K6L206ZW/5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2VtaU1ham9yQXhpcz0yMCB7bnVtYmVyfSDplb/ljYrovbTplb/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5iZWFyaW5nPTAge251bWJlcn0g5peL6L2s6KeS5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZSB7b2JqZWN0fSDovrnmoYZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lLndpZHRoPTIge3N0cmluZ30g6L655qGG5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS5jb2xvcj1cInJnYmEoMjU1LCAwLCAwLCAxKVwiIHtzdHJpbmd9IOi+ueahhuminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodE1vZGU9MntudW1iZXJ9IOmrmOW6puaooeW8j++8iDDvvJrmtbfmi5Tpq5jluqbvvJsx77ya55u45a+55Zyw6KGo77ybMu+8muS+nemZhOaooeW8j++8iVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFyZWFVbml0PSflubPmlrnnsbMnIHtzdHJpbmd9IOmdouenr+WNleS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsIHtvYmplY3R9IOagh+etvuWvueixoVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnRleHQge3N0cmluZ30g5qCH562+5paH5pysXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2hvdyB7c3RyaW5nfSDmoIfnrb7mmL7pmpBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7c3RyaW5nfSDmoIfnrb7kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7b2JqZWN0fSDmoIfnrb7kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250U2l6ZT0yMCB7bnVtYmVyfSDlrZfkvZPlpKflsI9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5PTAge251bWJlcn0g5a2X5L2T6aG5IDDvvJrpu5HkvZPvvJsx77ya5oCd5rqQ6buR5L2T77ybMu+8muW6numXqOato+mBk+agh+mimOS9k++8mzPvvJrmlbDpu5HkvZNcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5jb2xvcj0jZmZmZmZmIHtzdHJpbmd9IOWtl+S9k+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aD00IHtudW1iZXJ9IOW8lee6v+WuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVDb2xvcj0jMDBmZmZmODAge3N0cmluZ30g5byV57q/6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQ9MjAge251bWJlcn0g5a2X5L2T5YGP56e7KOW8lee6v+mVv+W6pilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3I9WycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10ge2FycmF5fSDog4zmma/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2Uge2Jvb2xlYW59IOi3neemu+e8qeaUvlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLm5lYXI9MjAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5Hot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mYXI9MTAwMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/nOi3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZSB7b2JqZWN0fSDlsZ7mgKflhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluayB7b2JqZWN0fSDpk77mjqVcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50PVtdXSB7YXJyYXl9IOmTvuaOpeWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS5uYW1lIHtzdHJpbmd9IOmTvuaOpeWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS51cmwge3N0cmluZ30g6ZO+5o6l5Zyw5Z2AXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmljaFRleHRDb250ZW50IHtzdHJpbmd9IOWvjOaWh+acrOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgXCJyZ2JhKDI1NSwgMCwgMCwgMC41KVwiXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLnNlbWlNaW5vckF4aXMgPSAob3B0aW9ucy5zZW1pTWlub3JBeGlzIHx8IG9wdGlvbnMuc2VtaU1pbm9yQXhpcyA9PT0gMCkgPyBvcHRpb25zLnNlbWlNaW5vckF4aXMgOiAxMFxyXG4gICAgdGhpcy5vcHRpb25zLnNlbWlNYWpvckF4aXMgPSAob3B0aW9ucy5zZW1pTWFqb3JBeGlzIHx8IG9wdGlvbnMuc2VtaU1ham9yQXhpcyA9PT0gMCkgPyBvcHRpb25zLnNlbWlNYWpvckF4aXMgOiAyMFxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmNlbnRlciA9IG9wdGlvbnMuY2VudGVyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZSA9IG9wdGlvbnMubGluZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHRoaXMub3B0aW9ucy5saW5lLndpZHRoIHx8IHRoaXMub3B0aW9ucy5saW5lLndpZHRoID09PSAwKSA/IHRoaXMub3B0aW9ucy5saW5lLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgfHwgJ3JnYmEoMjU1LCAwLCAwLCAxKSdcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSBvcHRpb25zWydhcmVhLXVuaXQnXSB8fCAn5bmz5pa557GzJ1xyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCBvcHRpb25zLmxhYmVsLmZvbnRTaXplID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZm9udFNpemUgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6IChvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA6IDQsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAob3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwKSA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMubGFiZWwubmVhciB8fCBvcHRpb25zLmxhYmVsLm5lYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLm9wZXJhdGUgPSB7fVxyXG4gICAgdGhpcy5EaWFsb2cgPSB7fVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIEVsbGlwc2VPYmplY3QuY3JlYXRlKHRoaXMpXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnRWxsaXBzZU9iamVjdCdcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID8gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgOiAwXHJcbiAgfVxyXG4gIHNldCBoZWlnaHRNb2RlKHYpIHtcclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gW11cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9ICh2IHx8IHYgPT0gMCkgPyB2IDogMlxyXG4gICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgaGVpZ2h0TW9kZU5hbWUgPSAnJ1xyXG4gICAgICBFbGxpcHNlT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMF0sXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMV1cclxuICAgICAgXVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfmtbfmi5Tpq5jluqYnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+ebuOWvueWcsOihqCdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfkvp3pmYTmqKHlnosnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBncm91bmRcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUgPSBoZWlnaHRNb2RlTmFtZSlcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0ICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWVcclxuICAgICAgKSlcclxuICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNlbnRlci5hbHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBbXVxyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5hbHQgPSAwXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5hbHQgPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoMikpXHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucG9zaXRpb25zLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICAgIF1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9ICFncm91bmQgPyBmYWxzZSA6IHRydWVcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgIH0sIDApO1xyXG5cclxuICAgIHRoaXMuX2VsbXMuYWx0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmFsdFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbWlNaW5vckF4aXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNlbWlNaW5vckF4aXNcclxuICB9XHJcbiAgc2V0IHNlbWlNaW5vckF4aXModikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNlbWlNaW5vckF4aXMgPSB2XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0XHJcbiAgfVxyXG5cclxuICBnZXQgc2VtaU1ham9yQXhpcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2VtaU1ham9yQXhpc1xyXG4gIH1cclxuICBzZXQgc2VtaU1ham9yQXhpcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2VtaU1ham9yQXhpcyA9IHZcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHRcclxuICB9XHJcblxyXG4gIGdldCBjZW50ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNlbnRlclxyXG4gIH1cclxuICBzZXQgY2VudGVyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jZW50ZXIgPSB2XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5sbmdcclxuICAgICAgfSlcclxuICAgIHRoaXMuX2VsbXMubGF0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGJlYXJpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmJlYXJpbmdcclxuICB9XHJcbiAgc2V0IGJlYXJpbmcodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmJlYXJpbmcgPSB2XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0XHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMuZW50aXR5LnBvbHlnb24pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS53aWR0aCA9IHRoaXMubGluZVdpZHRoXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgPSB2IHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMuZW50aXR5LnBvbHlsaW5lKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5saW5lLmNvbG9yKVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMub3B0aW9ucy5saW5lLmNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSAncmdiYSgyNTUsMCwwLDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gIH1cclxuICBzZXQgbGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gKCh2IHx8IHYgPT09IDApID8gdiA6IDMpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS53aWR0aCA9IHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgICB0aGlzLl9lbG1zLmxpbmVXaWR0aCAmJiB0aGlzLl9lbG1zLmxpbmVXaWR0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hcmVhXHJcbiAgfVxyXG5cclxuICBzZXQgYXJlYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXJlYSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYSAmJiB0aGlzLl9lbG1zLmFyZWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhVW5pdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgfVxyXG4gIHNldCBhcmVhVW5pdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhVW5pdCAmJiB0aGlzLl9lbG1zLmFyZWFVbml0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyKSB7XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93ICYmICF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuXHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGhlaWdodCA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMuY2VudGVyLmxuZywgdGhhdC5vcHRpb25zLmNlbnRlci5sYXQpKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5jZW50ZXIubGF0LCBhbHQ6IHRoYXQub3B0aW9ucy5jZW50ZXIuYWx0ICsgaGVpZ2h0IH1cclxuICAgIH1cclxuICAgIGxldCBtYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5vcHRpb25zLmNvbG9yKVxyXG4gICAgaWYgKHRoYXQuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmNvbG9yXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm9wdGlvbnMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQuY3JlYXRlRWxsaXBzZSh0aGF0Lm9wdGlvbnMuY2VudGVyLCB7IGJlYXJpbmc6IHRoYXQub3B0aW9ucy5iZWFyaW5nLCBzZW1pTWlub3JBeGlzOiB0aGF0Lm9wdGlvbnMuc2VtaU1pbm9yQXhpcywgc2VtaU1ham9yQXhpczogdGhhdC5vcHRpb25zLnNlbWlNYWpvckF4aXMsIGhlaWdodDogdGhhdC5vcHRpb25zLmNlbnRlci5hbHQgKyBoZWlnaHQgfSlcclxuXHJcblxyXG5cclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkocG9zaXRpb25zKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogIWdyb3VuZCA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4ucG9zaXRpb25zLCBwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXV0sXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5saW5lLndpZHRoLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5saW5lLmNvbG9yKSxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIGFyY1R5cGU6ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICBFbGxpcHNlT2JqZWN0LmNyZWF0ZUxhYmVsKHRoYXQpXHJcbiAgICB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSBOdW1iZXIoKENlc2l1bS5NYXRoLlBJICogdGhhdC5vcHRpb25zLnNlbWlNaW5vckF4aXMgKiB0aGF0Lm9wdGlvbnMuc2VtaU1ham9yQXhpcykudG9GaXhlZCgyKSk7XHJcbiAgICBzd2l0Y2ggKHRoYXQub3B0aW9uc1snYXJlYS11bml0J10pIHtcclxuICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgIH1cclxuXHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcblxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgLy8g5qCH562+XHJcbiAgICB0aGF0LmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IFt0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgIGdyb3VuZDogdGhhdC5vcHRpb25zLmxhYmVsLmdyb3VuZCxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVTcGF0aWFsSW5mb1RhYmxlQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgdGFibGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NwYXRpYWwtaW5mby10YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRCb2R5RWxtID0gdGFibGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgdEJvZHlFbG0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBfdGhpcy5fZWxtcy5sbmcgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5sYXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5hbHQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0ID0gW11cclxuICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIHRyLmNsYXNzTmFtZSA9ICd0cidcclxuICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWxpZ24tY2VudGVyXCI+5ZyG5b+D5Z2Q5qCHPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbG5nIGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxhdCBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhbHQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgYFxyXG4gICAgICAgIGxldCBsbmdCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmcnKVswXVxyXG4gICAgICAgIGxldCBsbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICBsbmcuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZykudG9GaXhlZCg4KVxyXG4gICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgbGV0IGxuZ0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgIGxuZ0lucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICBsbmdJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgbG5nSW5wdXQubWluID0gLTE4MFxyXG4gICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgIGxuZ0lucHV0LnZhbHVlID0gKF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZykudG9GaXhlZCg4KVxyXG5cclxuICAgICAgICBsZXQgbGF0Qm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0JylbMF1cclxuICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgbGF0LmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQpLnRvRml4ZWQoOClcclxuICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgIGxldCBsYXRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICBsYXRJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgbGF0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgbGF0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgIGxhdElucHV0Lm1pbiA9IC05MFxyXG4gICAgICAgIGxhdElucHV0Lm1heCA9IDkwXHJcbiAgICAgICAgbGF0SW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgIGxldCBhbHRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbHQnKVswXVxyXG4gICAgICAgIGxldCBhbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICBhbHQuaW5uZXJIVE1MID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG4gICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgbGV0IGFsdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICBhbHRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICBhbHRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICBhbHRJbnB1dC5tYXggPSA5OTk5OTk5OTlcclxuICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMilcclxuXHJcbiAgICAgICAgbG5nQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZ0lucHV0KVxyXG4gICAgICAgICAgbG5nSW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBFbGxpcHNlT2JqZWN0LmNsb3NlTm9kZUVkaXQoX3RoaXMpXHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbG5nSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLmNlbnRlci5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZyA9IE51bWJlcihOdW1iZXIobG5nSW5wdXQudmFsdWUpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBsbmcuaW5uZXJIVE1MID0gX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgIF90aGlzLmhlaWdodCA9IF90aGlzLmhlaWdodFxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGxhdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMuY2VudGVyLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXRJbnB1dClcclxuICAgICAgICAgIGxhdElucHV0LmZvY3VzKClcclxuICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRWxsaXBzZU9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQgPSBOdW1iZXIoTnVtYmVyKGxhdElucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbGF0LmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMuY2VudGVyLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBfdGhpcy5oZWlnaHRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBhbHRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHRJbnB1dClcclxuICAgICAgICAgIGFsdElucHV0LmZvY3VzKClcclxuICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRWxsaXBzZU9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBOdW1iZXIoTnVtYmVyKGFsdElucHV0LnZhbHVlKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgYWx0LmlubmVySFRNTCA9IE51bWJlcihfdGhpcy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nLnB1c2gobG5nKVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0LnB1c2gobGF0KVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0LnB1c2gobGF0SW5wdXQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0LnB1c2goYWx0SW5wdXQpXHJcbiAgICAgICAgdEJvZHlFbG0uYXBwZW5kQ2hpbGQodHIpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfmpK3lnIblsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLmxhYmVsLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMubGFiZWwucG9zaXRpb25bMV0sIGFsdDogdGhpcy5sYWJlbC5wb3NpdGlvblsyXSB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5wcmV2aW91cyA9IG51bGxcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgRWxsaXBzZU9iamVjdC5ub2RlRWRpdCh0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGNpcmNsZSdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicygnY2lyY2xlLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbExpbmVDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIEVsbGlwc2VPYmplY3QuRXZlbnRCaW5kaW5nKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yID0gW2xpbmVjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2xhYmVsQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IgPSBbbGFiZWxsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbe1xyXG4gICAgICAgICAgbmFtZTogJ+W5s+aWueexsycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+W5s+aWueexsydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnljYPnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnljYPnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5LqpJyxcclxuICAgICAgICAgIHZhbHVlOiAn5LqpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+WFrOmhtycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+WFrOmhtydcclxuICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncCh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnKVswXSwgXCIuaW5wdXQtc2VsZWN0LXVuaXRcIilcclxuICAgICAgICBpZiAodW5pdERhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2godW5pdERhdGEpXHJcbiAgICAgICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh1bml0RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhVW5pdCA9IHVuaXREYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWlnaHRCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtYm94JylbMF1cclxuICAgICAgICBsZXQgaGVpZ2h0RWxtID0gaGVpZ2h0Qm94RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gMTBcclxuICAgICAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICAgIGtleTogJzAnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgICAga2V5OiAnMScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkvp3pmYTmqKHlnosnLFxyXG4gICAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2hlaWdodC1tb2RlLWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmhlaWdodC1tb2RlJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaChoZWlnaHRNb2RlRGF0YSlcclxuICAgICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaGVpZ2h0TW9kZURhdGFbaV0udmFsdWUgPT09IGhlaWdodE1vZGVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBoZWlnaHRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHQgPSBoZWlnaHRFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSA9IGhlaWdodENvbmZpcm1FbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFbGxpcHNlT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICB9LCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuXHJcbiAgICB0aGlzLnJhZGl1cyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnJhZGl1c1xyXG4gICAgdGhpcy5zZW1pTWlub3JBeGlzID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2VtaU1pbm9yQXhpc1xyXG4gICAgdGhpcy5zZW1pTWFqb3JBeGlzID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2VtaU1ham9yQXhpc1xyXG4gICAgdGhpcy5iZWFyaW5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYmVhcmluZ1xyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmFyZWEgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hcmVhXHJcbiAgICB0aGlzLmFyZWFVbml0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5saW5lTGVuZ3RoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5sZW5ndGhcclxuICAgIHRoaXMubGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmhlaWdodE1vZGVcclxuXHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5sbmdcclxuICAgICAgfSlcclxuICAgIHRoaXMuX2VsbXMubGF0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdFxyXG4gICAgICB9KVxyXG4gICAgdGhpcy5fZWxtcy5hbHQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIuYWx0XHJcbiAgICAgIH0pXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWVcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3KSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zLmdldFZhbHVlKClcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBsZXQgcG9pbnQxID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIDApO1xyXG4gICAgICBsZXQgcG9pbnQyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIDEwMDAwMDAwKTtcclxuICAgICAgbGV0IGRpcmVjdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvaW50MiwgcG9pbnQxLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIGxldCBjID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpcmVjdGlvbiwgZGlyZWN0aW9uKTtcclxuICAgICAgbGV0IHJheSA9IG5ldyBDZXNpdW0uUmF5KHBvaW50MSwgYyk7XHJcbiAgICAgIGxldCByID0ge31cclxuICAgICAgbGV0IHBpY2tlZE9iamVjdHMgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZHJpbGxQaWNrRnJvbVJheShyYXkpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAocGlja2VkT2JqZWN0c1tpXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgciA9IHBpY2tlZE9iamVjdHNbaV1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChyICYmIHIucG9zaXRpb24pIHtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHIucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcikuYWx0XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGxldCBwcm9taXNlID0gYXdhaXQgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQodGhpcy5zZGsudmlld2VyLnRlcnJhaW5Qcm92aWRlciwgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQpXSk7XHJcbiAgICAgICAgICBoZWlnaHQgPSBwcm9taXNlWzBdLmhlaWdodFxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIGhlaWdodClcclxuICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKHBvc2l0aW9uc1tpXS54LCBwb3NpdGlvbnNbaV0ueSwgcG9zaXRpb25zW2ldLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICBjZW50ZXI6IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLmNlbnRlcilcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMuY3JlYXRlRWxsaXBzZSh0aGlzLm9wdGlvbnMuY2VudGVyLCB7IGJlYXJpbmc6IHRoaXMub3B0aW9ucy5iZWFyaW5nLCBzZW1pTWlub3JBeGlzOiB0aGlzLm9wdGlvbnMuc2VtaU1pbm9yQXhpcywgc2VtaU1ham9yQXhpczogdGhpcy5vcHRpb25zLnNlbWlNYWpvckF4aXMgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgcG9zaXRpb25zLmFsdCA9IHRoaXMub3B0aW9ucy5jZW50ZXIuYWx0XHJcbiAgICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucyhwb3NpdGlvbnMpXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5sbmcgPSBOdW1iZXIoKHBvc2l0aW9ucy5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5sYXQgPSBOdW1iZXIoKHBvc2l0aW9ucy5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLm9wdGlvbnMuY2VudGVyXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgIGNlbnRlcjogdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMuY2VudGVyKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jZW50ZXIubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMub3B0aW9ucy5jZW50ZXJcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMuY3JlYXRlRWxsaXBzZSh0aGlzLm9wdGlvbnMuY2VudGVyLCB7IGJlYXJpbmc6IHRoaXMub3B0aW9ucy5iZWFyaW5nLCBzZW1pTWlub3JBeGlzOiB0aGlzLm9wdGlvbnMuc2VtaU1pbm9yQXhpcywgc2VtaU1ham9yQXhpczogdGhpcy5vcHRpb25zLnNlbWlNYWpvckF4aXMgfSlcclxuICAgICAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtwb3NpdGlvbnMubG5nLCBwb3NpdGlvbnMubGF0XVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgICAgICBjZW50ZXI6IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLmNlbnRlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9ucylcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnMsIF90aGlzLnBvc2l0aW9uc1swXSwgX3RoaXMucG9zaXRpb25zWzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgY2VudGVyOiB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucy5jZW50ZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jZW50ZXIgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMucHJldmlvdXMuY2VudGVyKVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9ucylcclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gWy4uLl90aGlzLnBvc2l0aW9ucywgX3RoaXMucG9zaXRpb25zWzBdLCBfdGhpcy5wb3NpdGlvbnNbMV1dXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZ1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5vZGVFZGl0KHRoYXQsIGNiID0gKCkgPT4geyB9KSB7XHJcbiAgICB0aGF0LnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICBpZiAoWUouTWVhc3VyZS5HZXRNZWFzdXJlU3RhdHVzKCkpIHtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhhdC50aXAgPSBuZXcgTW91c2VUaXAoJ+ivt+mAieaLqeS4gOS4que8lui+keeCue+8jOWPs+mUruWPlua2iCcsIHRoYXQuc2RrKVxyXG4gICAgICB0aGF0LmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgIGxldCBzZWxlY3RQb2ludFxyXG4gICAgICBsZXQgcG9pbnRDZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0LmNlbnRlci5sbmcsIHRoYXQuY2VudGVyLmxhdCk7XHJcbiAgICAgIGxldCBzZW1pTWlub3JBeGlzID0gdGhhdC5vcHRpb25zLnNlbWlNaW5vckF4aXNcclxuICAgICAgbGV0IHNlbWlNYWpvckF4aXMgPSB0aGF0Lm9wdGlvbnMuc2VtaU1ham9yQXhpc1xyXG4gICAgICBsZXQgYmVhcmluZyA9IHRoYXQub3B0aW9ucy5iZWFyaW5nXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhhdC5jcmVhdGVFbGxpcHNlKHRoYXQub3B0aW9ucy5jZW50ZXIsIHsgYmVhcmluZzogdGhhdC5vcHRpb25zLmJlYXJpbmcsIHNlbWlNaW5vckF4aXM6IHRoYXQub3B0aW9ucy5zZW1pTWlub3JBeGlzLCBzZW1pTWFqb3JBeGlzOiB0aGF0Lm9wdGlvbnMuc2VtaU1ham9yQXhpcyB9KVxyXG4gICAgICAvLyBsZXQgb3JpZ2luYWxQb3NpdGlvblxyXG4gICAgICAvLyBsZXQgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgLy8gbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAvLyBsZXQgZW5kcG9pbnQgPSB7Li4udGhhdC5vcHRpb25zLmNlbnRlcn1cclxuICAgICAgLy8gbGV0IG1vdmVSYWRpdXMgPSBudWxsXHJcbiAgICAgIC8vIGxldCBlbnRpdHlcclxuICAgICAgLy8gZnJvbURlZ3JlZXNBcnJheSA9IHRoYXQuY3JlYXRlRWxsaXBzZSh0aGF0Lm9wdGlvbnMuY2VudGVyLCB7YmVhcmluZzogdGhhdC5vcHRpb25zLmJlYXJpbmcsIHNlbWlNaW5vckF4aXM6IHRoYXQub3B0aW9ucy5zZW1pTWlub3JBeGlzLCBzZW1pTWFqb3JBeGlzOiB0aGF0Lm9wdGlvbnMuc2VtaU1ham9yQXhpc30pXHJcbiAgICAgIGZ1bmN0aW9uIGdldEJlYXJpbmcoc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIGxldCByYWQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gICAgICAgICAgbGF0MSA9IHN0YXJ0LnkgKiByYWQsXHJcbiAgICAgICAgICBsYXQyID0gZW5kLnkgKiByYWQsXHJcbiAgICAgICAgICBsb24xID0gc3RhcnQueCAqIHJhZCxcclxuICAgICAgICAgIGxvbjIgPSBlbmQueCAqIHJhZDtcclxuICAgICAgICBjb25zdCBhID0gTWF0aC5zaW4obG9uMiAtIGxvbjEpICogTWF0aC5jb3MobGF0Mik7XHJcbiAgICAgICAgY29uc3QgYiA9XHJcbiAgICAgICAgICBNYXRoLmNvcyhsYXQxKSAqIE1hdGguc2luKGxhdDIpIC1cclxuICAgICAgICAgIE1hdGguc2luKGxhdDEpICogTWF0aC5jb3MobGF0MikgKiBNYXRoLmNvcyhsb24yIC0gbG9uMSk7XHJcbiAgICAgICAgY29uc3QgcmFkaWFucyA9IE1hdGguYXRhbjIoYSwgYilcclxuICAgICAgICBjb25zdCBkZWdyZWVzID0gcmFkaWFucyAlICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgbGV0IGJlYXJpbmcgPSA0NTAgLSAoKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSSA8IDBcclxuICAgICAgICAgID8gMzYwICsgKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSVxyXG4gICAgICAgICAgOiAoZGVncmVlcyAqIDE4MCkgLyBNYXRoLlBJKTtcclxuICAgICAgICByZXR1cm4gYmVhcmluZ1xyXG4gICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSB0cnVlXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gZmFsc2VcclxuICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5mcm9tRGVncmVlc0FycmF5LCBmcm9tRGVncmVlc0FycmF5WzBdLCBmcm9tRGVncmVlc0FycmF5WzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMuZ2V0VmFsdWUoKVxyXG4gICAgICBsZXQgbGVuZ3RoID0gcG9zaXRpb25zLmxlbmd0aFxyXG4gICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGF0LnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnNlbWlNaW5vckF4aXMgPSBzZW1pTWlub3JBeGlzXHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5zZW1pTWFqb3JBeGlzID0gc2VtaU1ham9yQXhpc1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMuYmVhcmluZyA9IGJlYXJpbmdcclxuICAgICAgICAgICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgICAgICB0aGF0LnRpcCAmJiB0aGF0LnRpcC5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhhdC50aXAgPSBudWxsXHJcbiAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gbnVsbFxyXG4gICAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcblxyXG4gICAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcGljayA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcGljayAmJlxyXG4gICAgICAgICAgICAgIHBpY2suaWQgJiZcclxuICAgICAgICAgICAgICBwaWNrLmlkLm5hbWUgJiZcclxuICAgICAgICAgICAgICBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyAmJlxyXG4gICAgICAgICAgICAgIChwaWNrLmlkLl90eXBlID09PSAnc2VtaU1pbm9yQXhpcycgfHwgcGljay5pZC5fdHlwZSA9PT0gJ3NlbWlNYWpvckF4aXMnKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGF0LnRpcC5zZXRfdGV4dCgn5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgICAgICAgbGV0IGVuZFBvaW50ID0gY2FydGVzaWFuXHJcbiAgICAgICAgICAgICAgbGV0IGVuZFBvaW50ODQgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGVuZFBvaW50LCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgcG9pbnRDZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0LmNlbnRlci5sbmcsIHRoYXQuY2VudGVyLmxhdCwgZW5kUG9pbnQ4NC5hbHQpXHJcbiAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9pbnRDZW50ZXIsIGVuZFBvaW50KTtcclxuICAgICAgICAgICAgICBsZXQgc3RhcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGF0LmNlbnRlci5sbmcsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGF0LmNlbnRlci5sYXRcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IGVuZCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGVuZFBvaW50ODQubG5nLFxyXG4gICAgICAgICAgICAgICAgeTogZW5kUG9pbnQ4NC5sYXRcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYmVhcmluZyA9IGdldEJlYXJpbmcoc3RhcnQsIGVuZClcclxuICAgICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuX3R5cGUgPT09ICdzZW1pTWlub3JBeGlzJykge1xyXG4gICAgICAgICAgICAgICAgc2VtaU1pbm9yQXhpcyA9IGRpc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBiZWFyaW5nID0gYmVhcmluZyArIDkwXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChzZWxlY3RQb2ludC5fdHlwZSA9PT0gJ3NlbWlNYWpvckF4aXMnKSB7XHJcbiAgICAgICAgICAgICAgICBzZW1pTWFqb3JBeGlzID0gZGlzdGFuY2VcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LmNyZWF0ZUVsbGlwc2UodGhhdC5jZW50ZXIsIHsgYmVhcmluZzogYmVhcmluZywgc2VtaU1pbm9yQXhpczogc2VtaU1pbm9yQXhpcywgc2VtaU1ham9yQXhpczogc2VtaU1ham9yQXhpcyB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgICAgbGV0IGVuZFBvaW50ID0gY2FydGVzaWFuXHJcbiAgICAgICAgICAgIGxldCBlbmRQb2ludDg0ID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgcG9pbnRDZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0LmNlbnRlci5sbmcsIHRoYXQuY2VudGVyLmxhdCwgZW5kUG9pbnQ4NC5hbHQpXHJcbiAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvaW50Q2VudGVyLCBlbmRQb2ludCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhcnQgPSB7XHJcbiAgICAgICAgICAgICAgeDogdGhhdC5jZW50ZXIubG5nLFxyXG4gICAgICAgICAgICAgIHk6IHRoYXQuY2VudGVyLmxhdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlbmQgPSB7XHJcbiAgICAgICAgICAgICAgeDogZW5kUG9pbnQ4NC5sbmcsXHJcbiAgICAgICAgICAgICAgeTogZW5kUG9pbnQ4NC5sYXRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiZWFyaW5nID0gZ2V0QmVhcmluZyhzdGFydCwgZW5kKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuX3R5cGUgPT09ICdzZW1pTWlub3JBeGlzJykge1xyXG4gICAgICAgICAgICAgIHNlbWlNaW5vckF4aXMgPSBkaXN0YW5jZVxyXG4gICAgICAgICAgICAgIGJlYXJpbmcgPSBiZWFyaW5nICsgOTBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuX3R5cGUgPT09ICdzZW1pTWFqb3JBeGlzJykge1xyXG4gICAgICAgICAgICAgIHNlbWlNYWpvckF4aXMgPSBkaXN0YW5jZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LmNyZWF0ZUVsbGlwc2UodGhhdC5jZW50ZXIsIHsgYmVhcmluZzogYmVhcmluZywgc2VtaU1pbm9yQXhpczogc2VtaU1pbm9yQXhpcywgc2VtaU1ham9yQXhpczogc2VtaU1ham9yQXhpcyB9KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhhdC50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGF0LnRpcCA9IG51bGxcclxuXHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogdGhhdC5jZW50ZXIubG5nLFxyXG4gICAgICAgICAgbGF0OiB0aGF0LmNlbnRlci5sYXRcclxuICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICB0aGF0LmxhYmVsICYmICh0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICB0aGF0LmNlbnRlci5sbmcsXHJcbiAgICAgICAgICAgIHRoYXQuY2VudGVyLmxhdCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY3JlYXRlTm9kZVBvaW50cyhwb3NpdGlvbnNbMF0sICdzZW1pTWFqb3JBeGlzJylcclxuICAgICAgICBjcmVhdGVOb2RlUG9pbnRzKHBvc2l0aW9uc1sobGVuZ3RoIC0gMikgLyA0XSwgJ3NlbWlNaW5vckF4aXMnKVxyXG4gICAgICAgIGNyZWF0ZU5vZGVQb2ludHMocG9zaXRpb25zWyhsZW5ndGggLSAyKSAvIDJdLCAnc2VtaU1ham9yQXhpcycpXHJcbiAgICAgICAgY3JlYXRlTm9kZVBvaW50cyhwb3NpdGlvbnNbKGxlbmd0aCAtIDIpIC0gKChsZW5ndGggLSAyKSAvIDQpXSwgJ3NlbWlNaW5vckF4aXMnKVxyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKHBvcywgdHlwZSkge1xyXG4gICAgICAgIGxldCBwb3M4NCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodChwb3M4NCwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCBoZWlnaHQpLFxyXG4gICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoYXQubm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEV2ZW50QmluZGluZyh0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCAhZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0Ll9lbG1zW20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKHZlbnRUeXBlLCAoZSkgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICBFdmVudFt0XShlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRESVYob3B0aW9ucyA9IHsgZG9taWQ6IFwiXCIsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSAob3B0aW9ucy54IHx8IG9wdGlvbnMueCA9PT0gMCkgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gKG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDApID8gb3B0aW9ucy55IDogMTBcclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5jZW50ZXIubG5nLCB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMoY2VudGVyKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuXHJcbiAgICBpZiAoIWNlbnRlcikge1xyXG4gICAgICBjZW50ZXIgPSB0aGlzLm9wdGlvbnMuY2VudGVyXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRlci5sbmcsIGNlbnRlci5sYXQpKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zaXRpb25zID0gdGhpcy5jcmVhdGVFbGxpcHNlKGNlbnRlciwgeyBiZWFyaW5nOiB0aGlzLm9wdGlvbnMuYmVhcmluZywgc2VtaU1pbm9yQXhpczogdGhpcy5vcHRpb25zLnNlbWlNaW5vckF4aXMsIHNlbWlNYWpvckF4aXM6IHRoaXMub3B0aW9ucy5zZW1pTWFqb3JBeGlzLCBoZWlnaHQ6IGNlbnRlci5hbHQgKyBoZWlnaHQgfSlcclxuICAgIGlmICghZ3JvdW5kKSB7XHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgY2VudGVyLmxuZyxcclxuICAgICAgICBjZW50ZXIubGF0LFxyXG4gICAgICAgIGNlbnRlci5hbHQgKyBoZWlnaHRcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICBsbmc6IGNlbnRlci5sbmcsXHJcbiAgICAgICAgICBsYXQ6IGNlbnRlci5sYXRcclxuICAgICAgICB9KS50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICBjZW50ZXIubG5nLFxyXG4gICAgICAgICAgICBjZW50ZXIubGF0LFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSwgMTAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+aKleW9semdouenr1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyID0gTnVtYmVyKChDZXNpdW0uTWF0aC5QSSAqIHRoaXMub3B0aW9ucy5zZW1pTWlub3JBeGlzICogdGhpcy5vcHRpb25zLnNlbWlNYWpvckF4aXMpLnRvRml4ZWQoMikpO1xyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMuYXJlYVVuaXRcclxuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uc1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzZU9iamVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF1R0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBekNBO0FBMENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBamVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFaQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBaEdBO0FBQUE7QUFBQTtBQUFBO0FBa0dBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUEyR0E7QUFDQTtBQUFBO0FBdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFxVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWp4Q0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwMEJBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQXVJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFoQkE7QUFBQTtBQUFBO0FBMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckVBO0FBQUE7QUFBQTtBQXFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUZBO0FBQUE7QUFLQTtBQXdGQTtBQUFBO0FBQUE7QUE2RUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/EllipseObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Explosion/_element.js": /*!********************************************!*\ !*** ./src/Obj/Base/Explosion/_element.js ***! \********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u968F\\u5730\\u56FE\\u7F29\\u653E\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u7206\\u70B8\\u8303\\u56F4\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRXhwbG9zaW9uL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0V4cGxvc2lvbi9fZWxlbWVudC5qcz84ZDBlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pmo/lnLDlm77nvKnmlL48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwic2NhbGVCeURpc3RhbmNlXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7niIbngrjojIPlm7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OTlcIiBAbW9kZWw9XCJzaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6rOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTkwXCIgbWF4PVwiOTBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCIgQG1vZGVsPVwiYWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBK0NBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/Explosion/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/Explosion/index.js": /*!*****************************************!*\ !*** ./src/Obj/Base/Explosion/index.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/Explosion/_element.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\nvar Explosion = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 爆炸\r\n * @param sdk\r\n * @param options {object} 爆炸属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显隐\r\n * @param options.name {string} 名称\r\n * @param {object} options.position={} 位置\r\n * @param {number} options.position.lng 经度\r\n * @param {number} options.position.lat 纬度\r\n * @param {number} options.position.alt 高度\r\n * @param options.scaleByDistance=true {boolean} 是否开启跟随视野缩放\r\n * @param options.size=80 {number} 大小(爆炸范围)\r\n * */\n function Explosion(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Explosion);\n _this2 = _callSuper(this, Explosion, [sdk, options]);\n _this2.viewer = sdk.viewer;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.name = _this2.options.name || '未命名对象';\n _this2.options.size = _this2.options.size || _this2.options.size === 0 ? _this2.options.size : 80;\n _this2.options.scaleByDistance = options.scaleByDistance || options.scaleByDistance === false ? options.scaleByDistance : true;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"](_this2.sdk);\n _this2.Dialog = _Dialog;\n _this2.operate = {};\n _this2._elms = {};\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n Explosion.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(Explosion, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Explosion, [{\n key: \"type\",\n get: function get() {\n return 'Explosion';\n }\n\n // 创建\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(state) {\n var _this3 = this;\n var _this, contentElm, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 15;\n break;\n }\n _context.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '爆炸属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this3.name = _this3.name.trim();\n if (!_this3.name) {\n _this3.name = '未命名对象';\n }\n _this3.originalOptions = _this3.deepCopyObj(_this3.options);\n _this3._DialogObject.close();\n _this3.Dialog.confirmCallBack && _this3.Dialog.confirmCallBack(_this3.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(_this3.sdk, _this3.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(_this3.sdk, _this3.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this3.reset();\n _this3.Dialog.resetCallBack && _this3.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this3.Dialog.removeCallBack && _this3.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this3.reset();\n _this3.positionEditing = false;\n _this3.Dialog.closeCallBack && _this3.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this3.options.show = show;\n _this3.originalOptions.show = show;\n _this3.show = show;\n _this3.Dialog.showCallBack && _this3.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this3.positionEditing = !_this3.positionEditing;\n }\n });\n case 6:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' explosion';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this.scaleByDistance = this.options.scaleByDistance;\n case 15:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 16;\n break;\n }\n _context2.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context2.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 24;\n break;\n case 23:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt + this.options.size * 8),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-85.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 24:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.previous = null;\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.size = this.originalOptions.size;\n this.scaleByDistance = this.originalOptions.scaleByDistance;\n this.lng = this.options.position.lng;\n this.lat = this.options.position.lat;\n }\n }, {\n key: \"scaleByDistance\",\n get: function get() {\n return this.options.scaleByDistance;\n },\n set: function set(v) {\n this.options.scaleByDistance = v;\n this.entity.billboard.sizeInMeters = v;\n this._elms.scaleByDistance && this._elms.scaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.position.lng;\n },\n set: function set(v) {\n this.options.position.lng = v;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.position.lat;\n },\n set: function set(v) {\n this.options.position.lat = v;\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.position.alt;\n },\n set: function set(v) {\n this.options.position.alt = v;\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"size\",\n get: function get() {\n return this.options.size;\n },\n set: function set(v) {\n this.options.size = v;\n this.entity.billboard.width = this.options.size;\n this.entity.billboard.height = this.options.size;\n this._elms.size && this._elms.size.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n }\n\n /**\r\n * 删除\r\n */,\n set: function set(status) {\n var _this4 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.previous = {\n position: _objectSpread({}, this.options.position)\n };\n this.event.mouse_move(function (movement, cartesian) {\n var positions = _this4.cartesian3Towgs84(cartesian, _this4.sdk.viewer);\n _this4.lng = positions.lng;\n _this4.lat = positions.lat;\n _this4.alt = positions.alt;\n _this4.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var positions = _this4.cartesian3Towgs84(cartesian, _this4.sdk.viewer);\n _this4.lng = positions.lng;\n _this4.lat = positions.lat;\n _this4.alt = positions.alt;\n _this4.previous = {\n position: _objectSpread({}, _this4.options.position)\n };\n _this4.event.mouse_move(function () {});\n _this4.event.mouse_left(function () {});\n _this4.event.mouse_right(function () {});\n _this4.event.gesture_pinck_start(function () {});\n _this4.event.gesture_pinck_end(function () {});\n _this4.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this4.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this4.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n _this4.positionEditing = false;\n } else {\n var positions = _this4.cartesian3Towgs84(cartesian, _this4.sdk.viewer);\n _this4.lng = positions.lng;\n _this4.lat = positions.lat;\n _this4.alt = positions.alt;\n _this4.previous = {\n position: _objectSpread({}, _this4.options.position)\n };\n _this4.event.mouse_move(function () {});\n _this4.event.mouse_left(function () {});\n _this4.event.mouse_right(function () {});\n _this4.event.gesture_pinck_start(function () {});\n _this4.event.gesture_pinck_end(function () {});\n _this4.positionEditing = false;\n }\n });\n });\n } else {\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (this.previous) {\n this.lng = this.previous.position.lng;\n this.lat = this.previous.position.lat;\n this.alt = this.previous.position.alt;\n }\n }\n }\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n this.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context3.next = 7;\n return this.sdk.removeIncetance(this.options.id);\n case 7:\n _context3.next = 9;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(this.sdk, this.options.id);\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n var img_bz = [];\n for (var _i = 10001; _i <= 10120; _i++) {\n var src = that.getSourceRootPath() + \"/img/frameAnimation/explosion/b\".concat(_i, \".png\");\n img_bz.push(src);\n }\n var i = 0;\n var flyEntity = new Cesium.Entity({\n id: that.options.id,\n show: that.options.show,\n position: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegrees(that.options.position.lng, that.options.position.lat, that.options.position.alt);\n }, false),\n billboard: {\n image: new Cesium.CallbackProperty(function () {\n var img = img_bz[flyEntity.imgIndex];\n flyEntity.imgIndex++;\n if (flyEntity.imgIndex >= img_bz.length) {\n flyEntity.imgIndex = 0;\n }\n return img;\n }, false),\n // scale: that.options.size,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n width: that.options.size,\n height: that.options.size,\n sizeInMeters: that.options.scaleByDistance,\n pixelOffset: {\n x: 0,\n y: -20\n }\n }\n });\n flyEntity.imgIndex = 0;\n that.entity = that.viewer.entities.add(flyEntity);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Explosion);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRXhwbG9zaW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0V4cGxvc2lvbi9pbmRleC5qcz9jMTljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93LCBnZXRHcm91bmRDb3Zlcn0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuY2xhc3MgRXhwbG9zaW9uIGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgKiBAY29uc3RydWN0b3JcclxuICAqIEBkZXNjcmlwdGlvbiDniIbngrhcclxuICAqIEBwYXJhbSBzZGtcclxuICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOeIhueCuOWxnuaAp1xyXG4gICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5ZSv5LiA5qCH6K+GXHJcbiAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvumakFxyXG4gICogQHBhcmFtIG9wdGlvbnMubmFtZSB7c3RyaW5nfSDlkI3np7BcclxuICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLnBvc2l0aW9uPXt9IOS9jee9rlxyXG4gICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMucG9zaXRpb24ubG5nIOe7j+W6plxyXG4gICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMucG9zaXRpb24ubGF0IOe6rOW6plxyXG4gICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMucG9zaXRpb24uYWx0IOmrmOW6plxyXG4gICogQHBhcmFtIG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlPXRydWUge2Jvb2xlYW59IOaYr+WQpuW8gOWQr+i3n+maj+inhumHjue8qeaUvlxyXG4gICogQHBhcmFtIG9wdGlvbnMuc2l6ZT04MCB7bnVtYmVyfSDlpKflsI8o54iG54K46IyD5Zu0KVxyXG4gICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy52aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuc2l6ZSA9ICh0aGlzLm9wdGlvbnMuc2l6ZSB8fCB0aGlzLm9wdGlvbnMuc2l6ZSA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuc2l6ZSA6IDgwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlID0gKG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlIHx8IG9wdGlvbnMuc2NhbGVCeURpc3RhbmNlID09PSBmYWxzZSkgPyBvcHRpb25zLnNjYWxlQnlEaXN0YW5jZSA6IHRydWVcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIEV4cGxvc2lvbi5jcmVhdGUodGhpcylcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuICdFeHBsb3Npb24nXHJcbiAgfVxyXG5cclxuICAvLyDliJvlu7pcclxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgIGxldCBpbWdfYnogPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDEwMDAxOyBpIDw9IDEwMTIwOyBpKyspIHtcclxuICAgICAgbGV0IHNyYyA9IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArIGAvaW1nL2ZyYW1lQW5pbWF0aW9uL2V4cGxvc2lvbi9iJHtpfS5wbmdgXHJcbiAgICAgIGltZ19iei5wdXNoKHNyYylcclxuICAgIH1cclxuICAgIGxldCBpID0gMFxyXG4gICAgbGV0IGZseUVudGl0eSA9IG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb24ubGF0LCB0aGF0Lm9wdGlvbnMucG9zaXRpb24uYWx0KVxyXG4gICAgICB9LCBmYWxzZSksXHJcbiAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgIGltYWdlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGltZyA9IGltZ19ieltmbHlFbnRpdHkuaW1nSW5kZXhdXHJcbiAgICAgICAgICBmbHlFbnRpdHkuaW1nSW5kZXgrK1xyXG4gICAgICAgICAgaWYgKGZseUVudGl0eS5pbWdJbmRleCAgPj0gaW1nX2J6Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbHlFbnRpdHkuaW1nSW5kZXggID0gMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGltZ1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAvLyBzY2FsZTogdGhhdC5vcHRpb25zLnNpemUsXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5zaXplLFxyXG4gICAgICAgIGhlaWdodDogdGhhdC5vcHRpb25zLnNpemUsXHJcbiAgICAgICAgc2l6ZUluTWV0ZXJzOiB0aGF0Lm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICAgIHBpeGVsT2Zmc2V0OiB7IHg6IDAsIHk6IC0yMCB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIGZseUVudGl0eS5pbWdJbmRleCA9IDBcclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKGZseUVudGl0eSlcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZih0aGF0Lm9wdGlvbnMuc2hvdykge1xyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+eIhueCuOWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZighdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgZXhwbG9zaW9uJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5zY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCArICh0aGlzLm9wdGlvbnMuc2l6ZSAqIDgpKSxcclxuICAgICAgICBvcmllbnRhdGlvbjogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTg1LjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91cyA9IG51bGxcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLnNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaXplXHJcbiAgICB0aGlzLnNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sbmcgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgICB0aGlzLmxhdCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRcclxuICB9XHJcblxyXG4gIGdldCBzY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgc2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2l6ZUluTWV0ZXJzID0gdlxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5zY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgfVxyXG5cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNpemVcclxuICB9XHJcbiAgc2V0IHNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNpemUgPSB2XHJcbiAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQud2lkdGggPSB0aGlzLm9wdGlvbnMuc2l6ZVxyXG4gICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmhlaWdodCA9IHRoaXMub3B0aW9ucy5zaXplXHJcbiAgICB0aGlzLl9lbG1zLnNpemUgJiYgdGhpcy5fZWxtcy5zaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAqXHJcbiAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICpcclxuICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICB0aGlzLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICB0aGlzLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICB0aGlzLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICB0aGlzLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgICB0aGlzLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogeyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgaWYgKHRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubG5nXHJcbiAgICAgICAgdGhpcy5sYXQgPSB0aGlzLnByZXZpb3VzLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgIHRoaXMuYWx0ID0gdGhpcy5wcmV2aW91cy5wb3NpdGlvbi5hbHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliKDpmaRcclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFeHBsb3Npb25cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF5Q0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWxDQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF0REE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFoRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUEwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUF2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQTtBQUFBO0FBQUE7QUFwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFrVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/Explosion/index.js\n"); /***/ }), /***/ "./src/Obj/Base/FlowLine/_element.js": /*!*******************************************!*\ !*** ./src/Obj/Base/FlowLine/_element.js ***! \*******************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u98DE\\u7EBF\\u6570\\u91CF\\n
\\n \\n \\n
\\n
\\n
\\n \\u98DE\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n \\u98DE\\u7EBF\\u9AD8\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n \\u98DE\\u7EBF\\u9AD8\\u5EA6\\u5DEE\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u5355\\u6B21\\u8FD0\\u52A8\\u65F6\\u957F\\uFF08s\\uFF09\\n
\\n \\n \\n
\\n
\\n
\\n \\u8F68\\u8FF9\\u900F\\u660E\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRmxvd0xpbmUvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvRmxvd0xpbmUvX2VsZW1lbnQuanM/M2IwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG93TGluZS1jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumjnue6v+aVsOmHjzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5OTk5XCIgQG1vZGVsPVwicG9pbnROdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6aOe57q/5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtYXg9XCI5OTk5OVwiIG1pbj1cIjFcIiBzdGVwPVwiMVwiIEBtb2RlbD1cIndpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumjnue6v+mrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwiaGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumjnue6v+mrmOW6puW3rjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWF4PVwiOTk5OTlcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJoZWlnaHREaWZmZXJlbmNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Y2V5qyh6L+Q5Yqo5pe26ZW/77yIc++8iTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWF4PVwiOTk5OTk5OTk5XCIgbWluPVwiMVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwiZHVyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L2o6L+56YCP5piO5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtYXg9XCIxXCIgbWluPVwiMC4wMVwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwibGluZUJhY2tBbHBoYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBd0VBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/FlowLine/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/FlowLine/index.js": /*!****************************************!*\ !*** ./src/Obj/Base/FlowLine/index.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/FlowLine/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Draw_drawRect__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Draw/drawRect */ \"./src/Draw/drawRect.js\");\n/* harmony import */ var _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Draw/drawPolygon */ \"./src/Draw/drawPolygon.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Materail_FlowLineMaterialProperty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Materail/FlowLineMaterialProperty */ \"./src/Obj/Materail/FlowLineMaterialProperty.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 水面\r\n */\n\n\n\n\n\n\n\n\n\n\nvar FlowLine = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 流光飞线\r\n * @param options {object} 流光飞线属性\r\n * @param options.name=未命名对象 {string} 名称\r\n * @param options.pointNumber=300 {number} 线数量\r\n * @param options.height=200 {number} 线高度\r\n * @param options.heightDifference=3000 {number} 线高度差\r\n * @param options.width=2 {number} 线宽\r\n * @param options.duration=10.0 {number} 单次运动时间\r\n * @param options.color=rgba(255,255,255,1) {string} 颜色\r\n * @param options.lineBackAlpha=0.05 {number} 轨迹颜色(不能为0)\r\n * @param Dialog {object} 弹框对象\r\n * @param Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function FlowLine(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, FlowLine);\n _this2 = _callSuper(this, FlowLine, [sdk, options]);\n _this2.viewer = _this2.sdk.viewer;\n _this2.options.name = options.name || '飞线';\n _this2.options.pointNumber = options.pointNumber || 200;\n _this2.options.height = options.height || 200;\n _this2.options.heightDifference = options.heightDifference || 3000;\n _this2.options.width = options.width || 2;\n _this2.options.duration = options.duration || 10.0;\n _this2.options.color = options.color || \"rgba(255,255,255,1)\";\n _this2.options.lineBackAlpha = options.lineBackAlpha || 0.05;\n _this2.options.positions = options.positions || [];\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n _this2._elms = {};\n _this2.positionArea = [];\n _this2.positions = [];\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n // FlowLine.create(this)\n FlowLine.drawLine(_this2);\n return _this2;\n }\n\n // 创建水面\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(FlowLine, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(FlowLine, [{\n key: \"getRandomPointsInCesiumPolygon\",\n value: function getRandomPointsInCesiumPolygon(positions, count) {\n var lons = [],\n lats = [],\n posi = [];\n positions.forEach(function (item) {\n lons.push(item.lng);\n lats.push(item.lat);\n posi.push([item.lng, item.lat]);\n });\n posi.push([posi[0][0], posi[0][1]]);\n var minLon = Math.min.apply(Math, lons),\n maxLon = Math.max.apply(Math, lons);\n var minLat = Math.min.apply(Math, lats),\n maxLat = Math.max.apply(Math, lats);\n var points = [];\n var that = this;\n while (points.length < count) {\n var lon = minLon + Math.random() * (maxLon - minLon);\n var lat = minLat + Math.random() * (maxLat - minLat);\n // const cartesian = Cesium.Cartesian3.fromDegrees(lon, lat);\n var point = turf.point([lon, lat]);\n var polygon = turf.polygon([posi]);\n var isInside = turf.booleanPointInPolygon(point, polygon);\n if (isInside) {\n var _posi = Cesium.Cartesian3.fromDegrees(lon, lat);\n var cartographic = that.viewer.scene.globe.ellipsoid.cartesianToCartographic(_posi);\n var height = cartographic.height;\n points.push([lon, lat, height]);\n }\n }\n return points;\n }\n }, {\n key: \"getLine\",\n value: function getLine(that, positions) {\n var num = 0;\n var celiangEntity = null;\n if (that.viewer.entities.getById(that.options.id)) {\n that.viewer.entities.getById(that.options.id)._children.forEach(function (item) {\n that.viewer.entities.remove(item);\n });\n that.viewer.entities.remove(that.viewer.entities.getById(that.options.id));\n }\n celiangEntity = that.viewer.entities.add(new Cesium.Entity({\n id: that.options.id,\n show: that.options.show\n }));\n positions.forEach(function (item, index) {\n var point = item;\n //根据点设置起始点位置\n // let start = Cesium.Cartesian3.fromDegrees(point[0], point[1], 0)\n var start = Cesium.Cartesian3.fromDegrees(point[0], point[1], point[2]);\n //根据点设置结束点位置\n var end = Cesium.Cartesian3.fromDegrees(point[0], point[1], point[2] + that.options.height + Math.random() * that.options.heightDifference);\n //创建线\n that.viewer.entities.add({\n parent: celiangEntity,\n id: that.options.id + '-' + new Date().getTime() + index,\n polyline: {\n positions: [start, end],\n width: that.options.width,\n // material:Cesium.Color.RED\n material: new Cesium.FlowLineMaterialProperty({\n color: that.options.color,\n duration: that.options.duration,\n lineBackAlpha: that.options.lineBackAlpha,\n num: num\n })\n }\n });\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n entity._children.forEach(function (item) {\n item.polyline.material.color = Cesium.Color.fromCssColorString(v);\n });\n }\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = picker;\n });\n }\n }\n }, {\n key: \"pointNumber\",\n get: function get() {\n return this.options.pointNumber;\n },\n set: function set(v) {\n this.options.pointNumber = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n var posis = this.getRandomPointsInCesiumPolygon(this.positionArea, this.options.pointNumber);\n this.positions = posis;\n this.getLine(this, posis);\n }\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.options.height = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n this.getLine(this, this.positions);\n }\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.options.show = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n entity.show = v;\n }\n }\n }, {\n key: \"heightDifference\",\n get: function get() {\n return this.options.heightDifference;\n },\n set: function set(v) {\n this.options.heightDifference = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n this.getLine(this, this.positions);\n }\n }\n }, {\n key: \"width\",\n get: function get() {\n return this.options.width;\n },\n set: function set(v) {\n this.options.width = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n entity._children.forEach(function (item) {\n item.polyline.width = v;\n });\n }\n }\n }, {\n key: \"duration\",\n get: function get() {\n return this.options.duration;\n },\n set: function set(v) {\n this.options.duration = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n entity._children.forEach(function (item) {\n item.polyline.material.duration = v;\n });\n }\n }\n }, {\n key: \"lineBackAlpha\",\n get: function get() {\n return this.options.lineBackAlpha;\n },\n set: function set(v) {\n this.options.lineBackAlpha = v;\n var entity = this.viewer.entities.getById(this.options.id);\n if (entity) {\n entity._children.forEach(function (item) {\n item.polyline.material.lineBackAlpha = v;\n });\n }\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var _this4 = this;\n var state,\n _this,\n contentElm,\n waterColorPicker,\n all_elm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = _args.length > 0 && _args[0] !== undefined ? _args[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 19;\n break;\n }\n _context.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk, this.originalOptions, {\n title: '飞线属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.name = _this4.name.trim();\n if (!_this4.name) {\n // this.name = '未命名对象'\n _this4.name = '飞线';\n }\n _this4.originalOptions = _this4.deepCopyObj(_this4.options);\n _this4._DialogObject.close();\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_this4.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(_this4.sdk, _this4.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(_this4.sdk, _this4.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this4.reset();\n _this4.Dialog.resetCallBack && _this4.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this4.show = show;\n _this4.Dialog.showCallBack && _this4.Dialog.showCallBack();\n }\n }, true);\n case 7:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' flow-line-surface';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_9__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n waterColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"flowLine-color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this4.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [waterColorPicker];\n _context.next = 19;\n break;\n case 19:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.viewer.entities.getById(this.options.id)) {\n return;\n }\n this.name = this.originalOptions.name;\n this.pointNumber = this.originalOptions.pointNumber;\n this.height = this.originalOptions.height;\n this.heightDifference = this.originalOptions.heightDifference;\n this.width = this.originalOptions.width;\n this.duration = this.originalOptions.duration;\n this.color = this.originalOptions.color;\n this.lineBackAlpha = this.originalOptions.lineBackAlpha;\n }\n\n /**\r\n * 飞到对应实体\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n i,\n a,\n BoundingSphere,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeViewFollow\"])(this.sdk);\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n // if (!position.hasOwnProperty('alt')) {\n // position.alt = await this.getClampToHeight(position)\n // }\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n } else {\n positionArray = [];\n for (i = 0; i < this.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.positions[i][0], this.positions[i][1], this.positions[i][2] + this.options.height + this.options.heightDifference / 2);\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-20.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }())\n }, {\n key: \"getSphere\",\n value: function getSphere() {\n var _this5 = this;\n return new Promise(function (resolve) {\n // entity没有加载完成时 state 不会等于0 所以设置定时器直到获取到为止\n var interval = setInterval(function () {\n var sphere = new Cesium.BoundingSphere();\n var state = _this5.sdk.viewer._dataSourceDisplay.getBoundingSphere(_this5.viewer.entities.getById(_this5.options.id), false, sphere);\n if (state === Cesium.BoundingSphereState.DONE) {\n clearInterval(interval);\n }\n }, 1000);\n });\n }\n\n /**\r\n * 删除\r\n */\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var _this6 = this;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n if (this.viewer.entities.getById(this.options.id)) {\n this.viewer.entities.getById(this.options.id)._children.forEach(function (item) {\n _this6.viewer.entities.remove(item);\n });\n this.viewer.entities.remove(this.viewer.entities.getById(this.options.id));\n }\n this.positions = [];\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context3.next = 6;\n return this.sdk.removeIncetance(this.options.id);\n case 6:\n _context3.next = 8;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(this.sdk, this.options.id);\n case 8:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n // let Draw = new DrawRect(that.sdk)\n // Draw.start((a, positions) => {\n // that.positions = positions\n // that.getLine(that, that.positions)\n // that.edit(true)\n // })\n\n var Draw = new _Draw_drawPolygon__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk);\n Draw.start(function (a, positions) {\n that.positionArea = positions;\n var posis = that.getRandomPointsInCesiumPolygon(positions, that.options.pointNumber);\n that.positions = posis;\n that.getLine(that, posis);\n that.edit(true);\n });\n }\n }, {\n key: \"drawLine\",\n value: function drawLine(that) {\n that.positionArea = that.options.positions;\n var posis = that.getRandomPointsInCesiumPolygon(that.options.positions, that.options.pointNumber);\n that.positions = posis;\n that.getLine(that, posis);\n // that.edit(true)\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowLine);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRmxvd0xpbmUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvRmxvd0xpbmUvaW5kZXguanM/MDg5MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGRlc2NyaXB0aW9uIOawtOmdolxyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nL2V2ZW50QmluZGluZyc7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IERyYXdSZWN0IGZyb20gJy4uLy4uLy4uL0RyYXcvZHJhd1JlY3QnXHJcbmltcG9ydCBkcmF3UG9seWdvbiBmcm9tICcuLi8uLi8uLi9EcmF3L2RyYXdQb2x5Z29uJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbmltcG9ydCBGbG93TGluZU1hdGVyaWFsUHJvcGVydHkgZnJvbSBcIi4uLy4uL01hdGVyYWlsL0Zsb3dMaW5lTWF0ZXJpYWxQcm9wZXJ0eVwiO1xyXG5cclxuY2xhc3MgRmxvd0xpbmUgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOa1geWFiemjnue6v1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOa1geWFiemjnue6v+WxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWU95pyq5ZG95ZCN5a+56LGhIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvaW50TnVtYmVyPTMwMCB7bnVtYmVyfSDnur/mlbDph49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHQ9MjAwIHtudW1iZXJ9IOe6v+mrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodERpZmZlcmVuY2U9MzAwMCB7bnVtYmVyfSDnur/pq5jluqblt65cclxuICAgKiBAcGFyYW0gb3B0aW9ucy53aWR0aD0yIHtudW1iZXJ9IOe6v+WuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmR1cmF0aW9uPTEwLjAge251bWJlcn0g5Y2V5qyh6L+Q5Yqo5pe26Ze0XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9cmdiYSgyNTUsMjU1LDI1NSwxKSB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lQmFja0FscGhhPTAuMDUge251bWJlcn0g6L2o6L+56aKc6Imy77yI5LiN6IO95Li6MO+8iVxyXG4gICAqIEBwYXJhbSBEaWFsb2cge29iamVjdH0g5by55qGG5a+56LGhXHJcbiAgICogQHBhcmFtIERpYWxvZy5jb25maXJtQ2FsbEJhY2sge2Z1bmN0aW9ufSDlvLnmoYbnoa7orqTml7bnmoTlm57osINcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLnZpZXdlciA9IHRoaXMuc2RrLnZpZXdlclxyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+mjnue6vydcclxuICAgIHRoaXMub3B0aW9ucy5wb2ludE51bWJlciA9IG9wdGlvbnMucG9pbnROdW1iZXIgfHwgMjAwXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgMjAwXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0RGlmZmVyZW5jZSA9IG9wdGlvbnMuaGVpZ2h0RGlmZmVyZW5jZSB8fCAzMDAwXHJcbiAgICB0aGlzLm9wdGlvbnMud2lkdGggPSBvcHRpb25zLndpZHRoIHx8IDJcclxuICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gfHwgMTAuMFxyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCBcInJnYmEoMjU1LDI1NSwyNTUsMSlcIlxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmVCYWNrQWxwaGEgPSBvcHRpb25zLmxpbmVCYWNrQWxwaGEgfHwgMC4wNVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5wb3NpdGlvbkFyZWEgPSBbXVxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIC8vIEZsb3dMaW5lLmNyZWF0ZSh0aGlzKVxyXG4gICAgRmxvd0xpbmUuZHJhd0xpbmUodGhpcylcclxuICB9XHJcblxyXG4gIC8vIOWIm+W7uuawtOmdolxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgLy8gbGV0IERyYXcgPSBuZXcgRHJhd1JlY3QodGhhdC5zZGspXHJcbiAgICAvLyBEcmF3LnN0YXJ0KChhLCBwb3NpdGlvbnMpID0+IHtcclxuICAgIC8vICAgdGhhdC5wb3NpdGlvbnMgPSBwb3NpdGlvbnNcclxuICAgIC8vICAgdGhhdC5nZXRMaW5lKHRoYXQsIHRoYXQucG9zaXRpb25zKVxyXG4gICAgLy8gICB0aGF0LmVkaXQodHJ1ZSlcclxuICAgIC8vIH0pXHJcblxyXG4gICAgbGV0IERyYXcgPSBuZXcgZHJhd1BvbHlnb24odGhhdC5zZGspXHJcbiAgICBEcmF3LnN0YXJ0KChhLCBwb3NpdGlvbnMpID0+IHtcclxuICAgICAgdGhhdC5wb3NpdGlvbkFyZWEgPSBwb3NpdGlvbnNcclxuICAgICAgbGV0IHBvc2lzID0gdGhhdC5nZXRSYW5kb21Qb2ludHNJbkNlc2l1bVBvbHlnb24ocG9zaXRpb25zLCB0aGF0Lm9wdGlvbnMucG9pbnROdW1iZXIpXHJcbiAgICAgIHRoYXQucG9zaXRpb25zID0gcG9zaXNcclxuICAgICAgdGhhdC5nZXRMaW5lKHRoYXQsIHBvc2lzKVxyXG4gICAgICB0aGF0LmVkaXQodHJ1ZSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIHN0YXRpYyBkcmF3TGluZSh0aGF0KSB7XHJcbiAgICB0aGF0LnBvc2l0aW9uQXJlYSA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBwb3NpcyA9IHRoYXQuZ2V0UmFuZG9tUG9pbnRzSW5DZXNpdW1Qb2x5Z29uKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMsIHRoYXQub3B0aW9ucy5wb2ludE51bWJlcilcclxuICAgIHRoYXQucG9zaXRpb25zID0gcG9zaXNcclxuICAgIHRoYXQuZ2V0TGluZSh0aGF0LCBwb3NpcylcclxuICAgIC8vIHRoYXQuZWRpdCh0cnVlKVxyXG4gIH1cclxuICBnZXRSYW5kb21Qb2ludHNJbkNlc2l1bVBvbHlnb24ocG9zaXRpb25zLCBjb3VudCkge1xyXG4gICAgbGV0IGxvbnMgPSBbXSwgbGF0cyA9IFtdLCBwb3NpID0gW11cclxuICAgIHBvc2l0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBsb25zLnB1c2goaXRlbS5sbmcpXHJcbiAgICAgIGxhdHMucHVzaChpdGVtLmxhdClcclxuICAgICAgcG9zaS5wdXNoKFtpdGVtLmxuZywgaXRlbS5sYXRdKVxyXG4gICAgfSlcclxuICAgIHBvc2kucHVzaChbcG9zaVswXVswXSwgcG9zaVswXVsxXV0pXHJcbiAgICBjb25zdCBtaW5Mb24gPSBNYXRoLm1pbiguLi5sb25zKSwgbWF4TG9uID0gTWF0aC5tYXgoLi4ubG9ucyk7XHJcbiAgICBjb25zdCBtaW5MYXQgPSBNYXRoLm1pbiguLi5sYXRzKSwgbWF4TGF0ID0gTWF0aC5tYXgoLi4ubGF0cyk7XHJcblxyXG4gICAgY29uc3QgcG9pbnRzID0gW107XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIHdoaWxlIChwb2ludHMubGVuZ3RoIDwgY291bnQpIHtcclxuICAgICAgY29uc3QgbG9uID0gbWluTG9uICsgTWF0aC5yYW5kb20oKSAqIChtYXhMb24gLSBtaW5Mb24pO1xyXG4gICAgICBjb25zdCBsYXQgPSBtaW5MYXQgKyBNYXRoLnJhbmRvbSgpICogKG1heExhdCAtIG1pbkxhdCk7XHJcbiAgICAgIC8vIGNvbnN0IGNhcnRlc2lhbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxvbiwgbGF0KTtcclxuICAgICAgbGV0IHBvaW50ID0gdHVyZi5wb2ludChbbG9uLCBsYXRdKTtcclxuICAgICAgY29uc3QgcG9seWdvbiA9IHR1cmYucG9seWdvbihbXHJcbiAgICAgICAgcG9zaVxyXG4gICAgICBdKTtcclxuXHJcbiAgICAgIGNvbnN0IGlzSW5zaWRlID0gdHVyZi5ib29sZWFuUG9pbnRJblBvbHlnb24ocG9pbnQsIHBvbHlnb24pO1xyXG4gICAgICBpZiAoaXNJbnNpZGUpIHtcclxuICAgICAgICBsZXQgcG9zaSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxvbiwgbGF0KTtcclxuICAgICAgICBjb25zdCBjYXJ0b2dyYXBoaWMgPSB0aGF0LnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocG9zaSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY2FydG9ncmFwaGljLmhlaWdodDtcclxuXHJcbiAgICAgICAgcG9pbnRzLnB1c2goW1xyXG4gICAgICAgICAgbG9uLFxyXG4gICAgICAgICAgbGF0LFxyXG4gICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwb2ludHM7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICBnZXRMaW5lKHRoYXQsIHBvc2l0aW9ucykge1xyXG4gICAgbGV0IG51bSA9IDBcclxuICAgIGxldCBjZWxpYW5nRW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoYXQudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhhdC5vcHRpb25zLmlkKSkge1xyXG4gICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoYXQub3B0aW9ucy5pZCkuX2NoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGF0Lm9wdGlvbnMuaWQpKVxyXG4gICAgfVxyXG4gICAgY2VsaWFuZ0VudGl0eSA9IHRoYXQudmlld2VyLmVudGl0aWVzLmFkZChuZXcgQ2VzaXVtLkVudGl0eSh7IGlkOiB0aGF0Lm9wdGlvbnMuaWQsIHNob3c6IHRoYXQub3B0aW9ucy5zaG93IH0pKVxyXG5cclxuICAgIHBvc2l0aW9ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgcG9pbnQgPSBpdGVtXHJcbiAgICAgIC8v5qC55o2u54K56K6+572u6LW35aeL54K55L2N572uXHJcbiAgICAgIC8vIGxldCBzdGFydCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvaW50WzBdLCBwb2ludFsxXSwgMClcclxuICAgICAgbGV0IHN0YXJ0ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9pbnRbMF0sIHBvaW50WzFdLCBwb2ludFsyXSlcclxuICAgICAgLy/moLnmja7ngrnorr7nva7nu5PmnZ/ngrnkvY3nva5cclxuICAgICAgbGV0IGVuZCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvaW50WzBdLCBwb2ludFsxXSwgcG9pbnRbMl0gKyB0aGF0Lm9wdGlvbnMuaGVpZ2h0ICsgTWF0aC5yYW5kb20oKSAqIHRoYXQub3B0aW9ucy5oZWlnaHREaWZmZXJlbmNlKVxyXG4gICAgICAvL+WIm+W7uue6v1xyXG4gICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgIHBhcmVudDogY2VsaWFuZ0VudGl0eSxcclxuICAgICAgICBpZDogdGhhdC5vcHRpb25zLmlkICsgJy0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBpbmRleCxcclxuICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBbc3RhcnQsIGVuZF0sXHJcbiAgICAgICAgICB3aWR0aDogdGhhdC5vcHRpb25zLndpZHRoLFxyXG4gICAgICAgICAgLy8gbWF0ZXJpYWw6Q2VzaXVtLkNvbG9yLlJFRFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uRmxvd0xpbmVNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5jb2xvcixcclxuICAgICAgICAgICAgZHVyYXRpb246IHRoYXQub3B0aW9ucy5kdXJhdGlvbixcclxuICAgICAgICAgICAgbGluZUJhY2tBbHBoYTogdGhhdC5vcHRpb25zLmxpbmVCYWNrQWxwaGEsXHJcbiAgICAgICAgICAgIG51bTogbnVtXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcblxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgIGVudGl0eS5fY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnBvbHlsaW5lLm1hdGVyaWFsLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXQgcG9pbnROdW1iZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvaW50TnVtYmVyXHJcbiAgfVxyXG4gIHNldCBwb2ludE51bWJlcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9pbnROdW1iZXIgPSB2XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgIGxldCBwb3NpcyA9IHRoaXMuZ2V0UmFuZG9tUG9pbnRzSW5DZXNpdW1Qb2x5Z29uKHRoaXMucG9zaXRpb25BcmVhLCB0aGlzLm9wdGlvbnMucG9pbnROdW1iZXIpXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gcG9zaXNcclxuICAgICAgdGhpcy5nZXRMaW5lKHRoaXMsIHBvc2lzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG5cclxuICBzZXQgaGVpZ2h0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSB2XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgIHRoaXMuZ2V0TGluZSh0aGlzLCB0aGlzLnBvc2l0aW9ucylcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgbGV0IGVudGl0eSA9IHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgaWYgKGVudGl0eSkge1xyXG4gICAgICBlbnRpdHkuc2hvdyA9IHZcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHREaWZmZXJlbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHREaWZmZXJlbmNlXHJcbiAgfVxyXG5cclxuICBzZXQgaGVpZ2h0RGlmZmVyZW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0RGlmZmVyZW5jZSA9IHZcclxuICAgIGxldCBlbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgdGhpcy5nZXRMaW5lKHRoaXMsIHRoaXMucG9zaXRpb25zKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy53aWR0aFxyXG4gIH1cclxuXHJcbiAgc2V0IHdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHZcclxuICAgIGxldCBlbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgZW50aXR5Ll9jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0ucG9seWxpbmUud2lkdGggPSB2XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBkdXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb25cclxuICB9XHJcbiAgc2V0IGR1cmF0aW9uKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9IHZcclxuICAgIGxldCBlbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgZW50aXR5Ll9jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0ucG9seWxpbmUubWF0ZXJpYWwuZHVyYXRpb24gPSB2XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsaW5lQmFja0FscGhhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lQmFja0FscGhhXHJcbiAgfVxyXG4gIHNldCBsaW5lQmFja0FscGhhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lQmFja0FscGhhID0gdlxyXG4gICAgbGV0IGVudGl0eSA9IHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgaWYgKGVudGl0eSkge1xyXG4gICAgICBlbnRpdHkuX2NoaWxkcmVuLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5wb2x5bGluZS5tYXRlcmlhbC5saW5lQmFja0FscGhhID0gdlxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIOe8lui+keahhlxyXG4gICAqIEBwYXJhbSBzdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g54q25oCBOiB0cnVl5omT5byALCBmYWxzZeWFs+mXrVxyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUgPSBmYWxzZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICAvLyBsZXQgZWxtcyA9IHRoaXMuc2RrLnZpZXdlci5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ1lKLWN1c3RvbS1iYXNlLWRpYWxvZycpXHJcbiAgICAvLyBmb3IgKGxldCBpID0gZWxtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgLy8gICB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChlbG1zW2ldKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+mjnue6v+WxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn6aOe57q/J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LnN0eWxlID0gbmV3IENlc2l1bS5DZXNpdW0zRFRpbGVTdHlsZSh7XHJcbiAgICAgICAgICAvLyAgIGNvbG9yOiBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LFwiICsgdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSArIFwiKScpXCIsXHJcbiAgICAgICAgICAvLyAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgZmxvdy1saW5lLXN1cmZhY2UnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCB3YXRlckNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJmbG93TGluZS1jb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW3dhdGVyQ29sb3JQaWNrZXJdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMucG9pbnROdW1iZXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5wb2ludE51bWJlclxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5oZWlnaHRcclxuICAgIHRoaXMuaGVpZ2h0RGlmZmVyZW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmhlaWdodERpZmZlcmVuY2VcclxuICAgIHRoaXMud2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy53aWR0aFxyXG4gICAgdGhpcy5kdXJhdGlvbiA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmR1cmF0aW9uXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMubGluZUJhY2tBbHBoYSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmVCYWNrQWxwaGFcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmjnuWIsOWvueW6lOWunuS9k1xyXG4gICAqL1xyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICAgIGNsb3NlVmlld0ZvbGxvdyh0aGlzLnNkaylcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbVZpZXcgJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbikge1xyXG4gICAgICBsZXQgb3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcgfHwgMC4wKSxcclxuICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHx8IC02MC4wKSxcclxuICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB8fCAwLjApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZ1xyXG4gICAgICBsZXQgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXRcclxuICAgICAgbGV0IGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB7IGxuZzogMCwgbGF0OiAwIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsbmcnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubG5nID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsYXQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubGF0ID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24uYWx0ID0gdGhpcy5vcHRpb25zLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgLy8gaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgLy8gICBwb3NpdGlvbi5hbHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQocG9zaXRpb24pXHJcbiAgICAgIC8vIH1cclxuICAgICAgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcgKyBwb3NpdGlvbi5sbmdcclxuICAgICAgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQgKyBwb3NpdGlvbi5sYXRcclxuICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zW2ldWzBdLFxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaV1bMV0sXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpXVsyXSArIHRoaXMub3B0aW9ucy5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuaGVpZ2h0RGlmZmVyZW5jZSAvIDJcclxuICAgICAgICApXHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0yMC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNwaGVyZSgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAvLyBlbnRpdHnmsqHmnInliqDovb3lrozmiJDml7Ygc3RhdGUg5LiN5Lya562J5LqOMCDmiYDku6Xorr7nva7lrprml7blmajnm7TliLDojrflj5bliLDkuLrmraJcclxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3BoZXJlID0gbmV3IENlc2l1bS5Cb3VuZGluZ1NwaGVyZSgpXHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNkay52aWV3ZXIuX2RhdGFTb3VyY2VEaXNwbGF5LmdldEJvdW5kaW5nU3BoZXJlKFxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBzcGhlcmVcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHN0YXRlID09PSBDZXNpdW0uQm91bmRpbmdTcGhlcmVTdGF0ZS5ET05FKSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliKDpmaRcclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKS5fY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlld2VyLmVudGl0aWVzLnJlbW92ZShpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZCkpXHJcbiAgICB9XHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGbG93TGluZVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBCQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFqQ0E7QUFrQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFuRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBO0FBQUE7QUFBQTtBQTViQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF5YUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/FlowLine/index.js\n"); /***/ }), /***/ "./src/Obj/Base/FlyRoam/_element.js": /*!******************************************!*\ !*** ./src/Obj/Base/FlyRoam/_element.js ***! \******************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\u8BBE\\u7F6E\\u603B\\u65F6\\u957F\\n
\\n \\n \\u79D2(s)\\n \\n
\\n
\\n
\\n \\n \\u662F\\u5426\\u5FAA\\u73AF\\u64AD\\u653E\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\u5E8F\\u53F7
\\n
\\u65F6\\u957F(s)
\\n
\\u64CD\\u4F5C
\\n
\\n
\\n
\\n
\\n
\\n

\\u6682\\u65E0\\u6570\\u636E

\\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRmx5Um9hbS9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9GbHlSb2FtL19lbGVtZW50LmpzPzhiMjciXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbCgpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiaXNUb3RhbFRpbWVcIiBzdHlsZT1cIndpZHRoOiAxNnB4OyBsaW5lLWhlaWdodDogMTVweDsgaGVpZ2h0OiAxNXB4OyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiBhdXRvOyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7orr7nva7mgLvml7bplb88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCB0b3RhbC10aW1lXCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OS45OVwiIHN0ZXA9XCIwLjAxXCIgbmFtZT1cInRvdGFsVGltZVwiIHZhbHVlPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiIHN0eWxlPVwidG9wOiA2cHg7XCI+56eSKHMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicmVwZWF0XCIgc3R5bGU9XCJ3aWR0aDogMTZweDsgbGluZS1oZWlnaHQ6IDE1cHg7IGhlaWdodDogMTVweDsgY3Vyc29yOiBwb2ludGVyOyB3aWR0aDogYXV0bzsgbWFyZ2luLXJpZ2h0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5piv5ZCm5b6q546v5pKt5pS+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1wb2ludFwiPjxzdmcgY2xhc3M9XCJpY29uLWFkZFwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWFkZFwiPjwvdXNlPjwvc3ZnPuWinuWKoOinhueCuTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1vZGlmeS1wb2ludFwiPjxzdmcgY2xhc3M9XCJpY29uLWVkaXRcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1lZGl0XCI+PC91c2U+PC9zdmc+6LCD5pW06KeG54K5PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWZyZXNoUGxheVwiPjxzdmcgY2xhc3M9XCJpY29uLXBsYXlcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1wbGF5XCI+PC91c2U+PC9zdmc+5pKt5pS+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2Vhc2VcIj48c3ZnIGNsYXNzPVwiaWNvbi1wYXVzZVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXBhdXNlXCI+PC91c2U+PC9zdmc+57uT5p2fPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5bqP5Y+3PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5pe26ZW/KHMpPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5pON5L2cPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lbXB0eVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+5pqC5peg5pWw5o2uPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUErREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/FlyRoam/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/FlyRoam/index.js": /*!***************************************!*\ !*** ./src/Obj/Base/FlyRoam/index.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/FlyRoam/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n/**\r\n * @description 飞行漫游\r\n */\n\n\n\n\nvar _clickHandler = /*#__PURE__*/new WeakMap();\nvar FlyRoam = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 飞行漫游\r\n * @param options {object}\r\n * @param options.id {string} 标注id\r\n * @param options.name {string} 名称\r\n * @param options.repeat=0 {number} 重复次数\r\n * @param options.points=[]] {array} 视点列表\r\n * @param options.points[].position {object} 视点位置\r\n * @param options.points[].position.lng {number} 经度\r\n * @param options.points[].position.lat {number} 纬度\r\n * @param options.points[].position.alt {number} 高度\r\n * @param options.points[].orientation {object} 视点方向\r\n * @param options.points[].orientation.heading=0 {number} 视点航向角\r\n * @param options.points[].orientation.pitch=0 {number} 视点俯仰角\r\n * @param options.points[].orientation.roll=0 {number} 视点翻滚角\r\n * @param options.points[].duration=0 {number} 持续时间\r\n **/\n function FlyRoam(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, FlyRoam);\n _this2 = _callSuper(this, FlyRoam, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _clickHandler, undefined);\n _this2.options.id = options.id || _this2.randomString();\n _this2.options.name = options.name || '漫游路径';\n _this2.options.points = options.points || [];\n if (_this2.options.repeat) {\n _this2.options.repeat = Number(_this2.options.repeat);\n }\n _this2.Dialog = _Dialog;\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(FlyRoam, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(FlyRoam, [{\n key: \"repeat\",\n get: function get() {\n return this.options.repeat;\n }\n\n /**设置循环次数 (Infinity: 无限循环)*/,\n set: function set(v) {\n if (this.options.repeat != Number(v)) {\n this.options.repeat = Number(v);\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var repeatElm = this._DialogObject._element.content.querySelector(\"input[name='repeat']\");\n if (v === Infinity) {\n repeatElm.checked = true;\n } else {\n repeatElm.checked = false;\n }\n this.Dialog.changeRepeatStateCallBack && this.Dialog.changeRepeatStateCallBack(repeatElm.checked);\n }\n }\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(state) {\n var _this3 = this;\n var _this, viewer, active, addTrElm, contentElm, all_elm, tableBody, tableEmpty, handler, i, points, nameElm, addListBtn, endBtn, flyBtn, addBtn, modifyBtn, totalTimeElm, isTotalTimeElm, repeatElm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n viewer = this.sdk.viewer;\n active = 0;\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 44;\n break;\n }\n // Object.defineProperty(options, 'points', {\n // get() {\n // return e_allArea.value\n // },\n // set(value) {\n // e_allArea.value = value\n // }\n // })\n addTrElm = function addTrElm(data) {\n var trList = tableBody.getElementsByClassName('tr');\n if (trList.length > 0) {\n trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = undefined;\n }\n var tr_active = tableBody.getElementsByClassName('tr active')[0];\n tr_active && (tr_active.className = 'tr');\n var tr = document.createElement('div');\n tr.className = 'tr active';\n tr.innerHTML = \"\\n
\\u89C6\\u70B9\".concat(i + 1, \"
\\n
\\n \\n
\\n
\\n
\\n \");\n tr.addEventListener('click', function (v) {\n if (v.target.parentNode === tr) {\n var _tr_active = tableBody.getElementsByClassName('tr active')[0];\n _tr_active && (_tr_active.className = 'tr');\n tr.className = 'tr active';\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === tr) {\n active = m + 1;\n break;\n }\n }\n }\n });\n tr.addEventListener('dblclick', function (v) {\n if (v.target.parentNode === tr) {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === tr) {\n viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(points[m].position.lng, points[m].position.lat, points[m].position.alt),\n orientation: points[m].orientation,\n duration: 1\n });\n break;\n }\n }\n }\n });\n var e_play = tr.getElementsByClassName('play')[0];\n var e_delete = tr.getElementsByClassName('delete')[0];\n var e_time = tr.querySelector(\"input[name='time']\");\n e_play.addEventListener('click', function () {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === e_delete.parentNode.parentNode) {\n _this.flyTo(m);\n }\n }\n });\n e_delete.addEventListener(\"click\", function (v) {\n for (var m = 0; m < trList.length; m++) {\n if (trList[m] === e_delete.parentNode.parentNode) {\n points.splice(m, 1);\n points[points.length - 1].duration = 0;\n _this.options.points.splice(m, 1);\n tableBody.removeChild(tr);\n if (active > m + 1) {\n active--;\n trList[active - 1].className = 'tr active';\n } else if (active == m + 1) {\n if (trList.length == m) {\n active -= 1;\n }\n if (trList.length != 0) {\n trList[active - 1].className = 'tr active';\n }\n }\n // else if(active == m) {\n // console.log(trList.length-1, active)\n // if (trList.length == active-1) {\n // trList[active-2].className = 'tr active'\n // }\n // else {\n // trList[active-1].className = 'tr active'\n // }\n // }\n if (trList.length > 0) {\n var lastElm = trList[trList.length - 1].querySelector(\"input[name='time']\");\n lastElm.disabled = 'disabled';\n lastElm.value = 0;\n }\n break;\n }\n }\n // points.splice(i, 1)\n // tableBody.removeChild(tr)\n // if (trList.length > 0) {\n // trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = 'disabled'\n // }\n });\n e_time.addEventListener('input', function (v) {\n isTotalTimeElm.checked = false;\n data.duration = Number(e_time.value);\n if (data.duration < 0) {\n data.duration = 0;\n }\n });\n e_time.addEventListener('blur', function () {\n e_time.value = Number(Number(e_time.value).toFixed(2));\n if (e_time.value < 0) {\n e_time.value = 0;\n }\n });\n tableBody.insertBefore(tr, trList[active]);\n active++;\n trList[trList.length - 1].querySelector(\"input[name='time']\").disabled = 'disabled';\n };\n _context.next = 8;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"](viewer._container, {\n title: '飞行漫游',\n left: '180px',\n top: '100px',\n closeCallBack: function closeCallBack() {\n _this3.cease();\n }\n });\n case 8:\n this._DialogObject = _context.sent;\n _context.next = 11;\n return this._DialogObject.init();\n case 11:\n contentElm = document.createElement('div');\n contentElm.className = 'fly-roam';\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_8__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\"); // EventBinding(all_elm)\n tableBody = contentElm.getElementsByClassName('table-body')[0];\n tableEmpty = contentElm.getElementsByClassName('table-empty')[0];\n handler = {\n set: function set(target, prop, value) {\n target[prop] = value;\n if (target.length > 0) {\n tableEmpty.style.display = 'none';\n } else {\n tableEmpty.style.display = 'flex';\n }\n return true;\n }\n };\n i = 0;\n points = new Proxy([], handler);\n for (i = 0; i < this.options.points.length; i++) {\n points.push(this.options.points[i]);\n addTrElm(this.options.points[i]);\n }\n\n // let nameImputBoxElm = contentElm.getElementsByClassName('input-box')[0]\n // check(nameImputBoxElm, { validator: 'notEmpty', message: '名称不能为空!', trigger: 'input' })\n nameElm = contentElm.querySelector(\"input[name='name']\");\n nameElm.value = this.name;\n nameElm.addEventListener('input', function () {\n _this3.name = nameElm.value;\n });\n addListBtn = document.createElement('button');\n addListBtn.innerHTML = '保存';\n addListBtn.addEventListener('click', function () {\n if (!_this3.name) {\n _this3.name = '漫游路径';\n nameElm.value = _this3.name;\n }\n var newPoints = [];\n points.map(function (item) {\n newPoints.push(item);\n });\n _this3._DialogObject.close();\n _this3.Dialog.confirmCallBack && _this3.Dialog.confirmCallBack({\n id: _this3.options.id,\n name: _this3.name,\n points: newPoints,\n repeat: _this3.repeat + ''\n });\n });\n this._DialogObject.footAppChild(addListBtn);\n endBtn = contentElm.getElementsByClassName('cease')[0];\n endBtn.addEventListener('click', function () {\n viewer.camera.cancelFlight();\n });\n flyBtn = contentElm.getElementsByClassName('afreshPlay')[0];\n flyBtn.addEventListener('click', function () {\n if (points.length > 0) {\n _this3.flyTo(0);\n }\n });\n addBtn = contentElm.getElementsByClassName('add-point')[0];\n addBtn.addEventListener('click', function () {\n var position = _this3.cartesian3Towgs84(viewer.camera.position, viewer);\n var time = 0;\n var data = {\n duration: time,\n position: position,\n orientation: {\n heading: viewer.camera.heading,\n pitch: viewer.camera.pitch,\n roll: viewer.camera.roll\n }\n };\n points.splice(active, 0, data);\n _this3.options.points.splice(active, 0, data);\n addTrElm(data);\n i++;\n });\n modifyBtn = contentElm.getElementsByClassName('modify-point')[0];\n modifyBtn.addEventListener('click', function () {\n if (!active) {\n return;\n }\n var position = _this3.cartesian3Towgs84(viewer.camera.position, viewer);\n _this3.options.points[active - 1].position = points[active - 1].position = position;\n _this3.options.points[active - 1].orientation = points[active - 1].orientation = {\n heading: viewer.camera.heading,\n pitch: viewer.camera.pitch,\n roll: viewer.camera.roll\n };\n _this3.message({\n text: '操作成功'\n });\n });\n totalTimeElm = contentElm.querySelector(\"input[name='totalTime']\");\n isTotalTimeElm = contentElm.querySelector(\"input[name='isTotalTime']\");\n repeatElm = contentElm.querySelector(\"input[name='repeat']\");\n isTotalTimeElm.addEventListener('change', function () {\n var trList = tableBody.getElementsByClassName('tr');\n if (isTotalTimeElm.checked && trList.length > 0) {\n var time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2));\n for (var _i = 0; _i < trList.length - 1; _i++) {\n points[_i].duration = time;\n _this3.options.points[_i].duration = time;\n trList[_i].querySelector(\"input[name='time']\").value = time;\n }\n trList[trList.length - 1].querySelector(\"input[name='time']\").value = 0;\n }\n });\n totalTimeElm.addEventListener('blur', function () {\n var trList = tableBody.getElementsByClassName('tr');\n totalTimeElm.value = Number(totalTimeElm.value);\n if (totalTimeElm.value < 0) {\n totalTimeElm.value = 0;\n }\n if (isTotalTimeElm.checked && trList.length > 0) {\n var time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2));\n for (var _i2 = 0; _i2 < trList.length - 1; _i2++) {\n points[_i2].duration = time;\n _this3.options.points[_i2].duration = time;\n trList[_i2].querySelector(\"input[name='time']\").value = time;\n }\n trList[trList.length - 1].querySelector(\"input[name='time']\").value = 0;\n }\n });\n repeatElm.checked = this.repeat === Infinity ? true : false;\n repeatElm.addEventListener('change', function () {\n if (repeatElm.checked) {\n _this3.repeat = Infinity;\n } else {\n _this3.repeat = 0;\n }\n });\n case 44:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"flyTo\",\n value: function flyTo() {\n var _this4 = this;\n var i = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"setActiveViewer\"])(0);\n var _this = this;\n var points = this.options.points;\n var currentRepeat = this.repeat;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"closeRotateAround\"])(_this.sdk);\n var _executeFlyTo = function executeFlyTo() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var noStart = arguments.length > 1 ? arguments[1] : undefined;\n if (_classPrivateFieldGet(_clickHandler, _this4)) {\n _classPrivateFieldGet(_clickHandler, _this4).destroy();\n }\n var _this = _this4;\n _classPrivateFieldSet(_clickHandler, _this4, new Cesium.ScreenSpaceEventHandler(_this.sdk.viewer.canvas));\n _classPrivateFieldGet(_clickHandler, _this4).setInputAction(function (movement) {\n _this4.cease();\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n var viewer = _this.sdk.viewer;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"setActiveViewer\"])(0);\n viewer.camera.cancelFlight();\n // function pauseExecution(seconds) {\n // return new Promise(resolve => setTimeout(resolve, seconds * 1000));\n // }\n viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(points[index].position.lng, points[index].position.lat, points[index].position.alt),\n orientation: points[index].orientation,\n duration: noStart ? points[index - 1].duration : 0.5,\n maximumHeight: points[index].position.alt,\n complete: function () {\n var _complete = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee2() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n // if (!noStart) {\n // // await pauseExecution(2)\n // }\n index++;\n if (_this4.repeat === Infinity) {\n currentRepeat = Infinity;\n } else if (currentRepeat === Infinity) {\n currentRepeat = _this4.repeat;\n }\n if (index <= points.length - 1) {\n _executeFlyTo(index, true);\n } else if (currentRepeat) {\n currentRepeat--;\n _executeFlyTo(0);\n } else {\n if (_classPrivateFieldGet(_clickHandler, _this4)) {\n _classPrivateFieldGet(_clickHandler, _this4).destroy();\n }\n }\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function complete() {\n return _complete.apply(this, arguments);\n }\n return complete;\n }(),\n easingFunction: noStart ? Cesium.EasingFunction.LINEAR_NONE : Cesium.EasingFunction.EXPONENTIAL_OUT\n });\n };\n _executeFlyTo(i);\n }\n\n /** 停止 */\n }, {\n key: \"cease\",\n value: function cease() {\n this.sdk && this.sdk.viewer && this.sdk.viewer.camera.cancelFlight();\n if (_classPrivateFieldGet(_clickHandler, this)) {\n _classPrivateFieldGet(_clickHandler, this).destroy();\n }\n }\n }, {\n key: \"remove\",\n value: function remove() {\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n } else {\n this.cease();\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlyRoam);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvRmx5Um9hbS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9GbHlSb2FtL2luZGV4LmpzPzJkNTAiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24g6aOe6KGM5ryr5ri4XHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uL0Jhc2VEaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIEZseVJvYW0gZXh0ZW5kcyBCYXNlIHtcclxuICAjY2xpY2tIYW5kbGVyID0gdW5kZWZpbmVkXHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDpo57ooYzmvKvmuLhcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOagh+azqGlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubmFtZSB7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZXBlYXQ9MCB7bnVtYmVyfSDph43lpI3mrKHmlbBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb2ludHM9W11dIHthcnJheX0g6KeG54K55YiX6KGoXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9pbnRzW10ucG9zaXRpb24ge29iamVjdH0g6KeG54K55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9pbnRzW10ucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvaW50c1tdLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb2ludHNbXS5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9pbnRzW10ub3JpZW50YXRpb24ge29iamVjdH0g6KeG54K55pa55ZCRXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9pbnRzW10ub3JpZW50YXRpb24uaGVhZGluZz0wIHtudW1iZXJ9IOinhueCueiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvaW50c1tdLm9yaWVudGF0aW9uLnBpdGNoPTAge251bWJlcn0g6KeG54K55L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9pbnRzW10ub3JpZW50YXRpb24ucm9sbD0wIHtudW1iZXJ9IOinhueCuee/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvaW50c1tdLmR1cmF0aW9uPTAge251bWJlcn0g5oyB57ut5pe26Ze0XHJcbiAgICoqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMub3B0aW9ucy5pZCA9IG9wdGlvbnMuaWQgfHwgdGhpcy5yYW5kb21TdHJpbmcoKVxyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+a8q+a4uOi3r+W+hCdcclxuICAgIHRoaXMub3B0aW9ucy5wb2ludHMgPSBvcHRpb25zLnBvaW50cyB8fCBbXVxyXG4gICAgaWYodGhpcy5vcHRpb25zLnJlcGVhdCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmVwZWF0ID0gTnVtYmVyKHRoaXMub3B0aW9ucy5yZXBlYXQpXHJcbiAgICB9XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICB9XHJcblxyXG4gIGdldCByZXBlYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJlcGVhdFxyXG4gIH1cclxuXHJcbiAgLyoq6K6+572u5b6q546v5qyh5pWwIChJbmZpbml0eTog5peg6ZmQ5b6q546vKSovXHJcbiAgc2V0IHJlcGVhdCh2KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlcGVhdCAhPSBOdW1iZXIodikpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJlcGVhdCA9IE51bWJlcih2KVxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgIGxldCByZXBlYXRFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ncmVwZWF0J11cIilcclxuICAgICAgICBpZiAodiA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgIHJlcGVhdEVsbS5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlcGVhdEVsbS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5EaWFsb2cuY2hhbmdlUmVwZWF0U3RhdGVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jaGFuZ2VSZXBlYXRTdGF0ZUNhbGxCYWNrKHJlcGVhdEVsbS5jaGVja2VkKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy5zZGsudmlld2VyXHJcbiAgICBsZXQgYWN0aXZlID0gMFxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHZpZXdlci5fY29udGFpbmVyLCB7XHJcbiAgICAgICAgdGl0bGU6ICfpo57ooYzmvKvmuLgnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZWFzZSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgYXdhaXQgdGhpcy5fRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmNsYXNzTmFtZSA9ICdmbHktcm9hbSdcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICAvLyBFdmVudEJpbmRpbmcoYWxsX2VsbSlcclxuXHJcbiAgICAgIGxldCB0YWJsZUJvZHkgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXTtcclxuICAgICAgbGV0IHRhYmxlRW1wdHkgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF1cclxuXHJcbiAgICAgIGxldCBoYW5kbGVyID0ge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcclxuICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRhYmxlRW1wdHkuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRhYmxlRW1wdHkuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgICAgbGV0IGkgPSAwXHJcbiAgICAgIGxldCBwb2ludHMgPSBuZXcgUHJveHkoW10sIGhhbmRsZXIpO1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvaW50cy5wdXNoKHRoaXMub3B0aW9ucy5wb2ludHNbaV0pXHJcbiAgICAgICAgYWRkVHJFbG0odGhpcy5vcHRpb25zLnBvaW50c1tpXSlcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIGxldCBuYW1lSW1wdXRCb3hFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LWJveCcpWzBdXHJcbiAgICAgIC8vIGNoZWNrKG5hbWVJbXB1dEJveEVsbSwgeyB2YWxpZGF0b3I6ICdub3RFbXB0eScsIG1lc3NhZ2U6ICflkI3np7DkuI3og73kuLrnqbrvvIEnLCB0cmlnZ2VyOiAnaW5wdXQnIH0pXHJcbiAgICAgIGxldCBuYW1lRWxtID0gY29udGVudEVsbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0nbmFtZSddXCIpXHJcbiAgICAgIG5hbWVFbG0udmFsdWUgPSB0aGlzLm5hbWVcclxuICAgICAgbmFtZUVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lRWxtLnZhbHVlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWRkTGlzdEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICBhZGRMaXN0QnRuLmlubmVySFRNTCA9ICfkv53lrZgnXHJcbiAgICAgIGFkZExpc3RCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9ICfmvKvmuLjot6/lvoQnXHJcbiAgICAgICAgICBuYW1lRWxtLnZhbHVlID0gdGhpcy5uYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuZXdQb2ludHMgPSBbXVxyXG4gICAgICAgIHBvaW50cy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIG5ld1BvaW50cy5wdXNoKGl0ZW0pXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2soXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHMsXHJcbiAgICAgICAgICAgIHJlcGVhdDogdGhpcy5yZXBlYXQrJydcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5mb290QXBwQ2hpbGQoYWRkTGlzdEJ0bilcclxuXHJcbiAgICAgIGxldCBlbmRCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NlYXNlJylbMF1cclxuICAgICAgZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHZpZXdlci5jYW1lcmEuY2FuY2VsRmxpZ2h0KClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBmbHlCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FmcmVzaFBsYXknKVswXVxyXG4gICAgICBmbHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZseVRvKDApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IGFkZEJ0biA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWRkLXBvaW50JylbMF1cclxuICAgICAgYWRkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgdmlld2VyKVxyXG4gICAgICAgIGxldCB0aW1lID0gMFxyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgZHVyYXRpb246IHRpbWUsXHJcbiAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgICAgICBvcmllbnRhdGlvbjoge1xyXG4gICAgICAgICAgICBoZWFkaW5nOiB2aWV3ZXIuY2FtZXJhLmhlYWRpbmcsXHJcbiAgICAgICAgICAgIHBpdGNoOiB2aWV3ZXIuY2FtZXJhLnBpdGNoLFxyXG4gICAgICAgICAgICByb2xsOiB2aWV3ZXIuY2FtZXJhLnJvbGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnRzLnNwbGljZShhY3RpdmUsIDAsIGRhdGEpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvaW50cy5zcGxpY2UoYWN0aXZlLCAwLCBkYXRhKVxyXG4gICAgICAgIGFkZFRyRWxtKGRhdGEpXHJcbiAgICAgICAgaSsrXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBtb2RpZnlCdG4gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGlmeS1wb2ludCcpWzBdXHJcbiAgICAgIG1vZGlmeUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodmlld2VyLmNhbWVyYS5wb3NpdGlvbiwgdmlld2VyKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb2ludHNbYWN0aXZlIC0gMV0ucG9zaXRpb24gPSBwb2ludHNbYWN0aXZlIC0gMV0ucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb2ludHNbYWN0aXZlIC0gMV0ub3JpZW50YXRpb24gPSBwb2ludHNbYWN0aXZlIC0gMV0ub3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgICBoZWFkaW5nOiB2aWV3ZXIuY2FtZXJhLmhlYWRpbmcsXHJcbiAgICAgICAgICBwaXRjaDogdmlld2VyLmNhbWVyYS5waXRjaCxcclxuICAgICAgICAgIHJvbGw6IHZpZXdlci5jYW1lcmEucm9sbFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lc3NhZ2Uoe3RleHQ6ICfmk43kvZzmiJDlip8nfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCB0b3RhbFRpbWVFbG0gPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSd0b3RhbFRpbWUnXVwiKVxyXG4gICAgICBsZXQgaXNUb3RhbFRpbWVFbG0gPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdpc1RvdGFsVGltZSddXCIpXHJcbiAgICAgIGxldCByZXBlYXRFbG0gPSBjb250ZW50RWxtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSdyZXBlYXQnXVwiKVxyXG4gICAgICBpc1RvdGFsVGltZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHRyTGlzdCA9IHRhYmxlQm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgaWYgKGlzVG90YWxUaW1lRWxtLmNoZWNrZWQgJiYgdHJMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCB0aW1lID0gTnVtYmVyKChOdW1iZXIodG90YWxUaW1lRWxtLnZhbHVlKSAvICh0ckxpc3QubGVuZ3RoIC0gMSkpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyTGlzdC5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgcG9pbnRzW2ldLmR1cmF0aW9uID0gdGltZVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9pbnRzW2ldLmR1cmF0aW9uID0gdGltZVxyXG4gICAgICAgICAgICB0ckxpc3RbaV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS52YWx1ZSA9IHRpbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS52YWx1ZSA9IDBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRvdGFsVGltZUVsbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgIGxldCB0ckxpc3QgPSB0YWJsZUJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIHRvdGFsVGltZUVsbS52YWx1ZSA9IE51bWJlcih0b3RhbFRpbWVFbG0udmFsdWUpXHJcbiAgICAgICAgaWYgKHRvdGFsVGltZUVsbS52YWx1ZSA8IDApIHtcclxuICAgICAgICAgIHRvdGFsVGltZUVsbS52YWx1ZSA9IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVG90YWxUaW1lRWxtLmNoZWNrZWQgJiYgdHJMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCB0aW1lID0gTnVtYmVyKChOdW1iZXIodG90YWxUaW1lRWxtLnZhbHVlKSAvICh0ckxpc3QubGVuZ3RoIC0gMSkpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyTGlzdC5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgcG9pbnRzW2ldLmR1cmF0aW9uID0gdGltZVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9pbnRzW2ldLmR1cmF0aW9uID0gdGltZVxyXG4gICAgICAgICAgICB0ckxpc3RbaV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS52YWx1ZSA9IHRpbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS52YWx1ZSA9IDBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJlcGVhdEVsbS5jaGVja2VkID0gKHRoaXMucmVwZWF0ID09PSBJbmZpbml0eSA/IHRydWUgOiBmYWxzZSlcclxuICAgICAgcmVwZWF0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICBpZiAocmVwZWF0RWxtLmNoZWNrZWQpIHtcclxuICAgICAgICAgIHRoaXMucmVwZWF0ID0gSW5maW5pdHlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGVhdCA9IDBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3BvaW50cycsIHtcclxuICAgICAgLy8gICBnZXQoKSB7XHJcbiAgICAgIC8vICAgICByZXR1cm4gZV9hbGxBcmVhLnZhbHVlXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICBzZXQodmFsdWUpIHtcclxuICAgICAgLy8gICAgIGVfYWxsQXJlYS52YWx1ZSA9IHZhbHVlXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KVxyXG5cclxuICAgICAgZnVuY3Rpb24gYWRkVHJFbG0oZGF0YSkge1xyXG4gICAgICAgIGxldCB0ckxpc3QgPSB0YWJsZUJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGlmICh0ckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpLmRpc2FibGVkID0gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0cl9hY3RpdmUgPSB0YWJsZUJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHIgYWN0aXZlJylbMF1cclxuICAgICAgICB0cl9hY3RpdmUgJiYgKHRyX2FjdGl2ZS5jbGFzc05hbWUgPSAndHInKVxyXG4gICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRyLmNsYXNzTmFtZSA9ICd0ciBhY3RpdmUnXHJcbiAgICAgICAgdHIuaW5uZXJIVE1MID0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwianVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+6KeG54K5JHtpICsgMX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHRpbWVcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5Ljk5XCIgc3RlcD1cIjAuMDFcIiBuYW1lPVwidGltZVwiIHZhbHVlPVwiJHtkYXRhLmR1cmF0aW9ufVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhY3Rpb25cIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwbGF5XCI+5pKt5pS+PC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiPuWIoOmZpDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgXHJcbiAgICAgICAgdHIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAodikgPT4ge1xyXG4gICAgICAgICAgaWYgKHYudGFyZ2V0LnBhcmVudE5vZGUgPT09IHRyKSB7XHJcbiAgICAgICAgICAgIGxldCB0cl9hY3RpdmUgPSB0YWJsZUJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHIgYWN0aXZlJylbMF1cclxuICAgICAgICAgICAgdHJfYWN0aXZlICYmICh0cl9hY3RpdmUuY2xhc3NOYW1lID0gJ3RyJylcclxuICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gJ3RyIGFjdGl2ZSdcclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0ckxpc3QubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICBpZiAodHJMaXN0W21dID09PSB0cikge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlID0gbSArIDFcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0ci5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICh2KSA9PiB7XHJcbiAgICAgICAgICBpZiAodi50YXJnZXQucGFyZW50Tm9kZSA9PT0gdHIpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0ckxpc3QubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICBpZiAodHJMaXN0W21dID09PSB0cikge1xyXG4gICAgICAgICAgICAgICAgdmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludHNbbV0ucG9zaXRpb24ubG5nLCBwb2ludHNbbV0ucG9zaXRpb24ubGF0LCBwb2ludHNbbV0ucG9zaXRpb24uYWx0KSxcclxuICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb246IHBvaW50c1ttXS5vcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDFcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGVfcGxheSA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BsYXknKVswXVxyXG4gICAgICAgIGxldCBlX2RlbGV0ZSA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RlbGV0ZScpWzBdXHJcbiAgICAgICAgbGV0IGVfdGltZSA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFtuYW1lPSd0aW1lJ11cIilcclxuICAgICAgICBlX3BsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRyTGlzdC5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICBpZiAodHJMaXN0W21dID09PSBlX2RlbGV0ZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5mbHlUbyhtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBlX2RlbGV0ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKHYpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdHJMaXN0Lmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0ckxpc3RbbV0gPT09IGVfZGVsZXRlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UobSwgMSlcclxuICAgICAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXS5kdXJhdGlvbiA9IDBcclxuICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvaW50cy5zcGxpY2UobSwgMSlcclxuICAgICAgICAgICAgICB0YWJsZUJvZHkucmVtb3ZlQ2hpbGQodHIpXHJcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZSA+IG0gKyAxKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmUtLVxyXG4gICAgICAgICAgICAgICAgdHJMaXN0W2FjdGl2ZSAtIDFdLmNsYXNzTmFtZSA9ICd0ciBhY3RpdmUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGFjdGl2ZSA9PSBtICsgMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRyTGlzdC5sZW5ndGggPT0gbSkge1xyXG4gICAgICAgICAgICAgICAgICBhY3RpdmUgLT0gMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRyTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0ckxpc3RbYWN0aXZlIC0gMV0uY2xhc3NOYW1lID0gJ3RyIGFjdGl2ZSdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gZWxzZSBpZihhY3RpdmUgPT0gbSkge1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2codHJMaXN0Lmxlbmd0aC0xLCBhY3RpdmUpXHJcbiAgICAgICAgICAgICAgLy8gICBpZiAodHJMaXN0Lmxlbmd0aCA9PSBhY3RpdmUtMSkge1xyXG4gICAgICAgICAgICAgIC8vICAgICB0ckxpc3RbYWN0aXZlLTJdLmNsYXNzTmFtZSA9ICd0ciBhY3RpdmUnXHJcbiAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyAgICAgdHJMaXN0W2FjdGl2ZS0xXS5jbGFzc05hbWUgPSAndHIgYWN0aXZlJ1xyXG4gICAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBpZiAodHJMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBsYXN0RWxtID0gdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpXHJcbiAgICAgICAgICAgICAgICBsYXN0RWxtLmRpc2FibGVkID0gJ2Rpc2FibGVkJ1xyXG4gICAgICAgICAgICAgICAgbGFzdEVsbS52YWx1ZSA9IDBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gcG9pbnRzLnNwbGljZShpLCAxKVxyXG4gICAgICAgICAgLy8gdGFibGVCb2R5LnJlbW92ZUNoaWxkKHRyKVxyXG4gICAgICAgICAgLy8gaWYgKHRyTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyAgIHRyTGlzdFt0ckxpc3QubGVuZ3RoIC0gMV0ucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9J3RpbWUnXVwiKS5kaXNhYmxlZCA9ICdkaXNhYmxlZCdcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGVfdGltZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICh2KSA9PiB7XHJcbiAgICAgICAgICBpc1RvdGFsVGltZUVsbS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSBOdW1iZXIoZV90aW1lLnZhbHVlKVxyXG4gICAgICAgICAgaWYgKGRhdGEuZHVyYXRpb24gPCAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBlX3RpbWUuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgIGVfdGltZS52YWx1ZSA9IE51bWJlcihOdW1iZXIoZV90aW1lLnZhbHVlKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgaWYgKGVfdGltZS52YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgZV90aW1lLnZhbHVlID0gMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhYmxlQm9keS5pbnNlcnRCZWZvcmUodHIsIHRyTGlzdFthY3RpdmVdKVxyXG4gICAgICAgIGFjdGl2ZSsrXHJcbiAgICAgICAgdHJMaXN0W3RyTGlzdC5sZW5ndGggLSAxXS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0ndGltZSddXCIpLmRpc2FibGVkID0gJ2Rpc2FibGVkJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbHlUbyhpID0gMCkge1xyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICBsZXQgcG9pbnRzID0gdGhpcy5vcHRpb25zLnBvaW50c1xyXG4gICAgbGV0IGN1cnJlbnRSZXBlYXQgPSB0aGlzLnJlcGVhdFxyXG5cclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKF90aGlzLnNkaylcclxuICAgIGNvbnN0IGV4ZWN1dGVGbHlUbyA9IChpbmRleCA9IDAsIG5vU3RhcnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuI2NsaWNrSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMuI2NsaWNrSGFuZGxlci5kZXN0cm95KClcclxuICAgICAgfVxyXG4gICAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICAgIHRoaXMuI2NsaWNrSGFuZGxlciA9IG5ldyBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIoX3RoaXMuc2RrLnZpZXdlci5jYW52YXMpXHJcbiAgICAgIHRoaXMuI2NsaWNrSGFuZGxlci5zZXRJbnB1dEFjdGlvbigobW92ZW1lbnQpID0+IHtcclxuICAgICAgICB0aGlzLmNlYXNlKClcclxuICAgICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG4gICAgICBsZXQgdmlld2VyID0gX3RoaXMuc2RrLnZpZXdlclxyXG4gICAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgICAgdmlld2VyLmNhbWVyYS5jYW5jZWxGbGlnaHQoKVxyXG4gICAgICAvLyBmdW5jdGlvbiBwYXVzZUV4ZWN1dGlvbihzZWNvbmRzKSB7XHJcbiAgICAgIC8vICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBzZWNvbmRzICogMTAwMCkpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIHZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludHNbaW5kZXhdLnBvc2l0aW9uLmxuZywgcG9pbnRzW2luZGV4XS5wb3NpdGlvbi5sYXQsIHBvaW50c1tpbmRleF0ucG9zaXRpb24uYWx0KSxcclxuICAgICAgICBvcmllbnRhdGlvbjogcG9pbnRzW2luZGV4XS5vcmllbnRhdGlvbixcclxuICAgICAgICBkdXJhdGlvbjogbm9TdGFydCA/IHBvaW50c1tpbmRleCAtIDFdLmR1cmF0aW9uIDogMC41LFxyXG4gICAgICAgIG1heGltdW1IZWlnaHQ6IHBvaW50c1tpbmRleF0ucG9zaXRpb24uYWx0LFxyXG4gICAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBpZiAoIW5vU3RhcnQpIHtcclxuICAgICAgICAgIC8vICAgLy8gYXdhaXQgcGF1c2VFeGVjdXRpb24oMilcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIGluZGV4KytcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXQgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRSZXBlYXQgPSBJbmZpbml0eVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlcGVhdCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgY3VycmVudFJlcGVhdCA9IHRoaXMucmVwZWF0XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kZXggPD0gcG9pbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgZXhlY3V0ZUZseVRvKGluZGV4LCB0cnVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlcGVhdCkge1xyXG4gICAgICAgICAgICBjdXJyZW50UmVwZWF0LS1cclxuICAgICAgICAgICAgZXhlY3V0ZUZseVRvKDApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuI2NsaWNrSGFuZGxlcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuI2NsaWNrSGFuZGxlci5kZXN0cm95KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVhc2luZ0Z1bmN0aW9uOiBub1N0YXJ0ID8gQ2VzaXVtLkVhc2luZ0Z1bmN0aW9uLkxJTkVBUl9OT05FIDogQ2VzaXVtLkVhc2luZ0Z1bmN0aW9uLkVYUE9ORU5USUFMX09VVFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGVGbHlUbyhpKVxyXG5cclxuICB9XHJcblxyXG4gIC8qKiDlgZzmraIgKi9cclxuICBjZWFzZSgpIHtcclxuICAgIHRoaXMuc2RrICYmIHRoaXMuc2RrLnZpZXdlciAmJiB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmNhbmNlbEZsaWdodCgpXHJcbiAgICBpZiAodGhpcy4jY2xpY2tIYW5kbGVyKSB7XHJcbiAgICAgIHRoaXMuI2NsaWNrSGFuZGxlci5kZXN0cm95KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNlYXNlKClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZseVJvYW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBckJBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQTRKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQXJSQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUErSEE7QUFsU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvU0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBekJBO0FBQUE7QUFBQTtBQUFBO0FBMEJBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/FlyRoam/index.js\n"); /***/ }), /***/ "./src/Obj/Base/GeoJson/index.js": /*!***************************************!*\ !*** ./src/Obj/Base/GeoJson/index.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-03-04 10:39\r\n * @description:index\r\n * @update: 2023-03-04 10:39\r\n */\n\n\n\n\n\n\nvar GeoJson = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @param options {object} 参数\r\n * @param options.id {string} id\r\n * @param options.url {string} geojson地址\r\n * @param [options.color=#ef0606] {string} 线条颜色\r\n * @param [options.width=1] {number} 线条宽度\r\n * @example new YJ.Obj.GeoJson(earth,{id:\"123\",url:\"\"})\r\n * */\n function GeoJson(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, GeoJson);\n _this = _callSuper(this, GeoJson, [sdk, options]);\n _this.primitive = undefined;\n _this.positions = [];\n _this.loading = true;\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(GeoJson, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(GeoJson, [{\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n _superPropGet(GeoJson, \"setDefaultValue\", this, 3)([]);\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getHost\"])();\n // let url = this.options.url\n // if (this.options.host) {\n // let o = new URL(this.options.url, this.options.host)\n // url = o.href\n // }\n\n // this.options.url = url\n this.options.color = this.options.color || 'rgb(239, 6, 6, 1)';\n this.options.width = this.options.width || 1;\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n }\n\n // set show(status) {\n // let sdkD = get2DSdk().sdkD\n // if (!this.isShowView || !sdkD) {\n // this.options.show = status\n // }\n // if (this.entity) {\n // if (!this.showView || this.showView == 3 || !sdkD) {\n // for (let i = 0; i < this.entity.entities.values.length; i++) {\n // this.entity.entities.values[i].show = this.options.show\n // }\n // }\n // else {\n // for (let i = 0; i < this.entity.entities.values.length; i++) {\n // this.entity.entities.values[i].show = false\n // }\n // }\n // }\n // syncData(this.sdk, this.options.id)\n // syncSplitData(this.sdk, this.options.id)\n // this.isShowView = false\n // }\n ,\n set: function set(status) {\n this.options.show = status;\n if (this.entity) {\n for (var i = 0; i < this.entity.entities.values.length; i++) {\n this.entity.entities.values[i].show = status;\n }\n }\n }\n }, {\n key: \"on\",\n value: function () {\n var _on = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var url, rsp, json;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n url = \"\";\n if (this.options.host.endsWith(\"yjearth4.0\")) url = this.options.host + '/data/service/getFile';else url = this.options.host + '/yjearth4.0/data/service/getFile';\n url = url + '?path=' + encodeURIComponent(this.options.url);\n _context.next = 5;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getToken\"])()\n }\n });\n case 5:\n rsp = _context.sent;\n _context.next = 8;\n return rsp.json();\n case 8:\n json = _context.sent;\n this.geojson = json;\n // this.sdk.addIncetance(this.options.id, this)\n return _context.abrupt(\"return\", GeoJson.addDataToGlobe(this, json.features));\n case 11:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function on() {\n return _on.apply(this, arguments);\n }\n return on;\n }() /*geojosn暂时只用线的形式*/\n }, {\n key: \"remove\",\n value: function remove() {\n var _this2 = this;\n if (this.entity) {\n this.entity.entities.values.forEach(function (enetity) {\n _this2.sdk.viewer.entities.remove(enetity);\n });\n this.entity = null;\n this.geojson = {};\n }\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var range, orientation, lng, lat, alt, destination, position, _Cesium$Rectangle;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (this.loading) {\n _context2.next = 24;\n break;\n }\n if (!this.geojson) {\n _context2.next = 24;\n break;\n }\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeViewFollow\"])(this.sdk);\n range = turf.bbox(this.geojson);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: range[0],\n lat: range[1]\n }; // 如果没有高度值,则获取紧贴高度计算\n _context2.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context2.sent;\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 24;\n break;\n case 23:\n this.viewer.camera.flyTo({\n destination: (_Cesium$Rectangle = Cesium.Rectangle).fromDegrees.apply(_Cesium$Rectangle, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(range))\n });\n case 24:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"addDataToGlobe\",\n value: function addDataToGlobe(that) {\n var geoJsonDataSource = new Cesium.GeoJsonDataSource();\n var geojson = that.deepCopyObj(that.geojson);\n for (var i = 0; i < geojson.features.length; i++) {\n if (!geojson.features[i].id) {\n geojson.features[i].id = that.options.id + '_' + i;\n }\n }\n // console.log(geojson)\n var promise = geoJsonDataSource.load(geojson, {\n clampToGround: true\n });\n return promise.then(function (datasource) {\n that.entity = datasource;\n datasource.entities.values.forEach(function (enetity) {\n // console.log(enetity)\n var color = Cesium.Color.fromCssColorString(that.options.color);\n var colorPolygon = color.withAlpha(0.2);\n enetity.show = that.options.show;\n that.sdk.viewer.entities.add(enetity);\n if (enetity.billboard) {\n enetity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n enetity.point = new Cesium.PointGraphics({\n show: true,\n color: color,\n // 点的颜色\n pixelSize: 10,\n // 点的大小\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n disableDepthTestDistance: Number.POSITIVE_INFINITY // 不应用深度测试\n });\n }\n if (enetity.polyline) {\n enetity.polyline.material = color;\n enetity.polyline.zIndex = that.sdk._entityZIndex;\n that.sdk._entityZIndex++;\n }\n if (enetity.polygon) {\n enetity.polygon.perPositionHeight = false;\n enetity.polygon.material = colorPolygon;\n enetity.polygon.zIndex = that.sdk._entityZIndex;\n enetity.polyline = new Cesium.PolylineGraphics({\n positions: enetity.polygon.hierarchy._value.positions,\n width: 1,\n clampToGround: true,\n material: color,\n zIndex: that.sdk._entityZIndex\n });\n that.sdk._entityZIndex++;\n }\n });\n that.loading = false;\n });\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeoJson);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR2VvSnNvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9HZW9Kc29uL2luZGV4LmpzPzI5MjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBuYW1lOiBpbmRleFxyXG4gKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yXHJcbiAqIEBkYXRlOiAyMDIzLTAzLTA0IDEwOjM5XHJcbiAqIEBkZXNjcmlwdGlvbu+8mmluZGV4XHJcbiAqIEB1cGRhdGU6IDIwMjMtMDMtMDQgMTA6MzlcclxuICovXHJcbmltcG9ydCB7IGdldEhvc3QsIGdldFRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2luZGV4J1xyXG5pbXBvcnQgVG9vbHMgZnJvbSAnLi4vLi4vLi4vVG9vbHMnXHJcbmltcG9ydCB7IHN5bmNTcGxpdERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuXCI7XHJcbmltcG9ydCB7IHN5bmNEYXRhLCBnZXRTZGsgYXMgZ2V0MkRTZGsgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIEdlb0pzb24gZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5Y+C5pWwXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30gaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy51cmwge3N0cmluZ30gZ2VvanNvbuWcsOWdgFxyXG4gICAqIEBwYXJhbSBbb3B0aW9ucy5jb2xvcj0jZWYwNjA2XSB7c3RyaW5nfSDnur/mnaHpopzoibJcclxuICAgKiBAcGFyYW0gW29wdGlvbnMud2lkdGg9MV0ge251bWJlcn0gIOe6v+adoeWuveW6plxyXG4gICAqIEBleGFtcGxlIG5ldyBZSi5PYmouR2VvSnNvbihlYXJ0aCx7aWQ6XCIxMjNcIix1cmw6XCJcIn0pXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG5cclxuICAgIHRoaXMucHJpbWl0aXZlID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICBcclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWUoKSB7XHJcbiAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKVxyXG4gICAgdGhpcy5vcHRpb25zLmhvc3QgPSB0aGlzLm9wdGlvbnMuaG9zdCB8fCBnZXRIb3N0KClcclxuICAgIC8vIGxldCB1cmwgPSB0aGlzLm9wdGlvbnMudXJsXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLmhvc3QpIHtcclxuICAgIC8vICAgbGV0IG8gPSBuZXcgVVJMKHRoaXMub3B0aW9ucy51cmwsIHRoaXMub3B0aW9ucy5ob3N0KVxyXG4gICAgLy8gICB1cmwgPSBvLmhyZWZcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMudXJsID0gdXJsXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IgfHwgJ3JnYigyMzksIDYsIDYsIDEpJ1xyXG4gICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoIHx8IDFcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgc2hvdyhzdGF0dXMpIHtcclxuICAvLyAgIGxldCBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgLy8gICBpZiAoIXRoaXMuaXNTaG93VmlldyB8fCAhc2RrRCkge1xyXG4gIC8vICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHN0YXR1c1xyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgLy8gICAgIGlmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpIHtcclxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlIHtcclxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLnNob3cgPSBmYWxzZVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAvLyAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAvLyAgIHRoaXMuaXNTaG93VmlldyA9IGZhbHNlXHJcbiAgLy8gfVxyXG4gIHNldCBzaG93KHN0YXR1cykge1xyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSBzdGF0dXNcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gc3RhdHVzXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uKCkge1xyXG4gICAgbGV0IHVybCA9IFwiXCJcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaG9zdC5lbmRzV2l0aChcInlqZWFydGg0LjBcIikpXHJcbiAgICAgIHVybCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy9kYXRhL3NlcnZpY2UvZ2V0RmlsZSdcclxuICAgIGVsc2VcclxuICAgICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL3lqZWFydGg0LjAvZGF0YS9zZXJ2aWNlL2dldEZpbGUnXHJcbiAgICB1cmwgPSB1cmwgKyAnP3BhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm9wdGlvbnMudXJsKVxyXG4gICAgbGV0IHJzcCA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBcInRva2VuXCI6IGdldFRva2VuKCksXHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgZ2V0VG9rZW4oKSxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGxldCBqc29uID0gYXdhaXQgcnNwLmpzb24oKVxyXG4gICAgdGhpcy5nZW9qc29uID0ganNvblxyXG4gICAgLy8gdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIHJldHVybiBHZW9Kc29uLmFkZERhdGFUb0dsb2JlKHRoaXMsIGpzb24uZmVhdHVyZXMpXHJcbiAgfVxyXG5cclxuICAvKmdlb2pvc27mmoLml7blj6rnlKjnur/nmoTlvaLlvI8qL1xyXG4gIHN0YXRpYyBhZGREYXRhVG9HbG9iZSh0aGF0KSB7XHJcbiAgICBjb25zdCBnZW9Kc29uRGF0YVNvdXJjZSA9IG5ldyBDZXNpdW0uR2VvSnNvbkRhdGFTb3VyY2UoKTtcclxuICAgIGxldCBnZW9qc29uID0gdGhhdC5kZWVwQ29weU9iaih0aGF0Lmdlb2pzb24pXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFnZW9qc29uLmZlYXR1cmVzW2ldLmlkKSB7XHJcbiAgICAgICAgZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9IHRoYXQub3B0aW9ucy5pZCArICdfJyArIGlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZ2VvanNvbilcclxuICAgIGxldCBwcm9taXNlID0gZ2VvSnNvbkRhdGFTb3VyY2UubG9hZChnZW9qc29uLCB7XHJcbiAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZGF0YXNvdXJjZSA9PiB7XHJcbiAgICAgIHRoYXQuZW50aXR5ID0gZGF0YXNvdXJjZVxyXG4gICAgICBkYXRhc291cmNlLmVudGl0aWVzLnZhbHVlcy5mb3JFYWNoKGVuZXRpdHkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGVuZXRpdHkpXHJcbiAgICAgICAgbGV0IGNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICAgICAgbGV0IGNvbG9yUG9seWdvbiA9IGNvbG9yLndpdGhBbHBoYSgwLjIpXHJcbiAgICAgICAgZW5ldGl0eS5zaG93ID0gdGhhdC5vcHRpb25zLnNob3dcclxuICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKGVuZXRpdHkpXHJcbiAgICAgICAgaWYgKGVuZXRpdHkuYmlsbGJvYXJkKSB7XHJcbiAgICAgICAgICBlbmV0aXR5LmJpbGxib2FyZC5oZWlnaHRSZWZlcmVuY2UgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORFxyXG4gICAgICAgICAgZW5ldGl0eS5wb2ludCA9IG5ldyBDZXNpdW0uUG9pbnRHcmFwaGljcyh7XHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvciwgLy8g54K555qE6aKc6ImyXHJcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogMTAsIC8vIOeCueeahOWkp+Wwj1xyXG4gICAgICAgICAgICBoZWlnaHRSZWZlcmVuY2U6IENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5ELFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAgLy8g5LiN5bqU55So5rex5bqm5rWL6K+VXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuZXRpdHkucG9seWxpbmUpIHtcclxuICAgICAgICAgIGVuZXRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBjb2xvclxyXG4gICAgICAgICAgZW5ldGl0eS5wb2x5bGluZS56SW5kZXggPSB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgICAgICB0aGF0LnNkay5fZW50aXR5WkluZGV4KytcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvbHlnb24pIHtcclxuICAgICAgICAgIGVuZXRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IGZhbHNlXHJcbiAgICAgICAgICBlbmV0aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBjb2xvclBvbHlnb25cclxuICAgICAgICAgIGVuZXRpdHkucG9seWdvbi56SW5kZXggPSB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcblxyXG4gICAgICAgICAgZW5ldGl0eS5wb2x5bGluZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVHcmFwaGljcyh7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uczogZW5ldGl0eS5wb2x5Z29uLmhpZXJhcmNoeS5fdmFsdWUucG9zaXRpb25zLFxyXG4gICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IGNvbG9yLFxyXG4gICAgICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGF0LnNkay5fZW50aXR5WkluZGV4KytcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQubG9hZGluZyA9IGZhbHNlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5mb3JFYWNoKGVuZXRpdHkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoZW5ldGl0eSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICAgIHRoaXMuZ2VvanNvbiA9IHt9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbygpIHtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmdlb2pzb24pIHtcclxuICAgICAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgICAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICAgICAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgICAgIGxldCByYW5nZSA9IHR1cmYuYmJveCh0aGlzLmdlb2pzb24pO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICBsZXQgb3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB8fCAwLjApXHJcbiAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgIGxldCBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZ1xyXG4gICAgICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICBcclxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiByYW5nZVswXSwgbGF0OiByYW5nZVsxXSB9XHJcbiAgICAgICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyguLi5yYW5nZSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZW9Kc29uXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUFBO0FBQUE7QUFRQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFuQkE7QUFBQTtBQUFBO0FBQUE7QUFxQkE7QUFBQTtBQUFBO0FBeURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUF2Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5Q0E7QUFBQTtBQUFBO0FBMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBd0RBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/GeoJson/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Graffiti/_element.js": /*!*******************************************!*\ !*** ./src/Obj/Base/Graffiti/_element.js ***! \*******************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u6D82\\u9E26\\u989C\\u8272\\n
\\n
\\n
\\n \\u7EBF\\u6761\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JhZmZpdGkvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvR3JhZmZpdGkvX2VsZW1lbnQuanM/NDAzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPua2gum4puminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57q/5p2h5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yXCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwid2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuZXhwb3J0IHsgaHRtbCB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFtQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/Graffiti/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/Graffiti/index.js": /*!****************************************!*\ !*** ./src/Obj/Base/Graffiti/index.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Draw_draw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Draw/draw */ \"./src/Draw/draw.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/Graffiti/_element.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * 涂鸦\r\n */\n\n\n\n\n\n\n\nvar Graffiti = /*#__PURE__*/function (_Draw) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 涂鸦\r\n * @param options {object} 线属性\r\n * @param options.width=10{number} 宽度\r\n * @param options.color=#ff0000{string} 宽度\r\n * */\n function Graffiti(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Graffiti);\n _this2 = _callSuper(this, Graffiti, [sdk, options]);\n _this2.options.width = options.width || 1;\n _this2.options.color = options.color || '#ff0000';\n _this2._elms = {};\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n Graffiti.edit(_this2, true);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(Graffiti, _Draw);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Graffiti, [{\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n if (!this.options.color) {\n return;\n }\n this.options.color = v;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"width\",\n get: function get() {\n return this.options.width;\n },\n set: function set(v) {\n this.options.width = v;\n this._elms.width && this._elms.width.forEach(function (item) {\n item.value = v;\n });\n }\n\n // 编辑框\n }, {\n key: \"start\",\n value:\n /**\r\n * @desc 开始动态获绘制线\r\n * @method start\r\n * })\r\n * */\n function start() {\n var _this4 = this;\n var _this = this;\n if (YJ.Measure.GetMeasureStatus()) {\n console.log('上一次测量未结束');\n } else {\n var viewer = this.sdk.viewer;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"CameraController\"])(this.sdk, false);\n _superPropGet(Graffiti, \"start\", this, 3)([]);\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('长按左键,拖动鼠标进行涂鸦,右键结束涂鸦', this.sdk);\n this.event = new _Event__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk);\n this.positions = [];\n this.points_ids = []; //存放左键点击时临时添加的point的id\n var polylineArray = [];\n var positions = [];\n this.event.mouse_left_down(function (movement, cartesian) {\n positions = [];\n var line = _this4.sdk.viewer.entities.add({\n name: '涂鸦',\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return positions;\n }, false),\n width: _this4.width,\n clampToGround: true,\n material: Cesium.Color.fromCssColorString(_this4.color),\n zIndex: 99999999\n }\n });\n polylineArray.push(line);\n _this4.event.mouse_move(function (movement, cartesian) {\n _this4.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n positions.push(cartesian);\n });\n });\n this.event.mouse_left_up(function (movement, cartesian) {\n polylineArray[polylineArray.length - 1].polyline.positions = positions;\n _this4.event.mouse_move(function (movement, cartesian) {\n _this4.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n });\n this.event.mouse_move(function (movement, cartesian) {\n _this4.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this4.end();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this4.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this4.end();\n }\n });\n });\n }\n }\n\n /**\r\n * @desc 结束制线\r\n * @method end\r\n * })\r\n * */\n }, {\n key: \"end\",\n value: function end() {\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.event = undefined;\n this.tip && this.tip.destroy();\n this.tip = undefined;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"CameraController\"])(this.sdk, true);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n this.end();\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n var entities = this.sdk.viewer.entities.values;\n for (var i = entities.length - 1; i >= 0; i--) {\n if (entities[i].name === '涂鸦') {\n this.sdk.viewer.entities.remove(entities[i]);\n }\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(that, state) {\n var contentElm, colorPicker, all_elm, confirmBtn;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!state) {\n _context.next = 22;\n break;\n }\n _context.next = 3;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](that.sdk.viewer._container, {\n title: '涂鸦参数'\n });\n case 3:\n that._DialogObject = _context.sent;\n _context.next = 6;\n return that._DialogObject.init();\n case 6:\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_13__[\"html\"])();\n that._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: that.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n that.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n that.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n that._DialogObject._element.body.className = that._DialogObject._element.body.className + ' graffiti';\n all_elm = contentElm.getElementsByTagName(\"*\");\n that._EventBinding.on(that, all_elm);\n that._elms = that._EventBinding.element;\n that._elms.color = [colorPicker];\n confirmBtn = document.createElement('button');\n confirmBtn.className = 'confirm';\n confirmBtn.innerHTML = '确认';\n that._DialogObject.footAppChild(confirmBtn);\n confirmBtn.addEventListener('click', function () {\n that.start();\n Graffiti.edit(that, false);\n });\n _context.next = 23;\n break;\n case 22:\n if (that._DialogObject && that._DialogObject.close) {\n that._DialogObject.close();\n that._DialogObject = null;\n }\n case 23:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function edit(_x, _x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }]);\n}(_Draw_draw__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Graffiti);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JhZmZpdGkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvR3JhZmZpdGkvaW5kZXguanM/NzU3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog5raC6bimXHJcbiAqL1xyXG5pbXBvcnQgRHJhdyBmcm9tICcuLi8uLi8uLi9EcmF3L2RyYXcnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQnXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vQmFzZURpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCB7IENhbWVyYUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgR3JhZmZpdGkgZXh0ZW5kcyBEcmF3IHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDmtoLpuKZcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDnur/lsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy53aWR0aD0xMHtudW1iZXJ9IOWuveW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPSNmZjAwMDB7c3RyaW5nfSDlrr3luqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLndpZHRoID0gb3B0aW9ucy53aWR0aCB8fCAxXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICcjZmYwMDAwJ1xyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICBHcmFmZml0aS5lZGl0KHRoaXMsIHRydWUpXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICBpZighdGhpcy5vcHRpb25zLmNvbG9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMuY29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHYsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy53aWR0aFxyXG4gIH1cclxuICBzZXQgd2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLndpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy53aWR0aCAmJiB0aGlzLl9lbG1zLndpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBzdGF0aWMgYXN5bmMgZWRpdCh0aGF0LCBzdGF0ZSkge1xyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoYXQuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC5zZGsudmlld2VyLl9jb250YWluZXIsIHtcclxuICAgICAgICB0aXRsZTogJ+a2gum4puWPguaVsCcsXHJcbiAgICAgIH0pXHJcbiAgICAgIGF3YWl0IHRoYXQuX0RpYWxvZ09iamVjdC5pbml0KClcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhhdC5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoYXQuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhhdC5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBncmFmZml0aSdcclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICB0aGF0Ll9FdmVudEJpbmRpbmcub24odGhhdCwgYWxsX2VsbSlcclxuICAgICAgdGhhdC5fZWxtcyA9IHRoYXQuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgIHRoYXQuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcblxyXG4gICAgICBsZXQgY29uZmlybUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICBjb25maXJtQnRuLmNsYXNzTmFtZSA9ICdjb25maXJtJztcclxuICAgICAgY29uZmlybUJ0bi5pbm5lckhUTUwgPSAn56Gu6K6kJ1xyXG4gICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGNvbmZpcm1CdG4pXHJcbiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgdGhhdC5zdGFydCgpXHJcbiAgICAgICAgR3JhZmZpdGkuZWRpdCh0aGF0LCBmYWxzZSlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoYXQuX0RpYWxvZ09iamVjdCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgICB0aGF0Ll9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgIHRoYXQuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg5byA5aeL5Yqo5oCB6I6357uY5Yi257q/XHJcbiAgICogQG1ldGhvZCBzdGFydFxyXG4gICAqIH0pXHJcbiAgICogKi9cclxuICBzdGFydCgpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygn5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB2aWV3ZXIgPSB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgQ2FtZXJhQ29udHJvbGxlcih0aGlzLnNkaywgZmFsc2UpXHJcbiAgICAgIHN1cGVyLnN0YXJ0KClcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfplb/mjInlt6bplK7vvIzmi5bliqjpvKDmoIfov5vooYzmtoLpuKbvvIzlj7PplK7nu5PmnZ/mtoLpuKYnLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMucG9pbnRzX2lkcyA9IFtdIC8v5a2Y5pS+5bem6ZSu54K55Ye75pe25Li05pe25re75Yqg55qEcG9pbnTnmoRpZFxyXG4gICAgICBsZXQgcG9seWxpbmVBcnJheSA9IFtdXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0X2Rvd24oKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGxldCBsaW5lID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBuYW1lOiAn5raC6bimJyxcclxuICAgICAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25zXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXHJcbiAgICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMuY29sb3IpLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBwb2x5bGluZUFycmF5LnB1c2gobGluZSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGNhcnRlc2lhbilcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnRfdXAoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBwb2x5bGluZUFycmF5W3BvbHlsaW5lQXJyYXkubGVuZ3RoLTFdLnBvbHlsaW5lLnBvc2l0aW9ucyA9IHBvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmVuZCgpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMuZW5kKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2Mg57uT5p2f5Yi257q/XHJcbiAgICogQG1ldGhvZCBlbmRcclxuICAgKiB9KVxyXG4gICAqICovXHJcbiAgZW5kKCkge1xyXG4gICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCA9IHVuZGVmaW5lZFxyXG4gICAgQ2FtZXJhQ29udHJvbGxlcih0aGlzLnNkaywgdHJ1ZSlcclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuZW5kKClcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGxldCBlbnRpdGllcyA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNcclxuICAgIGZvciAobGV0IGkgPSBlbnRpdGllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoZW50aXRpZXNbaV0ubmFtZSA9PT0gJ+a2gum4picpIHtcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKGVudGl0aWVzW2ldKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkge31cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgR3JhZmZpdGlcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQTFKQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2SkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/Graffiti/index.js\n"); /***/ }), /***/ "./src/Obj/Base/GroundImage/_element.js": /*!**********************************************!*\ !*** ./src/Obj/Base/GroundImage/_element.js ***! \**********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\u519B\\u6807\\u6A21\\u5F0F\\n
\\n
\\n
\\n
\\n
\\n \\u65CB\\u8F6C\\u89D2\\u5EA6\\n \\n
\\n \\n \\xB0\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8C03\\u6574\\u5927\\u5C0F\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \\u56FE\\u6807\\u500D\\u6570\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
\\n
\\n \\u6700\\u8FD1\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u6700\\u8FDC\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n

\\u6587\\u5B57\\u8BBE\\u7F6E

\\n
\\n
\\n \\u663E\\u9690\\n \\n
\\n
\\n \\u5B57\\u4F53\\u9009\\u62E9\\n
\\n
\\n
\\n \\u6587\\u5B57\\u5927\\u5C0F\\n
\\n \\n px\\n \\n
\\n
\\n
\\n \\u6587\\u5B57\\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JvdW5kSW1hZ2UvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvR3JvdW5kSW1hZ2UvX2VsZW1lbnQuanM/ZTFjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKCkge1xyXG4gICAgcmV0dXJuIGBcclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYW5jaG9yIGJ0blwiPuiwg+aVtOmUmueCuTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbW9kZS1ib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogdW5zZXQ7XCI+5Yab5qCH5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgbW9kZT1cIjBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ml4vovazop5LluqY8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzNjBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cImFuZ2xlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtmbGV4OiAwIDAgMTAwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIzNjBcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwiYW5nbGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPsKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtb2RlPVwiMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuiwg+aVtOWkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjQwMDAwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzY2FsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtmbGV4OiAwIDAgMTAwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI0MDAwMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbW9kZT1cIjFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBoZWlnaHQtbW9kZS1ib3hcIiBzdHlsZT1cImZsZXg6IDAgMCAxNTVweDttYXJnaW4tcmlnaHQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNTZweDtcIj7pq5jluqbmqKHlvI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVpZ2h0LW1vZGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbjogMCAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1ib3hcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBoZWlnaHRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lm77moIflgI3mlbA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIGRhdGEtbWluPVwiMC4xXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJiaWxsYm9hcmRTY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPuWAjTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtb2RlPVwiMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMTU1cHg7bWFyZ2luLXJpZ2h0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuinhumHjue8qeaUvjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJiaWxsYm9hcmRTY2FsZUJ5RGlzdGFuY2VcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbjogMCAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuacgOi/kei3neemuzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5OTk5OTk5XCIgQG1vZGVsPVwiYmlsbGJvYXJkTmVhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pyA6L+c6Led56a7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5OTk5OTlcIiBAbW9kZWw9XCJiaWxsYm9hcmRGYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aDQgbW9kZT1cIjFcIj7mloflrZforr7nva48L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAgbW9kZT1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDgwcHg7bWFyZ2luOiAwIDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiBub25lO1wiPuaYvumakDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJsYWJlbFNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZm9udC1zZWxlY3QtYm94XCIgc3R5bGU9XCJtYXJnaW46IDAgMHB4O2ZsZXg6IDAgMCAxNTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IG5vbmU7XCI+5a2X5L2T6YCJ5oupPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0IGlucHV0LXNlbGVjdCBmb250LXNlbGVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwibWFyZ2luOiAwIDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5paH5a2X5aSn5bCPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJsYWJlbEZvbnRTaXplXCIgc3R5bGU9XCJ3aWR0aDogNzBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mloflrZfpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQW1IQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/GroundImage/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/GroundImage/index.js": /*!*******************************************!*\ !*** ./src/Obj/Base/GroundImage/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/set */ \"./node_modules/@babel/runtime/helpers/set.js\");\n/* harmony import */ var _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_slider__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/cy_html_slider */ \"./src/Obj/Element/cy_html_slider.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/GroundImage/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropSet(t, e, o, r, p, f) { return _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(f ? t.prototype : t), e, o, r, p); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar GroundImage = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 贴地图片\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.angle=0 {number} 旋转角度\r\n * @param options.scale=1 {number} 比例\r\n * @param options.flipe {object} 翻转\r\n * @param options.flipe.x=false {boolean} 绕X轴翻转\r\n * @param options.flipe.y=false {boolean} 绕Y轴翻转\r\n * @param options.url {string} 图片地址\r\n * @param {Array.} options.position 经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param _Dialog {object} 弹框事件\r\n * @param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function GroundImage(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, GroundImage);\n _this2 = _callSuper(this, GroundImage, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.url = options.url;\n _this2.options.angle = options.angle || 0;\n _this2.options.scale = options.scale || options.scale === 0 ? options.scale : 1;\n _this2.options.position = options.position;\n _this2.options.offset = options.offset || {\n x: 0.5,\n y: 1\n };\n _this2.options.mode = _this2.options.mode ? 1 : 0;\n _this2.options.billboard = options.billboard || {};\n _this2.options.billboard.scale = _this2.options.billboard.scale || 1;\n _this2.options.billboard.near = _this2.options.billboard.near || _this2.options.billboard.near === 0 ? _this2.options.billboard.near : 2000;\n _this2.options.billboard.far = _this2.options.billboard.far || _this2.options.billboard.far === 0 ? _this2.options.billboard.far : 100000;\n _this2.options.billboard.scaleByDistance = _this2.options.billboard.scaleByDistance ? true : false;\n options.label = options.label || {};\n _this2.options.label = options.label || {};\n _this2.options.label.text = options.label.text || _this2.options.name;\n _this2.options.name = _this2.options.label.text;\n _this2.options.label.show = options.label.show || options.label.show === false ? options.label.show : true;\n _this2.options.label.fontFamily = options.label.fontFamily || 0;\n _this2.options.label.fontSize = options.label.fontSize || 39;\n _this2.options.label.color = options.label.color || '#00ffff';\n _this2.options.flipe = options.flipe || {};\n _this2.options.flipe.x = _this2.options.flipe.x || false;\n _this2.options.flipe.y = _this2.options.flipe.y || false;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 3;\n _this2.entity = {\n id: _this2.options.id\n };\n _this2._positionEditing = false;\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2._proj = _this2.sdk.proj;\n _this2.previous = {\n position: _objectSpread({}, _this2.options.position)\n };\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"]();\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_this2.sdk);\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.create();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default()(GroundImage, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(GroundImage, [{\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n _superPropSet(GroundImage, \"name\", v, this, 1, 1);\n this.options.label.text = this.options.name;\n this.entity && (this.entity.label.text = this.options.label.text);\n }\n }, {\n key: \"mode\",\n get: function get() {\n return this.options.mode;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.mode = v ? 1 : 0;\n var modeData = [{\n name: '贴地',\n value: '贴地',\n key: 0\n }, {\n name: '立体',\n value: '立体',\n key: 1\n }];\n var _loop = function _loop(i) {\n if (modeData[i].key === _this3.options.mode) {\n _this3._elms.mode && _this3._elms.mode.forEach(function (item) {\n item.value = modeData[i].value;\n });\n return 1; // break\n }\n };\n for (var i = 0; i < modeData.length; i++) {\n if (_loop(i)) break;\n }\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.body) {\n var elms = this._DialogObject._element.body.getElementsByClassName('row');\n var elms2 = this._DialogObject._element.foot.getElementsByTagName('button');\n var elms3 = this._DialogObject._element.foot.getElementsByTagName('h4');\n for (var _i = 0; _i < elms.length; _i++) {\n var mode = elms[_i].getAttribute('mode');\n if (mode !== null) {\n if (mode == this.options.mode) {\n elms[_i].style.display = 'flex';\n } else {\n elms[_i].style.display = 'none';\n }\n }\n }\n for (var _i2 = 0; _i2 < elms2.length; _i2++) {\n var _mode = elms2[_i2].getAttribute('mode');\n if (_mode !== null) {\n if (_mode == this.options.mode) {\n elms2[_i2].style.display = 'block';\n } else {\n elms2[_i2].style.display = 'none';\n }\n }\n }\n for (var _i3 = 0; _i3 < elms3.length; _i3++) {\n var _mode2 = elms3[_i3].getAttribute('mode');\n if (_mode2 !== null) {\n if (_mode2 == this.options.mode) {\n elms3[_i3].style.display = 'block';\n } else {\n elms3[_i3].style.display = 'none';\n }\n }\n }\n }\n var img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.replaceHost(this.options.url, this.options.host);\n img.onload = function () {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (_this3.mode) {\n // canvas.width = img.width\n // canvas.height = img.height;\n // let billboardH = img.height * (128 / img.width)\n\n // if (this.flipeX) {\n // ctx.scale(1, -1);\n // ctx.translate(0, -canvas.height)\n // }\n // if (this.flipeY) {\n // ctx.scale(-1, 1);\n // ctx.translate(-canvas.width, 0);\n // }\n // ctx.drawImage(img, 0, 0, img.width, img.height)\n // this.entity.billboard.image = canvas\n // this.entity.billboard.pixelOffset = { x: -128 * this.billboardScale * (this.flipeY ? (1-this.options.offset.x) : this.options.offset.x), y: -billboardH * this.billboardScale * (this.flipeX ? (1-this.options.offset.y) : this.options.offset.y) }\n var _canvas = _this3.entity.billboard.image.getValue();\n var billboardH = _canvas.height * (128 / _canvas.width);\n _this3.entity.billboard.pixelOffset = {\n x: -128 * _this3.billboardScale * _this3.options.offset.x,\n y: -billboardH * _this3.billboardScale * _this3.options.offset.y\n };\n _this3.entity.billboard.show = true;\n _this3.labelShow && (_this3.entity.label.show = true);\n _this3.entity.rectangle.show = false;\n } else {\n // 设置画布大小\n canvas.width = img.width * 2;\n canvas.height = img.height * 2;\n\n // 绘制图像\n if (_this3.flipeX) {\n ctx.scale(1, -1);\n ctx.translate(0, -canvas.height);\n }\n if (_this3.flipeY) {\n ctx.scale(-1, 1);\n ctx.translate(-canvas.width, 0);\n }\n ctx.drawImage(img, img.width - img.width * _this3.options.offset.x, img.height - img.height * _this3.options.offset.y);\n _this3.entity.rectangle.material = new Cesium.ImageMaterialProperty({\n image: canvas,\n transparent: true\n });\n _this3.entity.billboard.show = false;\n _this3.entity.label.show = false;\n _this3.entity.rectangle.show = true;\n }\n };\n }\n }, {\n key: \"offset\",\n get: function get() {\n return this.options.offset;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.offset = v;\n var img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.replaceHost(this.options.url, this.options.host);\n img.onload = function () {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (_this4.mode) {\n // canvas.width = img.width\n // canvas.height = img.height;\n // let billboardH = img.height * (128 / img.width)\n\n // if (this.flipeX) {\n // ctx.scale(1, -1);\n // ctx.translate(0, -canvas.height)\n // }\n // if (this.flipeY) {\n // ctx.scale(-1, 1);\n // ctx.translate(-canvas.width, 0);\n // }\n // ctx.drawImage(img, 0, 0, img.width, img.height)\n // this.entity.billboard.image = canvas\n // this.entity.billboard.pixelOffset = { x: -128 * this.billboardScale * (this.flipeY ? (1-this.options.offset.x) : this.options.offset.x), y: -billboardH * this.billboardScale * (this.flipeX ? (1-this.options.offset.y) : this.options.offset.y) }\n var _canvas2 = _this4.entity.billboard.image.getValue();\n var billboardH = _canvas2.height * (128 / _canvas2.width);\n _this4.entity.billboard.pixelOffset = {\n x: -128 * _this4.billboardScale * _this4.options.offset.x,\n y: -billboardH * _this4.billboardScale * _this4.options.offset.y\n };\n _this4.entity.billboard.show = true;\n _this4.labelShow && (_this4.entity.label.show = true);\n _this4.entity.rectangle.show = false;\n } else {\n // 设置画布大小\n canvas.width = img.width * 2;\n canvas.height = img.height * 2;\n\n // 绘制图像\n if (_this4.flipeX) {\n ctx.scale(1, -1);\n ctx.translate(0, -canvas.height);\n }\n if (_this4.flipeY) {\n ctx.scale(-1, 1);\n ctx.translate(-canvas.width, 0);\n }\n ctx.drawImage(img, img.width - img.width * _this4.options.offset.x, img.height - img.height * _this4.options.offset.y);\n _this4.entity.rectangle.material = new Cesium.ImageMaterialProperty({\n image: canvas,\n transparent: true\n });\n _this4.entity.billboard.show = false;\n _this4.entity.label.show = false;\n _this4.entity.rectangle.show = true;\n }\n };\n }\n }, {\n key: \"angle\",\n get: function get() {\n return this.options.angle;\n },\n set: function set(v) {\n this.options.angle = v;\n this._elms.angle && this._elms.angle.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.options.scale;\n },\n set: function set(v) {\n this.options.scale = v;\n this._elms.scale && this._elms.scale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"billboardScale\",\n get: function get() {\n return this.options.billboard.scale;\n },\n set: function set(v) {\n var billboardScale = Number(v.toFixed(2));\n if (billboardScale > 99) {\n billboardScale = 99;\n }\n if (billboardScale < 0.1) {\n billboardScale = 0.1;\n }\n this.options.billboard.scale = billboardScale;\n this.renewPoint();\n this._elms.billboardScale && this._elms.billboardScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"billboardScaleByDistance\",\n get: function get() {\n return this.options.billboard.scaleByDistance;\n },\n set: function set(v) {\n this.options.billboard.scaleByDistance = v;\n this.renewPoint();\n this._elms.billboardScaleByDistance && this._elms.billboardScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"billboardNear\",\n get: function get() {\n return this.options.billboard.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.billboardFar) {\n near = this.billboardFar;\n }\n this.options.billboard.near = near;\n this.renewPoint();\n this._elms.billboardNear && this._elms.billboardNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"billboardFar\",\n get: function get() {\n return this.options.billboard.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.billboardNear) {\n far = this.billboardNear;\n }\n this.options.billboard.far = far;\n this.renewPoint();\n this._elms.billboardFar && this._elms.billboardFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"flipeY\",\n get: function get() {\n return this.options.flipe.y;\n },\n set: function set(v) {\n var _this5 = this;\n if (typeof v === \"boolean\") {\n this.options.flipe.y = v;\n if (!this.entity) {\n return;\n }\n var img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.replaceHost(this.options.url, this.options.host);\n img.onload = function () {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (_this5.mode) {\n // canvas.width = img.width\n // canvas.height = img.height;\n // let billboardH = img.height * (128 / img.width)\n // if (this.flipeX) {\n // ctx.scale(1, -1);\n // ctx.translate(0, -canvas.height)\n // }\n // if (this.flipeY) {\n // ctx.scale(-1, 1);\n // ctx.translate(-canvas.width, 0);\n // }\n // ctx.drawImage(img, 0, 0, img.width, img.height)\n // this.entity.billboard.image = canvas\n // this.entity.billboard.pixelOffset = { x: -128 * this.billboardScale * (this.flipeY ? (1-this.options.offset.x) : this.options.offset.x), y: -billboardH * this.billboardScale * (this.flipeX ? (1-this.options.offset.y) : this.options.offset.y) }\n // this.entity.billboard.show = true\n // this.entity.rectangle.show = false\n } else {\n // 设置画布大小\n canvas.width = img.width * 2;\n canvas.height = img.height * 2;\n\n // 绘制图像\n if (_this5.flipeX) {\n ctx.scale(1, -1);\n ctx.translate(0, -canvas.height);\n }\n if (_this5.flipeY) {\n ctx.scale(-1, 1);\n ctx.translate(-canvas.width, 0);\n }\n ctx.drawImage(img, img.width - img.width * _this5.options.offset.x, img.height - img.height * _this5.options.offset.y);\n _this5.entity.rectangle.material = new Cesium.ImageMaterialProperty({\n image: canvas,\n transparent: true\n });\n _this5.entity.billboard.show = false;\n _this5.entity.label.show = false;\n _this5.entity.rectangle.show = true;\n }\n };\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"flipeX\",\n get: function get() {\n return this.options.flipe.x;\n },\n set: function set(v) {\n var _this6 = this;\n if (typeof v === \"boolean\") {\n this.options.flipe.x = v;\n if (!this.entity) {\n return;\n }\n var img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.replaceHost(this.options.url, this.options.host);\n img.onload = function () {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (_this6.mode) {\n // canvas.width = img.width\n // canvas.height = img.height;\n // let billboardH = img.height * (128 / img.width)\n // if (this.flipeX) {\n // ctx.scale(1, -1);\n // ctx.translate(0, -canvas.height)\n // }\n // if (this.flipeY) {\n // ctx.scale(-1, 1);\n // ctx.translate(-canvas.width, 0);\n // }\n // ctx.drawImage(img, 0, 0, img.width, img.height)\n // this.entity.billboard.image = canvas\n // this.entity.billboard.pixelOffset = { x: -128 * this.billboardScale * (this.flipeY ? (1-this.options.offset.x) : this.options.offset.x), y: -billboardH * this.billboardScale * (this.flipeX ? (1-this.options.offset.y) : this.options.offset.y) }\n // this.entity.billboard.show = true\n // this.entity.rectangle.show = false\n } else {\n // 设置画布大小\n canvas.width = img.width * 2;\n canvas.height = img.height * 2;\n\n // 绘制图像\n if (_this6.flipeX) {\n ctx.scale(1, -1);\n ctx.translate(0, -canvas.height);\n }\n if (_this6.flipeY) {\n ctx.scale(-1, 1);\n ctx.translate(-canvas.width, 0);\n }\n ctx.drawImage(img, img.width - img.width * _this6.options.offset.x, img.height - img.height * _this6.options.offset.y);\n _this6.entity.rectangle.material = new Cesium.ImageMaterialProperty({\n image: canvas,\n transparent: true\n });\n _this6.entity.billboard.show = false;\n _this6.entity.label.show = false;\n _this6.entity.rectangle.show = true;\n }\n\n // this.offset = {\n // x: this.offset.x,\n // y: Math.abs(this.offset.y - 1),\n // }\n };\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n this.options.heightMode = v ? v : 0;\n this.options.heightMode = v || v == 0 ? v : 3;\n var heightMode;\n var heightModeName = '';\n var altBoxElm;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n altBoxElm = this._DialogObject._element.content.getElementsByClassName('alt-box')[0];\n }\n var heightElm;\n if (this._elms.height) {\n heightElm = this._elms.height.getElementsByClassName('input-number')[0];\n }\n switch (this.options.heightMode) {\n case '0':\n case 0:\n altBoxElm && (altBoxElm.className = 'input-number input-number-unit-1 alt-box');\n // this._elms.height && (this._elms.height.style.display = 'flex')\n heightElm && (heightElm.className = 'input-number input-number-unit-1');\n heightMode = Cesium.HeightReference.NONE;\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n altBoxElm && (altBoxElm.className = 'input-number input-number-unit-1 alt-box');\n // this._elms.height && (this._elms.height.style.display = 'flex')\n heightElm && (heightElm.className = 'input-number input-number-unit-1');\n heightMode = Cesium.HeightReference.NONE;\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n altBoxElm && (altBoxElm.className = 'input-number input-number-unit-1 alt-box disabled');\n heightModeName = '依附地表';\n altBoxElm && (altBoxElm.className = 'input-number input-number-unit-1 alt-box disabled');\n heightModeName = '依附地表';\n heightMode = Cesium.HeightReference.CLAMP_TO_GROUND;\n // this._elms.height && (this._elms.height.style.display = 'none')\n heightElm && (heightElm.className = 'input-number input-number-unit-1 disabled');\n break;\n case '3':\n case 3:\n altBoxElm && (altBoxElm.className = 'input-number input-number-unit-1 alt-box disabled');\n // this._elms.height && (this._elms.height.style.display = 'none')\n heightElm && (heightElm.className = 'input-number input-number-unit-1 disabled');\n heightMode = Cesium.HeightReference.NONE;\n heightModeName = '依附模型';\n break;\n }\n if (this.entity && this.entity.billboard) {\n this.entity.billboard.heightReference = heightMode;\n }\n this._elms.heightMode && (this._elms.heightMode.value = heightModeName);\n }\n }, {\n key: \"coordinate\",\n get: function get() {\n return this.options.coordinate;\n },\n set: function set(v) {\n this.options.coordinate = v;\n // let position = this._proj.convert(\n // [\n // {\n // x: this.options.position.lng,\n // y: this.options.position.lat,\n // z: this.options.position.alt\n // }\n // ],\n // 'EPSG:4326',\n // v\n // ).points\n // if (\n // this._DialogObject &&\n // this._DialogObject._element &&\n // this._DialogObject._element.content &&\n // position[0]\n // ) {\n // this._DialogObject._element.content.getElementsByClassName(\n // 'convert-x'\n // )[0].value = position[0].x\n // this._DialogObject._element.content.getElementsByClassName(\n // 'convert-y'\n // )[0].value = position[0].y\n // this._DialogObject._element.content.getElementsByClassName(\n // 'convert-z'\n // )[0].value = position[0].z\n // }\n // this._elms.coordinate &&\n // this._elms.coordinate.forEach(item => {\n // item.value = v\n // })\n }\n }, {\n key: \"position\",\n get: function get() {\n return this.options.position;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.position = v;\n this.coordinate = this.options.coordinate;\n if (this._textToCenter) {\n var point = turf.point([this.options.position.lng, this.options.position.lat]);\n var targetPoint = turf.destination(point, this._textToCenter.distance, this._textToCenter.angle, {\n units: 'kilometers'\n }).geometry.coordinates;\n this.getClampToHeight({\n lng: targetPoint[0],\n lat: targetPoint[1]\n }).then(function (height) {\n var textPosition = [targetPoint[0], targetPoint[1], height];\n _this7.options.text.position = {\n lng: targetPoint[0],\n lat: targetPoint[1],\n alt: height\n };\n _this7.text && (_this7.text.position = textPosition);\n });\n }\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = _this7.options.position.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = _this7.options.position.lat;\n });\n if (this._elms.height) {\n var heightElm = this._elms.height.getElementsByClassName('height')[0];\n if (heightElm) {\n switch (this._elms.heightMode.value) {\n case '海拔高度':\n heightElm.value = this.options.position.alt;\n break;\n case '相对地表':\n if (this.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(this.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(this.options.position.lng, this.options.position.lat)]).then(function (position) {\n heightElm.value = Number((_this7.options.position.alt - position[0].height).toFixed(2));\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.position.alt;\n });\n });\n } else {\n heightElm.value = Number(Number(this.options.position.alt).toFixed(2));\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this7.options.position.alt;\n });\n }\n break;\n case '依附地表':\n case '依附地表':\n break;\n case '依附模型':\n this.updateHeight();\n break;\n }\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.entity) {\n if (this.mode == 1) {\n this.entity.label.show = v;\n } else {\n this.entity.label.show = false;\n }\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.renewPoint();\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.renewPoint();\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.color = v || '#00ffff';\n this.renewPoint();\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.options.label.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this8.labelColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelColor = 'rgba(0,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelColor[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee() {\n var _this9 = this;\n var _this, heightMode, font, response, img;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n // let gap = Math.abs(Math.cos(Math.PI/180 * this.options.position.lat)) * (0.0001*this.options.scale)\n // let fromDegreesArray = [\n // this.options.position.lng - 0.05, this.options.position.lat - 0.05,\n // this.options.position.lng + 0.05, this.options.position.lat - 0.05,\n // this.options.position.lng + 0.05, this.options.position.lat + 0.05,\n // this.options.position.lng - 0.05, this.options.position.lat + 0.05,\n // ]\n _this = this;\n font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontFamily\"])(this.labelFontFamily) || 'Helvetica';\n _context.t0 = this.options.heightMode;\n _context.next = _context.t0 === 2 ? 5 : _context.t0 === '2' ? 5 : 7;\n break;\n case 5:\n heightMode = Cesium.HeightReference.CLAMP_TO_GROUND;\n return _context.abrupt(\"break\", 7);\n case 7:\n _context.next = 9;\n return fetch(this.replaceHost(this.options.url, this.options.host), {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 9:\n response = _context.sent;\n if (response.ok) {\n // let data = await response.blob()\n // let arrayBuffer = await data.arrayBuffer()\n // const str = String.fromCharCode(...new Uint8Array(arrayBuffer));\n img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.replaceHost(this.options.url, this.options.host);\n img.onload = function () {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var canvas2 = document.createElement('canvas');\n var ctx2 = canvas2.getContext('2d');\n var width = img.width;\n var height = img.height;\n canvas2.width = width;\n canvas2.height = height;\n ctx2.drawImage(img, 0, 0, width, height);\n\n // 设置画布大小\n canvas.width = img.width * 2;\n canvas.height = img.height * 2;\n // 绘制图像\n if (_this9.flipeX) {\n ctx.scale(1, -1);\n ctx.translate(0, -canvas.height);\n }\n if (_this9.flipeY) {\n ctx.scale(-1, 1);\n ctx.translate(-canvas.width, 0);\n }\n ctx.drawImage(img, img.width - img.width * _this9.options.offset.x, img.height - img.height * _this9.options.offset.y);\n var billboardH = height * (128 / width);\n _this9.entity = _this9.sdk.viewer.entities.add({\n id: _this9.options.id,\n show: _this9.options.show,\n position: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegrees(_this9.options.position.lng, _this9.options.position.lat, _this9.options.position.alt || 0);\n }),\n billboard: {\n show: _this9.mode ? true : false,\n image: canvas2,\n scale: _this9.billboardScale,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n heightReference: heightMode,\n width: 128,\n height: billboardH,\n horizontalOrigin: Cesium.HorizontalOrigin.LEFT,\n verticalOrigin: Cesium.VerticalOrigin.TOP,\n // pixelOffset: { x: -128 * this.billboardScale * (this.flipeY ? (1-this.options.offset.x) : this.options.offset.x), y: -billboardH * this.billboardScale * (this.flipeX ? (1-this.options.offset.y) : this.options.offset.y) }\n pixelOffset: {\n x: -128 * _this9.billboardScale * _this9.options.offset.x,\n y: -billboardH * _this9.billboardScale * _this9.options.offset.y\n }\n },\n label: {\n show: _this9.mode ? _this.options.label.show : false,\n text: _this.options.label.text,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n heightReference: heightMode,\n font: _this.options.label.fontSize + 'px ' + font,\n fillColor: Cesium.Color.fromCssColorString(_this.options.label.color),\n // verticalOrigin : Cesium.VerticalOrigin.BOTTOM,\n pixelOffset: new Cesium.CallbackProperty(function () {\n if (_this.options.show) {\n return new Cesium.Cartesian2(0, -billboardH * _this.billboardScale - _this.options.label.fontSize / 2 - 5);\n } else {\n return new Cesium.Cartesian2(0, -_this.options.label.fontSize / 2 - 5);\n }\n }, false),\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 1,\n style: Cesium.LabelStyle.FILL_AND_OUTLINE\n },\n rectangle: {\n show: _this9.mode ? false : true,\n coordinates: new Cesium.CallbackProperty(function () {\n var _Cesium$Rectangle;\n var gap = Math.abs(Math.cos(Math.PI / 180 * _this9.options.position.lat)) * (0.0001 * _this9.options.scale);\n var offset = {\n x: _this9.flipeY ? Math.abs(_this9.options.offset.x - 1) : _this9.options.offset.x,\n y: _this9.flipeX ? Math.abs(_this9.options.offset.y - 1) : _this9.options.offset.y\n };\n offset = {\n lng: offset.x * (0.0001 * _this9.options.scale * 2),\n lat: Math.abs(offset.y - 1) * (gap * 2)\n };\n // let point1 = [this.options.position.lng - offset.lng + 360, this.options.position.lat - offset.lat];\n // let point2 = [(this.options.position.lng - offset.lng) + ((0.0001 * this.options.scale) * 2) + 360, (this.options.position.lat - offset.lat) + (gap * 2)];\n // let midpoint = turf.point([point1[0]+point2[0]/2, point1[1]+point2[1]/2]);\n // let rotatedPot = turf.transformRotate(midpoint, -Number(this.options.angle), {pivot: [this.options.position.lng, this.options.position.lat]});\n // console.log(midpoint.geometry.coordinates, rotatedPot.geometry.coordinates, this.options.position)\n // let fromDegreesArray = [\n // rotatedPot.geometry.coordinates[0]-(0.0001 * this.options.scale), rotatedPot.geometry.coordinates[1]-(0.0001 * this.options.scale),\n // rotatedPot.geometry.coordinates[0]+(0.0001 * this.options.scale), rotatedPot.geometry.coordinates[1]+(0.0001 * this.options.scale),\n\n // ]\n var fromDegreesArray = [\n // this.options.position.lng - offset.lng, this.options.position.lat - offset.lat,\n // (this.options.position.lng - offset.lng) + ((0.0001 * this.options.scale) * 2), (this.options.position.lat - offset.lat) + (gap * 2),\n\n _this9.options.position.lng - 0.0001 * _this9.options.scale, _this9.options.position.lat - gap,\n // this.options.position.lng + 0.05, this.options.position.lat - 0.05,\n _this9.options.position.lng + 0.0001 * _this9.options.scale, _this9.options.position.lat + gap\n // this.options.position.lng - 0.05, this.options.position.lat + 0.05,\n ];\n return (_Cesium$Rectangle = Cesium.Rectangle).fromDegrees.apply(_Cesium$Rectangle, fromDegreesArray);\n }, false),\n material: new Cesium.ImageMaterialProperty({\n image: canvas,\n transparent: true\n }),\n rotation: new Cesium.CallbackProperty(function () {\n return Cesium.Math.toRadians(_this9.options.angle);\n }, false),\n stRotation: new Cesium.CallbackProperty(function () {\n return Cesium.Math.toRadians(_this9.options.angle);\n }, false)\n }\n });\n _this9.renewPoint();\n if (_this9.sdk.viewer._element.className === 'cesium-viewer 2d') {\n _this9.entity.rectangle.height = 0;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(_this9.sdk, _this9.options.id);\n if (_this9.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"setSplitDirection\"])(0, _this9.options.id);\n }\n };\n\n // if (data.code === 200 || data.code === 0) {\n // this.$message({\n // message: '添加成功!',\n // type: 'success',\n // duration: 1500\n // });\n // this.close()\n // // this.$emit('getBuildingList')\n // // this.$emit('onSubmitCallBack')\n // }\n }\n case 11:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function create() {\n return _create.apply(this, arguments);\n }\n return create;\n }() // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee5(state) {\n var _this10 = this;\n var _this, mousemoveEvent, mouseupEvent, anchorSetDialogObject, canvas, point, billboardAnchorPosition, contentElm, all_elm, anchorBtn, elms, elms2, i, mode, _i4, _mode3, colorPicker;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context5.next = 27;\n break;\n }\n mousemoveEvent = function mousemoveEvent(e) {\n getDialogBodyElm(e.target);\n function getDialogBodyElm(elm) {\n if (!elm) {\n return;\n } else if (elm === anchorSetDialogObject._element.body) {\n var x = e.x - elm.getBoundingClientRect().left;\n var y = e.y - elm.getBoundingClientRect().top;\n var anchor = {\n x: Number(((x - 42) / canvas.width).toFixed(2)),\n y: Number(((y - 71) / canvas.height).toFixed(2))\n };\n if (anchor.x < 0) {\n anchor.x = 0;\n }\n if (anchor.x > 1) {\n anchor.x = 1;\n }\n if (anchor.y < 0) {\n anchor.y = 0;\n }\n if (anchor.y > 1) {\n anchor.y = 1;\n }\n billboardAnchorPosition = {\n x: anchor.x,\n y: anchor.y\n };\n point.style.top = \"calc(\".concat(billboardAnchorPosition.y * 100, \"% - 5px)\");\n point.style.left = \"calc(\".concat(billboardAnchorPosition.x * 100, \"% - 5px)\");\n } else {\n getDialogBodyElm(elm.offsetParent);\n }\n }\n };\n mouseupEvent = function mouseupEvent() {\n if (anchorSetDialogObject) {\n anchorSetDialogObject._element.body.removeEventListener('mousemove', mousemoveEvent);\n }\n }; // let coordinateData = []\n // this.epsg_map.forEach((value, key) => {\n // coordinateData.push({\n // name: `${value.name}(${value.epsg})`,\n // value: key\n // })\n // })\n // let coordinateDataLegpObject = legp(\n // this._DialogObject._element.content.getElementsByClassName(\n // 'coordinate-select-box'\n // )[0],\n // '.coordinate-select'\n // )\n // if (coordinateDataLegpObject) {\n // coordinateDataLegpObject.legp_search(coordinateData)\n // let coordinateDataLegpElm = this._DialogObject._element.content\n // .getElementsByClassName('coordinate-select')[0]\n // .getElementsByTagName('input')[0]\n // if (!this.coordinate) {\n // this.coordinate = coordinateData[0].value\n // } else {\n // this.coordinate = this.coordinate\n // }\n // coordinateDataLegpElm.value = this.coordinate\n // for (let i = 0; i < coordinateData.length; i++) {\n // if (coordinateData[i].value === coordinateData.value) {\n // coordinateDataLegpObject.legp_searchActive(\n // coordinateData[i].value\n // )\n // break\n // }\n // }\n // coordinateDataLegpElm.addEventListener('input', () => {\n // for (let i = 0; i < coordinateData.length; i++) {\n // if (coordinateData[i].value === coordinateDataLegpElm.value) {\n // this.coordinate = coordinateData[i].value\n // break\n // }\n // }\n // })\n // }\n _context5.next = 8;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.originalOptions, {\n title: '军标属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this10.name = _this10.name.trim();\n if (!_this10.name) {\n _this10.name = '未命名对象';\n }\n _this10.originalOptions = _this10.deepCopyObj(_this10.options);\n _this10._DialogObject.close();\n _this10.Dialog.confirmCallBack && _this10.Dialog.confirmCallBack(_this10.originalOptions);\n // syncData(this.sdk, this.options.id)\n // syncSplitData(this.sdk, this.options.id)\n },\n resetCallBack: function resetCallBack() {\n _this10.reset();\n _this10.Dialog.resetCallBack && _this10.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this10.Dialog.removeCallBack && _this10.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this10.previous = null;\n _this10.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n\n if (anchorSetDialogObject && anchorSetDialogObject.close) {\n anchorSetDialogObject.close();\n }\n _this10.Dialog.closeCallBack && _this10.Dialog.closeCallBack();\n YJ.Measure.SetMeasureStatus(false);\n _this10.positionEditing = false;\n },\n showCallBack: function showCallBack(show) {\n _this10.show = show;\n _this10.Dialog.showCallBack && _this10.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this10.positionEditing = !_this10.positionEditing;\n },\n addFootElm: [{\n tagName: 'button',\n className: 'flipe-over-y',\n innerHTML: 'Y轴翻转',\n event: ['click', function () {\n _this10.flipeY = !_this10.flipeY;\n }]\n }, {\n tagName: 'button',\n className: 'flipe-over-x',\n innerHTML: 'X轴翻转',\n event: ['click', function () {\n _this10.flipeX = !_this10.flipeX;\n }]\n }]\n }, true);\n case 8:\n this._DialogObject = _context5.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' ground-image';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_13__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n anchorBtn = contentElm.getElementsByClassName('anchor')[0];\n anchorBtn.addEventListener('click', /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee2() {\n var DialogClientRect, _DialogObject, contentElm, image;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (anchorSetDialogObject && anchorSetDialogObject.close) {\n anchorSetDialogObject.close();\n }\n document.body.addEventListener('mouseup', mouseupEvent);\n DialogClientRect = _this._DialogObject._element.body.getBoundingClientRect();\n _context2.next = 5;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_this10.sdk, _this10.originalOptions, {\n title: '锚点设置',\n left: DialogClientRect.left + 80 + 'px',\n top: DialogClientRect.top + 200 + 'px',\n confirmCallBack: function confirmCallBack(options) {\n _this.offset = {\n x: billboardAnchorPosition.x,\n y: billboardAnchorPosition.y\n };\n _DialogObject.close();\n },\n closeCallBack: function closeCallBack() {\n document.body.removeEventListener('mouseup', mouseupEvent);\n }\n }, false);\n case 5:\n _DialogObject = _context2.sent;\n anchorSetDialogObject = _DialogObject;\n _DialogObject._element.body.className = _DialogObject._element.body.className + ' anchor-point';\n contentElm = document.createElement('div');\n image = new Image();\n image.src = _this10.replaceHost(_this10.options.url, _this10.options.host);\n image.onload = function () {\n var ratio = image.width / image.height;\n canvas = document.createElement('canvas');\n var width = 150;\n var height = 150 / ratio;\n var ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n canvas.width = width;\n canvas.height = height;\n canvas.style.display = 'block';\n ctx.drawImage(image, 0, 0, width, height);\n contentElm.appendChild(canvas);\n _DialogObject.contentAppChild(contentElm);\n point = document.createElement('span');\n point.className = 'point';\n contentElm.appendChild(point);\n billboardAnchorPosition = {\n x: _this.offset.x,\n y: _this.offset.y\n };\n point.style.top = \"calc(\".concat(Number(billboardAnchorPosition.y) * 100, \"% - 6px)\");\n point.style.left = \"calc(\".concat(Number(billboardAnchorPosition.x) * 100, \"% - 6px)\");\n canvas.addEventListener('click', function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n var anchor = {\n x: Number((x / canvas.width).toFixed(2)),\n y: Number((y / canvas.height).toFixed(2))\n };\n if (anchor.x < 0) {\n anchor.x = 0;\n }\n if (anchor.x > 1) {\n anchor.x = 1;\n }\n if (anchor.y < 0) {\n anchor.y = 0;\n }\n if (anchor.y > 1) {\n anchor.y = 1;\n }\n billboardAnchorPosition = {\n x: anchor.x,\n y: anchor.y\n };\n point.style.top = \"calc(\".concat(billboardAnchorPosition.y * 100, \"% - 5px)\");\n point.style.left = \"calc(\".concat(billboardAnchorPosition.x * 100, \"% - 5px)\");\n });\n point.addEventListener('mousedown', function (e) {\n _DialogObject._element.body.addEventListener('mousemove', mousemoveEvent);\n });\n };\n case 12:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n })));\n elms = contentElm.getElementsByClassName('row');\n elms2 = contentElm.getElementsByTagName('h4');\n for (i = 0; i < elms.length; i++) {\n mode = elms[i].getAttribute('mode');\n if (mode !== null) {\n if (mode == this.options.mode) {\n elms[i].style.display = 'flex';\n } else {\n elms[i].style.display = 'none';\n }\n }\n }\n for (_i4 = 0; _i4 < elms2.length; _i4++) {\n _mode3 = elms2[_i4].getAttribute('mode');\n if (_mode3 !== null) {\n if (_mode3 == this.options.mode) {\n elms2[_i4].style.display = 'block';\n } else {\n elms2[_i4].style.display = 'none';\n }\n }\n }\n\n // let lng = contentElm.getElementsByClassName(\"lng\")[0]\n // let lat = contentElm.getElementsByClassName(\"lat\")[0]\n // let alt = contentElm.getElementsByClassName(\"alt\")[0]\n // lng.value = this.options.position.lng\n // lat.value = this.options.position.lat\n // alt.value = this.options.position.alt\n // this._elms.lng = [lng]\n // this._elms.lat = [lat]\n // this._elms.alt = [alt]\n // lng.addEventListener('blur', (e) => {\n // let value = e.target.value\n // if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n // value = Number(value)\n // if ((e.target.max) && value > Number(e.target.max)) {\n // value = Number(e.target.max)\n // }\n // if ((e.target.min) && value < Number(e.target.min)) {\n // value = Number(e.target.min)\n // }\n // if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) {\n // value = Number(e.target.dataset.min)\n // }\n // }\n // // this.position = {\n // // lng: value,\n // // lat: this.position.lat,\n // // alt: this.position.alt\n // // }\n // this.options.position.lng = value\n // this.coordinate = this.options.coordinate\n // })\n // lat.addEventListener('blur', (e) => {\n // let value = e.target.value\n // if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n // value = Number(value)\n // if ((e.target.max) && value > Number(e.target.max)) {\n // value = Number(e.target.max)\n // }\n // if ((e.target.min) && value < Number(e.target.min)) {\n // value = Number(e.target.min)\n // }\n // if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) {\n // value = Number(e.target.dataset.min)\n // }\n // }\n // // this.position = {\n // // lng: this.position.lng,\n // // lat: value,\n // // alt: this.position.alt\n // // }\n // this.options.position.lat = value\n // this.coordinate = this.options.coordinate\n // })\n // alt.addEventListener('blur', (e) => {\n // let value = e.target.value\n // if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n // value = Number(value)\n // if ((e.target.max) && value > Number(e.target.max)) {\n // value = Number(e.target.max)\n // }\n // if ((e.target.min) && value < Number(e.target.min)) {\n // value = Number(e.target.min)\n // }\n // if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) {\n // value = Number(e.target.dataset.min)\n // }\n // }\n // // this.position = {\n // // lng: this.position.lng,\n // // lat: this.position.lat,\n // // alt: value\n // // }\n // this.options.position.alt = value\n // this.coordinate = this.options.coordinate\n // })\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n this._elms.labelColor = [colorPicker];\n setTimeout(/*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee4() {\n var flipeOverXBtn, flipeOverYBtn, modeData, modeDataLegpObject, modeDataLegpElm, _i5, heightBoxElm, heightElm, heightModeData, heightMode, objectsToExclude, _iterator, _step, _step$value, key, value, heightModeObject, heightModeDataLegpElm, _i7, fontData, fontObject, fontDataLegpElm, _i9;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n flipeOverXBtn = _this10._DialogObject._element.foot.getElementsByClassName('flipe-over-x')[0];\n flipeOverYBtn = _this10._DialogObject._element.foot.getElementsByClassName('flipe-over-y')[0];\n flipeOverXBtn.setAttribute('mode', 0);\n flipeOverYBtn.setAttribute('mode', 0);\n if (_this10.options.mode) {\n flipeOverXBtn.style.display = 'none';\n flipeOverYBtn.style.display = 'none';\n } else {\n flipeOverXBtn.style.display = 'block';\n flipeOverYBtn.style.display = 'block';\n }\n modeData = [{\n name: '贴地',\n value: '贴地',\n key: 0\n }, {\n name: '立体',\n value: '立体',\n key: 1\n }];\n modeDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('mode-box')[0], '.mode');\n if (!modeDataLegpObject) {\n _context4.next = 22;\n break;\n }\n modeDataLegpObject.legp_search(modeData);\n modeDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('mode')[0].getElementsByTagName('input')[0];\n modeDataLegpElm.value = _this10.mode;\n _i5 = 0;\n case 12:\n if (!(_i5 < modeData.length)) {\n _context4.next = 20;\n break;\n }\n if (!(modeData[_i5].key === _this10.mode)) {\n _context4.next = 17;\n break;\n }\n modeDataLegpElm.value = modeData[_i5].value;\n modeDataLegpObject.legp_searchActive(modeData[_i5].value);\n return _context4.abrupt(\"break\", 20);\n case 17:\n _i5++;\n _context4.next = 12;\n break;\n case 20:\n modeDataLegpElm.addEventListener('input', function () {\n for (var _i6 = 0; _i6 < modeData.length; _i6++) {\n if (modeData[_i6].value === modeDataLegpElm.value) {\n _this10.mode = modeData[_i6].key;\n break;\n }\n }\n });\n _this10._elms.mode = [modeDataLegpElm];\n case 22:\n heightBoxElm = _this10._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附地表',\n value: '依附地表',\n key: '2'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '3'\n }];\n heightMode = _this10.heightMode;\n _context4.t0 = heightMode;\n _context4.next = _context4.t0 === 0 ? 29 : _context4.t0 === '0' ? 29 : _context4.t0 === 1 ? 31 : _context4.t0 === '1' ? 31 : _context4.t0 === 2 ? 33 : _context4.t0 === '2' ? 33 : _context4.t0 === 3 ? 33 : _context4.t0 === '3' ? 33 : 38;\n break;\n case 29:\n heightElm.value = _this10.options.position.alt;\n return _context4.abrupt(\"break\", 38);\n case 31:\n if (_this10.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(_this10.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this10.options.position.lng, _this10.options.position.lat)]).then(function (position) {\n heightElm.value = Number((_this10.options.position.alt - Number(position[0].height.toFixed(2))).toFixed(2));\n });\n } else {\n heightElm.value = Number(_this10.options.position.alt.toFixed(2));\n }\n return _context4.abrupt(\"break\", 38);\n case 33:\n objectsToExclude = [];\n _iterator = _createForOfIteratorHelper(_this10.sdk.entityMap);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step.value, 2), key = _step$value[0], value = _step$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n _this10.getClampToHeight(_this10.options.position, objectsToExclude).then(function (h) {\n _this10.options.position.alt = Number(h.toFixed(2));\n _this10.coordinate = _this10.options.coordinate;\n _this10._elms.alt && _this10._elms.alt.forEach(function (item) {\n item.value = _this10.options.position.alt;\n });\n heightElm.value = _this10.options.position.alt;\n });\n return _context4.abrupt(\"break\", 38);\n case 38:\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context4.next = 56;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n heightModeDataLegpElm.value = heightModeData[_this10.heightMode].value;\n _i7 = 0;\n case 44:\n if (!(_i7 < heightModeData.length)) {\n _context4.next = 51;\n break;\n }\n if (!(heightModeData[_i7].value == heightModeDataLegpElm.value)) {\n _context4.next = 48;\n break;\n }\n heightModeObject.legp_searchActive(heightModeData[_i7].value);\n return _context4.abrupt(\"break\", 51);\n case 48:\n _i7++;\n _context4.next = 44;\n break;\n case 51:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i8 = 0; _i8 < heightModeData.length; _i8++) {\n if (heightModeData[_i8].value === heightModeDataLegpElm.value) {\n heightMode = heightModeData[_i8].key;\n switch (heightMode) {\n case 0:\n case '0':\n _this10.options.position.alt = Number(heightElm.value);\n _this10.heightMode = 0;\n // this.position = this.options.position\n break;\n case 1:\n case '1':\n if (_this10.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(_this10.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this10.options.position.lng, _this10.options.position.lat)]).then(function (position) {\n _this10.options.position.alt = Number(heightElm.value) + Number(position[0].height.toFixed(2));\n // this.position = this.options.position\n });\n } else {\n _this10.options.position.alt = Number(heightElm.value);\n // this.position = this.options.position\n }\n _this10.heightMode = 1;\n break;\n case 2:\n case '2':\n _this10.heightMode = 2;\n break;\n case 3:\n case '3':\n var _objectsToExclude = [];\n var _iterator2 = _createForOfIteratorHelper(_this10.sdk.entityMap),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _step2$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step2.value, 2),\n _key = _step2$value[0],\n _value = _step2$value[1];\n if (_value.type === 'RadarScanStereoscopic' && _value.entity) {\n _objectsToExclude.push(_value.entity);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n _this10.getClampToHeight(_this10.options.position, _objectsToExclude).then(function (h) {\n _this10.options.position.alt = Number(h.toFixed(2));\n // this.position = this.options.position\n });\n _this10.heightMode = 3;\n break;\n }\n _this10.position = _this10.options.position;\n break;\n }\n }\n });\n heightElm.addEventListener('blur', /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee3() {\n var position;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.t0 = heightMode;\n _context3.next = _context3.t0 === 0 ? 3 : _context3.t0 === '0' ? 3 : _context3.t0 === 1 ? 5 : _context3.t0 === '1' ? 5 : _context3.t0 === 2 ? 14 : _context3.t0 === '2' ? 14 : 15;\n break;\n case 3:\n _this10.options.position.alt = Number(Number(heightElm.value).toFixed(2));\n return _context3.abrupt(\"break\", 15);\n case 5:\n if (!_this10.sdk.viewer.scene.terrainProvider.availability) {\n _context3.next = 12;\n break;\n }\n _context3.next = 8;\n return Cesium.sampleTerrainMostDetailed(_this10.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(_this10.options.position.lng, _this10.options.position.lat)]);\n case 8:\n position = _context3.sent;\n _this10.options.position.alt = Number(heightElm.value) + Number(position[0].height.toFixed(2));\n _context3.next = 13;\n break;\n case 12:\n _this10.options.position.alt = Number(heightElm.value);\n case 13:\n return _context3.abrupt(\"break\", 15);\n case 14:\n return _context3.abrupt(\"break\", 15);\n case 15:\n _this10.position = _this10.options.position;\n case 16:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n })));\n _this10._elms.height = heightBoxElm;\n _this10._elms.heightMode = heightModeDataLegpElm;\n _this10.heightMode = _this10.heightMode;\n case 56:\n fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontList\"])();\n fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (!fontObject) {\n _context4.next = 72;\n break;\n }\n fontObject.legp_search(fontData);\n fontDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this10.labelFontFamily].value;\n _i9 = 0;\n case 63:\n if (!(_i9 < fontData.length)) {\n _context4.next = 70;\n break;\n }\n if (!(fontData[_i9].value == fontDataLegpElm.value)) {\n _context4.next = 67;\n break;\n }\n fontObject.legp_searchActive(fontData[_i9].value);\n return _context4.abrupt(\"break\", 70);\n case 67:\n _i9++;\n _context4.next = 63;\n break;\n case 70:\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value === fontDataLegpElm.value) {\n _this10.labelFontFamily = fontData[_i10].key;\n break;\n }\n }\n });\n _this10._elms.labelFontFamily = [fontDataLegpElm];\n case 72:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n })), 0);\n _context5.next = 28;\n break;\n case 27:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 28:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this._positionEditing;\n }\n\n /**\r\n * 飞到\r\n */,\n set: function set(status) {\n var _this11 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this._positionEditing = status;\n if (status === true) {\n this.previous = {\n position: _objectSpread({}, this.options.position)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.event.mouse_move(function (movement, cartesian) {\n var position = _this11.cartesian3Towgs84(cartesian, _this11.sdk.viewer);\n _this11.options.position.lng = position.lng;\n _this11.options.position.lat = position.lat;\n _this11.options.position.alt = position.alt;\n _this11.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var position = _this11.cartesian3Towgs84(cartesian, _this11.sdk.viewer);\n _this11.options.position.lng = position.lng;\n _this11.options.position.lat = position.lat;\n _this11.options.position.alt = position.alt;\n _this11.event.mouse_move(function () {});\n _this11.event.mouse_left(function () {});\n _this11.event.mouse_right(function () {});\n _this11.event.gesture_pinck_start(function () {});\n _this11.event.gesture_pinck_end(function () {});\n _this11.previous = null;\n _this11.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this11.options.position.lng = _this11.previous.position.lng;\n _this11.options.position.lat = _this11.previous.position.lat;\n _this11.options.position.alt = _this11.previous.position.alt;\n _this11.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this11.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this11.options.position.lng = _this11.previous.position.lng;\n _this11.options.position.lat = _this11.previous.position.lat;\n _this11.options.position.alt = _this11.previous.position.alt;\n _this11.positionEditing = false;\n } else {\n var position = _this11.cartesian3Towgs84(cartesian, _this11.sdk.viewer);\n _this11.options.position.lng = position.lng;\n _this11.options.position.lat = position.lat;\n _this11.options.position.alt = position.alt;\n _this11.event.mouse_move(function () {});\n _this11.event.mouse_left(function () {});\n _this11.event.mouse_right(function () {});\n _this11.event.gesture_pinck_start(function () {});\n _this11.event.gesture_pinck_end(function () {});\n _this11.positionEditing = false;\n }\n });\n });\n } else {\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (!this.previous) {\n this.previous = {\n position: _objectSpread({}, this.options.position)\n };\n }\n this.position = _objectSpread({}, this.previous.position);\n }\n }\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee6() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n gap,\n fromDegreesArray,\n positionArray,\n height,\n _position,\n point1,\n point2,\n direction,\n c,\n ray,\n r,\n pickedObjects,\n i,\n promise,\n _i11,\n _Cesium$Cartesian,\n a,\n BoundingSphere,\n _args6 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n options = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context6.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.position) {\n position = _objectSpread({}, this.options.position[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context6.next = 16;\n break;\n }\n _context6.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context6.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context6.next = 59;\n break;\n case 23:\n gap = Math.abs(Math.cos(Math.PI / 180 * this.options.position.lat)) * (0.0001 * this.options.scale);\n fromDegreesArray = [[this.options.position.lng - 0.0001 * this.options.scale, this.options.position.lat - gap], [this.options.position.lng + 0.0001 * this.options.scale, this.options.position.lat + gap]];\n positionArray = [];\n height = 0;\n _position = this.options.position;\n point1 = Cesium.Cartesian3.fromDegrees(_position.lng, _position.lat, 0);\n point2 = Cesium.Cartesian3.fromDegrees(_position.lng, _position.lat, 10000000);\n direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, direction);\n ray = new Cesium.Ray(point1, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = 0;\n case 36:\n if (!(i < pickedObjects.length)) {\n _context6.next = 43;\n break;\n }\n if (!pickedObjects[i].position) {\n _context6.next = 40;\n break;\n }\n r = pickedObjects[i];\n return _context6.abrupt(\"break\", 43);\n case 40:\n i++;\n _context6.next = 36;\n break;\n case 43:\n if (!(r && r.position)) {\n _context6.next = 47;\n break;\n }\n height = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n _context6.next = 56;\n break;\n case 47:\n _context6.prev = 47;\n _context6.next = 50;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(_position.lng, _position.lat)]);\n case 50:\n promise = _context6.sent;\n height = promise[0].height;\n _context6.next = 56;\n break;\n case 54:\n _context6.prev = 54;\n _context6.t0 = _context6[\"catch\"](47);\n case 56:\n for (_i11 = 0; _i11 < fromDegreesArray.length; _i11++) {\n a = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(fromDegreesArray[_i11]).concat([height]));\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 59:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, this, [[47, 54]]);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }())\n }, {\n key: \"updateHeight\",\n value: function () {\n var _updateHeight = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee7() {\n var _this12 = this;\n var height, height2, point1, point2, objectsToExclude, _iterator3, _step3, _step3$value, key, value, updatedCartesians, direction, c, ray, r, pickedObjects, i, promise, heightElm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n point1 = new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, 0);\n point2 = new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, 10000000000000);\n objectsToExclude = [];\n _iterator3 = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n _step3$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step3.value, 2), key = _step3$value[0], value = _step3$value[1];\n if (value.type === 'RadarScanStereoscopic' && value.entity) {\n objectsToExclude.push(value.entity);\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n _context7.next = 7;\n return this.sdk.viewer.scene.clampToHeightMostDetailed([point1], objectsToExclude);\n case 7:\n updatedCartesians = _context7.sent;\n if (updatedCartesians && updatedCartesians[0]) {\n height = this.cartesian3Towgs84(updatedCartesians[0], this.sdk.viewer).alt;\n }\n direction = Cesium.Cartesian3.subtract(point1, point2, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, new Cesium.Cartesian3());\n ray = new Cesium.Ray(point2, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = pickedObjects.length - 1;\n case 15:\n if (!(i >= 0)) {\n _context7.next = 22;\n break;\n }\n if (!pickedObjects[i].position) {\n _context7.next = 19;\n break;\n }\n r = pickedObjects[i];\n return _context7.abrupt(\"break\", 22);\n case 19:\n i--;\n _context7.next = 15;\n break;\n case 22:\n if (r && r.position) {\n height2 = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n }\n _context7.prev = 23;\n _context7.next = 26;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(this.options.position.lng, this.options.position.lat)]);\n case 26:\n promise = _context7.sent;\n _context7.next = 31;\n break;\n case 29:\n _context7.prev = 29;\n _context7.t0 = _context7[\"catch\"](23);\n case 31:\n if ((height2 === void 0 || height2 < promise[0].height) && promise) {\n height2 = promise[0].height;\n }\n if (height === void 0 || height < height2) {\n height = height2;\n }\n if (!(height !== undefined)) {\n _context7.next = 50;\n break;\n }\n this.options.position.alt = Number(Number(height).toFixed(2));\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this12.options.position.alt;\n });\n this.coordinate = this.options.coordinate;\n if (!this._elms.height) {\n _context7.next = 50;\n break;\n }\n heightElm = this._elms.height.getElementsByClassName('height')[0];\n if (!heightElm) {\n _context7.next = 50;\n break;\n }\n _context7.t1 = this._elms.heightMode.value;\n _context7.next = _context7.t1 === '海拔高度' ? 43 : _context7.t1 === '相对地表' ? 45 : _context7.t1 === '依附地表' ? 47 : _context7.t1 === '依附模型' ? 48 : 50;\n break;\n case 43:\n heightElm.value = this.options.position.alt;\n return _context7.abrupt(\"break\", 50);\n case 45:\n if (this.sdk.viewer.scene.terrainProvider.availability) {\n Cesium.sampleTerrainMostDetailed(this.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(this.options.position.lng, this.options.position.lat)]).then(function (position) {\n heightElm.value = Number((_this12.options.position.alt - position[0].height).toFixed(2));\n });\n } else {\n heightElm.value = this.options.position.alt;\n }\n return _context7.abrupt(\"break\", 50);\n case 47:\n return _context7.abrupt(\"break\", 50);\n case 48:\n heightElm.value = this.options.position.alt;\n return _context7.abrupt(\"break\", 50);\n case 50:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, this, [[23, 29]]);\n }));\n function updateHeight() {\n return _updateHeight.apply(this, arguments);\n }\n return updateHeight;\n }()\n }, {\n key: \"renewPoint\",\n value: function renewPoint() {\n if (!this.entity.values && this.entity.billboard) {\n var font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontFamily\"])(this.labelFontFamily) || 'Helvetica';\n this.entity.billboard.scale = this.billboardScale;\n if (this.billboardScaleByDistance) {\n this.entity.billboard.scaleByDistance = new Cesium.NearFarScalar(this.billboardNear, 1, this.billboardFar, 0);\n this.entity.billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.billboardNear, 1, this.billboardFar, 0);\n this.entity.label.scaleByDistance = new Cesium.NearFarScalar(this.billboardNear, 1, this.billboardFar, 0);\n this.entity.label.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.billboardNear, 1, this.billboardFar, 0);\n } else {\n this.entity.billboard.scaleByDistance = undefined;\n this.entity.billboard.pixelOffsetScaleByDistance = undefined;\n this.entity.label.scaleByDistance = undefined;\n this.entity.label.pixelOffsetScaleByDistance = undefined;\n }\n this.entity.label.font = this.options.label.fontSize + 'px ' + font;\n this.entity.label.fillColor = Cesium.Color.fromCssColorString(this.options.label.color);\n var _canvas3 = this.entity.billboard.image.getValue();\n var billboardH = _canvas3.height * (128 / _canvas3.width);\n this.entity.billboard.pixelOffset = {\n x: -128 * this.billboardScale * this.options.offset.x,\n y: -billboardH * this.billboardScale * this.options.offset.y\n };\n // this.entity.billboard.pixelOffset = { x: -width * this.billboardScale * (this.flipeY ? (1 - this.options.offset.x) : this.options.offset.x), y: -height * this.billboardScale * (this.flipeX ? (1 - this.options.offset.y) : this.options.offset.y) }\n }\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.options.name;\n this.angle = this.options.angle;\n this.scale = this.options.scale;\n this.offset = this.options.offset;\n this.flipeX = this.options.flipe.x;\n this.flipeY = this.options.flipe.y;\n this.show = this.options.show;\n this.mode = this.options.mode;\n this.heightMode = this.options.heightMode;\n this.billboardScale = this.options.billboard.scale;\n this.labelShow = this.options.label.show;\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee8() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 7;\n return this.sdk.removeIncetance(this.options.id);\n case 7:\n _context8.next = 9;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(this.sdk, this.options.id);\n case 9:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n this.options.position.lng = v.position.lng;\n this.options.position.lat = v.position.lat;\n this.options.position.alt = v.position.alt;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (GroundImage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JvdW5kSW1hZ2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvR3JvdW5kSW1hZ2UvaW5kZXguanM/MTJlYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IGN5X3NsaWRlciBmcm9tIFwiLi4vLi4vRWxlbWVudC9jeV9odG1sX3NsaWRlclwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgZ2V0R3JvdW5kQ292ZXIgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgR3JvdW5kSW1hZ2UgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDotLTlnLDlm77niYdcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFuZ2xlPTAge251bWJlcn0g5peL6L2s6KeS5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2NhbGU9MSB7bnVtYmVyfSDmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5mbGlwZSB7b2JqZWN0fSDnv7vovaxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5mbGlwZS54PWZhbHNlIHtib29sZWFufSDnu5VY6L2057+76L2sXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZmxpcGUueT1mYWxzZSB7Ym9vbGVhbn0g57uVWei9tOe/u+i9rFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnVybCB7c3RyaW5nfSDlm77niYflnLDlnYBcclxuICAgKiBAcGFyYW0ge0FycmF5LjxvYmplY3Q+fSBvcHRpb25zLnBvc2l0aW9uIOe7j+e6rOW6puWSjOmrmOW6pueahOWIl+ihqO+8jOWAvOS6pOabvyBbe2xvbixsYXQsYWx0fSwuLi5dXHJcbiAgICogQHBhcmFtIF9EaWFsb2cge29iamVjdH0g5by55qGG5LqL5Lu2XHJcbiAgICogQHBhcmFtIF9EaWFsb2cuY29uZmlybUNhbGxCYWNrIHtmdW5jdGlvbn0g5by55qGG56Gu6K6k5pe255qE5Zue6LCDXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy51cmwgPSBvcHRpb25zLnVybFxyXG4gICAgdGhpcy5vcHRpb25zLmFuZ2xlID0gb3B0aW9ucy5hbmdsZSB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2NhbGUgPSAob3B0aW9ucy5zY2FsZSB8fCBvcHRpb25zLnNjYWxlID09PSAwKSA/IG9wdGlvbnMuc2NhbGUgOiAxXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uXHJcbiAgICB0aGlzLm9wdGlvbnMub2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgfHwgeyB4OiAwLjUsIHk6IDEgfVxyXG4gICAgdGhpcy5vcHRpb25zLm1vZGUgPSB0aGlzLm9wdGlvbnMubW9kZSA/IDEgOiAwXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkID0gb3B0aW9ucy5iaWxsYm9hcmQgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGUgPSB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLnNjYWxlIHx8IDFcclxuICAgIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQubmVhciA9IHRoaXMub3B0aW9ucy5iaWxsYm9hcmQubmVhciB8fCB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLm5lYXIgPT09IDAgPyB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLm5lYXIgOiAyMDAwXHJcbiAgICB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmZhciA9IHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuZmFyIHx8IHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuZmFyID09PSAwID8gdGhpcy5vcHRpb25zLmJpbGxib2FyZC5mYXIgOiAxMDAwMDBcclxuICAgIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICBvcHRpb25zLmxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQgPSBvcHRpb25zLmxhYmVsLnRleHQgfHwgdGhpcy5vcHRpb25zLm5hbWVcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy5vcHRpb25zLmxhYmVsLnRleHRcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID1cclxuICAgICAgb3B0aW9ucy5sYWJlbC5zaG93IHx8IG9wdGlvbnMubGFiZWwuc2hvdyA9PT0gZmFsc2VcclxuICAgICAgICA/IG9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgICAgIDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplID0gb3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCAzOVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gb3B0aW9ucy5sYWJlbC5jb2xvciB8fCAnIzAwZmZmZidcclxuXHJcbiAgICB0aGlzLm9wdGlvbnMuZmxpcGUgPSBvcHRpb25zLmZsaXBlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuZmxpcGUueCA9IHRoaXMub3B0aW9ucy5mbGlwZS54IHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuZmxpcGUueSA9IHRoaXMub3B0aW9ucy5mbGlwZS55IHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9XHJcbiAgICAgIG9wdGlvbnMuaGVpZ2h0TW9kZSB8fCBvcHRpb25zLmhlaWdodE1vZGUgPT0gMCA/IG9wdGlvbnMuaGVpZ2h0TW9kZSA6IDNcclxuXHJcbiAgICB0aGlzLmVudGl0eSA9IHtcclxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZFxyXG4gICAgfVxyXG4gICAgdGhpcy5fcG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5fcHJvaiA9IHRoaXMuc2RrLnByb2pcclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcbiAgICB0aGlzLmNyZWF0ZSgpXHJcbiAgfVxyXG5cclxuICBnZXQgbmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubmFtZVxyXG4gIH1cclxuXHJcbiAgc2V0IG5hbWUodikge1xyXG4gICAgc3VwZXIubmFtZSA9IHZcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0ID0gdGhpcy5vcHRpb25zLm5hbWVcclxuICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5sYWJlbC50ZXh0ID0gdGhpcy5vcHRpb25zLmxhYmVsLnRleHQpXHJcbiAgfVxyXG5cclxuICBnZXQgbW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubW9kZVxyXG4gIH1cclxuICBzZXQgbW9kZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubW9kZSA9IHYgPyAxIDogMFxyXG4gICAgbGV0IG1vZGVEYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ+i0tOWcsCcsXHJcbiAgICAgICAgdmFsdWU6ICfotLTlnLAnLFxyXG4gICAgICAgIGtleTogMFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ+eri+S9kycsXHJcbiAgICAgICAgdmFsdWU6ICfnq4vkvZMnLFxyXG4gICAgICAgIGtleTogMVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChtb2RlRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5tb2RlKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5tb2RlICYmIHRoaXMuX2VsbXMubW9kZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnZhbHVlID0gbW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5KSB7XHJcbiAgICAgIGxldCBlbG1zID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncm93JylcclxuICAgICAgbGV0IGVsbXMyID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmZvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGxldCBlbG1zMyA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5mb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoNCcpXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBtb2RlID0gZWxtc1tpXS5nZXRBdHRyaWJ1dGUoJ21vZGUnKVxyXG4gICAgICAgIGlmIChtb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAobW9kZSA9PSB0aGlzLm9wdGlvbnMubW9kZSkge1xyXG4gICAgICAgICAgICBlbG1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbG1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbG1zMi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBtb2RlID0gZWxtczJbaV0uZ2V0QXR0cmlidXRlKCdtb2RlJylcclxuICAgICAgICBpZiAobW9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKG1vZGUgPT0gdGhpcy5vcHRpb25zLm1vZGUpIHtcclxuICAgICAgICAgICAgZWxtczJbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbG1zMltpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtczMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgbW9kZSA9IGVsbXMzW2ldLmdldEF0dHJpYnV0ZSgnbW9kZScpXHJcbiAgICAgICAgaWYgKG1vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChtb2RlID09IHRoaXMub3B0aW9ucy5tb2RlKSB7XHJcbiAgICAgICAgICAgIGVsbXMzW2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZWxtczNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XHJcbiAgICBpbWcuc3JjID0gdGhpcy5yZXBsYWNlSG9zdCh0aGlzLm9wdGlvbnMudXJsLCB0aGlzLm9wdGlvbnMuaG9zdCk7XHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlKSB7XHJcbiAgICAgICAgLy8gY2FudmFzLndpZHRoID0gaW1nLndpZHRoXHJcbiAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgLy8gbGV0IGJpbGxib2FyZEggPSBpbWcuaGVpZ2h0ICogKDEyOCAvIGltZy53aWR0aClcclxuXHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgLy8gICBjdHguc2NhbGUoMSwgLTEpO1xyXG4gICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZmxpcGVZKSB7XHJcbiAgICAgICAgLy8gICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodClcclxuICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSBjYW52YXNcclxuICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQucGl4ZWxPZmZzZXQgPSB7IHg6IC0xMjggKiB0aGlzLmJpbGxib2FyZFNjYWxlICogKHRoaXMuZmxpcGVZID8gKDEtdGhpcy5vcHRpb25zLm9mZnNldC54KSA6IHRoaXMub3B0aW9ucy5vZmZzZXQueCksIHk6IC1iaWxsYm9hcmRIICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqICh0aGlzLmZsaXBlWCA/ICgxLXRoaXMub3B0aW9ucy5vZmZzZXQueSkgOiB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpIH1cclxuICAgICAgICBsZXQgY2FudmFzID0gdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlLmdldFZhbHVlKClcclxuICAgICAgICBsZXQgYmlsbGJvYXJkSCA9IGNhbnZhcy5oZWlnaHQgKiAoMTI4IC8gY2FudmFzLndpZHRoKVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IHsgeDogLTEyOCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngsIHk6IC1iaWxsYm9hcmRIICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqIHRoaXMub3B0aW9ucy5vZmZzZXQueSB9XHJcbiAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5sYWJlbFNob3cgJiYgKHRoaXMuZW50aXR5LmxhYmVsLnNob3cgPSB0cnVlKVxyXG4gICAgICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5zaG93ID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyDorr7nva7nlLvluIPlpKflsI9cclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiAyO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogMjtcclxuXHJcbiAgICAgICAgLy8g57uY5Yi25Zu+5YOPXHJcbiAgICAgICAgaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xyXG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmxpcGVZKSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIGltZy53aWR0aCAtIChpbWcud2lkdGggKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngpLCBpbWcuaGVpZ2h0IC0gKGltZy5oZWlnaHQgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpKTtcclxuICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUubWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zaG93ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUuc2hvdyA9IHRydWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBvZmZzZXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm9mZnNldCA9IHZcclxuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XHJcbiAgICBpbWcuc3JjID0gdGhpcy5yZXBsYWNlSG9zdCh0aGlzLm9wdGlvbnMudXJsLCB0aGlzLm9wdGlvbnMuaG9zdCk7XHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlKSB7XHJcbiAgICAgICAgLy8gY2FudmFzLndpZHRoID0gaW1nLndpZHRoXHJcbiAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgLy8gbGV0IGJpbGxib2FyZEggPSBpbWcuaGVpZ2h0ICogKDEyOCAvIGltZy53aWR0aClcclxuXHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgLy8gICBjdHguc2NhbGUoMSwgLTEpO1xyXG4gICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZmxpcGVZKSB7XHJcbiAgICAgICAgLy8gICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodClcclxuICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSBjYW52YXNcclxuICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQucGl4ZWxPZmZzZXQgPSB7IHg6IC0xMjggKiB0aGlzLmJpbGxib2FyZFNjYWxlICogKHRoaXMuZmxpcGVZID8gKDEtdGhpcy5vcHRpb25zLm9mZnNldC54KSA6IHRoaXMub3B0aW9ucy5vZmZzZXQueCksIHk6IC1iaWxsYm9hcmRIICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqICh0aGlzLmZsaXBlWCA/ICgxLXRoaXMub3B0aW9ucy5vZmZzZXQueSkgOiB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpIH1cclxuICAgICAgICBsZXQgY2FudmFzID0gdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlLmdldFZhbHVlKClcclxuICAgICAgICBsZXQgYmlsbGJvYXJkSCA9IGNhbnZhcy5oZWlnaHQgKiAoMTI4IC8gY2FudmFzLndpZHRoKVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IHsgeDogLTEyOCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngsIHk6IC1iaWxsYm9hcmRIICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqIHRoaXMub3B0aW9ucy5vZmZzZXQueSB9XHJcbiAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5sYWJlbFNob3cgJiYgKHRoaXMuZW50aXR5LmxhYmVsLnNob3cgPSB0cnVlKVxyXG4gICAgICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5zaG93ID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyDorr7nva7nlLvluIPlpKflsI9cclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiAyO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogMjtcclxuXHJcbiAgICAgICAgLy8g57uY5Yi25Zu+5YOPXHJcbiAgICAgICAgaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xyXG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmxpcGVZKSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIGltZy53aWR0aCAtIChpbWcud2lkdGggKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngpLCBpbWcuaGVpZ2h0IC0gKGltZy5oZWlnaHQgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpKTtcclxuICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUubWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zaG93ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUuc2hvdyA9IHRydWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFuZ2xlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbmdsZVxyXG4gIH1cclxuXHJcbiAgc2V0IGFuZ2xlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hbmdsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYW5nbGUgJiYgdGhpcy5fZWxtcy5hbmdsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IHNjYWxlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuc2NhbGUgJiYgdGhpcy5fZWxtcy5zY2FsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGJpbGxib2FyZFNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVcclxuICB9XHJcbiAgc2V0IGJpbGxib2FyZFNjYWxlKHYpIHtcclxuICAgIGxldCBiaWxsYm9hcmRTY2FsZSA9IE51bWJlcih2LnRvRml4ZWQoMikpXHJcbiAgICBpZiAoYmlsbGJvYXJkU2NhbGUgPiA5OSkge1xyXG4gICAgICBiaWxsYm9hcmRTY2FsZSA9IDk5XHJcbiAgICB9XHJcbiAgICBpZiAoYmlsbGJvYXJkU2NhbGUgPCAwLjEpIHtcclxuICAgICAgYmlsbGJvYXJkU2NhbGUgPSAwLjFcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGUgPSBiaWxsYm9hcmRTY2FsZVxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgIHRoaXMuX2VsbXMuYmlsbGJvYXJkU2NhbGUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5iaWxsYm9hcmRTY2FsZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYmlsbGJvYXJkU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBiaWxsYm9hcmRTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG4gICAgdGhpcy5fZWxtcy5iaWxsYm9hcmRTY2FsZUJ5RGlzdGFuY2UgJiZcclxuICAgICAgdGhpcy5fZWxtcy5iaWxsYm9hcmRTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYmlsbGJvYXJkTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLm5lYXJcclxuICB9XHJcbiAgc2V0IGJpbGxib2FyZE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMuYmlsbGJvYXJkRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmJpbGxib2FyZEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgIHRoaXMuX2VsbXMuYmlsbGJvYXJkTmVhciAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmJpbGxib2FyZE5lYXIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGJpbGxib2FyZEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYmlsbGJvYXJkLmZhclxyXG4gIH1cclxuICBzZXQgYmlsbGJvYXJkRmFyKHYpIHtcclxuICAgIGxldCBmYXIgPSB2XHJcbiAgICBpZiAoZmFyIDwgdGhpcy5iaWxsYm9hcmROZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMuYmlsbGJvYXJkTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmJpbGxib2FyZC5mYXIgPSBmYXJcclxuICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICB0aGlzLl9lbG1zLmJpbGxib2FyZEZhciAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmJpbGxib2FyZEZhci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgICAgfSlcclxuICB9XHJcblxyXG5cclxuICBnZXQgZmxpcGVZKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mbGlwZS55XHJcbiAgfVxyXG4gIHNldCBmbGlwZVkodikge1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZmxpcGUueSA9IHZcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XHJcbiAgICAgIGltZy5zcmMgPSB0aGlzLnJlcGxhY2VIb3N0KHRoaXMub3B0aW9ucy51cmwsIHRoaXMub3B0aW9ucy5ob3N0KTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSkge1xyXG4gICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gaW1nLndpZHRoXHJcbiAgICAgICAgICAvLyBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgIC8vIGxldCBiaWxsYm9hcmRIID0gaW1nLmhlaWdodCAqICgxMjggLyBpbWcud2lkdGgpXHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5mbGlwZVgpIHtcclxuICAgICAgICAgIC8vICAgY3R4LnNjYWxlKDEsIC0xKTtcclxuICAgICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGlmICh0aGlzLmZsaXBlWSkge1xyXG4gICAgICAgICAgLy8gICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgICAgLy8gICBjdHgudHJhbnNsYXRlKC1jYW52YXMud2lkdGgsIDApO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodClcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZSA9IGNhbnZhc1xyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0ID0geyB4OiAtMTI4ICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqICh0aGlzLmZsaXBlWSA/ICgxLXRoaXMub3B0aW9ucy5vZmZzZXQueCkgOiB0aGlzLm9wdGlvbnMub2Zmc2V0LngpLCB5OiAtYmlsbGJvYXJkSCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiAodGhpcy5mbGlwZVggPyAoMS10aGlzLm9wdGlvbnMub2Zmc2V0LnkpIDogdGhpcy5vcHRpb25zLm9mZnNldC55KSB9XHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2hvdyA9IHRydWVcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyDorr7nva7nlLvluIPlpKflsI9cclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIDI7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIDI7XHJcblxyXG4gICAgICAgICAgLy8g57uY5Yi25Zu+5YOPXHJcbiAgICAgICAgICBpZiAodGhpcy5mbGlwZVgpIHtcclxuICAgICAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtY2FudmFzLmhlaWdodClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmZsaXBlWSkge1xyXG4gICAgICAgICAgICBjdHguc2NhbGUoLTEsIDEpO1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKC1jYW52YXMud2lkdGgsIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIGltZy53aWR0aCAtIChpbWcud2lkdGggKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngpLCBpbWcuaGVpZ2h0IC0gKGltZy5oZWlnaHQgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpKTtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uSW1hZ2VNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhcyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIuWPguaVsOW/hemhu+S4umJvb2xlYW5cIilcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZsaXBlWCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmxpcGUueFxyXG4gIH1cclxuICBzZXQgZmxpcGVYKHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmZsaXBlLnggPSB2XHJcbiAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgICBpbWcuc3JjID0gdGhpcy5yZXBsYWNlSG9zdCh0aGlzLm9wdGlvbnMudXJsLCB0aGlzLm9wdGlvbnMuaG9zdCk7XHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUpIHtcclxuICAgICAgICAgIC8vIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aFxyXG4gICAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAvLyBsZXQgYmlsbGJvYXJkSCA9IGltZy5oZWlnaHQgKiAoMTI4IC8gaW1nLndpZHRoKVxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgICAvLyAgIGN0eC5zY2FsZSgxLCAtMSk7XHJcbiAgICAgICAgICAvLyAgIGN0eC50cmFuc2xhdGUoMCwgLWNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5mbGlwZVkpIHtcclxuICAgICAgICAgIC8vICAgY3R4LnNjYWxlKC0xLCAxKTtcclxuICAgICAgICAgIC8vICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBpbWcud2lkdGgsIGltZy5oZWlnaHQpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSBjYW52YXNcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IHsgeDogLTEyOCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiAodGhpcy5mbGlwZVkgPyAoMS10aGlzLm9wdGlvbnMub2Zmc2V0LngpIDogdGhpcy5vcHRpb25zLm9mZnNldC54KSwgeTogLWJpbGxib2FyZEggKiB0aGlzLmJpbGxib2FyZFNjYWxlICogKHRoaXMuZmxpcGVYID8gKDEtdGhpcy5vcHRpb25zLm9mZnNldC55KSA6IHRoaXMub3B0aW9ucy5vZmZzZXQueSkgfVxyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSB0cnVlXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5yZWN0YW5nbGUuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8g6K6+572u55S75biD5aSn5bCPXHJcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiAyO1xyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQgKiAyO1xyXG5cclxuICAgICAgICAgIC8vIOe7mOWItuWbvuWDj1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmxpcGVYKSB7XHJcbiAgICAgICAgICAgIGN0eC5zY2FsZSgxLCAtMSk7XHJcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLWNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5mbGlwZVkpIHtcclxuICAgICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtY2FudmFzLndpZHRoLCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCBpbWcud2lkdGggLSAoaW1nLndpZHRoICogdGhpcy5vcHRpb25zLm9mZnNldC54KSwgaW1nLmhlaWdodCAtIChpbWcuaGVpZ2h0ICogdGhpcy5vcHRpb25zLm9mZnNldC55KSk7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUubWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5lbnRpdHkubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUuc2hvdyA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMub2Zmc2V0ID0ge1xyXG4gICAgICAgIC8vICAgeDogdGhpcy5vZmZzZXQueCxcclxuICAgICAgICAvLyAgIHk6IE1hdGguYWJzKHRoaXMub2Zmc2V0LnkgLSAxKSxcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IHYgPyB2IDogMFxyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSB2IHx8IHYgPT0gMCA/IHYgOiAzXHJcbiAgICBsZXQgaGVpZ2h0TW9kZVxyXG4gICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgIGxldCBhbHRCb3hFbG1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ICYmXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJlxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgKSB7XHJcbiAgICAgIGFsdEJveEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2FsdC1ib3gnXHJcbiAgICAgIClbMF1cclxuICAgIH1cclxuICAgIGxldCBoZWlnaHRFbG1cclxuICAgIGlmICh0aGlzLl9lbG1zLmhlaWdodCkge1xyXG4gICAgICBoZWlnaHRFbG0gPSB0aGlzLl9lbG1zLmhlaWdodC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1udW1iZXInKVswXVxyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlICcwJzpcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGFsdEJveEVsbSAmJlxyXG4gICAgICAgICAgKGFsdEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgYWx0LWJveCcpXHJcbiAgICAgICAgLy8gdGhpcy5fZWxtcy5oZWlnaHQgJiYgKHRoaXMuX2VsbXMuaGVpZ2h0LnN0eWxlLmRpc3BsYXkgPSAnZmxleCcpXHJcbiAgICAgICAgaGVpZ2h0RWxtICYmIChoZWlnaHRFbG0uY2xhc3NOYW1lID0gJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xJylcclxuICAgICAgICBoZWlnaHRNb2RlID0gQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5OT05FXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5rW35ouU6auY5bqmJ1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgYWx0Qm94RWxtICYmXHJcbiAgICAgICAgICAoYWx0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBhbHQtYm94JylcclxuICAgICAgICAvLyB0aGlzLl9lbG1zLmhlaWdodCAmJiAodGhpcy5fZWxtcy5oZWlnaHQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcclxuICAgICAgICBoZWlnaHRFbG0gJiYgKGhlaWdodEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEnKVxyXG4gICAgICAgIGhlaWdodE1vZGUgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLk5PTkVcclxuICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfnm7jlr7nlnLDooagnXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBhbHRCb3hFbG0gJiZcclxuICAgICAgICAgIChhbHRCb3hFbG0uY2xhc3NOYW1lID1cclxuICAgICAgICAgICAgJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGFsdC1ib3ggZGlzYWJsZWQnKVxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+S+nemZhOWcsOihqCdcclxuICAgICAgICBhbHRCb3hFbG0gJiZcclxuICAgICAgICAgIChhbHRCb3hFbG0uY2xhc3NOYW1lID1cclxuICAgICAgICAgICAgJ2lucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGFsdC1ib3ggZGlzYWJsZWQnKVxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+S+nemZhOWcsOihqCdcclxuICAgICAgICBoZWlnaHRNb2RlID0gQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkRcclxuICAgICAgICAvLyB0aGlzLl9lbG1zLmhlaWdodCAmJiAodGhpcy5fZWxtcy5oZWlnaHQuc3R5bGUuZGlzcGxheSA9ICdub25lJylcclxuICAgICAgICBoZWlnaHRFbG0gJiYgKGhlaWdodEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgZGlzYWJsZWQnKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzMnOlxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgYWx0Qm94RWxtICYmXHJcbiAgICAgICAgICAoYWx0Qm94RWxtLmNsYXNzTmFtZSA9XHJcbiAgICAgICAgICAgICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBhbHQtYm94IGRpc2FibGVkJylcclxuICAgICAgICAvLyB0aGlzLl9lbG1zLmhlaWdodCAmJiAodGhpcy5fZWxtcy5oZWlnaHQuc3R5bGUuZGlzcGxheSA9ICdub25lJylcclxuICAgICAgICBoZWlnaHRFbG0gJiYgKGhlaWdodEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgZGlzYWJsZWQnKVxyXG4gICAgICAgIGhlaWdodE1vZGUgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLk5PTkVcclxuICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfkvp3pmYTmqKHlnosnXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLmVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmhlaWdodFJlZmVyZW5jZSA9IGhlaWdodE1vZGVcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlID0gaGVpZ2h0TW9kZU5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgY29vcmRpbmF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZVxyXG4gIH1cclxuICBzZXQgY29vcmRpbmF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZSA9IHZcclxuICAgIC8vIGxldCBwb3NpdGlvbiA9IHRoaXMuX3Byb2ouY29udmVydChcclxuICAgIC8vICAgW1xyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgIHg6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAvLyAgICAgICB5OiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgLy8gICAgICAgejogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgXSxcclxuICAgIC8vICAgJ0VQU0c6NDMyNicsXHJcbiAgICAvLyAgIHZcclxuICAgIC8vICkucG9pbnRzXHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCAmJlxyXG4gICAgLy8gICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgJiZcclxuICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgJiZcclxuICAgIC8vICAgcG9zaXRpb25bMF1cclxuICAgIC8vICkge1xyXG4gICAgLy8gICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgLy8gICAgICdjb252ZXJ0LXgnXHJcbiAgICAvLyAgIClbMF0udmFsdWUgPSBwb3NpdGlvblswXS54XHJcbiAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAvLyAgICAgJ2NvbnZlcnQteSdcclxuICAgIC8vICAgKVswXS52YWx1ZSA9IHBvc2l0aW9uWzBdLnlcclxuICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgIC8vICAgICAnY29udmVydC16J1xyXG4gICAgLy8gICApWzBdLnZhbHVlID0gcG9zaXRpb25bMF0uelxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5fZWxtcy5jb29yZGluYXRlICYmXHJcbiAgICAvLyAgIHRoaXMuX2VsbXMuY29vcmRpbmF0ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgLy8gICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAvLyAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgfVxyXG5cclxuICBzZXQgcG9zaXRpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gdlxyXG5cclxuICAgIHRoaXMuY29vcmRpbmF0ZSA9IHRoaXMub3B0aW9ucy5jb29yZGluYXRlXHJcblxyXG4gICAgaWYgKHRoaXMuX3RleHRUb0NlbnRlcikge1xyXG4gICAgICBsZXQgcG9pbnQgPSB0dXJmLnBvaW50KFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XSlcclxuICAgICAgbGV0IHRhcmdldFBvaW50ID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgdGhpcy5fdGV4dFRvQ2VudGVyLmRpc3RhbmNlLCB0aGlzLl90ZXh0VG9DZW50ZXIuYW5nbGUsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHRhcmdldFBvaW50WzBdLCBsYXQ6IHRhcmdldFBvaW50WzFdIH0pLnRoZW4oKGhlaWdodCkgPT4ge1xyXG4gICAgICAgIGxldCB0ZXh0UG9zaXRpb24gPSBbdGFyZ2V0UG9pbnRbMF0sIHRhcmdldFBvaW50WzFdLCBoZWlnaHRdXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnRleHQucG9zaXRpb24gPSB7IGxuZzogdGFyZ2V0UG9pbnRbMF0sIGxhdDogdGFyZ2V0UG9pbnRbMV0sIGFsdDogaGVpZ2h0IH1cclxuICAgICAgICB0aGlzLnRleHQgJiYgKHRoaXMudGV4dC5wb3NpdGlvbiA9IHRleHRQb3NpdGlvbilcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgICAgIH0pXHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuX2VsbXMuaGVpZ2h0KSB7XHJcbiAgICAgIGxldCBoZWlnaHRFbG0gPSB0aGlzLl9lbG1zLmhlaWdodC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICBpZiAoaGVpZ2h0RWxtKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUpIHtcclxuICAgICAgICAgIGNhc2UgJ+a1t+aLlOmrmOW6pic6XHJcbiAgICAgICAgICAgIGhlaWdodEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJ+ebuOWvueWcsOihqCc6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIuc2NlbmUudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eSkge1xyXG4gICAgICAgICAgICAgIENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICkudGhlbihwb3NpdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRFbG0udmFsdWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0IC0gcG9zaXRpb25bMF0uaGVpZ2h0KS50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBoZWlnaHRFbG0udmFsdWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJ+S+nemZhOWcsOihqCc6XHJcbiAgICAgICAgICBjYXNlICfkvp3pmYTlnLDooagnOlxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAn5L6d6ZmE5qih5Z6LJzpcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gMSkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LmxhYmVsLnNob3cgPSB2XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250RmFtaWx5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gdiB8fCAwXHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICB9XHJcbiAgc2V0IGxhYmVsRm9udFNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5yZW5ld1BvaW50KClcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IHYgfHwgJyMwMGZmZmYnXHJcbiAgICB0aGlzLnJlbmV3UG9pbnQoKVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMCwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZSgpIHtcclxuICAgIC8vIGxldCBnYXAgPSBNYXRoLmFicyhNYXRoLmNvcyhNYXRoLlBJLzE4MCAqIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQpKSAqICgwLjAwMDEqdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgLy8gbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAwLjA1LCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gMC4wNSxcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyArIDAuMDUsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgLSAwLjA1LFxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIDAuMDUsXHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAwLjA1LCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ICsgMC4wNSxcclxuICAgIC8vIF1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGxldCBoZWlnaHRNb2RlXHJcbiAgICBsZXQgZm9udCA9IGdldEZvbnRGYW1pbHkodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICdIZWx2ZXRpY2EnXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgaGVpZ2h0TW9kZSA9IENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5EXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMucmVwbGFjZUhvc3QodGhpcy5vcHRpb25zLnVybCwgdGhpcy5vcHRpb25zLmhvc3QpLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgIC8vIGxldCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXHJcbiAgICAgIC8vIGxldCBhcnJheUJ1ZmZlciA9IGF3YWl0IGRhdGEuYXJyYXlCdWZmZXIoKVxyXG4gICAgICAvLyBjb25zdCBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLm5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcclxuICAgICAgaW1nLnNyYyA9IHRoaXMucmVwbGFjZUhvc3QodGhpcy5vcHRpb25zLnVybCwgdGhpcy5vcHRpb25zLmhvc3QpO1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhczIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IGltZy53aWR0aFxyXG4gICAgICAgIGxldCBoZWlnaHQgPSBpbWcuaGVpZ2h0XHJcbiAgICAgICAgY2FudmFzMi53aWR0aCA9IHdpZHRoXHJcbiAgICAgICAgY2FudmFzMi5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgY3R4Mi5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KVxyXG5cclxuICAgICAgICAvLyDorr7nva7nlLvluIPlpKflsI9cclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiAyO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogMjtcclxuICAgICAgICAvLyDnu5jliLblm77lg49cclxuICAgICAgICBpZiAodGhpcy5mbGlwZVgpIHtcclxuICAgICAgICAgIGN0eC5zY2FsZSgxLCAtMSk7XHJcbiAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1jYW52YXMuaGVpZ2h0KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5mbGlwZVkpIHtcclxuICAgICAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XHJcbiAgICAgICAgICBjdHgudHJhbnNsYXRlKC1jYW52YXMud2lkdGgsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgaW1nLndpZHRoIC0gKGltZy53aWR0aCAqIHRoaXMub3B0aW9ucy5vZmZzZXQueCksIGltZy5oZWlnaHQgLSAoaW1nLmhlaWdodCAqIHRoaXMub3B0aW9ucy5vZmZzZXQueSkpO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGJpbGxib2FyZEggPSBoZWlnaHQgKiAoMTI4IC8gd2lkdGgpXHJcblxyXG4gICAgICAgIHRoaXMuZW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBpZDogdGhpcy5vcHRpb25zLmlkLFxyXG4gICAgICAgICAgc2hvdzogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0IHx8IDBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgc2hvdzogdGhpcy5tb2RlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzMixcclxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuYmlsbGJvYXJkU2NhbGUsXHJcbiAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZ2V0R3JvdW5kQ292ZXIoKSA/IHVuZGVmaW5lZCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgIGhlaWdodFJlZmVyZW5jZTogaGVpZ2h0TW9kZSxcclxuICAgICAgICAgICAgd2lkdGg6IDEyOCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBiaWxsYm9hcmRILFxyXG4gICAgICAgICAgICBob3Jpem9udGFsT3JpZ2luOiBDZXNpdW0uSG9yaXpvbnRhbE9yaWdpbi5MRUZULFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLlRPUCxcclxuICAgICAgICAgICAgLy8gcGl4ZWxPZmZzZXQ6IHsgeDogLTEyOCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiAodGhpcy5mbGlwZVkgPyAoMS10aGlzLm9wdGlvbnMub2Zmc2V0LngpIDogdGhpcy5vcHRpb25zLm9mZnNldC54KSwgeTogLWJpbGxib2FyZEggKiB0aGlzLmJpbGxib2FyZFNjYWxlICogKHRoaXMuZmxpcGVYID8gKDEtdGhpcy5vcHRpb25zLm9mZnNldC55KSA6IHRoaXMub3B0aW9ucy5vZmZzZXQueSkgfVxyXG4gICAgICAgICAgICBwaXhlbE9mZnNldDogeyB4OiAtMTI4ICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqIHRoaXMub3B0aW9ucy5vZmZzZXQueCwgeTogLWJpbGxib2FyZEggKiB0aGlzLmJpbGxib2FyZFNjYWxlICogdGhpcy5vcHRpb25zLm9mZnNldC55IH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzaG93OiB0aGlzLm1vZGUgPyBfdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgICAgICAgdGV4dDogX3RoaXMub3B0aW9ucy5sYWJlbC50ZXh0LFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICBoZWlnaHRSZWZlcmVuY2U6IGhlaWdodE1vZGUsXHJcbiAgICAgICAgICAgIGZvbnQ6IF90aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgKyAncHggJyArIGZvbnQsXHJcbiAgICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhfdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yKSxcclxuICAgICAgICAgICAgLy8gdmVydGljYWxPcmlnaW4gOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5zaG93KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICAtYmlsbGJvYXJkSCAqIF90aGlzLmJpbGxib2FyZFNjYWxlIC1cclxuICAgICAgICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSAvIDIgLVxyXG4gICAgICAgICAgICAgICAgICA1XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgIC1fdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplIC8gMiAtIDVcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgICAgICAgIG91dGxpbmVXaWR0aDogMSxcclxuICAgICAgICAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZWN0YW5nbGU6IHtcclxuICAgICAgICAgICAgc2hvdzogdGhpcy5tb2RlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgZ2FwID0gTWF0aC5hYnMoTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQpKSAqICgwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuZmxpcGVZID8gTWF0aC5hYnModGhpcy5vcHRpb25zLm9mZnNldC54IC0gMSkgOiB0aGlzLm9wdGlvbnMub2Zmc2V0LngsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGlzLmZsaXBlWCA/IE1hdGguYWJzKHRoaXMub3B0aW9ucy5vZmZzZXQueSAtIDEpIDogdGhpcy5vcHRpb25zLm9mZnNldC55LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBvZmZzZXQgPSB7XHJcbiAgICAgICAgICAgICAgICBsbmc6IG9mZnNldC54ICogKCgwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpICogMiksXHJcbiAgICAgICAgICAgICAgICBsYXQ6IE1hdGguYWJzKG9mZnNldC55IC0gMSkgKiAoZ2FwICogMilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gbGV0IHBvaW50MSA9IFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gb2Zmc2V0LmxuZyArIDM2MCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIG9mZnNldC5sYXRdO1xyXG4gICAgICAgICAgICAgIC8vIGxldCBwb2ludDIgPSBbKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSBvZmZzZXQubG5nKSArICgoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSAqIDIpICsgMzYwLCAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIG9mZnNldC5sYXQpICsgKGdhcCAqIDIpXTtcclxuICAgICAgICAgICAgICAvLyBsZXQgbWlkcG9pbnQgPSAgdHVyZi5wb2ludChbcG9pbnQxWzBdK3BvaW50MlswXS8yLCBwb2ludDFbMV0rcG9pbnQyWzFdLzJdKTtcclxuICAgICAgICAgICAgICAvLyBsZXQgcm90YXRlZFBvdCA9IHR1cmYudHJhbnNmb3JtUm90YXRlKG1pZHBvaW50LCAtTnVtYmVyKHRoaXMub3B0aW9ucy5hbmdsZSksIHtwaXZvdDogW3RoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRdfSk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWlkcG9pbnQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHJvdGF0ZWRQb3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHRoaXMub3B0aW9ucy5wb3NpdGlvbilcclxuICAgICAgICAgICAgICAvLyBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtcclxuICAgICAgICAgICAgICAvLyAgIHJvdGF0ZWRQb3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0tKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHJvdGF0ZWRQb3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0tKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksXHJcbiAgICAgICAgICAgICAgLy8gICByb3RhdGVkUG90Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKygwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpLCByb3RhdGVkUG90Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKygwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpLFxyXG5cclxuICAgICAgICAgICAgICAvLyBdXHJcbiAgICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gb2Zmc2V0LmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIG9mZnNldC5sYXQsXHJcbiAgICAgICAgICAgICAgICAvLyAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyAtIG9mZnNldC5sbmcpICsgKCgwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpICogMiksICh0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gb2Zmc2V0LmxhdCkgKyAoZ2FwICogMiksXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgLSBnYXAsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIDAuMDUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgKyBnYXAsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIDAuMDUsXHJcbiAgICAgICAgICAgICAgXVxyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyguLi5mcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgICAgaW1hZ2U6IGNhbnZhcyxcclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgcm90YXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuYW5nbGUpXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgc3RSb3RhdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5hbmdsZSlcclxuICAgICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMucmVuZXdQb2ludCgpXHJcbiAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWUgPT09ICdjZXNpdW0tdmlld2VyIDJkJykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkucmVjdGFuZ2xlLmhlaWdodCA9IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3cpIHtcclxuXHJcbiAgICAgICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiAoZGF0YS5jb2RlID09PSAyMDAgfHwgZGF0YS5jb2RlID09PSAwKSB7XHJcbiAgICAgIC8vICAgdGhpcy4kbWVzc2FnZSh7XHJcbiAgICAgIC8vICAgICBtZXNzYWdlOiAn5re75Yqg5oiQ5Yqf77yBJyxcclxuICAgICAgLy8gICAgIHR5cGU6ICdzdWNjZXNzJyxcclxuICAgICAgLy8gICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgIC8vICAgfSk7XHJcbiAgICAgIC8vICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgIC8vICAgLy8gdGhpcy4kZW1pdCgnZ2V0QnVpbGRpbmdMaXN0JylcclxuICAgICAgLy8gICAvLyB0aGlzLiRlbWl0KCdvblN1Ym1pdENhbGxCYWNrJylcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgbGV0IGFuY2hvclNldERpYWxvZ09iamVjdFxyXG4gICAgICBsZXQgY2FudmFzXHJcbiAgICAgIGxldCBwb2ludFxyXG4gICAgICBsZXQgYmlsbGJvYXJkQW5jaG9yUG9zaXRpb25cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+WGm+agh+WxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgICAgLy8gc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIC8vIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgICAgaWYgKGFuY2hvclNldERpYWxvZ09iamVjdCAmJiBhbmNob3JTZXREaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgICAgICAgYW5jaG9yU2V0RGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZEZvb3RFbG06IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGFnTmFtZTogJ2J1dHRvbicsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2ZsaXBlLW92ZXIteScsXHJcbiAgICAgICAgICAgIGlubmVySFRNTDogJ1novbTnv7vovawnLFxyXG4gICAgICAgICAgICBldmVudDogW1xyXG4gICAgICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGlwZVkgPSAhdGhpcy5mbGlwZVlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZ05hbWU6ICdidXR0b24nLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmbGlwZS1vdmVyLXgnLFxyXG4gICAgICAgICAgICBpbm5lckhUTUw6ICdY6L2057+76L2sJyxcclxuICAgICAgICAgICAgZXZlbnQ6IFtcclxuICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxpcGVYID0gIXRoaXMuZmxpcGVYXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGdyb3VuZC1pbWFnZSdcclxuXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICB0aGlzLl9FdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IHRoaXMuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcblxyXG4gICAgICBsZXQgYW5jaG9yQnRuID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbmNob3InKVswXVxyXG4gICAgICBhbmNob3JCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGFuY2hvclNldERpYWxvZ09iamVjdCAmJiBhbmNob3JTZXREaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgICAgIGFuY2hvclNldERpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNldXBFdmVudClcclxuICAgICAgICBsZXQgRGlhbG9nQ2xpZW50UmVjdCA9IF90aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICAgIGxldCBfRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcmlnaW5hbE9wdGlvbnMsIHtcclxuICAgICAgICAgIHRpdGxlOiAn6ZSa54K56K6+572uJywgbGVmdDogKERpYWxvZ0NsaWVudFJlY3QubGVmdCArIDgwKSArICdweCcsIHRvcDogKERpYWxvZ0NsaWVudFJlY3QudG9wICsgMjAwKSArICdweCcsXHJcbiAgICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLm9mZnNldCA9IHsgeDogYmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueCwgeTogYmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueSB9XHJcbiAgICAgICAgICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2V1cEV2ZW50KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICBhbmNob3JTZXREaWFsb2dPYmplY3QgPSBfRGlhbG9nT2JqZWN0XHJcbiAgICAgICAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGFuY2hvci1wb2ludCdcclxuICAgICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5yZXBsYWNlSG9zdCh0aGlzLm9wdGlvbnMudXJsLCB0aGlzLm9wdGlvbnMuaG9zdClcclxuICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgcmF0aW8gPSBpbWFnZS53aWR0aCAvIGltYWdlLmhlaWdodFxyXG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgIGxldCB3aWR0aCA9IDE1MFxyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IDE1MCAvIHJhdGlvXHJcbiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KVxyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGhcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICBjYW52YXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAgICAgICAgY29udGVudEVsbS5hcHBlbmRDaGlsZChjYW52YXMpXHJcbiAgICAgICAgICBfRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICAgICAgICAgIHBvaW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBwb2ludC5jbGFzc05hbWUgPSAncG9pbnQnXHJcbiAgICAgICAgICBjb250ZW50RWxtLmFwcGVuZENoaWxkKHBvaW50KVxyXG4gICAgICAgICAgYmlsbGJvYXJkQW5jaG9yUG9zaXRpb24gPSB7IHg6IF90aGlzLm9mZnNldC54LCB5OiBfdGhpcy5vZmZzZXQueSB9XHJcbiAgICAgICAgICBwb2ludC5zdHlsZS50b3AgPSBgY2FsYygke051bWJlcihiaWxsYm9hcmRBbmNob3JQb3NpdGlvbi55KSAqIDEwMH0lIC0gNnB4KWBcclxuICAgICAgICAgIHBvaW50LnN0eWxlLmxlZnQgPSBgY2FsYygke051bWJlcihiaWxsYm9hcmRBbmNob3JQb3NpdGlvbi54KSAqIDEwMH0lIC0gNnB4KWBcclxuXHJcbiAgICAgICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgeCA9IGUub2Zmc2V0WFxyXG4gICAgICAgICAgICBsZXQgeSA9IGUub2Zmc2V0WVxyXG4gICAgICAgICAgICBsZXQgYW5jaG9yID0geyB4OiBOdW1iZXIoKHggLyBjYW52YXMud2lkdGgpLnRvRml4ZWQoMikpLCB5OiBOdW1iZXIoKHkgLyBjYW52YXMuaGVpZ2h0KS50b0ZpeGVkKDIpKSB9XHJcbiAgICAgICAgICAgIGlmIChhbmNob3IueCA8IDApIHtcclxuICAgICAgICAgICAgICBhbmNob3IueCA9IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYW5jaG9yLnggPiAxKSB7XHJcbiAgICAgICAgICAgICAgYW5jaG9yLnggPSAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFuY2hvci55IDwgMCkge1xyXG4gICAgICAgICAgICAgIGFuY2hvci55ID0gMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhbmNob3IueSA+IDEpIHtcclxuICAgICAgICAgICAgICBhbmNob3IueSA9IDFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiaWxsYm9hcmRBbmNob3JQb3NpdGlvbiA9IHsgeDogYW5jaG9yLngsIHk6IGFuY2hvci55IH1cclxuXHJcbiAgICAgICAgICAgIHBvaW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7YmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueSAqIDEwMH0lIC0gNXB4KWBcclxuICAgICAgICAgICAgcG9pbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7YmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueCAqIDEwMH0lIC0gNXB4KWBcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuICAgICAgICAgICAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlbW92ZUV2ZW50KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGZ1bmN0aW9uIG1vdXNlbW92ZUV2ZW50KGUpIHtcclxuICAgICAgICBnZXREaWFsb2dCb2R5RWxtKGUudGFyZ2V0KVxyXG4gICAgICAgIGZ1bmN0aW9uIGdldERpYWxvZ0JvZHlFbG0oZWxtKSB7XHJcbiAgICAgICAgICBpZiAoIWVsbSkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGVsbSA9PT0gYW5jaG9yU2V0RGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkpIHtcclxuICAgICAgICAgICAgbGV0IHggPSBlLnggLSBlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxyXG4gICAgICAgICAgICBsZXQgeSA9IGUueSAtIGVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcclxuICAgICAgICAgICAgbGV0IGFuY2hvciA9IHsgeDogTnVtYmVyKCgoeCAtIDQyKSAvIGNhbnZhcy53aWR0aCkudG9GaXhlZCgyKSksIHk6IE51bWJlcigoKHkgLSA3MSkgLyBjYW52YXMuaGVpZ2h0KS50b0ZpeGVkKDIpKSB9XHJcbiAgICAgICAgICAgIGlmIChhbmNob3IueCA8IDApIHtcclxuICAgICAgICAgICAgICBhbmNob3IueCA9IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYW5jaG9yLnggPiAxKSB7XHJcbiAgICAgICAgICAgICAgYW5jaG9yLnggPSAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFuY2hvci55IDwgMCkge1xyXG4gICAgICAgICAgICAgIGFuY2hvci55ID0gMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhbmNob3IueSA+IDEpIHtcclxuICAgICAgICAgICAgICBhbmNob3IueSA9IDFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiaWxsYm9hcmRBbmNob3JQb3NpdGlvbiA9IHsgeDogYW5jaG9yLngsIHk6IGFuY2hvci55IH1cclxuXHJcbiAgICAgICAgICAgIHBvaW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7YmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueSAqIDEwMH0lIC0gNXB4KWBcclxuICAgICAgICAgICAgcG9pbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7YmlsbGJvYXJkQW5jaG9yUG9zaXRpb24ueCAqIDEwMH0lIC0gNXB4KWBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBnZXREaWFsb2dCb2R5RWxtKGVsbS5vZmZzZXRQYXJlbnQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIG1vdXNldXBFdmVudCgpIHtcclxuICAgICAgICBpZiAoYW5jaG9yU2V0RGlhbG9nT2JqZWN0KSB7XHJcbiAgICAgICAgICBhbmNob3JTZXREaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmVFdmVudClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGxldCBjb29yZGluYXRlRGF0YSA9IFtdXHJcbiAgICAgIC8vIHRoaXMuZXBzZ19tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAvLyAgIGNvb3JkaW5hdGVEYXRhLnB1c2goe1xyXG4gICAgICAvLyAgICAgbmFtZTogYCR7dmFsdWUubmFtZX0oJHt2YWx1ZS5lcHNnfSlgLFxyXG4gICAgICAvLyAgICAgdmFsdWU6IGtleVxyXG4gICAgICAvLyAgIH0pXHJcbiAgICAgIC8vIH0pXHJcbiAgICAgIC8vIGxldCBjb29yZGluYXRlRGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgIC8vICAgICAnY29vcmRpbmF0ZS1zZWxlY3QtYm94J1xyXG4gICAgICAvLyAgIClbMF0sXHJcbiAgICAgIC8vICAgJy5jb29yZGluYXRlLXNlbGVjdCdcclxuICAgICAgLy8gKVxyXG4gICAgICAvLyBpZiAoY29vcmRpbmF0ZURhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgIC8vICAgY29vcmRpbmF0ZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKGNvb3JkaW5hdGVEYXRhKVxyXG4gICAgICAvLyAgIGxldCBjb29yZGluYXRlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nvb3JkaW5hdGUtc2VsZWN0JylbMF1cclxuICAgICAgLy8gICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAvLyAgIGlmICghdGhpcy5jb29yZGluYXRlKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvb3JkaW5hdGUgPSBjb29yZGluYXRlRGF0YVswXS52YWx1ZVxyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvb3JkaW5hdGUgPSB0aGlzLmNvb3JkaW5hdGVcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICAgY29vcmRpbmF0ZURhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5jb29yZGluYXRlXHJcbiAgICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZGluYXRlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgaWYgKGNvb3JkaW5hdGVEYXRhW2ldLnZhbHVlID09PSBjb29yZGluYXRlRGF0YS52YWx1ZSkge1xyXG4gICAgICAvLyAgICAgICBjb29yZGluYXRlRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgIC8vICAgICAgICAgY29vcmRpbmF0ZURhdGFbaV0udmFsdWVcclxuICAgICAgLy8gICAgICAgKVxyXG4gICAgICAvLyAgICAgICBicmVha1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gICBjb29yZGluYXRlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3JkaW5hdGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmIChjb29yZGluYXRlRGF0YVtpXS52YWx1ZSA9PT0gY29vcmRpbmF0ZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgIC8vICAgICAgICAgdGhpcy5jb29yZGluYXRlID0gY29vcmRpbmF0ZURhdGFbaV0udmFsdWVcclxuICAgICAgLy8gICAgICAgICBicmVha1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgbGV0IGVsbXMgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JvdycpXHJcbiAgICAgIGxldCBlbG1zMiA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2g0JylcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbG1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG1vZGUgPSBlbG1zW2ldLmdldEF0dHJpYnV0ZSgnbW9kZScpXHJcbiAgICAgICAgaWYgKG1vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChtb2RlID09IHRoaXMub3B0aW9ucy5tb2RlKSB7XHJcbiAgICAgICAgICAgIGVsbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsbXMyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG1vZGUgPSBlbG1zMltpXS5nZXRBdHRyaWJ1dGUoJ21vZGUnKVxyXG4gICAgICAgIGlmIChtb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAobW9kZSA9PSB0aGlzLm9wdGlvbnMubW9kZSkge1xyXG4gICAgICAgICAgICBlbG1zMltpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsbXMyW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGxldCBsbmcgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsbmdcIilbMF1cclxuICAgICAgLy8gbGV0IGxhdCA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhdFwiKVswXVxyXG4gICAgICAvLyBsZXQgYWx0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYWx0XCIpWzBdXHJcbiAgICAgIC8vIGxuZy52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmdcclxuICAgICAgLy8gbGF0LnZhbHVlID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAvLyBhbHQudmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICAgIC8vIHRoaXMuX2VsbXMubG5nID0gW2xuZ11cclxuICAgICAgLy8gdGhpcy5fZWxtcy5sYXQgPSBbbGF0XVxyXG4gICAgICAvLyB0aGlzLl9lbG1zLmFsdCA9IFthbHRdXHJcbiAgICAgIC8vIGxuZy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgLy8gICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAvLyAgIGlmIChlLnRhcmdldC52YWx1ZSB8fCAoZS50YXJnZXQuZGF0YXNldC5udWxsICE9PSAndW5kZWZpbmVkJyAmJiBlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICcnICYmICFCb29sZWFuKGUudGFyZ2V0LmRhdGFzZXQubnVsbCkpKSB7XHJcbiAgICAgIC8vICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgLy8gICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgIC8vICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgIC8vICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICAgIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAvLyAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICAgLy8gdGhpcy5wb3NpdGlvbiA9IHtcclxuICAgICAgLy8gICAvLyAgIGxuZzogdmFsdWUsXHJcbiAgICAgIC8vICAgLy8gICBsYXQ6IHRoaXMucG9zaXRpb24ubGF0LFxyXG4gICAgICAvLyAgIC8vICAgYWx0OiB0aGlzLnBvc2l0aW9uLmFsdFxyXG4gICAgICAvLyAgIC8vIH1cclxuICAgICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID0gdmFsdWVcclxuICAgICAgLy8gICB0aGlzLmNvb3JkaW5hdGUgPSB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZVxyXG4gICAgICAvLyB9KVxyXG4gICAgICAvLyBsYXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICAgIC8vICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgLy8gICBpZiAoZS50YXJnZXQudmFsdWUgfHwgKGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZS50YXJnZXQuZGF0YXNldC5udWxsICE9PSAnJyAmJiAhQm9vbGVhbihlLnRhcmdldC5kYXRhc2V0Lm51bGwpKSkge1xyXG4gICAgICAvLyAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgIC8vICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAvLyAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAvLyAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICBpZiAoKGUudGFyZ2V0LmRhdGFzZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbikpIHtcclxuICAgICAgLy8gICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIC8vIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgIC8vICAgLy8gICBsbmc6IHRoaXMucG9zaXRpb24ubG5nLFxyXG4gICAgICAvLyAgIC8vICAgbGF0OiB2YWx1ZSxcclxuICAgICAgLy8gICAvLyAgIGFsdDogdGhpcy5wb3NpdGlvbi5hbHRcclxuICAgICAgLy8gICAvLyB9XHJcbiAgICAgIC8vICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHZhbHVlXHJcbiAgICAgIC8vICAgdGhpcy5jb29yZGluYXRlID0gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGVcclxuICAgICAgLy8gfSlcclxuICAgICAgLy8gYWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAvLyAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgIC8vICAgaWYgKGUudGFyZ2V0LnZhbHVlIHx8IChlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICd1bmRlZmluZWQnICYmIGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJycgJiYgIUJvb2xlYW4oZS50YXJnZXQuZGF0YXNldC5udWxsKSkpIHtcclxuICAgICAgLy8gICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAvLyAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgLy8gICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgLy8gICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgaWYgKChlLnRhcmdldC5kYXRhc2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pKSB7XHJcbiAgICAgIC8vICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gICAvLyB0aGlzLnBvc2l0aW9uID0ge1xyXG4gICAgICAvLyAgIC8vICAgbG5nOiB0aGlzLnBvc2l0aW9uLmxuZyxcclxuICAgICAgLy8gICAvLyAgIGxhdDogdGhpcy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIC8vICAgLy8gICBhbHQ6IHZhbHVlXHJcbiAgICAgIC8vICAgLy8gfVxyXG4gICAgICAvLyAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSB2YWx1ZVxyXG4gICAgICAvLyAgIHRoaXMuY29vcmRpbmF0ZSA9IHRoaXMub3B0aW9ucy5jb29yZGluYXRlXHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGFiZWxDb2xvcicpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbY29sb3JQaWNrZXJdXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICBsZXQgZmxpcGVPdmVyWEJ0biA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5mb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZsaXBlLW92ZXIteCcpWzBdXHJcbiAgICAgICAgbGV0IGZsaXBlT3ZlcllCdG4gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmbGlwZS1vdmVyLXknKVswXVxyXG4gICAgICAgIGZsaXBlT3ZlclhCdG4uc2V0QXR0cmlidXRlKCdtb2RlJywgMClcclxuICAgICAgICBmbGlwZU92ZXJZQnRuLnNldEF0dHJpYnV0ZSgnbW9kZScsIDApXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlKSB7XHJcbiAgICAgICAgICBmbGlwZU92ZXJYQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgIGZsaXBlT3ZlcllCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZsaXBlT3ZlclhCdG4uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICAgIGZsaXBlT3ZlcllCdG4uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1vZGVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn6LS05ZywJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfotLTlnLAnLFxyXG4gICAgICAgICAgICBrZXk6IDBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnq4vkvZMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+eri+S9kycsXHJcbiAgICAgICAgICAgIGtleTogMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgbW9kZURhdGFMZWdwT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdtb2RlLWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLm1vZGUnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChtb2RlRGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIG1vZGVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaChtb2RlRGF0YSlcclxuICAgICAgICAgIGxldCBtb2RlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZScpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgbW9kZURhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5tb2RlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2RlRGF0YVtpXS5rZXkgPT09IHRoaXMubW9kZSkge1xyXG4gICAgICAgICAgICAgIG1vZGVEYXRhTGVncEVsbS52YWx1ZSA9IG1vZGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbW9kZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKG1vZGVEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChtb2RlRGF0YVtpXS52YWx1ZSA9PT0gbW9kZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGUgPSBtb2RlRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5tb2RlID0gW21vZGVEYXRhTGVncEVsbV1cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodEVsbSA9IGhlaWdodEJveEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YSA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rW35ouU6auY5bqmJyxcclxuICAgICAgICAgICAga2V5OiAnMCdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIGtleTogJzEnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5L6d6ZmE5Zyw6KGoJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkvp3pmYTlnLDooagnLFxyXG4gICAgICAgICAgICBrZXk6ICcyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAga2V5OiAnMydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuXHJcbiAgICAgICAgc3dpdGNoIChoZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIuc2NlbmUudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eSkge1xyXG4gICAgICAgICAgICAgIENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICkudGhlbihwb3NpdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRFbG0udmFsdWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0IC0gTnVtYmVyKHBvc2l0aW9uWzBdLmhlaWdodC50b0ZpeGVkKDIpKSkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBjYXNlICczJzpcclxuICAgICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdSYWRhclNjYW5TdGVyZW9zY29waWMnICYmIHZhbHVlLmVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0c1RvRXhjbHVkZS5wdXNoKHZhbHVlLmVudGl0eSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHRoaXMub3B0aW9ucy5wb3NpdGlvbiwgb2JqZWN0c1RvRXhjbHVkZSkudGhlbihoID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKGgudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGUgPSB0aGlzLm9wdGlvbnMuY29vcmRpbmF0ZVxyXG4gICAgICAgICAgICAgIHRoaXMuX2VsbXMuYWx0ICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBoZWlnaHRFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBoZWlnaHRNb2RlT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdoZWlnaHQtbW9kZS1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhlaWdodE1vZGVPYmplY3QpIHtcclxuICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodC1tb2RlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVt0aGlzLmhlaWdodE1vZGVdLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodE1vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZSA9PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZSA9PT0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIuYXZhaWxhYmlsaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKS50aGVuKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihwb3NpdGlvblswXS5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9IE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IDFcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IDJcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gW11cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1JhZGFyU2NhblN0ZXJlb3Njb3BpYycgJiYgdmFsdWUuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHNUb0V4Y2x1ZGUucHVzaCh2YWx1ZS5lbnRpdHkpXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLm9wdGlvbnMucG9zaXRpb24sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKGgudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IDNcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgIE51bWJlcihoZWlnaHRFbG0udmFsdWUpLnRvRml4ZWQoMilcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIuYXZhaWxhYmlsaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID1cclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKSArXHJcbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyKHBvc2l0aW9uWzBdLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9IE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb25cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodCA9IGhlaWdodEJveEVsbVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcblxyXG4gICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuX3Bvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfngrnlh7vpvKDmoIflt6bplK7noa7orqTvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID0gcG9zaXRpb24ubG5nXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHBvc2l0aW9uLmxhdFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBwb3NpdGlvbi5hbHRcclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSBwb3NpdGlvbi5sbmdcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gcG9zaXRpb24ubGF0XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9IHBvc2l0aW9uLmFsdFxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMucHJldmlvdXMgPSBudWxsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubG5nXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCA9IHRoaXMucHJldmlvdXMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID0gdGhpcy5wcmV2aW91cy5wb3NpdGlvbi5sbmdcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSB0aGlzLnByZXZpb3VzLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IHBvc2l0aW9uLmxuZ1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gcG9zaXRpb24ubGF0XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHQgPSBwb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5ldmVudCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4udGhpcy5wcmV2aW91cy5wb3NpdGlvbiB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uRWRpdGluZ1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZ2FwID0gTWF0aC5hYnMoTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQpKSAqICgwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW1xyXG4gICAgICAgIFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgLSBnYXBdLFxyXG4gICAgICAgIFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSksIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgKyBnYXBdLFxyXG4gICAgICBdXHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGhlaWdodCA9IDBcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgICAgIGxldCBwb2ludDEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdCwgMCk7XHJcbiAgICAgIGxldCBwb2ludDIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdCwgMTAwMDAwMDApO1xyXG4gICAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QocG9pbnQyLCBwb2ludDEsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgbGV0IGMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBkaXJlY3Rpb24pO1xyXG4gICAgICBsZXQgcmF5ID0gbmV3IENlc2l1bS5SYXkocG9pbnQxLCBjKTtcclxuICAgICAgbGV0IHIgPSB7fVxyXG4gICAgICBsZXQgcGlja2VkT2JqZWN0cyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGlja2VkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICByID0gcGlja2VkT2JqZWN0c1tpXVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHIgJiYgci5wb3NpdGlvbikge1xyXG4gICAgICAgIGhlaWdodCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoci5wb3NpdGlvbiwgdGhpcy5zZGsudmlld2VyKS5hbHRcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdmFyIHByb21pc2UgPSBhd2FpdCBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZCh0aGlzLnNkay52aWV3ZXIudGVycmFpblByb3ZpZGVyLCBbQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdCldKTtcclxuICAgICAgICAgIGhlaWdodCA9IHByb21pc2VbMF0uaGVpZ2h0XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5mcm9tRGVncmVlc0FycmF5W2ldLCBoZWlnaHQpXHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlSGVpZ2h0KCkge1xyXG4gICAgbGV0IGhlaWdodFxyXG4gICAgbGV0IGhlaWdodDJcclxuICAgIGxldCBwb2ludDEgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIDBcclxuICAgIClcclxuICAgIGxldCBwb2ludDIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIDEwMDAwMDAwMDAwMDAwXHJcbiAgICApXHJcblxyXG4gICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbXVxyXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuc2RrLmVudGl0eU1hcCkge1xyXG4gICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1JhZGFyU2NhblN0ZXJlb3Njb3BpYycgJiYgdmFsdWUuZW50aXR5KSB7XHJcbiAgICAgICAgb2JqZWN0c1RvRXhjbHVkZS5wdXNoKHZhbHVlLmVudGl0eSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHVwZGF0ZWRDYXJ0ZXNpYW5zID0gYXdhaXQgdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHRNb3N0RGV0YWlsZWQoW3BvaW50MV0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICBpZiAodXBkYXRlZENhcnRlc2lhbnMgJiYgdXBkYXRlZENhcnRlc2lhbnNbMF0pIHtcclxuICAgICAgaGVpZ2h0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh1cGRhdGVkQ2FydGVzaWFuc1swXSwgdGhpcy5zZGsudmlld2VyKS5hbHRcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgIHBvaW50MSxcclxuICAgICAgcG9pbnQyLFxyXG4gICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgKVxyXG4gICAgbGV0IGMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgIGxldCByYXkgPSBuZXcgQ2VzaXVtLlJheShwb2ludDIsIGMpXHJcbiAgICBsZXQgciA9IHt9XHJcbiAgICBsZXQgcGlja2VkT2JqZWN0cyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSlcclxuICAgIGZvciAobGV0IGkgPSBwaWNrZWRPYmplY3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgciA9IHBpY2tlZE9iamVjdHNbaV1cclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAociAmJiByLnBvc2l0aW9uKSB7XHJcbiAgICAgIGhlaWdodDIgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHIucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcikuYWx0XHJcbiAgICB9XHJcbiAgICBsZXQgcHJvbWlzZVxyXG4gICAgdHJ5IHtcclxuICAgICAgcHJvbWlzZSA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgIGlmICgoaGVpZ2h0MiA9PT0gdm9pZCAwIHx8IGhlaWdodDIgPCBwcm9taXNlWzBdLmhlaWdodCkgJiYgcHJvbWlzZSkge1xyXG4gICAgICBoZWlnaHQyID0gcHJvbWlzZVswXS5oZWlnaHRcclxuICAgIH1cclxuICAgIGlmIChoZWlnaHQgPT09IHZvaWQgMCB8fCBoZWlnaHQgPCBoZWlnaHQyKSB7XHJcbiAgICAgIGhlaWdodCA9IGhlaWdodDJcclxuICAgIH1cclxuICAgIGlmIChoZWlnaHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gTnVtYmVyKE51bWJlcihoZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgIHRoaXMuX2VsbXMuYWx0ICYmXHJcbiAgICAgICAgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgfSlcclxuICAgICAgdGhpcy5jb29yZGluYXRlID0gdGhpcy5vcHRpb25zLmNvb3JkaW5hdGVcclxuXHJcbiAgICAgIGlmICh0aGlzLl9lbG1zLmhlaWdodCkge1xyXG4gICAgICAgIGxldCBoZWlnaHRFbG0gPSB0aGlzLl9lbG1zLmhlaWdodC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQnKVswXVxyXG4gICAgICAgIGlmIChoZWlnaHRFbG0pIHtcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ+a1t+aLlOmrmOW6pic6XHJcbiAgICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ+ebuOWvueWcsOihqCc6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIuYXZhaWxhYmlsaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgKS50aGVuKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gTnVtYmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0IC0gcG9zaXRpb25bMF0uaGVpZ2h0KS50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAn5L6d6ZmE5Zyw6KGoJzpcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlICfkvp3pmYTmqKHlnosnOlxyXG4gICAgICAgICAgICAgIGhlaWdodEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICghdGhpcy5lbnRpdHkudmFsdWVzKSB7XHJcbiAgICAvLyAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAvLyAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyxcclxuICAgIC8vICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgLy8gICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgIC8vICAgKVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcmVuZXdQb2ludCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkudmFsdWVzICYmIHRoaXMuZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICBsZXQgZm9udCA9IGdldEZvbnRGYW1pbHkodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICdIZWx2ZXRpY2EnXHJcbiAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZSA9IHRoaXMuYmlsbGJvYXJkU2NhbGVcclxuICAgICAgaWYgKHRoaXMuYmlsbGJvYXJkU2NhbGVCeURpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnNjYWxlQnlEaXN0YW5jZSA9IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcihcclxuICAgICAgICAgIHRoaXMuYmlsbGJvYXJkTmVhcixcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICB0aGlzLmJpbGxib2FyZEZhcixcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgdGhpcy5iaWxsYm9hcmROZWFyLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIHRoaXMuYmlsbGJvYXJkRmFyLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLmVudGl0eS5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSBuZXcgQ2VzaXVtLk5lYXJGYXJTY2FsYXIoXHJcbiAgICAgICAgICB0aGlzLmJpbGxib2FyZE5lYXIsXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgdGhpcy5iaWxsYm9hcmRGYXIsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMuZW50aXR5LmxhYmVsLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgICAgdGhpcy5iaWxsYm9hcmROZWFyLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIHRoaXMuYmlsbGJvYXJkRmFyLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5lbnRpdHkubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5lbnRpdHkubGFiZWwucGl4ZWxPZmZzZXRTY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVudGl0eS5sYWJlbC5mb250ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplICsgJ3B4ICcgKyBmb250XHJcbiAgICAgIHRoaXMuZW50aXR5LmxhYmVsLmZpbGxDb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgICAgIClcclxuICAgICAgbGV0IGNhbnZhcyA9IHRoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZS5nZXRWYWx1ZSgpXHJcbiAgICAgIGxldCBiaWxsYm9hcmRIID0gY2FudmFzLmhlaWdodCAqICgxMjggLyBjYW52YXMud2lkdGgpXHJcbiAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IHsgeDogLTEyOCAqIHRoaXMuYmlsbGJvYXJkU2NhbGUgKiB0aGlzLm9wdGlvbnMub2Zmc2V0LngsIHk6IC1iaWxsYm9hcmRIICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqIHRoaXMub3B0aW9ucy5vZmZzZXQueSB9XHJcbiAgICAgIC8vIHRoaXMuZW50aXR5LmJpbGxib2FyZC5waXhlbE9mZnNldCA9IHsgeDogLXdpZHRoICogdGhpcy5iaWxsYm9hcmRTY2FsZSAqICh0aGlzLmZsaXBlWSA/ICgxIC0gdGhpcy5vcHRpb25zLm9mZnNldC54KSA6IHRoaXMub3B0aW9ucy5vZmZzZXQueCksIHk6IC1oZWlnaHQgKiB0aGlzLmJpbGxib2FyZFNjYWxlICogKHRoaXMuZmxpcGVYID8gKDEgLSB0aGlzLm9wdGlvbnMub2Zmc2V0LnkpIDogdGhpcy5vcHRpb25zLm9mZnNldC55KSB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWVcclxuICAgIHRoaXMuYW5nbGUgPSB0aGlzLm9wdGlvbnMuYW5nbGVcclxuICAgIHRoaXMuc2NhbGUgPSB0aGlzLm9wdGlvbnMuc2NhbGVcclxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5vcHRpb25zLm9mZnNldFxyXG4gICAgdGhpcy5mbGlwZVggPSB0aGlzLm9wdGlvbnMuZmxpcGUueFxyXG4gICAgdGhpcy5mbGlwZVkgPSB0aGlzLm9wdGlvbnMuZmxpcGUueVxyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIHRoaXMubW9kZSA9IHRoaXMub3B0aW9ucy5tb2RlXHJcbiAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZVxyXG4gICAgdGhpcy5iaWxsYm9hcmRTY2FsZSA9IHRoaXMub3B0aW9ucy5iaWxsYm9hcmQuc2NhbGVcclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgPSB2LnBvc2l0aW9uLmxuZ1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IHYucG9zaXRpb24ubGF0XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gdi5wb3NpdGlvbi5hbHRcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyb3VuZEltYWdlXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFQQTtBQUFBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQTNMQTtBQUFBO0FBQUE7QUFBQTtBQTZMQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQXNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQTlOQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFsRUE7QUFtRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBNEJBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQVNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE0QkE7QUFBQTtBQXpCQTtBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQVJBO0FBU0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUE1bkJBO0FBQUE7QUFBQTtBQUFBO0FBOG5CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUE2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUExRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBbkdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBS0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBUkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBeUJBO0FBQUE7QUF2QkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQVNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQWpIQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/GroundImage/index.js\n"); /***/ }), /***/ "./src/Obj/Base/GroundSvg/_element.js": /*!********************************************!*\ !*** ./src/Obj/Base/GroundSvg/_element.js ***! \********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u65CB\\u8F6C\\u89D2\\u5EA6\\n \\n
\\n \\n \\xB0\\n \\n
\\n
\\n
\\n
\\n
\\n X \\u8F74\\u5927\\u5C0F\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n Y \\u8F74\\u5927\\u5C0F\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u6587\\u5B57\\u5185\\u5BB9\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6587\\u5B57\\u5F00\\u5173\\n \\n
\\n
\\n \\u5B57\\u4F53\\u989C\\u8272\\n
\\n
\\n
\\n \\u5B57\\u4F53\\u5927\\u5C0F\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n
\\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
\\n
\\n \\u6700\\u8FD1\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u6700\\u8FDC\\u8DDD\\u79BB\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n
\\n
\\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JvdW5kU3ZnL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0dyb3VuZFN2Zy9fZWxlbWVudC5qcz81NzlkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaXi+i9rOinkuW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzNjBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cImFuZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7ZmxleDogMCAwIDEwMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjM2MFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJhbmdsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPsKwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHgtc2NhbGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5YIOi9tOWkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIyMDBcIiBtaW49XCIwLjAwMVwiIHN0ZXA9XCIwLjAwMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlclwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O2ZsZXg6IDAgMCAxMDBweDttYXJnaW4tbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjAuMDAxXCIgbWF4PVwiMjAwXCIgc3RlcD1cIjAuMDAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgeS1zY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlkg6L205aSn5bCPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjIwMFwiIG1pbj1cIjAuMDAxXCIgc3RlcD1cIjAuMDAxXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7ZmxleDogMCAwIDEwMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMC4wMDFcIiBtYXg9XCIyMDBcIiBzdGVwPVwiMC4wMDFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiA1O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaWh+Wtl+WGheWuuTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJ0ZXh0VmFsdWVcIiBtYXhsZW5ndGg9XCIzMFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIEBjbGljaz1cInRleHRQb3NQaWNrXCI+6K6+572u5L2N572uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mloflrZflvIDlhbM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwidGV4dFNob3dcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lrZfkvZPpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dENvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5a2X5L2T5aSn5bCPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJ0ZXh0Rm9udFNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6KeG6YeO57yp5pS+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cInRleHRTY2FsZUJ5RGlzdGFuY2VcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDov5Hot53nprs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OTk5OVwiIEBtb2RlbD1cInRleHROZWFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pyA6L+c6Led56a7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5OTk5OTlcIiBAbW9kZWw9XCJ0ZXh0RmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtIGF0dHJpYnV0ZS1pbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBMkdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/GroundSvg/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/GroundSvg/index.js": /*!*****************************************!*\ !*** ./src/Obj/Base/GroundSvg/index.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/set */ \"./node_modules/@babel/runtime/helpers/set.js\");\n/* harmony import */ var _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/GroundSvg/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Draw_drawPoint_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Draw/drawPoint.js */ \"./src/Draw/drawPoint.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _static_3rdparty_three_jsm_loaders_FontLoader_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../../static/3rdparty/three/jsm/loaders/FontLoader.js */ \"./static/3rdparty/three/jsm/loaders/FontLoader.js\");\n/* harmony import */ var _static_3rdparty_three_jsm_geometries_TextGeometry_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../../static/3rdparty/three/jsm/geometries/TextGeometry.js */ \"./static/3rdparty/three/jsm/geometries/TextGeometry.js\");\n/* harmony import */ var _static_3rdparty_three_fonts_FZZongYi_M05S_regular_typeface_json__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../../static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json */ \"./static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json\");\nvar _static_3rdparty_three_fonts_FZZongYi_M05S_regular_typeface_json__WEBPACK_IMPORTED_MODULE_21___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../../../../static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json */ \"./static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json\", 1);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropSet(t, e, o, r, p, f) { return _babel_runtime_helpers_set__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(f ? t.prototype : t), e, o, r, p); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _loadEvent = /*#__PURE__*/new WeakMap();\nvar _loaded = /*#__PURE__*/new WeakMap();\nvar GroundSvg = /*#__PURE__*/function (_Base) {\n function GroundSvg(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, GroundSvg);\n _this = _callSuper(this, GroundSvg, [sdk, options]);\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 贴地svg\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.angle=0 {number} 旋转角度\r\n * @param options.scale {object} 比例\r\n * @param options.scale.x=1 {number} x轴比例\r\n * @param options.scale.y=1 {number} y轴比例\r\n * @param options.url {string} 资源地址\r\n * @param options.flipe {object} 翻转\r\n * @param options.flipe.x=false {boolean} 绕X轴翻转\r\n * @param options.flipe.y=false {boolean} 绕Y轴翻转\r\n * @param {Array.} options.position 位置\r\n * @param options.position.lng {number} 经度\r\n * @param options.position.lat {number} 纬度\r\n * @param options.color {string} 颜色\r\n * @param options.text {object} 文字\r\n * @param options.text.show=true {boolean} 文字\r\n * @param options.text.position.lng {number} 经度\r\n * @param options.text.position.lat {number} 纬度\r\n * @param options.text.position.alt {number} 高度\r\n * @param options.text.fontSize=20 {number} 字体大小\r\n * @param options.text.color=#ffffff {string} 字体大小\r\n * @param options.text.scaleByDistance {boolean} 距离缩放\r\n * @param options.text.near=2000 {number} 视野缩放最近距离\r\n * @param options.text.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n _classPrivateFieldInitSpec(_this, _loadEvent, void 0);\n _classPrivateFieldInitSpec(_this, _loaded, false);\n var jsCode = \"\\n importScripts('\".concat(_this.getSourceRootPath(), \"/3rdparty/turf.min.js');\\n self.addEventListener('message', function (e) {\\n let features = []\\n eval(e.data.code);\\n self.postMessage(features);\\n }, false);\\n \");\n var dataUri = 'data:text/javascript;charset=utf-8,' + encodeURIComponent(jsCode);\n _this._worker = new Worker(dataUri);\n _this.options.angle = _this.options.angle || 0;\n _this.loaded = false;\n _this.ismove = false;\n if (_this.options.position.lat > 83.5) {\n _this.options.position.lat = 83.5;\n }\n if (_this.options.position.lat < -83.5) {\n _this.options.position.lat = -83.5;\n }\n _this.options.show = options.show || options.show === false ? options.show : true;\n _this.options.scale = options.scale || {};\n _this.options.scale.x = _this.options.scale.x || _this.options.scale.x === 0 ? _this.options.scale.x : 1;\n _this.options.scale.y = _this.options.scale.y || _this.options.scale.y === 0 ? _this.options.scale.y : 1;\n _this.options.flipe = options.flipe || {};\n _this.options.flipe.x = _this.options.flipe.x || false;\n _this.options.flipe.y = _this.options.flipe.y || false;\n _this.options.attribute = options.attribute || {};\n _this.options.attribute.link = _this.options.attribute.link || {};\n _this.options.attribute.link.content = _this.options.attribute.link.content || [];\n _this.options.attributeType = options.attributeType || 'richText';\n options.text = options.text || {};\n _this.options.text = {\n value: options.text.value || '',\n show: options.text.show || options.text.show === false ? options.text.show : true,\n position: options.text.position,\n fontSize: options.text.fontSize || options.text.fontSize === 0 ? options.text.fontSize : 20,\n color: options.text.color || '#ffffff',\n scaleByDistance: options.text.scaleByDistance || false,\n near: options.text.near || options.text.near === 0 ? options.text.near : 2000,\n far: options.text.far || options.text.far === 0 ? options.text.far : 100000\n };\n if (_this.options.text.position) {\n var point1 = turf.point([_this.options.position.lng, _this.options.position.lat]);\n var point2 = turf.point([_this.options.text.position.lng, _this.options.text.position.lat]);\n var distance = turf.distance(point1, point2, {\n units: 'kilometers'\n });\n var angle = turf.rhumbBearing(point1, point2);\n _this._textToCenter = {\n distance: distance,\n angle: angle\n };\n }\n _this.hierarchys = [];\n _this._elms = {};\n _this.Dialog = _Dialog;\n _this._isdrag = false;\n _this._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\n if (_this.sdk.entityMap.get(_this.options.id)) {\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(_this);\n }\n _this.sdk.addIncetance(_this.options.id, _this);\n _this.picking = true;\n if (_this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_24__[\"setSplitDirection\"])(0, _this.options.id);\n }\n _this._entityArray = [];\n _this.init();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default()(GroundSvg, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(GroundSvg, [{\n key: \"type\",\n get: function get() {\n return 'GroundSvg';\n }\n }, {\n key: \"attributeSelect\",\n get: function get() {\n return [{\n name: '富文本',\n value: '富文本',\n key: 'richText'\n }, {\n name: '链接',\n value: '链接',\n key: 'link'\n }];\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n if (this.options.text && this.options.text.show) {\n if (this.text) {\n if (!this.showView || this.showView == 3) {\n this.text.show = v;\n } else {\n this.text.show = false;\n }\n }\n }\n _superPropSet(GroundSvg, \"show\", v, this, 1, 1);\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"position\",\n get: function get() {\n return this.options.position;\n },\n set: function set(v) {\n var _this2 = this;\n this.options.position = v;\n if (this.options.position.lat > 83.5) {\n this.options.position.lat = 83.5;\n }\n if (this.options.position.lat < -83.5) {\n this.options.position.lat = -83.5;\n }\n this._update();\n if (this._textToCenter) {\n var point = turf.point([this.options.position.lng, this.options.position.lat]);\n var targetPoint = turf.destination(point, this._textToCenter.distance, this._textToCenter.angle, {\n units: 'kilometers'\n }).geometry.coordinates;\n this.getClampToHeight({\n lng: targetPoint[0],\n lat: targetPoint[1]\n }).then(function (height) {\n var textPosition = [targetPoint[0], targetPoint[1], height];\n _this2.text && (_this2.text.position = textPosition);\n });\n }\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n if (this.options.color) {\n for (var i = 0; i < this.entity.values.length; i++) {\n this.entity.values[i].polygon.material = Cesium.Color.fromCssColorString(this.options.color);\n }\n } else {\n for (var _i = 0; _i < this.entity.values.length; _i++) {\n this.entity.values[_i].polygon.material = Cesium.Color.fromCssColorString(this.entity.values[_i].properties.color._value);\n }\n }\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.color || undefined,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = '';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"angle\",\n get: function get() {\n return this.options.angle;\n },\n set: function set(v) {\n var _this4 = this;\n // console.log(v, Math.ceil(Math.abs(v / 360)), (Number(v) + Number(v) * Math.ceil(Math.abs(v / 360))) % 360)\n var angle = (Number(v) + 360) % 360;\n angle = parseFloat(angle.toFixed(1));\n this.options.angle = angle;\n if (v > 0 && angle === 0) {\n this.options.angle = 360;\n }\n this._elms.angle && this._elms.angle.forEach(function (item) {\n item.value = _this4.options.angle;\n });\n this._update();\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.options.scale;\n },\n set: function set(scale) {\n this.options.scale.x = scale.x;\n this.options.scale.y = scale.y;\n if (this._elms) {\n this._elms.xRange && (this._elms.xRange.value = this.options.scale.x);\n this._elms.yRange && (this._elms.yRange.value = this.options.scale.y);\n this._elms.xInput && (this._elms.xInput.value = this.options.scale.x);\n this._elms.yInput && (this._elms.yInput.value = this.options.scale.y);\n }\n this._update();\n }\n }, {\n key: \"flipeY\",\n get: function get() {\n return this.options.flipe.y;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n this.options.flipe.y = v;\n this._update();\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"flipeX\",\n get: function get() {\n return this.options.flipe.x;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n this.options.flipe.x = v;\n this._update();\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"textValue\",\n get: function get() {\n return this.options.text.value;\n },\n set: function set(v) {\n this.options.text.value = v;\n if (this.text) {\n this.text.text = v;\n } else {\n GroundSvg.createText(this);\n }\n this._elms.textValue && this._elms.textValue.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"textShow\",\n get: function get() {\n return this.options.text.show;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.text.show = v;\n if (this.show) {\n if (!this.showView || this.showView == 3) {\n this.text && (this.text.show = v);\n } else {\n this.text && (this.text.show = false);\n }\n if (this.options.text.position) {\n setTimeout(function () {\n if (_this5.options.text.position.alt) {\n _this5.text && (_this5.text.position = [_this5.options.text.position.lng, _this5.options.text.position.lat, _this5.options.text.position.alt]);\n } else {\n _this5.getClampToHeight({\n lng: _this5.options.text.position.lng,\n lat: _this5.options.text.position.lat\n }).then(function (height) {\n _this5.text && (_this5.text.position = [_this5.options.text.position.lng, _this5.options.text.position.lat, height]);\n });\n }\n }, 0);\n }\n } else {\n this.text && (this.text.show = false);\n }\n this._elms.textShow && this._elms.textShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"textColor\",\n get: function get() {\n return this.options.text.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.text.color = v;\n this.text && (this.text.color = v);\n if (this._elms.textColor) {\n this._elms.textColor.forEach(function (item, i) {\n var textColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.textColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.textColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.textColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.textColor[i] = textColorPicker;\n });\n }\n }\n }, {\n key: \"textFontSize\",\n get: function get() {\n return this.options.text.fontSize;\n },\n set: function set(v) {\n this.options.text.fontSize = v;\n if (this.text) {\n this.text.fontSize = v;\n this.text.pixelOffset = v;\n }\n this._elms.textFontSize && this._elms.textFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"textScaleByDistance\",\n get: function get() {\n return this.options.text.scaleByDistance;\n },\n set: function set(v) {\n this.options.text.scaleByDistance = v;\n this.text && (this.text.scaleByDistance = v);\n this._elms.textScaleByDistance && this._elms.textScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"textNear\",\n get: function get() {\n return this.options.text.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.textFar) {\n near = this.textFar;\n }\n this.options.text.near = near;\n this.text && (this.text.near = near);\n this._elms.textNear && this._elms.textNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"textFar\",\n get: function get() {\n return this.options.text.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.textNear) {\n far = this.textNear;\n }\n this.options.text.far = far;\n this.text && (this.text.far = far);\n this._elms.textFar && this._elms.textFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this7.options.attribute.link.content;\n case 2:\n _this7.attributeLink = _context3.sent;\n table = _this7._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _loop(_i2) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i2)) {\n _context2.next = 36;\n break;\n }\n height = item[_i2].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i2].innerHTML = _html;\n textareaElm = item[_i2].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i2].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this7.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this7.options.attribute.link.content[index].url;\n btn = item[_i2].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i2 = 0;\n case 8:\n if (!(_i2 < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i2), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i2++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this7.options.attribute.link.content.splice(i, 1);\n _this7.attributeLink = _this7.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this7.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this7.attributeLink = _this7.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this7.attributeLink = _this7.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i3) {\n var btn = item[_i3].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i3 = 0; _i3 < item.length; _i3++) {\n _loop3(_i3);\n }\n }\n }, {\n key: \"init\",\n value: function init() {\n var _this8 = this;\n var url = this.replaceHost(this.options.url, this.options.host);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n this.hierarchys = [];\n this.originalOptions = this.deepCopyObj(this.options);\n var geometryArray = [];\n var loader = new SVGLoader();\n loader.load(url, function (data) {\n if (!_this8.sdk || !_this8.sdk.viewer || !_this8.sdk.viewer.entities) {\n return;\n }\n data.xml.style.width = '0';\n data.xml.style.height = '0';\n document.body.appendChild(data.xml);\n var _iterator3 = _createForOfIteratorHelper(data.paths),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var path = _step3.value;\n var fillColor = path.userData.style.fill;\n var style = window.getComputedStyle(path.userData.node);\n if (style.strokeWidth) {\n path.userData.style.strokeWidth = Number(style.strokeWidth.replace(/[a-zA-Z]/g, ''));\n }\n if (fillColor !== undefined && fillColor !== 'none') {\n var shapes = SVGLoader.createShapes(path);\n var _iterator4 = _createForOfIteratorHelper(shapes),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var shape = _step4.value;\n var _geometry = new THREE.ShapeGeometry(shape);\n var mesh = new THREE.Mesh(_geometry);\n geometryArray.push({\n geometry: mesh.geometry,\n color: fillColor\n });\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n var strokeColor = path.userData.style.stroke;\n if (strokeColor !== undefined && strokeColor !== 'none') {\n var _iterator5 = _createForOfIteratorHelper(path.subPaths),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var subPath = _step5.value;\n var _geometry2 = SVGLoader.pointsToStroke(subPath.getPoints(), path.userData.style);\n if (_geometry2) {\n var _mesh = new THREE.Mesh(_geometry2);\n geometryArray.push({\n geometry: _mesh.geometry,\n color: strokeColor\n });\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n document.body.removeChild(data.xml);\n var min = 0;\n var max = 0;\n var geojson;\n for (var key = 0; key < geometryArray.length; key++) {\n var geometry = geometryArray[key].geometry;\n if (!geometry || !geometry.attributes || !geometry.attributes.position) {\n continue;\n }\n var array = geometry.attributes.position.array;\n for (var i = 0; i < array.length; i++) {\n if (min > array[i]) {\n min = array[i];\n }\n if (max < array[i]) {\n max = array[i];\n }\n }\n }\n min = Math.abs(min);\n max = Math.abs(max);\n if (min > max) {\n max = min;\n }\n var max2 = max;\n max = max * (10 / 3) * 100;\n var scale = 4000 / max / 5;\n max2 = max2 * scale;\n for (var _key = 0; _key < geometryArray.length; _key++) {\n geometryArray[_key].geometry.scale(scale, scale, 1);\n geometryArray[_key].geometry.rotateX(THREE.MathUtils.degToRad(180));\n }\n var jsCode = \"\\n let geometryArray = e.data.options.geometryArray\\n let max2 = e.data.options.max2\\n for (let key = 0; key < geometryArray.length; key++) {\\n let feature\\n let positions = []\\n let position = []\\n let geometry = geometryArray[key].geometry;\\n let array = geometry.attributes.position.array\\n \\n for (let i = 0; i < array.length; i += 3) {\\n let x = array[i] - (max2 / 2)\\n let y = array[i + 1] + (max2 / 2)\\n position.push([x, y, array[i + 1]])\\n }\\n if (geometry.index && geometry.index.array) {\\n let index = geometry.index.array\\n for (let i = 0; i < index.length; i += 3) {\\n positions.push([position[index[i]], position[index[i + 1]], position[index[i + 2]]])\\n }\\n }\\n else {\\n for (let i = 0; i < position.length; i += 3) {\\n positions.push([position[i], position[i + 1], position[i + 2]])\\n }\\n }\\n \\n \\n let polygons = []\\n // \\u7EC4\\u5408\\u591A\\u8FB9\\u5F62\\n for (let i = 0; i < positions.length; i++) {\\n let polygon = turf.polygon([[\\n ...positions[i],\\n positions[i][0]\\n ]]);\\n polygons.push(polygon)\\n \\n if (feature) {\\n feature = turf.union(feature, polygon);\\n }\\n else {\\n feature = polygon\\n }\\n }\\n feature.properties.color = geometryArray[key].color\\n features.push(feature)\\n }\\n \";\n _this8._worker.postMessage({\n code: jsCode,\n options: {\n geometryArray: geometryArray,\n max2: max2\n }\n });\n _this8._worker.onmessage = function (event) {\n if (!_this8.sdk || !_this8.sdk.viewer || !_this8.sdk.viewer.entities) {\n return;\n }\n var features = event.data;\n geojson = turf.featureCollection(features);\n _this8.geojson = JSON.parse(JSON.stringify(geojson));\n\n // 计算边界框\n var bbox = turf.bbox(geojson);\n var width = Math.abs(bbox[2] - bbox[0]);\n var height = Math.abs(bbox[3] - bbox[1]);\n\n // 获取最小正方形\n var square = turf.square(bbox);\n // 控制点界限\n square[0] = square[0] + _this8.options.position.lng - width / 5;\n square[1] = square[1] + _this8.options.position.lat - height / 5;\n square[2] = square[2] + _this8.options.position.lng + width / 5;\n square[3] = square[3] + _this8.options.position.lat + height / 5;\n _this8.bbox = square;\n _this8.geojson.features.forEach(function (item) {\n var array = [];\n var geojson = JSON.parse(JSON.stringify(item));\n geojson.properties.directionDistance = [];\n if (geojson.geometry.type === 'MultiPolygon') {\n for (var _i4 = 0; _i4 < geojson.geometry.coordinates.length; _i4++) {\n var _array = [];\n for (var m = 0; m < geojson.geometry.coordinates[_i4].length; m++) {\n var array2 = [];\n for (var n = 0; n < geojson.geometry.coordinates[_i4][m].length; n++) {\n var point1 = turf.point([0, geojson.geometry.coordinates[_i4][m][n][1]]);\n var point2 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(geojson.geometry.coordinates[_i4][m][n]));\n var distance = turf.distance(point1, point2, {\n units: 'kilometers'\n });\n var angle = turf.rhumbBearing(point1, point2);\n array2.push({\n origin: geojson.geometry.coordinates[_i4][m][n],\n distance: distance,\n angle: angle\n });\n }\n _array.push(array2);\n }\n geojson.properties.directionDistance.push(_array);\n }\n } else {\n for (var _i5 = 0; _i5 < geojson.geometry.coordinates.length; _i5++) {\n var _array2 = [];\n for (var _m = 0; _m < geojson.geometry.coordinates[_i5].length; _m++) {\n var _point = turf.point([0, geojson.geometry.coordinates[_i5][_m][1]]);\n var _point2 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(geojson.geometry.coordinates[_i5][_m]));\n var _distance = turf.distance(_point, _point2, {\n units: 'kilometers'\n });\n var _angle = turf.rhumbBearing(_point, _point2);\n _array2.push({\n origin: geojson.geometry.coordinates[_i5][_m],\n distance: _distance,\n angle: _angle\n });\n }\n geojson.properties.directionDistance.push(_array2);\n }\n }\n if (geojson.geometry.type === 'MultiPolygon') {\n for (var _i6 = 0; _i6 < geojson.geometry.coordinates.length; _i6++) {\n var hierarchy = _this8.getHierarchyPolygon(geojson, _i6);\n array.push(hierarchy);\n }\n } else {\n var _hierarchy = _this8.getHierarchyPolygon(geojson);\n array.push(_hierarchy);\n }\n _this8.hierarchys.push(array);\n });\n _this8.entity = new Cesium.EntityCollection();\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_24__[\"syncSplitData\"])(_this8.sdk, _this8.options.id);\n var perPositionHeight = false;\n if (_this8.sdk.viewer._element.className === 'cesium-viewer 2d') {\n perPositionHeight = true;\n }\n var _loop5 = function _loop5(_i7) {\n var _loop6 = function _loop6(m) {\n var id = _this8.options.id + \"-\".concat(_i7, \"_\").concat(m, \"}\");\n var oldEntity = _this8.sdk.viewer.entities.getById(id);\n if (oldEntity) {\n _this8.sdk.viewer.entities.remove(oldEntity);\n }\n var entity = _this8.sdk.viewer.entities.add({\n id: _this8.options.id + \"-\".concat(_i7, \"_\").concat(m, \"}\"),\n show: _this8.options.show,\n polygon: {\n hierarchy: new Cesium.CallbackProperty(function () {\n var hierarchy = _this8.hierarchys[_i7][m];\n var holes = [];\n for (var n = 0; n < hierarchy.holes.length; n++) {\n holes.push({\n positions: hierarchy.holes[n]\n });\n }\n return {\n positions: hierarchy.positions,\n holes: holes\n };\n }, true),\n perPositionHeight: perPositionHeight,\n zIndex: _this8.sdk._entityZIndex,\n material: new Cesium.CustomColorMaterialSource({\n color: _this8.options.color || _this8.geojson.features[_i7].properties.color\n })\n },\n properties: {\n id: _this8.options.id\n }\n });\n _this8.sdk._entityZIndex++;\n if (_this8.geojson.features[_i7].properties.color) {\n entity.properties = {\n id: _this8.options.id,\n color: _this8.geojson.features[_i7].properties.color\n };\n }\n _this8._entityArray.push(entity);\n _this8.entity.add(entity);\n };\n for (var m = 0; m < _this8.hierarchys[_i7].length; m++) {\n _loop6(m);\n }\n };\n for (var _i7 = 0; _i7 < _this8.hierarchys.length; _i7++) {\n _loop5(_i7);\n }\n _this8.loaded = true;\n _classPrivateFieldSet(_loaded, _this8, true);\n if (_classPrivateFieldGet(_loadEvent, _this8)) {\n _classPrivateFieldGet(_loadEvent, _this8).call(_this8);\n }\n _this8.scale = _this8.scale;\n GroundSvg.createText(_this8);\n // GroundSvg.initText(this)\n };\n });\n }\n }, {\n key: \"edit\",\n value: (\n /**\r\n * 编辑框\r\n * @param {boolean} status=false 状态\r\n */\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee3(state) {\n var _this9 = this;\n var contentElm, colorPicker, textColorPicker, all_elm, xElm, yElm, xRange, xInput, yRange, yInput;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee3$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (_classPrivateFieldGet(_loaded, this)) {\n _context5.next = 2;\n break;\n }\n return _context5.abrupt(\"return\");\n case 2:\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context5.next = 42;\n break;\n }\n _context5.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.originalOptions, {\n title: '军标属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this9.name = _this9.name.trim();\n if (!_this9.name) {\n _this9.name = '未命名对象';\n }\n _this9.text && (_this9.options.text.position = {\n lng: _this9.text.position[0],\n lat: _this9.text.position[1],\n alt: _this9.text.position[2]\n });\n _this9.originalOptions = _this9.deepCopyObj(_this9.options);\n _this9._DialogObject.close();\n var cdoptions = _this9.deepCopyObj(_this9.options);\n cdoptions.host = '';\n _this9.Dialog.confirmCallBack && _this9.Dialog.confirmCallBack(cdoptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this9.sdk, _this9.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_24__[\"syncSplitData\"])(_this9.sdk, _this9.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this9.reset();\n _this9.Dialog.resetCallBack && _this9.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this9.Dialog.removeCallBack && _this9.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this9._DialogObject = null;\n _this9.drag(false);\n _this9.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this9.Dialog.closeCallBack && _this9.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this9.show = show;\n _this9.Dialog.showCallBack && _this9.Dialog.showCallBack();\n },\n addFootElm: [{\n tagName: 'button',\n className: 'flipe-over-y',\n innerHTML: 'Y轴翻转',\n event: ['click', function () {\n _this9.flipeY = !_this9.flipeY;\n }]\n }, {\n tagName: 'button',\n className: 'flipe-over-x',\n innerHTML: 'X轴翻转',\n event: ['click', function () {\n _this9.flipeX = !_this9.flipeX;\n }]\n }, {\n tagName: 'button',\n className: 'drag',\n innerHTML: '编辑',\n event: ['click', function () {\n _this9.drag(!_this9._isdrag);\n }]\n }]\n }, true);\n case 7:\n this._DialogObject = _context5.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' ground-svg';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n _context5.next = 13;\n return this._DialogObject.contentAppChild(contentElm);\n case 13:\n this.attributeType = this.options.attributeType;\n\n // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color || undefined,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.color = '';\n } //点击清空按钮事件回调\n });\n textColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"textColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.textColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.textColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.textColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [colorPicker];\n this._elms.textColor = [textColorPicker];\n setTimeout(/*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee2() {\n var m, tagData, attributeElm, legpObject, attributeSelectElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee2$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!(_this9.sdk && _this9.sdk.tabHide && Array.isArray(_this9.sdk.tabHide))) {\n _context4.next = 9;\n break;\n }\n m = 0;\n case 2:\n if (!(m < _this9.sdk.tabHide.length)) {\n _context4.next = 9;\n break;\n }\n if (!(_this9.sdk.tabHide[m] === '属性信息')) {\n _context4.next = 6;\n break;\n }\n contentElm.getElementsByClassName('attribute-info')[0].style.display = 'none';\n return _context4.abrupt(\"break\", 9);\n case 6:\n m++;\n _context4.next = 2;\n break;\n case 9:\n _this9.attributeLink = _this9.options.attribute.link.content;\n tagData = _this9.attributeSelect;\n attributeElm = _this9._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (!attributeElm) {\n _context4.next = 26;\n break;\n }\n legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, '.attribute-select');\n legpObject.legp_search(tagData);\n attributeSelectElm = _this9._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n i = 0;\n case 17:\n if (!(i < tagData.length)) {\n _context4.next = 25;\n break;\n }\n if (!(tagData[i].key === _this9.options.attributeType)) {\n _context4.next = 22;\n break;\n }\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n return _context4.abrupt(\"break\", 25);\n case 22:\n i++;\n _context4.next = 17;\n break;\n case 25:\n attributeSelectElm.addEventListener('input', function () {\n for (var _i8 = 0; _i8 < tagData.length; _i8++) {\n if (tagData[_i8].value === attributeSelectElm.value) {\n _this9.attributeType = tagData[_i8].key;\n break;\n }\n }\n });\n case 26:\n case \"end\":\n return _context4.stop();\n }\n }, _callee2);\n })), 0);\n xElm = contentElm.getElementsByClassName('x-scale')[0];\n yElm = contentElm.getElementsByClassName('y-scale')[0];\n xRange = xElm.getElementsByTagName('input')[0];\n xInput = xElm.getElementsByTagName('input')[1];\n yRange = yElm.getElementsByTagName('input')[0];\n yInput = yElm.getElementsByTagName('input')[1];\n xRange.value = this.scale.x;\n xInput.value = this.scale.x;\n yRange.value = this.scale.y;\n yInput.value = this.scale.y;\n this._elms.xRange = xRange;\n this._elms.yRange = yRange;\n this._elms.xInput = xInput;\n this._elms.yInput = yInput;\n xRange.addEventListener('input', function (e) {\n _this9.scale = {\n x: xRange.value,\n y: _this9.scale.y\n };\n });\n yRange.addEventListener('input', function (e) {\n _this9.scale = {\n x: _this9.scale.x,\n y: yRange.value\n };\n });\n xInput.addEventListener('input', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) && value >= Number(e.target.min)) {\n _this9.scale = {\n x: value,\n y: _this9.scale.y\n };\n }\n }\n });\n xInput.addEventListener('blur', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n _this9.scale = {\n x: value,\n y: _this9.scale.y\n };\n });\n yInput.addEventListener('input', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) && value >= Number(e.target.min)) {\n _this9.scale = {\n x: _this9.scale.x,\n y: value\n };\n }\n }\n });\n yInput.addEventListener('blur', function (e) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n _this9.scale = {\n x: _this9.scale.x,\n y: value\n };\n });\n case 42:\n case \"end\":\n return _context5.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n /**\r\n * 重置\r\n */\n )\n }, {\n key: \"reset\",\n value: function reset() {\n if (!_classPrivateFieldGet(_loaded, this)) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.position = this.originalOptions.position;\n this.name = this.originalOptions.name;\n this.angle = this.originalOptions.angle;\n this.scale = this.originalOptions.scale;\n this.color = this.originalOptions.color;\n if (this.text && !this.originalOptions.text.position) {\n this.text.remove();\n this.text = null;\n }\n this.attributeLink = this.options.attribute.link.content;\n this.textShow = this.originalOptions.text.show;\n this.textValue = this.originalOptions.text.value;\n this.textColor = this.originalOptions.text.color;\n this.textFontSize = this.originalOptions.text.fontSize;\n this.textScaleByDistance = this.originalOptions.text.scaleByDistance;\n this.textNear = this.originalOptions.text.near;\n this.textFar = this.originalOptions.text.far;\n }\n\n /**\r\n * 拖动\r\n * @param {boolean} status=false 状态\r\n */\n }, {\n key: \"drag\",\n value: function drag(status, cd) {\n var _this10 = this;\n if (!_classPrivateFieldGet(_loaded, this) || !this.sdk || !this.sdk.viewer) {\n return;\n }\n this.ismove = false;\n this._isdrag = status;\n if (this.ScreenSpaceEventHandler) {\n this.ScreenSpaceEventHandler.destroy();\n this.ScreenSpaceEventHandler = null;\n }\n if (status) {\n this.ScreenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(this.sdk.viewer.canvas);\n var width = Math.abs(this.bbox[0] - this.bbox[2]);\n var height = Math.abs(this.bbox[1] - this.bbox[3]);\n this.ScreenSpaceEventHandler.setInputAction(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee4(movement) {\n var sCartesian, eCartesian, ray, position1, position2, x, y, radians, radiansW, radiansH, _w, _h, _wh, _angle2, angleW, angleH, _point3, _options, _controlPoints, point1, point2, pointC, bearing1, bearing2_0, bearing2, bearingH, bearingW, distance, flag, flag2, cx, cy, scale, pickedObjectArray, pickPoint, i, pickedObject, _i9;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee4$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n if (!_this10.pickPoint) {\n _context6.next = 114;\n break;\n }\n sCartesian = _this10.pickPoint.position.getValue();\n eCartesian = _this10.sdk.viewer.scene.pickPosition(movement.endPosition);\n if (!eCartesian) {\n ray = _this10.sdk.viewer.camera.getPickRay(movement.endPosition);\n eCartesian = _this10.sdk.viewer.scene.globe.pick(ray, _this10.sdk.viewer.scene);\n }\n if (!(!sCartesian || !eCartesian)) {\n _context6.next = 6;\n break;\n }\n return _context6.abrupt(\"return\");\n case 6:\n position1 = _this10.cartesian3Towgs84(sCartesian, _this10.sdk.viewer);\n position2 = _this10.cartesian3Towgs84(eCartesian, _this10.sdk.viewer);\n x = 0;\n y = 0;\n _w = 3.5 * _this10.scale.x;\n _h = 3.5 * _this10.scale.y;\n _wh = Math.sqrt(Math.pow(_w / 2, 2) + Math.pow(_h / 2, 2));\n _angle2 = Math.atan(_w / 2 / (_h / 2)) * (180 / Math.PI);\n if (isNaN(_angle2)) {\n _angle2 = 0;\n }\n _point3 = turf.point([_this10.position.lng, _this10.position.lat]);\n _options = {\n units: 'kilometers'\n };\n _controlPoints = [];\n _controlPoints[0] = turf.destination(_point3, _h / 2 * 1.5, 0 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[1] = turf.destination(_point3, _wh, 180 + _angle2 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[2] = turf.destination(_point3, _h / 2, 180 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[3] = turf.destination(_point3, _wh, 180 - _angle2 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[4] = turf.destination(_point3, _w / 2, 270 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[5] = [_this10.position.lng, _this10.position.lat];\n _controlPoints[6] = turf.destination(_point3, _w / 2, 90 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[7] = turf.destination(_point3, _wh, 360 - _angle2 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[8] = turf.destination(_point3, _h / 2, 0 + _this10.options.angle, _options).geometry.coordinates;\n _controlPoints[9] = turf.destination(_point3, _wh, 0 + _angle2 + _this10.options.angle, _options).geometry.coordinates;\n point1 = turf.point([position1.lng, position1.lat]);\n point2 = turf.point([position2.lng, position2.lat]);\n pointC = turf.point([_this10.position.lng, _this10.position.lat]);\n bearing1 = turf.rhumbBearing(pointC, point1);\n bearing2_0 = turf.rhumbBearing(pointC, point2);\n bearing2 = (bearing2_0 + 360 - _this10.angle) % 360;\n // 中心点到鼠标的距离\n distance = turf.rhumbDistance(pointC, point2, _options);\n flag = false;\n flag2 = false;\n _context6.t0 = _this10.pickPoint.id;\n _context6.next = _context6.t0 === 'svg-control-points_0' ? 40 : _context6.t0 === 'svg-control-points_1' ? 43 : _context6.t0 === 'svg-control-points_7' ? 43 : _context6.t0 === 'svg-control-points_2' ? 57 : _context6.t0 === 'svg-control-points_8' ? 57 : _context6.t0 === 'svg-control-points_3' ? 64 : _context6.t0 === 'svg-control-points_9' ? 64 : _context6.t0 === 'svg-control-points_4' ? 78 : _context6.t0 === 'svg-control-points_5' ? 85 : _context6.t0 === 'svg-control-points_6' ? 95 : 102;\n break;\n case 40:\n _angle2 = bearing2_0 - bearing1;\n _this10.angle += _angle2;\n return _context6.abrupt(\"break\", 102);\n case 43:\n bearingW = (turf.rhumbBearing(pointC, turf.point(_controlPoints[4])) + 360 - _this10.angle) % 360;\n bearingH = (turf.rhumbBearing(pointC, turf.point(_controlPoints[2])) + 360 - _this10.angle) % 360;\n angleW = bearing2 - bearingW;\n angleH = bearing2 - bearingH;\n if (angleW > -360 && angleW < -90 || angleW < 360 && angleW > 90) {\n angleW = angleW + 180;\n flag = true;\n }\n if (angleH > -360 && angleH < -90 || angleH < 360 && angleH > 90) {\n angleH = angleH + 180;\n flag2 = true;\n }\n if (flag && flag2) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#ff0000');\n } else {\n if (flag) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n } else if (flag2) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n } else {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n }\n }\n radiansW = Math.PI / 180 * angleW;\n radiansH = Math.PI / 180 * angleH;\n // 矩形高度\n _w = Math.cos(radiansW) * distance * 2;\n _h = Math.cos(radiansH) * distance * 2;\n // scaleY值\n _this10.scale.x = Math.abs(_w) / 3.5;\n _this10.scale.y = Math.abs(_h) / 3.5;\n return _context6.abrupt(\"break\", 102);\n case 57:\n bearingH = (turf.rhumbBearing(pointC, turf.point(_controlPoints[2])) + 360 - _this10.angle) % 360;\n angleH = bearing2 - bearingH;\n if (angleH > -360 && angleH < -90 || angleH < 360 && angleH > 90) {\n angleH = angleH + 180;\n _this10.pointEntityCollection.values[2].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[8].point.color = Cesium.Color.fromCssColorString('#ff0000');\n } else {\n _this10.pointEntityCollection.values[2].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[8].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n }\n radiansH = Math.PI / 180 * angleH;\n // 矩形高度\n _h = Math.cos(radiansH) * distance * 2;\n // scaleY值\n _this10.scale.y = _h / 3.5;\n return _context6.abrupt(\"break\", 102);\n case 64:\n bearingW = (turf.rhumbBearing(pointC, turf.point(_controlPoints[6])) + 360 - _this10.angle) % 360;\n bearingH = (turf.rhumbBearing(pointC, turf.point(_controlPoints[2])) + 360 - _this10.angle) % 360;\n angleW = bearing2 - bearingW;\n angleH = bearing2 - bearingH;\n if (angleW > -360 && angleW < -90 || angleW < 360 && angleW > 90) {\n angleW = angleW + 180;\n flag = true;\n }\n if (angleH > -360 && angleH < -90 || angleH < 360 && angleH > 90) {\n angleH = angleH + 180;\n flag2 = true;\n }\n if (flag && flag2) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n } else {\n if (flag) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n } else if (flag2) {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#ff0000');\n } else {\n _this10.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#ff0000');\n _this10.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n }\n }\n radiansW = Math.PI / 180 * angleW;\n radiansH = Math.PI / 180 * angleH;\n // 矩形高度\n _w = Math.cos(radiansW) * distance * 2;\n _h = Math.cos(radiansH) * distance * 2;\n // scaleY值\n _this10.scale.x = Math.abs(_w) / 3.5;\n _this10.scale.y = Math.abs(_h) / 3.5;\n return _context6.abrupt(\"break\", 102);\n case 78:\n bearingW = (turf.rhumbBearing(pointC, turf.point(_controlPoints[4])) + 360 - _this10.angle) % 360;\n angleW = bearing2 - bearingW;\n if (angleW > -360 && angleW < -90 || angleW < 360 && angleW > 90) {\n angleW = angleW + 180;\n _this10.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#ff0000');\n } else {\n _this10.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#ff0000');\n }\n radiansW = Math.PI / 180 * angleW;\n // 矩形宽度\n _w = Math.cos(radiansW) * distance * 2;\n // scaleY值\n _this10.scale.x = _w / 3.5;\n return _context6.abrupt(\"break\", 102);\n case 85:\n if (position2.lat > 83.5) {\n position2.lat = 83.5;\n }\n if (position2.lat < -83.5) {\n position2.lat = -83.5;\n }\n _this10.position = {\n lng: position2.lng,\n lat: position2.lat\n };\n cx = position2.lng - position1.lng;\n cy = position2.lat - position1.lat;\n _this10.bbox[0] = _this10.bbox[0] + cx;\n _this10.bbox[1] = _this10.bbox[1] + cy;\n _this10.bbox[2] = _this10.bbox[2] + cx;\n _this10.bbox[3] = _this10.bbox[3] + cy;\n return _context6.abrupt(\"break\", 102);\n case 95:\n bearingW = (turf.rhumbBearing(pointC, turf.point(_controlPoints[6])) + 360 - _this10.angle) % 360;\n angleW = bearing2 - bearingW;\n if (angleW > -360 && angleW < -90 || angleW < 360 && angleW > 90) {\n angleW = angleW + 180;\n _this10.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#ff0000');\n } else {\n _this10.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n _this10.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#ff0000');\n }\n radiansW = Math.PI / 180 * angleW;\n // 矩形高度\n _w = Math.cos(radiansW) * distance * 2;\n _this10.scale.x = _w / 3.5;\n return _context6.abrupt(\"break\", 102);\n case 102:\n // let radians = (Math.PI / 180) * this.options.angle\n // x = x*Math.cos(radians)\n // y = y*Math.cos(radians)\n\n // let bbox = turf.bbox(geojson);\n // let square = turf.square(bbox);\n\n x = x / (width / 2) * 100;\n y = y / (height / 2) * 100;\n scale = _objectSpread({}, _this10.scale);\n scale.x = scale.x + x;\n scale.y = scale.y - y;\n\n // let pt = turf.point(this.center);\n // let destination1 = turf.rhumbDestination(pt, 220, 45, { units: 'kilometers' });\n // let destination2 = turf.rhumbDestination(pt, 220, 225, { units: 'kilometers' });\n\n // width = Math.abs(destination2.geometry.coordinates[0] - destination1.geometry.coordinates[0])\n // height = Math.abs(destination2.geometry.coordinates[1] - destination1.geometry.coordinates[1])\n\n if (scale.y > 200) {\n scale.y = 200;\n }\n if (scale.y < 0.001) {\n scale.y = 0.001;\n }\n if (scale.x > 200) {\n scale.x = 200;\n }\n if (scale.x < 0.001) {\n scale.x = 0.001;\n }\n _this10.scale = _objectSpread({}, scale);\n _context6.next = 141;\n break;\n case 114:\n pickedObjectArray = _this10.sdk.viewer.scene.drillPick(movement.endPosition);\n i = 0;\n case 116:\n if (!(i < pickedObjectArray.length)) {\n _context6.next = 124;\n break;\n }\n pickedObject = pickedObjectArray[i];\n if (!(pickedObject && pickedObject.primitive && pickedObject.primitive._id && pickedObject.primitive._id.id && pickedObject.primitive._id.id.indexOf('svg-control-points_') !== -1)) {\n _context6.next = 121;\n break;\n }\n pickPoint = pickedObject.primitive._id;\n return _context6.abrupt(\"break\", 124);\n case 121:\n i++;\n _context6.next = 116;\n break;\n case 124:\n _i9 = 0;\n case 125:\n if (!(_i9 < _this10.pointEntityCollection.values.length)) {\n _context6.next = 141;\n break;\n }\n if (!(pickPoint && _this10.pointEntityCollection.values[_i9].id === pickPoint.id)) {\n _context6.next = 130;\n break;\n }\n pickPoint.point.color = Cesium.Color.fromCssColorString('#ffff00');\n _context6.next = 138;\n break;\n case 130:\n _context6.t1 = _this10.pointEntityCollection.values[_i9].id;\n _context6.next = _context6.t1 === 'svg-control-points_5' ? 133 : _context6.t1 === 'svg-control-points_0' ? 135 : 137;\n break;\n case 133:\n _this10.pointEntityCollection.values[_i9].point.color = Cesium.Color.fromCssColorString('#ffff00');\n return _context6.abrupt(\"break\", 138);\n case 135:\n _this10.pointEntityCollection.values[_i9].point.color = Cesium.Color.fromCssColorString('#ff0000');\n return _context6.abrupt(\"break\", 138);\n case 137:\n _this10.pointEntityCollection.values[_i9].point.color = Cesium.Color.fromCssColorString('#00ff0a');\n case 138:\n _i9++;\n _context6.next = 125;\n break;\n case 141:\n case \"end\":\n return _context6.stop();\n }\n }, _callee4);\n }));\n return function (_x3) {\n return _ref2.apply(this, arguments);\n };\n }(), Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n this.ScreenSpaceEventHandler.setInputAction(function (movement) {\n var pickedObjectArray = _this10.sdk.viewer.scene.drillPick(movement.position);\n for (var i = 0; i < pickedObjectArray.length; i++) {\n var pickedObject = pickedObjectArray[i];\n if (pickedObject && pickedObject.primitive && pickedObject.primitive._id && pickedObject.primitive._id.objectId === _this10.options.id && pickedObject.primitive._id.id && pickedObject.primitive._id.id.indexOf('svg-control-points_') !== -1) {\n YJ.Global.CameraController(_this10.sdk, false);\n _this10.pickPoint = pickedObject.primitive._id;\n _this10.pickPoint.point.color = Cesium.Color.fromCssColorString('#ff0000');\n break;\n }\n }\n }, Cesium.ScreenSpaceEventType.LEFT_DOWN);\n this.ScreenSpaceEventHandler.setInputAction(function (movement) {\n if (_this10.pickPoint) {\n YJ.Global.CameraController(_this10.sdk, true);\n switch (_this10.pickPoint.id) {\n case 'svg-control-points_4':\n _this10.pickPoint.point.color = Cesium.Color.fromCssColorString('#ffff00');\n break;\n case 'svg-control-points_9':\n _this10.pickPoint.point.color = Cesium.Color.fromCssColorString('#ff0000');\n break;\n default:\n _this10.pickPoint.point.color = Cesium.Color.fromCssColorString('#00ff0a');\n }\n _this10.pickPoint = null;\n }\n }, Cesium.ScreenSpaceEventType.LEFT_UP);\n this.ScreenSpaceEventHandler.setInputAction(function (movement) {\n _this10.drag(false);\n if (!_this10._DialogObject) {\n cd && cd(_this10.options);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this10.sdk, _this10.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_24__[\"syncSplitData\"])(_this10.sdk, _this10.options.id);\n }\n }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);\n this.pointEntityCollection = new Cesium.EntityCollection();\n var w = 3.5 * this.scale.x;\n var h = 3.5 * this.scale.y;\n var wh = Math.sqrt(Math.pow(w / 2, 2) + Math.pow(h / 2, 2));\n var angle = Math.atan(w / 2 / (h / 2)) * (180 / Math.PI);\n if (isNaN(angle)) {\n angle = 0;\n }\n var point = turf.point([this.position.lng, this.position.lat]);\n var options = {\n units: 'kilometers'\n };\n var controlPoints = [];\n controlPoints[0] = turf.destination(point, h / 2 * 1.5, 0, options).geometry.coordinates;\n controlPoints[1] = turf.destination(point, wh, 180 + angle, options).geometry.coordinates;\n controlPoints[2] = turf.destination(point, h / 2, 180, options).geometry.coordinates;\n controlPoints[3] = turf.destination(point, wh, 180 - angle, options).geometry.coordinates;\n controlPoints[4] = turf.destination(point, w / 2, 270, options).geometry.coordinates;\n controlPoints[5] = [this.position.lng, this.position.lat];\n controlPoints[6] = turf.destination(point, w / 2, 90, options).geometry.coordinates;\n controlPoints[7] = turf.destination(point, wh, 360 - angle, options).geometry.coordinates;\n controlPoints[8] = turf.destination(point, h / 2, 0, options).geometry.coordinates;\n controlPoints[9] = turf.destination(point, wh, 0 + angle, options).geometry.coordinates;\n this.controlPoints = controlPoints;\n if (!this.sdk || !this.sdk.viewer) {\n return;\n }\n var _loop7 = function _loop7(i) {\n var color = '#00ff0a';\n if (i === 5) {\n color = '#ffff00';\n }\n if (i === 0) {\n color = '#ff0000';\n }\n var entity = _this10.sdk.viewer.entities.getOrCreateEntity('svg-control-points_' + i);\n entity.show = true;\n entity.objectId = _this10.options.id;\n entity.position = new Cesium.CallbackProperty(function () {\n var _Cesium$Cartesian;\n return (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this10.controlPoints[i]));\n });\n entity.point = new Cesium.PointGraphics({\n color: Cesium.Color.fromCssColorString(color),\n // 点的颜色\n pixelSize: 10,\n // 点的大小\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n scaleByDistance: new Cesium.NearFarScalar(0.0, 1.0, 1.0e10, 1.0),\n disableDepthTestDistance: Number.POSITIVE_INFINITY // 不应用深度测试\n });\n _this10.pointEntityCollection.add(entity);\n };\n for (var i = 0; i < this.controlPoints.length; i++) {\n _loop7(i);\n }\n this._update();\n } else {\n for (var _i10 = 0; _i10 < this.controlPoints.length; _i10++) {\n var entity = this.sdk.viewer.entities.getById('svg-control-points_' + _i10);\n if (entity && entity.objectId === this.options.id) {\n entity.show = false;\n }\n }\n }\n }\n }, {\n key: \"getHierarchyPolygon\",\n value: function getHierarchyPolygon(geojson, key) {\n if (!geojson) {\n return;\n }\n var hierarchy = {};\n var holes = [];\n var directionDistance = geojson.properties.directionDistance;\n if (key !== undefined) {\n directionDistance = geojson.properties.directionDistance[key];\n }\n for (var i = 0; i < directionDistance.length; i++) {\n var positions = [];\n for (var m = 0; m < directionDistance[i].length; m++) {\n var _Cesium$Cartesian2;\n var lng = this.options.position.lng;\n var lat = directionDistance[i][m].origin[1] + this.options.position.lat;\n if (lat > 90) {\n lng += 180;\n }\n var origin = [lng, lat];\n var pt = turf.point(origin);\n var destination = turf.rhumbDestination(pt, directionDistance[i][m].distance, directionDistance[i][m].angle, {\n units: 'kilometers'\n });\n var coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(destination.geometry.coordinates);\n // 二维模式下设置高度\n coordinates[2] = 10;\n positions.push((_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(coordinates)));\n }\n if (i === 0) {\n hierarchy.positions = positions;\n } else {\n holes.push(positions);\n }\n }\n hierarchy.holes = holes;\n return hierarchy;\n }\n }, {\n key: \"_updateGeojson\",\n value: function _updateGeojson(data, x, y) {\n if (!_classPrivateFieldGet(_loaded, this)) {\n return;\n }\n var width = Math.abs(this.bbox[0] - this.bbox[2]);\n var height = Math.abs(this.bbox[1] - this.bbox[3]);\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(data[0]) === 'object') {\n for (var i = 0; i < data.length; i++) {\n this._updateGeojson(data[i], x, y);\n }\n } else {\n for (var _i11 = 0; _i11 < data.length; _i11 += 2) {\n data[_i11] = data[_i11] + data[_i11] / (width / 2) * x;\n }\n for (var _i12 = 1; _i12 < data.length; _i12 += 2) {\n data[_i12] = data[_i12] - data[_i12] / (height / 2) * y;\n }\n }\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var _this11 = this;\n if (!_classPrivateFieldGet(_loaded, this)) {\n return;\n }\n var point = turf.point([this.position.lng, this.position.lat]);\n var options = {\n units: 'kilometers'\n };\n var interimBbox = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.bbox);\n var width = Math.abs(interimBbox[2] - interimBbox[0]);\n var height = Math.abs(interimBbox[3] - interimBbox[1]);\n var x = width / 2 * this.options.scale.x / 100 - width / 2;\n var y = height / 2 * -this.options.scale.y / 100 + height / 2;\n interimBbox[0] = interimBbox[0] - x;\n interimBbox[1] = interimBbox[1] + y;\n interimBbox[2] = interimBbox[2] + x;\n interimBbox[3] = interimBbox[3] - y;\n var interim;\n if (interimBbox[0] > interimBbox[2]) {\n interim = interimBbox[0];\n interimBbox[0] = interimBbox[2];\n interimBbox[2] = interim;\n }\n if (interimBbox[1] > interimBbox[3]) {\n interim = interimBbox[1];\n interimBbox[1] = interimBbox[3];\n interimBbox[3] = interim;\n }\n var hierarchys = [];\n var geojson = JSON.parse(JSON.stringify(this.geojson));\n var _recursion = function recursion(data) {\n for (var i = 0; i < data.length; i++) {\n if (typeof data[i] === 'number') {\n if (_this11.options.flipe.x && i === 1) {\n data[i] = -data[i];\n }\n if (_this11.options.flipe.y && i === 0) {\n data[i] = -data[i];\n }\n } else {\n _recursion(data[i]);\n }\n }\n };\n for (var i = 0; i < geojson.features.length; i++) {\n _recursion(geojson.features[i].geometry.coordinates);\n }\n geojson.features.forEach(function (item) {\n var array = [];\n var feature = JSON.parse(JSON.stringify(item));\n _this11._updateGeojson(feature.geometry.coordinates, x, y);\n feature = turf.transformRotate(feature, _this11.angle, {\n pivot: [0, 0]\n });\n var directionDistance = [];\n if (feature.geometry.type === 'MultiPolygon') {\n for (var _i13 = 0; _i13 < feature.geometry.coordinates.length; _i13++) {\n var _array3 = [];\n for (var m = 0; m < feature.geometry.coordinates[_i13].length; m++) {\n var array2 = [];\n for (var n = 0; n < feature.geometry.coordinates[_i13][m].length; n++) {\n var point1 = turf.point([0, feature.geometry.coordinates[_i13][m][n][1]]);\n var point2 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(feature.geometry.coordinates[_i13][m][n]));\n var distance = turf.distance(point1, point2, {\n units: 'kilometers'\n });\n var angle2 = turf.rhumbBearing(point1, point2);\n array2.push({\n origin: feature.geometry.coordinates[_i13][m][n],\n distance: distance,\n angle: angle2\n });\n }\n _array3.push(array2);\n }\n directionDistance.push(_array3);\n }\n } else {\n for (var _i14 = 0; _i14 < feature.geometry.coordinates.length; _i14++) {\n var _array4 = [];\n for (var _m2 = 0; _m2 < feature.geometry.coordinates[_i14].length; _m2++) {\n var _array5 = [];\n var _point4 = turf.point([0, feature.geometry.coordinates[_i14][_m2][1]]);\n var _point5 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(feature.geometry.coordinates[_i14][_m2]));\n var _distance2 = turf.distance(_point4, _point5, {\n units: 'kilometers'\n });\n var _angle3 = turf.rhumbBearing(_point4, _point5);\n _array4.push({\n origin: feature.geometry.coordinates[_i14][_m2],\n distance: _distance2,\n angle: _angle3\n });\n }\n directionDistance.push(_array4);\n }\n }\n feature.properties.directionDistance = directionDistance;\n\n // this.bbox = [...interimBbox]\n\n var w = 3.5 * _this11.scale.x;\n var h = 3.5 * _this11.scale.y;\n var wh = Math.sqrt(Math.pow(w / 2, 2) + Math.pow(h / 2, 2));\n var angle = Math.atan(w / 2 / (h / 2)) * (180 / Math.PI);\n if (isNaN(angle)) {\n angle = 0;\n }\n var controlPoints = [];\n controlPoints[0] = turf.destination(point, h / 2 * 1.5, 0 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[1] = turf.destination(point, wh, 180 + angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[2] = turf.destination(point, h / 2, 180 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[3] = turf.destination(point, wh, 180 - angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[4] = turf.destination(point, w / 2, 270 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[5] = [_this11.position.lng, _this11.position.lat];\n controlPoints[6] = turf.destination(point, w / 2, 90 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[7] = turf.destination(point, wh, 360 - angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[8] = turf.destination(point, h / 2, 0 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[9] = turf.destination(point, wh, 0 + angle + _this11.options.angle, options).geometry.coordinates;\n var points = turf.points(controlPoints);\n controlPoints = [];\n for (var _i15 = 0; _i15 < points.features.length; _i15++) {\n controlPoints.push(points.features[_i15].geometry.coordinates);\n }\n _this11.controlPoints = controlPoints;\n if (feature.geometry.type === 'MultiPolygon') {\n for (var _i16 = 0; _i16 < feature.geometry.coordinates.length; _i16++) {\n var hierarchy = _this11.getHierarchyPolygon(feature, _i16);\n array.push(hierarchy);\n }\n } else {\n var _hierarchy2 = _this11.getHierarchyPolygon(feature);\n array.push(_hierarchy2);\n }\n hierarchys.push(array);\n });\n this.hierarchys = [].concat(hierarchys);\n if (!this.entity) {\n return;\n }\n if (this._DialogObject || this._isdrag) {\n var k = 0;\n var _loop8 = function _loop8(_i17) {\n var _loop9 = function _loop9(m) {\n if (_this11.entity.values[k].polygon.hierarchy.isConstant) {\n _this11.entity.values[k].polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var hierarchy = _this11.hierarchys[_i17][m];\n var holes = [];\n for (var n = 0; n < hierarchy.holes.length; n++) {\n holes.push({\n positions: hierarchy.holes[n]\n });\n }\n return {\n positions: hierarchy.positions,\n holes: holes\n };\n }, false);\n }\n k++;\n };\n for (var m = 0; m < _this11.hierarchys[_i17].length; m++) {\n _loop9(m);\n }\n };\n for (var _i17 = 0; _i17 < this.hierarchys.length; _i17++) {\n _loop8(_i17);\n }\n } else {\n var _k = 0;\n var _loop10 = function _loop10(_i18) {\n var _loop11 = function _loop11(m) {\n // if (!this.entity.values[k].polygon.hierarchy.isConstant) {\n _this11.entity.values[_k].polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var hierarchy = _this11.hierarchys[_i18][m];\n var holes = [];\n for (var n = 0; n < hierarchy.holes.length; n++) {\n holes.push({\n positions: hierarchy.holes[n]\n });\n }\n return {\n positions: hierarchy.positions,\n holes: holes\n };\n }, !_this11.ismove);\n // }\n _k++;\n };\n for (var m = 0; m < _this11.hierarchys[_i18].length; m++) {\n _loop11(m);\n }\n };\n for (var _i18 = 0; _i18 < this.hierarchys.length; _i18++) {\n _loop10(_i18);\n }\n }\n if (this.textObject && this.textObject.geojson) {\n var textHierarchys = [];\n var textGeojson = JSON.parse(JSON.stringify(this.textObject.geojson));\n var _recursion2 = function recursion2(data) {\n for (var _i19 = 0; _i19 < data.length; _i19++) {\n if (typeof data[_i19] === 'number') {\n if (_this11.textObject.flipe.x && _i19 === 1) {\n data[_i19] = -data[_i19];\n }\n if (_this11.textObject.flipe.y && _i19 === 0) {\n data[_i19] = -data[_i19];\n }\n } else {\n _recursion2(data[_i19]);\n }\n }\n };\n for (var _i20 = 0; _i20 < textGeojson.features.length; _i20++) {\n _recursion(textGeojson.features[_i20].geometry.coordinates);\n }\n textGeojson.features.forEach(function (item) {\n var array = [];\n var feature = JSON.parse(JSON.stringify(item));\n _this11._updateGeojson(feature.geometry.coordinates, x, y);\n feature = turf.transformRotate(feature, _this11.angle, {\n pivot: [0, 0]\n });\n var directionDistance = [];\n if (feature.geometry.type === 'MultiPolygon') {\n for (var _i21 = 0; _i21 < feature.geometry.coordinates.length; _i21++) {\n var _array6 = [];\n for (var m = 0; m < feature.geometry.coordinates[_i21].length; m++) {\n var array2 = [];\n for (var n = 0; n < feature.geometry.coordinates[_i21][m].length; n++) {\n var point1 = turf.point([0, feature.geometry.coordinates[_i21][m][n][1]]);\n var point2 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(feature.geometry.coordinates[_i21][m][n]));\n var distance = turf.distance(point1, point2, {\n units: 'kilometers'\n });\n var angle2 = turf.rhumbBearing(point1, point2);\n array2.push({\n origin: feature.geometry.coordinates[_i21][m][n],\n distance: distance,\n angle: angle2\n });\n }\n _array6.push(array2);\n }\n directionDistance.push(_array6);\n }\n } else {\n for (var _i22 = 0; _i22 < feature.geometry.coordinates.length; _i22++) {\n var _array7 = [];\n for (var _m3 = 0; _m3 < feature.geometry.coordinates[_i22].length; _m3++) {\n var _array8 = [];\n var _point6 = turf.point([0, feature.geometry.coordinates[_i22][_m3][1]]);\n var _point7 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(feature.geometry.coordinates[_i22][_m3]));\n var _distance3 = turf.distance(_point6, _point7, {\n units: 'kilometers'\n });\n var _angle4 = turf.rhumbBearing(_point6, _point7);\n _array7.push({\n origin: feature.geometry.coordinates[_i22][_m3],\n distance: _distance3,\n angle: _angle4\n });\n }\n directionDistance.push(_array7);\n }\n }\n feature.properties.directionDistance = directionDistance;\n\n // this.bbox = [...interimBbox]\n\n var w = 3.5 * _this11.scale.x;\n var h = 3.5 * _this11.scale.y;\n var wh = Math.sqrt(Math.pow(w / 2, 2) + Math.pow(h / 2, 2));\n var angle = Math.atan(w / 2 / (h / 2)) * (180 / Math.PI);\n if (isNaN(angle)) {\n angle = 0;\n }\n var controlPoints = [];\n controlPoints[0] = turf.destination(point, h / 2 * 1.5, 0 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[1] = turf.destination(point, wh, 180 + angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[2] = turf.destination(point, h / 2, 180 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[3] = turf.destination(point, wh, 180 - angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[4] = turf.destination(point, w / 2, 270 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[5] = [_this11.position.lng, _this11.position.lat];\n controlPoints[6] = turf.destination(point, w / 2, 90 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[7] = turf.destination(point, wh, 360 - angle + _this11.options.angle, options).geometry.coordinates;\n controlPoints[8] = turf.destination(point, h / 2, 0 + _this11.options.angle, options).geometry.coordinates;\n controlPoints[9] = turf.destination(point, wh, 0 + angle + _this11.options.angle, options).geometry.coordinates;\n var points = turf.points(controlPoints);\n controlPoints = [];\n for (var _i23 = 0; _i23 < points.features.length; _i23++) {\n controlPoints.push(points.features[_i23].geometry.coordinates);\n }\n _this11.controlPoints = controlPoints;\n if (feature.geometry.type === 'MultiPolygon') {\n for (var _i24 = 0; _i24 < feature.geometry.coordinates.length; _i24++) {\n var hierarchy = _this11.getHierarchyPolygon(feature, _i24);\n array.push(hierarchy);\n }\n } else {\n var _hierarchy3 = _this11.getHierarchyPolygon(feature);\n array.push(_hierarchy3);\n }\n textHierarchys.push(array);\n });\n this.textObject.hierarchys = [].concat(textHierarchys);\n\n // if (this._DialogObject || this._isdrag) {\n // let k = 0\n // for (let i = 0; i < this.textObject.hierarchys.length; i++) {\n // for (let m = 0; m < this.textObject.hierarchys[i].length; m++) {\n // if (this.entity.values[k].polygon.hierarchy.isConstant) {\n // this.entity.values[k].polygon.hierarchy = new Cesium.CallbackProperty(() => {\n // let hierarchy = this.textObject.hierarchys[i][m]\n // let holes = []\n // for (let n = 0; n < hierarchy.holes.length; n++) {\n // holes.push({\n // positions: hierarchy.holes[n]\n // })\n // }\n // return {\n // positions: hierarchy.positions,\n // holes: holes\n // }\n // }, false)\n // }\n // k++\n // }\n // }\n // }\n // else {\n // let k = 0\n // for (let i = 0; i < this.textObject.hierarchys.length; i++) {\n // for (let m = 0; m < this.textObject.hierarchys[i].length; m++) {\n // // if (!this.entity.values[k].polygon.hierarchy.isConstant) {\n // this.entity.values[k].polygon.hierarchy = new Cesium.CallbackProperty(() => {\n // let hierarchy = this.textObject.hierarchys[i][m]\n // let holes = []\n // for (let n = 0; n < hierarchy.holes.length; n++) {\n // holes.push({\n // positions: hierarchy.holes[n]\n // })\n // }\n // return {\n // positions: hierarchy.positions,\n // holes: holes\n // }\n // }, !this.ismove)\n // // }\n // k++\n // }\n // }\n // }\n }\n }\n }, {\n key: \"textPosPick\",\n value: function textPosPick() {\n var _this12 = this;\n var Draw = new _Draw_drawPoint_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk);\n Draw.start(/*#__PURE__*/function () {\n var _ref3 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee5(a, position) {\n var point1, point2, distance, angle;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee5$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n point1 = turf.point([_this12.position.lng, _this12.position.lat]);\n point2 = turf.point([position.lng, position.lat]);\n distance = turf.distance(point1, point2, {\n units: 'kilometers'\n });\n angle = turf.rhumbBearing(point1, point2);\n _this12._textToCenter = {\n distance: distance,\n angle: angle\n };\n _this12.options.text.position = position;\n if (_this12.text) {\n _this12.text.position = [position.lng, position.lat, position.alt];\n } else {\n GroundSvg.createText(_this12);\n }\n case 7:\n case \"end\":\n return _context7.stop();\n }\n }, _callee5);\n }));\n return function (_x4, _x5) {\n return _ref3.apply(this, arguments);\n };\n }());\n }\n }, {\n key: \"load\",\n value: function load(callback) {\n if (_classPrivateFieldGet(_loaded, this)) {\n callback();\n } else {\n _classPrivateFieldSet(_loadEvent, this, callback);\n }\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee6() {\n var i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee6$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this._worker.onmessage = function (event) {};\n _context8.next = 3;\n return this.sdk.removeIncetance(this.options.id);\n case 3:\n if (this.entity) {\n _context8.next = 5;\n break;\n }\n return _context8.abrupt(\"return\");\n case 5:\n this.drag(false);\n if (!(!this.sdk || !this.sdk.viewer)) {\n _context8.next = 8;\n break;\n }\n return _context8.abrupt(\"return\");\n case 8:\n this.sdk.viewer.entities.remove(this.entity);\n this.text && this.text.remove();\n for (i = this.entity.values.length; i >= 0; i--) {\n this.sdk.viewer.entities.remove(this.entity.values[i]);\n }\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 14;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n case 14:\n case \"end\":\n return _context8.stop();\n }\n }, _callee6, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this13 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_17__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_17__[\"default\"].primaryCallBack = function (content) {\n _this13.options.richTextContent = content;\n };\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n if (v) {\n this.ismove = true;\n var position = {};\n position.lng = v.position.lng;\n position.lat = v.position.lat;\n this.position = position;\n } else {\n this.ismove = false;\n }\n this._update();\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee7() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n array,\n i,\n height,\n cartesian,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee7$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n if (!this._error) {\n _context9.next = 3;\n break;\n }\n return _context9.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 24;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = _objectSpread({}, this.options.position); // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 17;\n break;\n }\n _context9.next = 16;\n return this.getClampToHeight(position);\n case 16:\n position.alt = _context9.sent;\n case 17:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 37;\n break;\n case 24:\n array = [];\n i = 0;\n case 26:\n if (!(i < this.controlPoints.length)) {\n _context9.next = 35;\n break;\n }\n _context9.next = 29;\n return this.getClampToHeight({\n lng: this.controlPoints[i][0],\n lat: this.controlPoints[i][1]\n });\n case 29:\n height = _context9.sent;\n cartesian = Cesium.Cartesian3.fromDegrees(this.controlPoints[i][0], this.controlPoints[i][1], height);\n array.push(cartesian.x, cartesian.y, cartesian.z);\n case 32:\n i++;\n _context9.next = 26;\n break;\n case 35:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(array);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 37:\n case \"end\":\n return _context9.stop();\n }\n }, _callee7, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }], [{\n key: \"createText\",\n value: function () {\n var _createText = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee8(that) {\n var height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee8$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!that.options.text.position) {\n _context10.next = 10;\n break;\n }\n if (!that.options.text.position.alt) {\n _context10.next = 5;\n break;\n }\n height = that.options.text.position.alt;\n _context10.next = 8;\n break;\n case 5:\n _context10.next = 7;\n return that.getClampToHeight({\n lng: that.options.text.position.lng,\n lat: that.options.text.position.lat\n });\n case 7:\n height = _context10.sent;\n case 8:\n that.text = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()({\n id: that.options.id,\n show: that.options.show ? that.options.text.show ? that.options.text.show : false : false,\n position: [that.options.text.position.lng, that.options.text.position.lat, height],\n text: that.options.text.value,\n fontSize: that.options.text.fontSize,\n color: that.options.text.color,\n pixelOffset: that.options.text.fontSize,\n backgroundColor: that.options.text.backgroundColor,\n lineColor: '#ffffff00',\n lineWidth: 0,\n scaleByDistance: that.options.text.scaleByDistance\n }, \"backgroundColor\", ['#ffffff00', '#ffffff00']), \"near\", that.options.text.near), \"far\", that.options.text.far));\n that.text.entity.billboard.verticalOrigin = Cesium.VerticalOrigin.CENTER;\n // that.text.entity.billboard.horizontalOrigin = Cesium.HorizontalOrigin.LEFT\n case 10:\n case \"end\":\n return _context10.stop();\n }\n }, _callee8);\n }));\n function createText(_x6) {\n return _createText.apply(this, arguments);\n }\n return createText;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_22__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (GroundSvg);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvR3JvdW5kU3ZnL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0dyb3VuZFN2Zy9pbmRleC5qcz9hODdkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgRHJhd1BvaW50IGZyb20gJy4uLy4uLy4uL0RyYXcvZHJhd1BvaW50LmpzJ1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSAnLi4vLi4vRWxlbWVudC9yaWNoVGV4dCdcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZGF0YWxpc3QnXHJcbmltcG9ydCB7IEZvbnRMb2FkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zdGF0aWMvM3JkcGFydHkvdGhyZWUvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyc7XHJcbmltcG9ydCB7IFRleHRHZW9tZXRyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3N0YXRpYy8zcmRwYXJ0eS90aHJlZS9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMnO1xyXG5pbXBvcnQgKiBhcyB2YXJpYWJsZSBmcm9tICcuLi8uLi8uLi8uLi9zdGF0aWMvM3JkcGFydHkvdGhyZWUvZm9udHMvRlpab25nWWktTTA1U19yZWd1bGFyLnR5cGVmYWNlLmpzb24nXHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcblxyXG5jbGFzcyBHcm91bmRTdmcgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDotLTlnLBzdmdcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFuZ2xlPTAge251bWJlcn0g5peL6L2s6KeS5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2NhbGUge29iamVjdH0g5q+U5L6LXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2NhbGUueD0xIHtudW1iZXJ9IHjovbTmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zY2FsZS55PTEge251bWJlcn0geei9tOavlOS+i1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnVybCB7c3RyaW5nfSDotYTmupDlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5mbGlwZSB7b2JqZWN0fSDnv7vovaxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5mbGlwZS54PWZhbHNlIHtib29sZWFufSDnu5VY6L2057+76L2sXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZmxpcGUueT1mYWxzZSB7Ym9vbGVhbn0g57uVWei9tOe/u+i9rFxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMucG9zaXRpb24g5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb2xvciB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0IHtvYmplY3R9IOaWh+Wtl1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnRleHQuc2hvdz10cnVlIHtib29sZWFufSDmloflrZdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0LnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0LnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0LnBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0LmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnRleHQuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPlpKflsI9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0LnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMudGV4dC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMudGV4dC5mYXI9MTAwMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/nOi3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZSB7b2JqZWN0fSDlsZ7mgKflhoXlrrlcclxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucy5hdHRyaWJ1dGUubGluaz17fSDpk77mjqVcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50PVtdXSB7YXJyYXl9IOmTvuaOpeWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS5uYW1lIHtzdHJpbmd9IOmTvuaOpeWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS51cmwge3N0cmluZ30g6ZO+5o6l5Zyw5Z2AXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmljaFRleHRDb250ZW50IHtzdHJpbmd9IOWvjOaWh+acrOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqICovXHJcbiAgI2xvYWRFdmVudCA9IHZvaWQgMFxyXG4gICNsb2FkZWQgPSBmYWxzZVxyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICBsZXQganNDb2RlID0gYFxyXG4gICAgaW1wb3J0U2NyaXB0cygnJHt0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCl9LzNyZHBhcnR5L3R1cmYubWluLmpzJyk7XHJcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICBsZXQgZmVhdHVyZXMgPSBbXVxyXG4gICAgICBldmFsKGUuZGF0YS5jb2RlKTtcclxuICAgICAgc2VsZi5wb3N0TWVzc2FnZShmZWF0dXJlcyk7XHJcbiAgICB9LCBmYWxzZSk7XHJcbiAgICBgO1xyXG4gICAgbGV0IGRhdGFVcmkgPSAnZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KGpzQ29kZSk7XHJcbiAgICB0aGlzLl93b3JrZXIgPSBuZXcgV29ya2VyKGRhdGFVcmkpO1xyXG4gICAgdGhpcy5vcHRpb25zLmFuZ2xlID0gdGhpcy5vcHRpb25zLmFuZ2xlIHx8IDBcclxuXHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc21vdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA+IDgzLjUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IDgzLjVcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IDwgLTgzLjUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA9IC04My41XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZS54ID0gKHRoaXMub3B0aW9ucy5zY2FsZS54IHx8IHRoaXMub3B0aW9ucy5zY2FsZS54ID09PSAwKSA/IHRoaXMub3B0aW9ucy5zY2FsZS54IDogMVxyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlLnkgPSAodGhpcy5vcHRpb25zLnNjYWxlLnkgfHwgdGhpcy5vcHRpb25zLnNjYWxlLnkgPT09IDApID8gdGhpcy5vcHRpb25zLnNjYWxlLnkgOiAxXHJcblxyXG4gICAgdGhpcy5vcHRpb25zLmZsaXBlID0gb3B0aW9ucy5mbGlwZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmZsaXBlLnggPSB0aGlzLm9wdGlvbnMuZmxpcGUueCB8fCBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmZsaXBlLnkgPSB0aGlzLm9wdGlvbnMuZmxpcGUueSB8fCBmYWxzZVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcblxyXG4gICAgb3B0aW9ucy50ZXh0ID0gb3B0aW9ucy50ZXh0IHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHtcclxuICAgICAgdmFsdWU6IG9wdGlvbnMudGV4dC52YWx1ZSB8fCAnJyxcclxuICAgICAgc2hvdzogKG9wdGlvbnMudGV4dC5zaG93IHx8IG9wdGlvbnMudGV4dC5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnRleHQuc2hvdyA6IHRydWUsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLnRleHQucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy50ZXh0LmZvbnRTaXplIHx8IG9wdGlvbnMudGV4dC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLnRleHQuZm9udFNpemUgOiAyMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMudGV4dC5jb2xvciB8fCAnI2ZmZmZmZicsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy50ZXh0LnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMudGV4dC5uZWFyIHx8IG9wdGlvbnMudGV4dC5uZWFyID09PSAwKSA/IG9wdGlvbnMudGV4dC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy50ZXh0LmZhciB8fCBvcHRpb25zLnRleHQuZmFyID09PSAwKSA/IG9wdGlvbnMudGV4dC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uKSB7XHJcbiAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFt0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XSlcclxuICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoW3RoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnRleHQucG9zaXRpb24ubGF0XSlcclxuICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5kaXN0YW5jZShwb2ludDEsIHBvaW50MiwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgYW5nbGUgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludDEsIHBvaW50Mik7XHJcbiAgICAgIHRoaXMuX3RleHRUb0NlbnRlciA9IHtcclxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXHJcbiAgICAgICAgYW5nbGU6IGFuZ2xlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5oaWVyYXJjaHlzID0gW11cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5faXNkcmFnID0gZmFsc2VcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG5cclxuICAgIGlmKHRoaXMuc2RrLmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcbiAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcblxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VudGl0eUFycmF5ID0gW11cclxuICAgIFxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGdldCB0eXBlICgpIHtcclxuICAgIHJldHVybiAnR3JvdW5kU3ZnJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVNlbGVjdCgpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn5a+M5paH5pysJyxcclxuICAgICAgICB2YWx1ZTogJ+WvjOaWh+acrCcsXHJcbiAgICAgICAga2V5OiAncmljaFRleHQnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB2YWx1ZTogJ+mTvuaOpScsXHJcbiAgICAgICAga2V5OiAnbGluaydcclxuICAgICAgfSxcclxuICAgIF1cclxuICB9XHJcblxyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5uYW1lXHJcbiAgfVxyXG4gIHNldCBuYW1lKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdlxyXG4gICAgdGhpcy5fZWxtcy5uYW1lICYmIHRoaXMuX2VsbXMubmFtZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50ZXh0ICYmIHRoaXMub3B0aW9ucy50ZXh0LnNob3cpIHtcclxuICAgICAgICBpZih0aGlzLnRleHQpIHtcclxuICAgICAgICAgIGlmKCghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dC5zaG93ID0gdlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dC5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgc3VwZXIuc2hvdyA9IHZcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgfVxyXG5cclxuICBzZXQgcG9zaXRpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gdlxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPiA4My41KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSA4My41XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA8IC04My41KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSAtODMuNVxyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlKClcclxuXHJcbiAgICBpZiAodGhpcy5fdGV4dFRvQ2VudGVyKSB7XHJcbiAgICAgIGxldCBwb2ludCA9IHR1cmYucG9pbnQoW3RoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXRdKVxyXG4gICAgICBsZXQgdGFyZ2V0UG9pbnQgPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB0aGlzLl90ZXh0VG9DZW50ZXIuZGlzdGFuY2UsIHRoaXMuX3RleHRUb0NlbnRlci5hbmdsZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogdGFyZ2V0UG9pbnRbMF0sIGxhdDogdGFyZ2V0UG9pbnRbMV0gfSkudGhlbigoaGVpZ2h0KSA9PiB7XHJcbiAgICAgICAgbGV0IHRleHRQb3NpdGlvbiA9IFt0YXJnZXRQb2ludFswXSwgdGFyZ2V0UG9pbnRbMV0sIGhlaWdodF1cclxuICAgICAgICB0aGlzLnRleHQgJiYgKHRoaXMudGV4dC5wb3NpdGlvbiA9IHRleHRQb3NpdGlvbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcblxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbG9yKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkudmFsdWVzW2ldLnBvbHlnb24ubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5jb2xvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkudmFsdWVzW2ldLnBvbHlnb24ubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMuZW50aXR5LnZhbHVlc1tpXS5wcm9wZXJ0aWVzLmNvbG9yLl92YWx1ZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2VsbXMuY29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuY29sb3IgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJydcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFuZ2xlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbmdsZVxyXG4gIH1cclxuXHJcbiAgc2V0IGFuZ2xlKHYpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHYsIE1hdGguY2VpbChNYXRoLmFicyh2IC8gMzYwKSksIChOdW1iZXIodikgKyBOdW1iZXIodikgKiBNYXRoLmNlaWwoTWF0aC5hYnModiAvIDM2MCkpKSAlIDM2MClcclxuICAgIGxldCBhbmdsZSA9IChOdW1iZXIodikgKyAzNjApICUgMzYwXHJcbiAgICBhbmdsZSA9IHBhcnNlRmxvYXQoYW5nbGUudG9GaXhlZCgxKSlcclxuICAgIHRoaXMub3B0aW9ucy5hbmdsZSA9IGFuZ2xlXHJcbiAgICBpZiAodiA+IDAgJiYgYW5nbGUgPT09IDApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmFuZ2xlID0gMzYwXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmFuZ2xlICYmIHRoaXMuX2VsbXMuYW5nbGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmFuZ2xlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fdXBkYXRlKClcclxuICB9XHJcblxyXG4gIGdldCBzY2FsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbGVcclxuICB9XHJcblxyXG4gIHNldCBzY2FsZShzY2FsZSkge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlLnggPSBzY2FsZS54XHJcbiAgICB0aGlzLm9wdGlvbnMuc2NhbGUueSA9IHNjYWxlLnlcclxuICAgIGlmICh0aGlzLl9lbG1zKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMueFJhbmdlICYmICh0aGlzLl9lbG1zLnhSYW5nZS52YWx1ZSA9IHRoaXMub3B0aW9ucy5zY2FsZS54KVxyXG4gICAgICB0aGlzLl9lbG1zLnlSYW5nZSAmJiAodGhpcy5fZWxtcy55UmFuZ2UudmFsdWUgPSB0aGlzLm9wdGlvbnMuc2NhbGUueSlcclxuICAgICAgdGhpcy5fZWxtcy54SW5wdXQgJiYgKHRoaXMuX2VsbXMueElucHV0LnZhbHVlID0gdGhpcy5vcHRpb25zLnNjYWxlLngpXHJcbiAgICAgIHRoaXMuX2VsbXMueUlucHV0ICYmICh0aGlzLl9lbG1zLnlJbnB1dC52YWx1ZSA9IHRoaXMub3B0aW9ucy5zY2FsZS55KVxyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlKClcclxuICB9XHJcblxyXG4gIGdldCBmbGlwZVkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZsaXBlLnlcclxuICB9XHJcbiAgc2V0IGZsaXBlWSh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5mbGlwZS55ID0gdlxyXG4gICAgICB0aGlzLl91cGRhdGUoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIuWPguaVsOW/hemhu+S4umJvb2xlYW5cIilcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZsaXBlWCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmxpcGUueFxyXG4gIH1cclxuICBzZXQgZmxpcGVYKHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmZsaXBlLnggPSB2XHJcbiAgICAgIHRoaXMuX3VwZGF0ZSgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRleHRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dC52YWx1ZVxyXG4gIH1cclxuICBzZXQgdGV4dFZhbHVlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0LnZhbHVlID0gdlxyXG4gICAgaWYodGhpcy50ZXh0KSB7XHJcbiAgICAgIHRoaXMudGV4dC50ZXh0ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIEdyb3VuZFN2Zy5jcmVhdGVUZXh0KHRoaXMpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnRleHRWYWx1ZSAmJiB0aGlzLl9lbG1zLnRleHRWYWx1ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRleHRTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50ZXh0LnNob3dcclxuICB9XHJcbiAgc2V0IHRleHRTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0LnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93KSB7XHJcbiAgICAgIGlmKCghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuc2hvdyA9IHYpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuc2hvdyA9IGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudGV4dC5wb3NpdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uLmFsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnRleHQgJiYgKHRoaXMudGV4dC5wb3NpdGlvbiA9IFt0aGlzLm9wdGlvbnMudGV4dC5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnRleHQucG9zaXRpb24uYWx0XSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHRoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uLmxuZywgbGF0OiB0aGlzLm9wdGlvbnMudGV4dC5wb3NpdGlvbi5sYXQgfSkudGhlbigoaGVpZ2h0KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnRleHQucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMudGV4dC5wb3NpdGlvbi5sYXQsIGhlaWdodF0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRleHQgJiYgKHRoaXMudGV4dC5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnRleHRTaG93ICYmIHRoaXMuX2VsbXMudGV4dFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRleHRDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dC5jb2xvclxyXG4gIH1cclxuICBzZXQgdGV4dENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0LmNvbG9yID0gdlxyXG4gICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuY29sb3IgPSB2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMudGV4dENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMudGV4dENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgdGV4dENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMudGV4dENvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy50ZXh0Q29sb3JbaV0gPSB0ZXh0Q29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0ZXh0Rm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRleHQuZm9udFNpemVcclxuICB9XHJcbiAgc2V0IHRleHRGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dC5mb250U2l6ZSA9IHZcclxuICAgIGlmKHRoaXMudGV4dCkge1xyXG4gICAgICB0aGlzLnRleHQuZm9udFNpemUgPSB2XHJcbiAgICAgIHRoaXMudGV4dC5waXhlbE9mZnNldCA9IHZcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMudGV4dEZvbnRTaXplICYmIHRoaXMuX2VsbXMudGV4dEZvbnRTaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgdGV4dFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IHRleHRTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnRleHQuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuc2NhbGVCeURpc3RhbmNlID0gdilcclxuICAgIHRoaXMuX2VsbXMudGV4dFNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLnRleHRTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRleHROZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50ZXh0Lm5lYXJcclxuICB9XHJcbiAgc2V0IHRleHROZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLnRleHRGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMudGV4dEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnRleHQubmVhciA9IG5lYXJcclxuICAgIHRoaXMudGV4dCAmJiAodGhpcy50ZXh0Lm5lYXIgPSBuZWFyKVxyXG4gICAgdGhpcy5fZWxtcy50ZXh0TmVhciAmJiB0aGlzLl9lbG1zLnRleHROZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgdGV4dEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dC5mYXJcclxuICB9XHJcbiAgc2V0IHRleHRGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLnRleHROZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMudGV4dE5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy50ZXh0LmZhciA9IGZhclxyXG4gICAgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuZmFyID0gZmFyKVxyXG4gICAgdGhpcy5fZWxtcy50ZXh0RmFyICYmIHRoaXMuX2VsbXMudGV4dEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICAgIGxldCBhdHRyaWJ1dGVDb250ZW50ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgJ2F0dHJpYnV0ZS1jb250ZW50J1xyXG4gICAgKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdikgPiAtMVxyXG4gICAgICApIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8XHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdhdHRyaWJ1dGUtY29udGVudC1saW5rJ1xyXG4gICAgICApLmxlbmd0aCA9PSAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdXHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9XHJcbiAgICAgICAgYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgK1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgK1xyXG4gICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgK1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLnVybCArXHJcbiAgICAgICAgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyBpbmRleCA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXVxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IGhlaWdodCAtIDEwICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICdpbnB1dCdcclxuICAgICAgICAgICAgKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1blttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGxpbmtEZWxldGU6IGkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiZcclxuICAgICAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtcclxuICAgICAgICAgIGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JylcclxuICAgICAgICBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1blttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIGxldCB1cmwgPSB0aGlzLnJlcGxhY2VIb3N0KHRoaXMub3B0aW9ucy51cmwsIHRoaXMub3B0aW9ucy5ob3N0KVxyXG4gICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIHRoaXMuaGllcmFyY2h5cyA9IFtdXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgbGV0IGdlb21ldHJ5QXJyYXkgPSBbXVxyXG4gICAgY29uc3QgbG9hZGVyID0gbmV3IFNWR0xvYWRlcigpO1xyXG4gICAgbG9hZGVyLmxvYWQodXJsLCAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuc2RrLnZpZXdlci5lbnRpdGllcykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGRhdGEueG1sLnN0eWxlLndpZHRoID0gJzAnXHJcbiAgICAgIGRhdGEueG1sLnN0eWxlLmhlaWdodCA9ICcwJ1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRhdGEueG1sKVxyXG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgZGF0YS5wYXRocykge1xyXG4gICAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHBhdGgudXNlckRhdGEuc3R5bGUuZmlsbDtcclxuICAgICAgICBsZXQgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXRoLnVzZXJEYXRhLm5vZGUpXHJcbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZVdpZHRoKSB7XHJcbiAgICAgICAgICBwYXRoLnVzZXJEYXRhLnN0eWxlLnN0cm9rZVdpZHRoID0gTnVtYmVyKHN0eWxlLnN0cm9rZVdpZHRoLnJlcGxhY2UoL1thLXpBLVpdL2csICcnKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciAhPT0gdW5kZWZpbmVkICYmIGZpbGxDb2xvciAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGFwZXMgPSBTVkdMb2FkZXIuY3JlYXRlU2hhcGVzKHBhdGgpO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBzaGFwZSBvZiBzaGFwZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuU2hhcGVHZW9tZXRyeShzaGFwZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSk7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5QXJyYXkucHVzaCh7XHJcbiAgICAgICAgICAgICAgZ2VvbWV0cnk6IG1lc2guZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgY29sb3I6IGZpbGxDb2xvclxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IHBhdGgudXNlckRhdGEuc3R5bGUuc3Ryb2tlO1xyXG4gICAgICAgIGlmIChzdHJva2VDb2xvciAhPT0gdW5kZWZpbmVkICYmIHN0cm9rZUNvbG9yICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qgc3ViUGF0aCBvZiBwYXRoLnN1YlBhdGhzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gU1ZHTG9hZGVyLnBvaW50c1RvU3Ryb2tlKHN1YlBhdGguZ2V0UG9pbnRzKCksIHBhdGgudXNlckRhdGEuc3R5bGUpO1xyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAgIGdlb21ldHJ5QXJyYXkucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBzdHJva2VDb2xvclxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkYXRhLnhtbClcclxuXHJcbiAgICAgIGxldCBtaW4gPSAwXHJcbiAgICAgIGxldCBtYXggPSAwXHJcbiAgICAgIGxldCBnZW9qc29uXHJcbiAgICAgIGZvciAobGV0IGtleSA9IDA7IGtleSA8IGdlb21ldHJ5QXJyYXkubGVuZ3RoOyBrZXkrKykge1xyXG4gICAgICAgIGxldCBnZW9tZXRyeSA9IGdlb21ldHJ5QXJyYXlba2V5XS5nZW9tZXRyeTtcclxuICAgICAgICBpZiAoIWdlb21ldHJ5IHx8ICFnZW9tZXRyeS5hdHRyaWJ1dGVzIHx8ICFnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYXJyYXkgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChtaW4gPiBhcnJheVtpXSkge1xyXG4gICAgICAgICAgICBtaW4gPSBhcnJheVtpXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1heCA8IGFycmF5W2ldKSB7XHJcbiAgICAgICAgICAgIG1heCA9IGFycmF5W2ldXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG1pbiA9IE1hdGguYWJzKG1pbilcclxuICAgICAgbWF4ID0gTWF0aC5hYnMobWF4KVxyXG5cclxuICAgICAgaWYgKG1pbiA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IG1pblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBtYXgyID0gbWF4XHJcbiAgICAgIG1heCA9IG1heCAqICgxMCAvIDMpICogMTAwXHJcbiAgICAgIGxldCBzY2FsZSA9ICg0MDAwIC8gbWF4KSAvIDVcclxuICAgICAgbWF4MiA9IG1heDIgKiBzY2FsZVxyXG5cclxuICAgICAgZm9yIChsZXQga2V5ID0gMDsga2V5IDwgZ2VvbWV0cnlBcnJheS5sZW5ndGg7IGtleSsrKSB7XHJcbiAgICAgICAgZ2VvbWV0cnlBcnJheVtrZXldLmdlb21ldHJ5LnNjYWxlKHNjYWxlLCBzY2FsZSwgMSlcclxuICAgICAgICBnZW9tZXRyeUFycmF5W2tleV0uZ2VvbWV0cnkucm90YXRlWChUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoMTgwKSlcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGxldCBqc0NvZGUgPSBgXHJcbiAgICAgIGxldCBnZW9tZXRyeUFycmF5ID0gZS5kYXRhLm9wdGlvbnMuZ2VvbWV0cnlBcnJheVxyXG4gICAgICBsZXQgbWF4MiA9IGUuZGF0YS5vcHRpb25zLm1heDJcclxuICAgICAgZm9yIChsZXQga2V5ID0gMDsga2V5IDwgZ2VvbWV0cnlBcnJheS5sZW5ndGg7IGtleSsrKSB7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICBsZXQgcG9zaXRpb24gPSBbXVxyXG4gICAgICAgIGxldCBnZW9tZXRyeSA9IGdlb21ldHJ5QXJyYXlba2V5XS5nZW9tZXRyeTtcclxuICAgICAgICBsZXQgYXJyYXkgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5XHJcbiAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICBsZXQgeCA9IGFycmF5W2ldIC0gKG1heDIgLyAyKVxyXG4gICAgICAgICAgbGV0IHkgPSBhcnJheVtpICsgMV0gKyAobWF4MiAvIDIpXHJcbiAgICAgICAgICBwb3NpdGlvbi5wdXNoKFt4LCB5LCBhcnJheVtpICsgMV1dKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ2VvbWV0cnkuaW5kZXggJiYgZ2VvbWV0cnkuaW5kZXguYXJyYXkpIHtcclxuICAgICAgICAgIGxldCBpbmRleCA9IGdlb21ldHJ5LmluZGV4LmFycmF5XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4Lmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKFtwb3NpdGlvbltpbmRleFtpXV0sIHBvc2l0aW9uW2luZGV4W2kgKyAxXV0sIHBvc2l0aW9uW2luZGV4W2kgKyAyXV1dKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb24ubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goW3Bvc2l0aW9uW2ldLCBwb3NpdGlvbltpICsgMV0sIHBvc2l0aW9uW2kgKyAyXV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgICAgICBsZXQgcG9seWdvbnMgPSBbXVxyXG4gICAgICAgIC8vIOe7hOWQiOWkmui+ueW9olxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1xyXG4gICAgICAgICAgICAuLi5wb3NpdGlvbnNbaV0sXHJcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpXVswXVxyXG4gICAgICAgICAgXV0pO1xyXG4gICAgICAgICAgcG9seWdvbnMucHVzaChwb2x5Z29uKVxyXG4gICAgXHJcbiAgICAgICAgICBpZiAoZmVhdHVyZSkge1xyXG4gICAgICAgICAgICBmZWF0dXJlID0gdHVyZi51bmlvbihmZWF0dXJlLCBwb2x5Z29uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmZWF0dXJlID0gcG9seWdvblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuY29sb3IgPSBnZW9tZXRyeUFycmF5W2tleV0uY29sb3JcclxuICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmUpXHJcbiAgICAgIH1cclxuICAgICAgYFxyXG4gICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoeyBjb2RlOiBqc0NvZGUsIG9wdGlvbnM6IHsgZ2VvbWV0cnlBcnJheTogZ2VvbWV0cnlBcnJheSwgbWF4MjogbWF4MiB9IH0pO1xyXG5cclxuICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5zZGsudmlld2VyLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gZXZlbnQuZGF0YVxyXG4gICAgICAgIGdlb2pzb24gPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKVxyXG5cclxuICAgICAgICB0aGlzLmdlb2pzb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdlb2pzb24pKVxyXG5cclxuICAgICAgICAvLyDorqHnrpfovrnnlYzmoYZcclxuICAgICAgICBsZXQgYmJveCA9IHR1cmYuYmJveChnZW9qc29uKTtcclxuICAgICAgICBsZXQgd2lkdGggPSBNYXRoLmFicyhiYm94WzJdIC0gYmJveFswXSlcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gTWF0aC5hYnMoYmJveFszXSAtIGJib3hbMV0pXHJcblxyXG4gICAgICAgIC8vIOiOt+WPluacgOWwj+ato+aWueW9olxyXG4gICAgICAgIGxldCBzcXVhcmUgPSB0dXJmLnNxdWFyZShiYm94KTtcclxuICAgICAgICAvLyDmjqfliLbngrnnlYzpmZBcclxuICAgICAgICBzcXVhcmVbMF0gPSBzcXVhcmVbMF0gKyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gKHdpZHRoIC8gNSlcclxuICAgICAgICBzcXVhcmVbMV0gPSBzcXVhcmVbMV0gKyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gKGhlaWdodCAvIDUpXHJcbiAgICAgICAgc3F1YXJlWzJdID0gc3F1YXJlWzJdICsgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyArICh3aWR0aCAvIDUpXHJcbiAgICAgICAgc3F1YXJlWzNdID0gc3F1YXJlWzNdICsgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIChoZWlnaHQgLyA1KVxyXG5cclxuICAgICAgICB0aGlzLmJib3ggPSBzcXVhcmVcclxuXHJcblxyXG4gICAgICAgIHRoaXMuZ2VvanNvbi5mZWF0dXJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgICAgIGxldCBnZW9qc29uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSlcclxuICAgICAgICAgIGdlb2pzb24ucHJvcGVydGllcy5kaXJlY3Rpb25EaXN0YW5jZSA9IFtdXHJcblxyXG4gICAgICAgICAgaWYgKGdlb2pzb24uZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnZW9qc29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV0ubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBhcnJheTIgPSBbXVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBnZW9qc29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFswLCBnZW9qc29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dW25dWzFdXSlcclxuICAgICAgICAgICAgICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoWy4uLmdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1bbl1dKVxyXG4gICAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSB0dXJmLmRpc3RhbmNlKHBvaW50MSwgcG9pbnQyLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhbmdsZSA9IHR1cmYucmh1bWJCZWFyaW5nKHBvaW50MSwgcG9pbnQyKTtcclxuICAgICAgICAgICAgICAgICAgYXJyYXkyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBnZW9qc29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dW25dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYW5nbGU6IGFuZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGFycmF5MilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZ2VvanNvbi5wcm9wZXJ0aWVzLmRpcmVjdGlvbkRpc3RhbmNlLnB1c2goYXJyYXkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlc1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50MSA9IHR1cmYucG9pbnQoWzAsIGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1bMV1dKVxyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoWy4uLmdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1dKVxyXG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5kaXN0YW5jZShwb2ludDEsIHBvaW50MiwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFuZ2xlID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQxLCBwb2ludDIpO1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYW5nbGU6IGFuZ2xlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZ2VvanNvbi5wcm9wZXJ0aWVzLmRpcmVjdGlvbkRpc3RhbmNlLnB1c2goYXJyYXkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZ2VvanNvbi5nZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgaGllcmFyY2h5ID0gdGhpcy5nZXRIaWVyYXJjaHlQb2x5Z29uKGdlb2pzb24sIGkpXHJcbiAgICAgICAgICAgICAgYXJyYXkucHVzaChoaWVyYXJjaHkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaGllcmFyY2h5ID0gdGhpcy5nZXRIaWVyYXJjaHlQb2x5Z29uKGdlb2pzb24pXHJcbiAgICAgICAgICAgIGFycmF5LnB1c2goaGllcmFyY2h5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5oaWVyYXJjaHlzLnB1c2goYXJyYXkpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBuZXcgQ2VzaXVtLkVudGl0eUNvbGxlY3Rpb24oKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICBsZXQgcGVyUG9zaXRpb25IZWlnaHQgPSBmYWxzZVxyXG4gICAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lID09PSAnY2VzaXVtLXZpZXdlciAyZCcpIHtcclxuICAgICAgICAgIHBlclBvc2l0aW9uSGVpZ2h0ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGllcmFyY2h5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0aGlzLmhpZXJhcmNoeXNbaV0ubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgbGV0IGlkID0gdGhpcy5vcHRpb25zLmlkICsgYC0ke2l9XyR7bX19YFxyXG4gICAgICAgICAgICBsZXQgb2xkRW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmdldEJ5SWQoaWQpXHJcbiAgICAgICAgICAgIGlmKG9sZEVudGl0eSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUob2xkRW50aXR5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBpZDogdGhpcy5vcHRpb25zLmlkICsgYC0ke2l9XyR7bX19YCxcclxuICAgICAgICAgICAgICBzaG93OiB0aGlzLm9wdGlvbnMuc2hvdyxcclxuICAgICAgICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBoaWVyYXJjaHkgPSB0aGlzLmhpZXJhcmNoeXNbaV1bbV1cclxuICAgICAgICAgICAgICAgICAgbGV0IGhvbGVzID0gW11cclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoaWVyYXJjaHkuaG9sZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBob2xlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczogaGllcmFyY2h5LmhvbGVzW25dXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczogaGllcmFyY2h5LnBvc2l0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICBob2xlczogaG9sZXNcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSksXHJcbiAgICAgICAgICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogcGVyUG9zaXRpb25IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB6SW5kZXg6IHRoaXMuc2RrLl9lbnRpdHlaSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvciB8fCB0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcy5jb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWRcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuY29sb3IpIHtcclxuICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuY29sb3JcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5QXJyYXkucHVzaChlbnRpdHkpXHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LmFkZChlbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuI2xvYWRlZCA9IHRydWVcclxuICAgICAgICBpZiAodGhpcy4jbG9hZEV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLiNsb2FkRXZlbnQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjYWxlID0gdGhpcy5zY2FsZVxyXG4gICAgICAgIEdyb3VuZFN2Zy5jcmVhdGVUZXh0KHRoaXMpXHJcbiAgICAgICAgLy8gR3JvdW5kU3ZnLmluaXRUZXh0KHRoaXMpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlVGV4dCh0aGF0KSB7XHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnRleHQucG9zaXRpb24pIHtcclxuICAgICAgbGV0IGhlaWdodFxyXG4gICAgICBpZiAodGhhdC5vcHRpb25zLnRleHQucG9zaXRpb24uYWx0KSB7XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhhdC5vcHRpb25zLnRleHQucG9zaXRpb24uYWx0XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiB0aGF0Lm9wdGlvbnMudGV4dC5wb3NpdGlvbi5sbmcsIGxhdDogdGhhdC5vcHRpb25zLnRleHQucG9zaXRpb24ubGF0IH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhhdC50ZXh0ID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/ICh0aGF0Lm9wdGlvbnMudGV4dC5zaG93ID8gdGhhdC5vcHRpb25zLnRleHQuc2hvdyA6IGZhbHNlKSA6IGZhbHNlLFxyXG4gICAgICAgIHBvc2l0aW9uOiBbdGhhdC5vcHRpb25zLnRleHQucG9zaXRpb24ubG5nLCB0aGF0Lm9wdGlvbnMudGV4dC5wb3NpdGlvbi5sYXQsIGhlaWdodF0sXHJcbiAgICAgICAgdGV4dDogdGhhdC5vcHRpb25zLnRleHQudmFsdWUsXHJcbiAgICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy50ZXh0LmZvbnRTaXplLFxyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMudGV4dC5jb2xvcixcclxuICAgICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLnRleHQuZm9udFNpemUsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGF0Lm9wdGlvbnMudGV4dC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgbGluZUNvbG9yOiAnI2ZmZmZmZjAwJyxcclxuICAgICAgICBsaW5lV2lkdGg6IDAsXHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMudGV4dC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBbJyNmZmZmZmYwMCcsICcjZmZmZmZmMDAnXSxcclxuICAgICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMudGV4dC5uZWFyLFxyXG4gICAgICAgIGZhcjogdGhhdC5vcHRpb25zLnRleHQuZmFyLFxyXG4gICAgICB9KVxyXG4gICAgICB0aGF0LnRleHQuZW50aXR5LmJpbGxib2FyZC52ZXJ0aWNhbE9yaWdpbiA9IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5DRU5URVJcclxuICAgICAgLy8gdGhhdC50ZXh0LmVudGl0eS5iaWxsYm9hcmQuaG9yaXpvbnRhbE9yaWdpbiA9IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkxFRlRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiDnvJbovpHmoYZcclxuICogQHBhcmFtIHtib29sZWFufSBzdGF0dXM9ZmFsc2Ug54q25oCBXHJcbiAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGlmICghdGhpcy4jbG9hZGVkKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9yaWdpbmFsT3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn5Yab5qCH5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRleHQgJiYgKHRoaXMub3B0aW9ucy50ZXh0LnBvc2l0aW9uID0geyBsbmc6IHRoaXMudGV4dC5wb3NpdGlvblswXSwgbGF0OiB0aGlzLnRleHQucG9zaXRpb25bMV0sIGFsdDogdGhpcy50ZXh0LnBvc2l0aW9uWzJdIH0pXHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIGxldCBjZG9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIGNkb3B0aW9ucy5ob3N0ID0gJydcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2soY2RvcHRpb25zKVxyXG4gICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLmRyYWcoZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIC8vIHRoaXMuZW50aXR5LnN0eWxlID0gbmV3IENlc2l1bS5DZXNpdW0zRFRpbGVTdHlsZSh7XHJcbiAgICAgICAgICAvLyAgIGNvbG9yOiBcImNvbG9yKCdyZ2JhKDI1NSwyNTUsMjU1LFwiICsgdGhpcy5uZXdEYXRhLnRyYW5zcGFyZW5jeSArIFwiKScpXCIsXHJcbiAgICAgICAgICAvLyAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZEZvb3RFbG06IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGFnTmFtZTogJ2J1dHRvbicsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2ZsaXBlLW92ZXIteScsXHJcbiAgICAgICAgICAgIGlubmVySFRNTDogJ1novbTnv7vovawnLFxyXG4gICAgICAgICAgICBldmVudDogW1xyXG4gICAgICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGlwZVkgPSAhdGhpcy5mbGlwZVlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZ05hbWU6ICdidXR0b24nLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmbGlwZS1vdmVyLXgnLFxyXG4gICAgICAgICAgICBpbm5lckhUTUw6ICdY6L2057+76L2sJyxcclxuICAgICAgICAgICAgZXZlbnQ6IFtcclxuICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxpcGVYID0gIXRoaXMuZmxpcGVYXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0YWdOYW1lOiAnYnV0dG9uJyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZHJhZycsXHJcbiAgICAgICAgICAgIGlubmVySFRNTDogJ+e8lui+kScsXHJcbiAgICAgICAgICAgIGV2ZW50OiBbXHJcbiAgICAgICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWcoIXRoaXMuX2lzZHJhZylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgZ3JvdW5kLXN2ZydcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIGF3YWl0IHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICcnXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IHRleHRDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGV4dENvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLnRleHRDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMudGV4dENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudGV4dENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICB0aGlzLl9FdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IHRoaXMuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMudGV4dENvbG9yID0gW3RleHRDb2xvclBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNkayAmJiB0aGlzLnNkay50YWJIaWRlICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZGsudGFiSGlkZSkpIHtcclxuICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdGhpcy5zZGsudGFiSGlkZS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZGsudGFiSGlkZVttXSA9PT0gJ+WxnuaAp+S/oeaBrycpIHtcclxuICAgICAgICAgICAgICBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1pbmZvJylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFnRGF0YSA9IHRoaXMuYXR0cmlidXRlU2VsZWN0XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnYXR0cmlidXRlLXNlbGVjdC1ib3gnXHJcbiAgICAgICAgKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sICcuYXR0cmlidXRlLXNlbGVjdCcpXHJcbiAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApXHJcblxyXG4gICAgICBsZXQgeEVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneC1zY2FsZScpWzBdXHJcbiAgICAgIGxldCB5RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5LXNjYWxlJylbMF1cclxuICAgICAgbGV0IHhSYW5nZSA9IHhFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgbGV0IHhJbnB1dCA9IHhFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMV1cclxuICAgICAgbGV0IHlSYW5nZSA9IHlFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgbGV0IHlJbnB1dCA9IHlFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMV1cclxuXHJcbiAgICAgIHhSYW5nZS52YWx1ZSA9IHRoaXMuc2NhbGUueFxyXG4gICAgICB4SW5wdXQudmFsdWUgPSB0aGlzLnNjYWxlLnhcclxuICAgICAgeVJhbmdlLnZhbHVlID0gdGhpcy5zY2FsZS55XHJcbiAgICAgIHlJbnB1dC52YWx1ZSA9IHRoaXMuc2NhbGUueVxyXG5cclxuICAgICAgdGhpcy5fZWxtcy54UmFuZ2UgPSB4UmFuZ2VcclxuICAgICAgdGhpcy5fZWxtcy55UmFuZ2UgPSB5UmFuZ2VcclxuICAgICAgdGhpcy5fZWxtcy54SW5wdXQgPSB4SW5wdXRcclxuICAgICAgdGhpcy5fZWxtcy55SW5wdXQgPSB5SW5wdXRcclxuXHJcbiAgICAgIHhSYW5nZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IHtcclxuICAgICAgICAgIHg6IHhSYW5nZS52YWx1ZSxcclxuICAgICAgICAgIHk6IHRoaXMuc2NhbGUueVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgeVJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLnNjYWxlID0ge1xyXG4gICAgICAgICAgeDogdGhpcy5zY2FsZS54LFxyXG4gICAgICAgICAgeTogeVJhbmdlLnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgeElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgaWYgKCgoIWUudGFyZ2V0Lm1heCkgJiYgKCFlLnRhcmdldC5taW4pKSB8fCAoKHZhbHVlIDw9IE51bWJlcihlLnRhcmdldC5tYXgpKSAmJiB2YWx1ZSA+PSBOdW1iZXIoZS50YXJnZXQubWluKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZSA9IHtcclxuICAgICAgICAgICAgICB4OiB2YWx1ZSxcclxuICAgICAgICAgICAgICB5OiB0aGlzLnNjYWxlLnlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgeElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IHtcclxuICAgICAgICAgIHg6IHZhbHVlLFxyXG4gICAgICAgICAgeTogdGhpcy5zY2FsZS55XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB5SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICBpZiAoKCghZS50YXJnZXQubWF4KSAmJiAoIWUudGFyZ2V0Lm1pbikpIHx8ICgodmFsdWUgPD0gTnVtYmVyKGUudGFyZ2V0Lm1heCkpICYmIHZhbHVlID49IE51bWJlcihlLnRhcmdldC5taW4pKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlID0ge1xyXG4gICAgICAgICAgICAgIHg6IHRoaXMuc2NhbGUueCxcclxuICAgICAgICAgICAgICB5OiB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB5SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjYWxlID0ge1xyXG4gICAgICAgICAgeDogdGhpcy5zY2FsZS54LFxyXG4gICAgICAgICAgeTogdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6YeN572uXHJcbiAgICovXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuI2xvYWRlZCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucG9zaXRpb25cclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMuYW5nbGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hbmdsZVxyXG4gICAgdGhpcy5zY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIGlmICh0aGlzLnRleHQgJiYgIXRoaXMub3JpZ2luYWxPcHRpb25zLnRleHQucG9zaXRpb24pIHtcclxuICAgICAgdGhpcy50ZXh0LnJlbW92ZSgpXHJcbiAgICAgIHRoaXMudGV4dCA9IG51bGxcclxuICAgIH1cclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLnRleHRTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudGV4dC5zaG93XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnRleHQudmFsdWVcclxuICAgIHRoaXMudGV4dENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudGV4dC5jb2xvclxyXG4gICAgdGhpcy50ZXh0Rm9udFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy50ZXh0LmZvbnRTaXplXHJcbiAgICB0aGlzLnRleHRTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy50ZXh0LnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy50ZXh0TmVhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnRleHQubmVhclxyXG4gICAgdGhpcy50ZXh0RmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudGV4dC5mYXJcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICog5ouW5YqoXHJcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXR1cz1mYWxzZSDnirbmgIFcclxuICAqL1xyXG4gIGRyYWcoc3RhdHVzLCBjZCkge1xyXG4gICAgaWYgKCF0aGlzLiNsb2FkZWQgfHwgIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmlzbW92ZSA9IGZhbHNlXHJcbiAgICB0aGlzLl9pc2RyYWcgPSBzdGF0dXNcclxuICAgIGlmICh0aGlzLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKSB7XHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIgPSBuZXcgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRIYW5kbGVyKFxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW52YXNcclxuICAgICAgKVxyXG4gICAgICBsZXQgd2lkdGggPSBNYXRoLmFicyh0aGlzLmJib3hbMF0gLSB0aGlzLmJib3hbMl0pXHJcbiAgICAgIGxldCBoZWlnaHQgPSBNYXRoLmFicyh0aGlzLmJib3hbMV0gLSB0aGlzLmJib3hbM10pXHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oYXN5bmMgKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucGlja1BvaW50KSB7XHJcbiAgICAgICAgICBsZXQgc0NhcnRlc2lhbiA9IHRoaXMucGlja1BvaW50LnBvc2l0aW9uLmdldFZhbHVlKClcclxuICAgICAgICAgIGxldCBlQ2FydGVzaWFuID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLnBpY2tQb3NpdGlvbihtb3ZlbWVudC5lbmRQb3NpdGlvbilcclxuICAgICAgICAgIGlmICghZUNhcnRlc2lhbikge1xyXG4gICAgICAgICAgICBjb25zdCByYXkgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkobW92ZW1lbnQuZW5kUG9zaXRpb24pO1xyXG4gICAgICAgICAgICBlQ2FydGVzaWFuID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLnBpY2socmF5LCB0aGlzLnNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFzQ2FydGVzaWFuIHx8ICFlQ2FydGVzaWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uMSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoc0NhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uMiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoZUNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHggPSAwXHJcbiAgICAgICAgICBsZXQgeSA9IDBcclxuXHJcbiAgICAgICAgICBsZXQgcmFkaWFucywgcmFkaWFuc1csIHJhZGlhbnNIXHJcblxyXG4gICAgICAgICAgbGV0IHcgPSAzLjUgKiB0aGlzLnNjYWxlLnhcclxuICAgICAgICAgIGxldCBoID0gMy41ICogdGhpcy5zY2FsZS55XHJcbiAgICAgICAgICBsZXQgd2ggPSBNYXRoLnNxcnQoKCh3IC8gMikgKiogMikgKyAoKGggLyAyKSAqKiAyKSlcclxuICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbigodyAvIDIpIC8gKGggLyAyKSkgKiAoMTgwIC8gTWF0aC5QSSlcclxuICAgICAgICAgIGxldCBhbmdsZVcsIGFuZ2xlSDtcclxuICAgICAgICAgIGlmIChpc05hTihhbmdsZSkpIHtcclxuICAgICAgICAgICAgYW5nbGUgPSAwXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IHBvaW50ID0gdHVyZi5wb2ludChbdGhpcy5wb3NpdGlvbi5sbmcsIHRoaXMucG9zaXRpb24ubGF0XSk7XHJcbiAgICAgICAgICBsZXQgb3B0aW9ucyA9IHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9O1xyXG4gICAgICAgICAgbGV0IGNvbnRyb2xQb2ludHMgPSBbXVxyXG4gICAgICAgICAgY29udHJvbFBvaW50c1swXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIGggLyAyICogMS41LCAwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgICAgY29udHJvbFBvaW50c1sxXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAxODAgKyBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICAgIGNvbnRyb2xQb2ludHNbMl0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCBoIC8gMiwgMTgwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgICAgY29udHJvbFBvaW50c1szXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAxODAgLSBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICAgIGNvbnRyb2xQb2ludHNbNF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3IC8gMiwgMjcwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgICAgY29udHJvbFBvaW50c1s1XSA9IFt0aGlzLnBvc2l0aW9uLmxuZywgdGhpcy5wb3NpdGlvbi5sYXRdXHJcbiAgICAgICAgICBjb250cm9sUG9pbnRzWzZdID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgdyAvIDIsIDkwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgICAgY29udHJvbFBvaW50c1s3XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAzNjAgLSBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICAgIGNvbnRyb2xQb2ludHNbOF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCBoIC8gMiwgMCArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICAgIGNvbnRyb2xQb2ludHNbOV0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3aCwgMCArIGFuZ2xlICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG5cclxuICAgICAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFtwb3NpdGlvbjEubG5nLCBwb3NpdGlvbjEubGF0XSk7XHJcbiAgICAgICAgICBsZXQgcG9pbnQyID0gdHVyZi5wb2ludChbcG9zaXRpb24yLmxuZywgcG9zaXRpb24yLmxhdF0pO1xyXG4gICAgICAgICAgbGV0IHBvaW50QyA9IHR1cmYucG9pbnQoW3RoaXMucG9zaXRpb24ubG5nLCB0aGlzLnBvc2l0aW9uLmxhdF0pO1xyXG4gICAgICAgICAgbGV0IGJlYXJpbmcxID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnRDLCBwb2ludDEpO1xyXG4gICAgICAgICAgbGV0IGJlYXJpbmcyXzAgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludEMsIHBvaW50Mik7XHJcbiAgICAgICAgICBsZXQgYmVhcmluZzIgPSAoKChiZWFyaW5nMl8wICsgMzYwKSAtIHRoaXMuYW5nbGUpICUgMzYwKVxyXG4gICAgICAgICAgbGV0IGJlYXJpbmdIXHJcbiAgICAgICAgICBsZXQgYmVhcmluZ1dcclxuICAgICAgICAgIC8vIOS4reW/g+eCueWIsOm8oOagh+eahOi3neemu1xyXG4gICAgICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5yaHVtYkRpc3RhbmNlKHBvaW50QywgcG9pbnQyLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICBsZXQgZmxhZzIgPSBmYWxzZVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5waWNrUG9pbnQuaWQpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzAnOlxyXG4gICAgICAgICAgICAgIGFuZ2xlID0gYmVhcmluZzJfMCAtIGJlYXJpbmcxXHJcbiAgICAgICAgICAgICAgdGhpcy5hbmdsZSArPSBhbmdsZVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zy1jb250cm9sLXBvaW50c18xJzpcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzcnOlxyXG4gICAgICAgICAgICAgIGJlYXJpbmdXID0gKCgodHVyZi5yaHVtYkJlYXJpbmcocG9pbnRDLCB0dXJmLnBvaW50KGNvbnRyb2xQb2ludHNbNF0pKSArIDM2MCkgLSB0aGlzLmFuZ2xlKSAlIDM2MClcclxuICAgICAgICAgICAgICBiZWFyaW5nSCA9ICgoKHR1cmYucmh1bWJCZWFyaW5nKHBvaW50QywgdHVyZi5wb2ludChjb250cm9sUG9pbnRzWzJdKSkgKyAzNjApIC0gdGhpcy5hbmdsZSkgJSAzNjApXHJcbiAgICAgICAgICAgICAgYW5nbGVXID0gYmVhcmluZzIgLSBiZWFyaW5nV1xyXG4gICAgICAgICAgICAgIGFuZ2xlSCA9IGJlYXJpbmcyIC0gYmVhcmluZ0hcclxuICAgICAgICAgICAgICBpZiAoKGFuZ2xlVyA+IC0zNjAgJiYgYW5nbGVXIDwgLTkwKSB8fCAoYW5nbGVXIDwgMzYwICYmIGFuZ2xlVyA+IDkwKSkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGVXID0gYW5nbGVXICsgMTgwXHJcbiAgICAgICAgICAgICAgICBmbGFnPXRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKChhbmdsZUggPiAtMzYwICYmIGFuZ2xlSCA8IC05MCkgfHwgKGFuZ2xlSCA8IDM2MCAmJiBhbmdsZUggPiA5MCkpIHtcclxuICAgICAgICAgICAgICAgIGFuZ2xlSCA9IGFuZ2xlSCArIDE4MFxyXG4gICAgICAgICAgICAgICAgZmxhZzI9dHJ1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZihmbGFnICYmIGZsYWcyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1szXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzddLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZihmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1sxXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbM10ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzddLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s5XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihmbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzNdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s3XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZjAwMDAnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzNdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s3XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJhZGlhbnNXID0gKE1hdGguUEkgLyAxODApICogYW5nbGVXXHJcbiAgICAgICAgICAgICAgcmFkaWFuc0ggPSAoTWF0aC5QSSAvIDE4MCkgKiBhbmdsZUhcclxuICAgICAgICAgICAgICAvLyDnn6nlvaLpq5jluqZcclxuICAgICAgICAgICAgICB3ID0gKE1hdGguY29zKHJhZGlhbnNXKSAqIGRpc3RhbmNlKSAqIDJcclxuICAgICAgICAgICAgICBoID0gKE1hdGguY29zKHJhZGlhbnNIKSAqIGRpc3RhbmNlKSAqIDJcclxuICAgICAgICAgICAgICAvLyBzY2FsZVnlgLxcclxuICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBNYXRoLmFicyh3KSAvIDMuNVxyXG4gICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IE1hdGguYWJzKGgpIC8gMy41XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzInOlxyXG4gICAgICAgICAgICBjYXNlICdzdmctY29udHJvbC1wb2ludHNfOCc6XHJcbiAgICAgICAgICAgICAgYmVhcmluZ0ggPSAoKCh0dXJmLnJodW1iQmVhcmluZyhwb2ludEMsIHR1cmYucG9pbnQoY29udHJvbFBvaW50c1syXSkpICsgMzYwKSAtIHRoaXMuYW5nbGUpICUgMzYwKVxyXG4gICAgICAgICAgICAgIGFuZ2xlSCA9IGJlYXJpbmcyIC0gYmVhcmluZ0hcclxuXHJcbiAgICAgICAgICAgICAgaWYgKChhbmdsZUggPiAtMzYwICYmIGFuZ2xlSCA8IC05MCkgfHwgKGFuZ2xlSCA8IDM2MCAmJiBhbmdsZUggPiA5MCkpIHtcclxuICAgICAgICAgICAgICAgIGFuZ2xlSCA9IGFuZ2xlSCArIDE4MFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzJdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOF0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMl0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s4XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmFkaWFuc0ggPSAoTWF0aC5QSSAvIDE4MCkgKiBhbmdsZUhcclxuICAgICAgICAgICAgICAvLyDnn6nlvaLpq5jluqZcclxuICAgICAgICAgICAgICBoID0gKE1hdGguY29zKHJhZGlhbnNIKSAqIGRpc3RhbmNlKSAqIDJcclxuICAgICAgICAgICAgICAvLyBzY2FsZVnlgLxcclxuICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSBoIC8gMy41XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzMnOlxyXG4gICAgICAgICAgICBjYXNlICdzdmctY29udHJvbC1wb2ludHNfOSc6XHJcbiAgICAgICAgICAgICAgYmVhcmluZ1cgPSAoKCh0dXJmLnJodW1iQmVhcmluZyhwb2ludEMsIHR1cmYucG9pbnQoY29udHJvbFBvaW50c1s2XSkpICsgMzYwKSAtIHRoaXMuYW5nbGUpICUgMzYwKVxyXG4gICAgICAgICAgICAgIGJlYXJpbmdIID0gKCgodHVyZi5yaHVtYkJlYXJpbmcocG9pbnRDLCB0dXJmLnBvaW50KGNvbnRyb2xQb2ludHNbMl0pKSArIDM2MCkgLSB0aGlzLmFuZ2xlKSAlIDM2MClcclxuICAgICAgICAgICAgICBhbmdsZVcgPSBiZWFyaW5nMiAtIGJlYXJpbmdXXHJcbiAgICAgICAgICAgICAgYW5nbGVIID0gYmVhcmluZzIgLSBiZWFyaW5nSFxyXG5cclxuICAgICAgICAgICAgICBpZiAoKGFuZ2xlVyA+IC0zNjAgJiYgYW5nbGVXIDwgLTkwKSB8fCAoYW5nbGVXIDwgMzYwICYmIGFuZ2xlVyA+IDkwKSkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGVXID0gYW5nbGVXICsgMTgwXHJcbiAgICAgICAgICAgICAgICBmbGFnPXRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKChhbmdsZUggPiAtMzYwICYmIGFuZ2xlSCA8IC05MCkgfHwgKGFuZ2xlSCA8IDM2MCAmJiBhbmdsZUggPiA5MCkpIHtcclxuICAgICAgICAgICAgICAgIGFuZ2xlSCA9IGFuZ2xlSCArIDE4MFxyXG4gICAgICAgICAgICAgICAgZmxhZzI9dHJ1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZihmbGFnICYmIGZsYWcyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1szXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzddLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmMDAwMCcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZihmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1sxXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZjAwMDAnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbM10ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzddLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s5XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihmbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzNdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s3XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbMV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzNdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmMDAwMCcpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s3XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbOV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJhZGlhbnNXID0gKE1hdGguUEkgLyAxODApICogYW5nbGVXXHJcbiAgICAgICAgICAgICAgcmFkaWFuc0ggPSAoTWF0aC5QSSAvIDE4MCkgKiBhbmdsZUhcclxuICAgICAgICAgICAgICAvLyDnn6nlvaLpq5jluqZcclxuICAgICAgICAgICAgICB3ID0gKE1hdGguY29zKHJhZGlhbnNXKSAqIGRpc3RhbmNlKSAqIDJcclxuICAgICAgICAgICAgICBoID0gKE1hdGguY29zKHJhZGlhbnNIKSAqIGRpc3RhbmNlKSAqIDJcclxuICAgICAgICAgICAgICAvLyBzY2FsZVnlgLxcclxuICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBNYXRoLmFicyh3KSAvIDMuNVxyXG4gICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IE1hdGguYWJzKGgpIC8gMy41XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzQnOlxyXG4gICAgICAgICAgICAgIGJlYXJpbmdXID0gKCgodHVyZi5yaHVtYkJlYXJpbmcocG9pbnRDLCB0dXJmLnBvaW50KGNvbnRyb2xQb2ludHNbNF0pKSArIDM2MCkgLSB0aGlzLmFuZ2xlKSAlIDM2MClcclxuICAgICAgICAgICAgICBhbmdsZVcgPSBiZWFyaW5nMiAtIGJlYXJpbmdXXHJcblxyXG4gICAgICAgICAgICAgIGlmICgoYW5nbGVXID4gLTM2MCAmJiBhbmdsZVcgPCAtOTApIHx8IChhbmdsZVcgPCAzNjAgJiYgYW5nbGVXID4gOTApKSB7XHJcbiAgICAgICAgICAgICAgICBhbmdsZVcgPSBhbmdsZVcgKyAxODBcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s0XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzZdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmMDAwMCcpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzZdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmYwYScpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbNF0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJhZGlhbnNXID0gKE1hdGguUEkgLyAxODApICogYW5nbGVXXHJcbiAgICAgICAgICAgICAgLy8g55+p5b2i5a695bqmXHJcbiAgICAgICAgICAgICAgdyA9IChNYXRoLmNvcyhyYWRpYW5zVykgKiBkaXN0YW5jZSkgKiAyXHJcbiAgICAgICAgICAgICAgLy8gc2NhbGVZ5YC8XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdyAvIDMuNVxyXG5cclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlICdzdmctY29udHJvbC1wb2ludHNfNSc6XHJcbiAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uMi5sYXQgPiA4My41KSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjIubGF0ID0gODMuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocG9zaXRpb24yLmxhdCA8IC04My41KSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjIubGF0ID0gLTgzLjVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgbG5nOiBwb3NpdGlvbjIubG5nLCBsYXQ6IHBvc2l0aW9uMi5sYXQgfVxyXG4gICAgICAgICAgICAgIGxldCBjeCA9IHBvc2l0aW9uMi5sbmcgLSBwb3NpdGlvbjEubG5nXHJcbiAgICAgICAgICAgICAgbGV0IGN5ID0gcG9zaXRpb24yLmxhdCAtIHBvc2l0aW9uMS5sYXRcclxuICAgICAgICAgICAgICB0aGlzLmJib3hbMF0gPSB0aGlzLmJib3hbMF0gKyBjeFxyXG4gICAgICAgICAgICAgIHRoaXMuYmJveFsxXSA9IHRoaXMuYmJveFsxXSArIGN5XHJcbiAgICAgICAgICAgICAgdGhpcy5iYm94WzJdID0gdGhpcy5iYm94WzJdICsgY3hcclxuICAgICAgICAgICAgICB0aGlzLmJib3hbM10gPSB0aGlzLmJib3hbM10gKyBjeVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zy1jb250cm9sLXBvaW50c182JzpcclxuICAgICAgICAgICAgICBiZWFyaW5nVyA9ICgoKHR1cmYucmh1bWJCZWFyaW5nKHBvaW50QywgdHVyZi5wb2ludChjb250cm9sUG9pbnRzWzZdKSkgKyAzNjApIC0gdGhpcy5hbmdsZSkgJSAzNjApXHJcbiAgICAgICAgICAgICAgYW5nbGVXID0gYmVhcmluZzIgLSBiZWFyaW5nV1xyXG5cclxuICAgICAgICAgICAgICBpZiAoKGFuZ2xlVyA+IC0zNjAgJiYgYW5nbGVXIDwgLTkwKSB8fCAoYW5nbGVXIDwgMzYwICYmIGFuZ2xlVyA+IDkwKSkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGVXID0gYW5nbGVXICsgMTgwXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbNl0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZjBhJylcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s0XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZjAwMDAnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1s0XS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzWzZdLnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmMDAwMCcpXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICByYWRpYW5zVyA9IChNYXRoLlBJIC8gMTgwKSAqIGFuZ2xlV1xyXG4gICAgICAgICAgICAgIC8vIOefqeW9oumrmOW6plxyXG4gICAgICAgICAgICAgIHcgPSAoTWF0aC5jb3MocmFkaWFuc1cpICogZGlzdGFuY2UpICogMlxyXG4gICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHcgLyAzLjVcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBsZXQgcmFkaWFucyA9IChNYXRoLlBJIC8gMTgwKSAqIHRoaXMub3B0aW9ucy5hbmdsZVxyXG4gICAgICAgICAgLy8geCA9IHgqTWF0aC5jb3MocmFkaWFucylcclxuICAgICAgICAgIC8vIHkgPSB5Kk1hdGguY29zKHJhZGlhbnMpXHJcblxyXG5cclxuICAgICAgICAgIC8vIGxldCBiYm94ID0gdHVyZi5iYm94KGdlb2pzb24pO1xyXG4gICAgICAgICAgLy8gbGV0IHNxdWFyZSA9IHR1cmYuc3F1YXJlKGJib3gpO1xyXG5cclxuICAgICAgICAgIHggPSB4IC8gKHdpZHRoIC8gMikgKiAxMDBcclxuICAgICAgICAgIHkgPSB5IC8gKGhlaWdodCAvIDIpICogMTAwXHJcblxyXG4gICAgICAgICAgbGV0IHNjYWxlID0geyAuLi50aGlzLnNjYWxlIH1cclxuICAgICAgICAgIHNjYWxlLnggPSBzY2FsZS54ICsgeFxyXG4gICAgICAgICAgc2NhbGUueSA9IHNjYWxlLnkgLSB5XHJcblxyXG4gICAgICAgICAgLy8gbGV0IHB0ID0gdHVyZi5wb2ludCh0aGlzLmNlbnRlcik7XHJcbiAgICAgICAgICAvLyBsZXQgZGVzdGluYXRpb24xID0gdHVyZi5yaHVtYkRlc3RpbmF0aW9uKHB0LCAyMjAsIDQ1LCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAvLyBsZXQgZGVzdGluYXRpb24yID0gdHVyZi5yaHVtYkRlc3RpbmF0aW9uKHB0LCAyMjAsIDIyNSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG5cclxuICAgICAgICAgIC8vIHdpZHRoID0gTWF0aC5hYnMoZGVzdGluYXRpb24yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdIC0gZGVzdGluYXRpb24xLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKVxyXG4gICAgICAgICAgLy8gaGVpZ2h0ID0gTWF0aC5hYnMoZGVzdGluYXRpb24yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdIC0gZGVzdGluYXRpb24xLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKVxyXG5cclxuICAgICAgICAgIGlmIChzY2FsZS55ID4gMjAwKSB7XHJcbiAgICAgICAgICAgIHNjYWxlLnkgPSAyMDBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzY2FsZS55IDwgMC4wMDEpIHtcclxuICAgICAgICAgICAgc2NhbGUueSA9IDAuMDAxXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNjYWxlLnggPiAyMDApIHtcclxuICAgICAgICAgICAgc2NhbGUueCA9IDIwMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHNjYWxlLnggPCAwLjAwMSkge1xyXG4gICAgICAgICAgICBzY2FsZS54ID0gMC4wMDFcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNjYWxlID0geyAuLi5zY2FsZSB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCBwaWNrZWRPYmplY3RBcnJheSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5kcmlsbFBpY2sobW92ZW1lbnQuZW5kUG9zaXRpb24pO1xyXG4gICAgICAgICAgbGV0IHBpY2tQb2ludFxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWRPYmplY3RBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgcGlja2VkT2JqZWN0ID0gcGlja2VkT2JqZWN0QXJyYXlbaV1cclxuICAgICAgICAgICAgaWYgKHBpY2tlZE9iamVjdCAmJiBwaWNrZWRPYmplY3QucHJpbWl0aXZlICYmIHBpY2tlZE9iamVjdC5wcmltaXRpdmUuX2lkICYmXHJcbiAgICAgICAgICAgICAgKHBpY2tlZE9iamVjdC5wcmltaXRpdmUuX2lkLmlkICYmIHBpY2tlZE9iamVjdC5wcmltaXRpdmUuX2lkLmlkLmluZGV4T2YoJ3N2Zy1jb250cm9sLXBvaW50c18nKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHBpY2tQb2ludCA9IHBpY2tlZE9iamVjdC5wcmltaXRpdmUuX2lkXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBpY2tQb2ludCAmJiB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbaV0uaWQgPT09IHBpY2tQb2ludC5pZCkge1xyXG4gICAgICAgICAgICAgIHBpY2tQb2ludC5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmZmMDAnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24udmFsdWVzW2ldLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdmctY29udHJvbC1wb2ludHNfNSc6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1tpXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmZmMDAnKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzAnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvaW50RW50aXR5Q29sbGVjdGlvbi52YWx1ZXNbaV0ucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRFbnRpdHlDb2xsZWN0aW9uLnZhbHVlc1tpXS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLk1PVVNFX01PVkUpXHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IHBpY2tlZE9iamVjdEFycmF5ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmRyaWxsUGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWRPYmplY3RBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHBpY2tlZE9iamVjdCA9IHBpY2tlZE9iamVjdEFycmF5W2ldXHJcbiAgICAgICAgICBpZiAocGlja2VkT2JqZWN0ICYmIHBpY2tlZE9iamVjdC5wcmltaXRpdmUgJiYgcGlja2VkT2JqZWN0LnByaW1pdGl2ZS5faWQgJiYgcGlja2VkT2JqZWN0LnByaW1pdGl2ZS5faWQub2JqZWN0SWQgPT09IHRoaXMub3B0aW9ucy5pZCAmJlxyXG4gICAgICAgICAgICAocGlja2VkT2JqZWN0LnByaW1pdGl2ZS5faWQuaWQgJiYgcGlja2VkT2JqZWN0LnByaW1pdGl2ZS5faWQuaWQuaW5kZXhPZignc3ZnLWNvbnRyb2wtcG9pbnRzXycpICE9PSAtMSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBZSi5HbG9iYWwuQ2FtZXJhQ29udHJvbGxlcih0aGlzLnNkaywgZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMucGlja1BvaW50ID0gcGlja2VkT2JqZWN0LnByaW1pdGl2ZS5faWRcclxuICAgICAgICAgICAgdGhpcy5waWNrUG9pbnQucG9pbnQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJylcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIENlc2l1bS5TY3JlZW5TcGFjZUV2ZW50VHlwZS5MRUZUX0RPV04pXHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucGlja1BvaW50KSB7XHJcbiAgICAgICAgICBZSi5HbG9iYWwuQ2FtZXJhQ29udHJvbGxlcih0aGlzLnNkaywgdHJ1ZSlcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5waWNrUG9pbnQuaWQpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzQnOlxyXG4gICAgICAgICAgICAgIHRoaXMucGlja1BvaW50LnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmZmYwMCcpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnLWNvbnRyb2wtcG9pbnRzXzknOlxyXG4gICAgICAgICAgICAgIHRoaXMucGlja1BvaW50LnBvaW50LmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2ZmMDAwMCcpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB0aGlzLnBpY2tQb2ludC5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmMGEnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5waWNrUG9pbnQgPSBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBDZXNpdW0uU2NyZWVuU3BhY2VFdmVudFR5cGUuTEVGVF9VUClcclxuXHJcbiAgICAgIHRoaXMuU2NyZWVuU3BhY2VFdmVudEhhbmRsZXIuc2V0SW5wdXRBY3Rpb24oKG1vdmVtZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcmFnKGZhbHNlKVxyXG4gICAgICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0KSB7XHJcbiAgICAgICAgICBjZCAmJiBjZCh0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgQ2VzaXVtLlNjcmVlblNwYWNlRXZlbnRUeXBlLlJJR0hUX0NMSUNLKVxyXG5cclxuICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24gPSBuZXcgQ2VzaXVtLkVudGl0eUNvbGxlY3Rpb24oKVxyXG4gICAgICBsZXQgdyA9IDMuNSAqIHRoaXMuc2NhbGUueFxyXG4gICAgICBsZXQgaCA9IDMuNSAqIHRoaXMuc2NhbGUueVxyXG4gICAgICBsZXQgd2ggPSBNYXRoLnNxcnQoKCh3IC8gMikgKiogMikgKyAoKGggLyAyKSAqKiAyKSlcclxuICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuKCh3IC8gMikgLyAoaCAvIDIpKSAqICgxODAgLyBNYXRoLlBJKVxyXG4gICAgICBpZiAoaXNOYU4oYW5nbGUpKSB7XHJcbiAgICAgICAgYW5nbGUgPSAwXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwb2ludCA9IHR1cmYucG9pbnQoW3RoaXMucG9zaXRpb24ubG5nLCB0aGlzLnBvc2l0aW9uLmxhdF0pO1xyXG4gICAgICBsZXQgb3B0aW9ucyA9IHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9O1xyXG4gICAgICBsZXQgY29udHJvbFBvaW50cyA9IFtdXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbMF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCBoIC8gMiAqIDEuNSwgMCwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1sxXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAxODAgKyBhbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1syXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIGggLyAyLCAxODAsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbM10gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3aCwgMTgwIC0gYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbNF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3IC8gMiwgMjcwLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb250cm9sUG9pbnRzWzVdID0gW3RoaXMucG9zaXRpb24ubG5nLCB0aGlzLnBvc2l0aW9uLmxhdF1cclxuICAgICAgY29udHJvbFBvaW50c1s2XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHcgLyAyLCA5MCwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1s3XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAzNjAgLSBhbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1s4XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIGggLyAyLCAwLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb250cm9sUG9pbnRzWzldID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgd2gsIDAgKyBhbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbFBvaW50cyA9IGNvbnRyb2xQb2ludHNcclxuICAgICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udHJvbFBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjb2xvciA9ICcjMDBmZjBhJ1xyXG4gICAgICAgIGlmIChpID09PSA1KSB7XHJcbiAgICAgICAgICBjb2xvciA9ICcjZmZmZjAwJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgY29sb3IgPSAnI2ZmMDAwMCdcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5nZXRPckNyZWF0ZUVudGl0eSgnc3ZnLWNvbnRyb2wtcG9pbnRzXycgKyBpKVxyXG4gICAgICAgIGVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIGVudGl0eS5vYmplY3RJZCA9IHRoaXMub3B0aW9ucy5pZFxyXG4gICAgICAgIGVudGl0eS5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoLi4udGhpcy5jb250cm9sUG9pbnRzW2ldKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZW50aXR5LnBvaW50ID0gbmV3IENlc2l1bS5Qb2ludEdyYXBoaWNzKHtcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKSwgLy8g54K555qE6aKc6ImyXHJcbiAgICAgICAgICBwaXhlbFNpemU6IDEwLCAvLyDngrnnmoTlpKflsI9cclxuICAgICAgICAgIGhlaWdodFJlZmVyZW5jZTogQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkQsXHJcbiAgICAgICAgICBzY2FsZUJ5RGlzdGFuY2U6IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcigwLjAsIDEuMCwgMS4wZTEwLCAxLjApLFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgIC8vIOS4jeW6lOeUqOa3seW6pua1i+ivlVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5wb2ludEVudGl0eUNvbGxlY3Rpb24uYWRkKGVudGl0eSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl91cGRhdGUoKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb250cm9sUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKCdzdmctY29udHJvbC1wb2ludHNfJyArIGkpXHJcbiAgICAgICAgaWYgKGVudGl0eSAmJiAoZW50aXR5Lm9iamVjdElkID09PSB0aGlzLm9wdGlvbnMuaWQpKSB7XHJcbiAgICAgICAgICBlbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIaWVyYXJjaHlQb2x5Z29uKGdlb2pzb24sIGtleSkge1xyXG4gICAgaWYgKCFnZW9qc29uKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGhpZXJhcmNoeSA9IHt9XHJcbiAgICBsZXQgaG9sZXMgPSBbXVxyXG4gICAgbGV0IGRpcmVjdGlvbkRpc3RhbmNlID0gZ2VvanNvbi5wcm9wZXJ0aWVzLmRpcmVjdGlvbkRpc3RhbmNlXHJcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZGlyZWN0aW9uRGlzdGFuY2UgPSBnZW9qc29uLnByb3BlcnRpZXMuZGlyZWN0aW9uRGlzdGFuY2Vba2V5XVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aW9uRGlzdGFuY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgZGlyZWN0aW9uRGlzdGFuY2VbaV0ubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZ1xyXG4gICAgICAgIGxldCBsYXQgPSBkaXJlY3Rpb25EaXN0YW5jZVtpXVttXS5vcmlnaW5bMV0gKyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgaWYgKGxhdCA+IDkwKSB7XHJcbiAgICAgICAgICBsbmcgKz0gMTgwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcmlnaW4gPSBbbG5nLCBsYXRdXHJcbiAgICAgICAgbGV0IHB0ID0gdHVyZi5wb2ludChvcmlnaW4pO1xyXG4gICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IHR1cmYucmh1bWJEZXN0aW5hdGlvbihwdCwgZGlyZWN0aW9uRGlzdGFuY2VbaV1bbV0uZGlzdGFuY2UsIGRpcmVjdGlvbkRpc3RhbmNlW2ldW21dLmFuZ2xlLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgbGV0IGNvb3JkaW5hdGVzID0gWy4uLmRlc3RpbmF0aW9uLmdlb21ldHJ5LmNvb3JkaW5hdGVzXVxyXG4gICAgICAgIC8vIOS6jOe7tOaooeW8j+S4i+iuvue9rumrmOW6plxyXG4gICAgICAgIGNvb3JkaW5hdGVzWzJdID0gMTBcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jb29yZGluYXRlcykpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGkgPT09IDApIHtcclxuXHJcbiAgICAgICAgaGllcmFyY2h5LnBvc2l0aW9ucyA9IHBvc2l0aW9uc1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGhvbGVzLnB1c2gocG9zaXRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBoaWVyYXJjaHkuaG9sZXMgPSBob2xlc1xyXG4gICAgcmV0dXJuIGhpZXJhcmNoeVxyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZUdlb2pzb24oZGF0YSwgeCwgeSkge1xyXG4gICAgaWYgKCF0aGlzLiNsb2FkZWQpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgd2lkdGggPSBNYXRoLmFicyh0aGlzLmJib3hbMF0gLSB0aGlzLmJib3hbMl0pXHJcbiAgICBsZXQgaGVpZ2h0ID0gTWF0aC5hYnModGhpcy5iYm94WzFdIC0gdGhpcy5iYm94WzNdKVxyXG4gICAgaWYgKHR5cGVvZiBkYXRhWzBdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVHZW9qc29uKGRhdGFbaV0sIHgsIHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICBkYXRhW2ldID0gZGF0YVtpXSArICgoZGF0YVtpXSAvICh3aWR0aCAvIDIpKSAqIHgpXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgZGF0YVtpXSA9IGRhdGFbaV0gLSAoKGRhdGFbaV0gLyAoaGVpZ2h0IC8gMikpICogeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZSgpIHtcclxuICAgIGlmICghdGhpcy4jbG9hZGVkKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHBvaW50ID0gdHVyZi5wb2ludChbdGhpcy5wb3NpdGlvbi5sbmcsIHRoaXMucG9zaXRpb24ubGF0XSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9IHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9O1xyXG4gICAgbGV0IGludGVyaW1CYm94ID0gWy4uLnRoaXMuYmJveF1cclxuICAgIGxldCB3aWR0aCA9IE1hdGguYWJzKGludGVyaW1CYm94WzJdIC0gaW50ZXJpbUJib3hbMF0pXHJcbiAgICBsZXQgaGVpZ2h0ID0gTWF0aC5hYnMoaW50ZXJpbUJib3hbM10gLSBpbnRlcmltQmJveFsxXSlcclxuICAgIGxldCB4ID0gKCh3aWR0aCAvIDIpICogdGhpcy5vcHRpb25zLnNjYWxlLngpIC8gMTAwIC0gKHdpZHRoIC8gMilcclxuICAgIGxldCB5ID0gKGhlaWdodCAvIDIpICogKC0odGhpcy5vcHRpb25zLnNjYWxlLnkpKSAvIDEwMCArIChoZWlnaHQgLyAyKVxyXG5cclxuICAgIGludGVyaW1CYm94WzBdID0gaW50ZXJpbUJib3hbMF0gLSB4XHJcbiAgICBpbnRlcmltQmJveFsxXSA9IGludGVyaW1CYm94WzFdICsgeVxyXG4gICAgaW50ZXJpbUJib3hbMl0gPSBpbnRlcmltQmJveFsyXSArIHhcclxuICAgIGludGVyaW1CYm94WzNdID0gaW50ZXJpbUJib3hbM10gLSB5XHJcblxyXG4gICAgbGV0IGludGVyaW1cclxuXHJcbiAgICBpZiAoaW50ZXJpbUJib3hbMF0gPiBpbnRlcmltQmJveFsyXSkge1xyXG4gICAgICBpbnRlcmltID0gaW50ZXJpbUJib3hbMF1cclxuICAgICAgaW50ZXJpbUJib3hbMF0gPSBpbnRlcmltQmJveFsyXVxyXG4gICAgICBpbnRlcmltQmJveFsyXSA9IGludGVyaW1cclxuICAgIH1cclxuICAgIGlmIChpbnRlcmltQmJveFsxXSA+IGludGVyaW1CYm94WzNdKSB7XHJcbiAgICAgIGludGVyaW0gPSBpbnRlcmltQmJveFsxXVxyXG4gICAgICBpbnRlcmltQmJveFsxXSA9IGludGVyaW1CYm94WzNdXHJcbiAgICAgIGludGVyaW1CYm94WzNdID0gaW50ZXJpbVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWVyYXJjaHlzID0gW11cclxuXHJcblxyXG4gICAgbGV0IGdlb2pzb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VvanNvbikpXHJcbiAgICBjb25zdCByZWN1cnNpb24gPSAoZGF0YSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGFbaV0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZsaXBlLnggJiYgaSA9PT0gMSkge1xyXG4gICAgICAgICAgICBkYXRhW2ldID0gLWRhdGFbaV1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmxpcGUueSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRhdGFbaV0gPSAtZGF0YVtpXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlY3Vyc2lvbihkYXRhW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJlY3Vyc2lvbihnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LmNvb3JkaW5hdGVzKVxyXG4gICAgfVxyXG4gICAgZ2VvanNvbi5mZWF0dXJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICBsZXQgZmVhdHVyZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpXHJcbiAgICAgIHRoaXMuX3VwZGF0ZUdlb2pzb24oZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcywgeCwgeSlcclxuICAgICAgZmVhdHVyZSA9IHR1cmYudHJhbnNmb3JtUm90YXRlKGZlYXR1cmUsIHRoaXMuYW5nbGUsIHsgcGl2b3Q6IFswLCAwXSB9KTtcclxuICAgICAgbGV0IGRpcmVjdGlvbkRpc3RhbmNlID0gW11cclxuICAgICAgaWYgKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV0ubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5MiA9IFtdXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXS5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFswLCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dW25dWzFdXSlcclxuICAgICAgICAgICAgICBsZXQgcG9pbnQyID0gdHVyZi5wb2ludChbLi4uZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVtuXV0pXHJcbiAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5kaXN0YW5jZShwb2ludDEsIHBvaW50MiwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgICAgICAgIGxldCBhbmdsZTIgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludDEsIHBvaW50Mik7XHJcbiAgICAgICAgICAgICAgYXJyYXkyLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG9yaWdpbjogZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVtuXSxcclxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICBhbmdsZTogYW5nbGUyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFycmF5LnB1c2goYXJyYXkyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlyZWN0aW9uRGlzdGFuY2UucHVzaChhcnJheSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheTIgPSBbXVxyXG4gICAgICAgICAgICBsZXQgcG9pbnQxID0gdHVyZi5wb2ludChbMCwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVsxXV0pXHJcbiAgICAgICAgICAgIGxldCBwb2ludDIgPSB0dXJmLnBvaW50KFsuLi5mZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dXSlcclxuICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5kaXN0YW5jZShwb2ludDEsIHBvaW50MiwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgICAgICBsZXQgYW5nbGUyID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQxLCBwb2ludDIpO1xyXG4gICAgICAgICAgICBhcnJheS5wdXNoKHtcclxuICAgICAgICAgICAgICBvcmlnaW46IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV0sXHJcbiAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgIGFuZ2xlOiBhbmdsZTJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpcmVjdGlvbkRpc3RhbmNlLnB1c2goYXJyYXkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMuZGlyZWN0aW9uRGlzdGFuY2UgPSBkaXJlY3Rpb25EaXN0YW5jZVxyXG5cclxuICAgICAgLy8gdGhpcy5iYm94ID0gWy4uLmludGVyaW1CYm94XVxyXG5cclxuXHJcbiAgICAgIGxldCB3ID0gMy41ICogdGhpcy5zY2FsZS54XHJcbiAgICAgIGxldCBoID0gMy41ICogdGhpcy5zY2FsZS55XHJcbiAgICAgIGxldCB3aCA9IE1hdGguc3FydCgoKHcgLyAyKSAqKiAyKSArICgoaCAvIDIpICoqIDIpKVxyXG4gICAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4oKHcgLyAyKSAvIChoIC8gMikpICogKDE4MCAvIE1hdGguUEkpXHJcbiAgICAgIGlmIChpc05hTihhbmdsZSkpIHtcclxuICAgICAgICBhbmdsZSA9IDBcclxuICAgICAgfVxyXG4gICAgICBsZXQgY29udHJvbFBvaW50cyA9IFtdXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbMF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCBoIC8gMiAqIDEuNSwgMCArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1sxXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAxODAgKyBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1syXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIGggLyAyLCAxODAgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbM10gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3aCwgMTgwIC0gYW5nbGUgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGNvbnRyb2xQb2ludHNbNF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3IC8gMiwgMjcwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb250cm9sUG9pbnRzWzVdID0gW3RoaXMucG9zaXRpb24ubG5nLCB0aGlzLnBvc2l0aW9uLmxhdF1cclxuICAgICAgY29udHJvbFBvaW50c1s2XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHcgLyAyLCA5MCArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1s3XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAzNjAgLSBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgY29udHJvbFBvaW50c1s4XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIGggLyAyLCAwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb250cm9sUG9pbnRzWzldID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgd2gsIDAgKyBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuXHJcbiAgICAgIGxldCBwb2ludHMgPSB0dXJmLnBvaW50cyhjb250cm9sUG9pbnRzKTtcclxuICAgICAgY29udHJvbFBvaW50cyA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29udHJvbFBvaW50cy5wdXNoKHBvaW50cy5mZWF0dXJlc1tpXS5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbnRyb2xQb2ludHMgPSBjb250cm9sUG9pbnRzXHJcblxyXG4gICAgICBpZiAoZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhpZXJhcmNoeSA9IHRoaXMuZ2V0SGllcmFyY2h5UG9seWdvbihmZWF0dXJlLCBpKVxyXG4gICAgICAgICAgYXJyYXkucHVzaChoaWVyYXJjaHkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBoaWVyYXJjaHkgPSB0aGlzLmdldEhpZXJhcmNoeVBvbHlnb24oZmVhdHVyZSlcclxuICAgICAgICBhcnJheS5wdXNoKGhpZXJhcmNoeSlcclxuICAgICAgfVxyXG4gICAgICBoaWVyYXJjaHlzLnB1c2goYXJyYXkpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5oaWVyYXJjaHlzID0gWy4uLmhpZXJhcmNoeXNdXHJcblxyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0IHx8IHRoaXMuX2lzZHJhZykge1xyXG4gICAgICBsZXQgayA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhpZXJhcmNoeXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRoaXMuaGllcmFyY2h5c1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZW50aXR5LnZhbHVlc1trXS5wb2x5Z29uLmhpZXJhcmNoeS5pc0NvbnN0YW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LnZhbHVlc1trXS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGhpZXJhcmNoeSA9IHRoaXMuaGllcmFyY2h5c1tpXVttXVxyXG4gICAgICAgICAgICAgIGxldCBob2xlcyA9IFtdXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoaWVyYXJjaHkuaG9sZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgIGhvbGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IGhpZXJhcmNoeS5ob2xlc1tuXVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uczogaGllcmFyY2h5LnBvc2l0aW9ucyxcclxuICAgICAgICAgICAgICAgIGhvbGVzOiBob2xlc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBrKytcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgayA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhpZXJhcmNoeXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRoaXMuaGllcmFyY2h5c1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmVudGl0eS52YWx1ZXNba10ucG9seWdvbi5oaWVyYXJjaHkuaXNDb25zdGFudCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkudmFsdWVzW2tdLnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGhpZXJhcmNoeSA9IHRoaXMuaGllcmFyY2h5c1tpXVttXVxyXG4gICAgICAgICAgICBsZXQgaG9sZXMgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhpZXJhcmNoeS5ob2xlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGhvbGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiBoaWVyYXJjaHkuaG9sZXNbbl1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiBoaWVyYXJjaHkucG9zaXRpb25zLFxyXG4gICAgICAgICAgICAgIGhvbGVzOiBob2xlc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAhdGhpcy5pc21vdmUpXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBrKytcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICh0aGlzLnRleHRPYmplY3QgJiYgdGhpcy50ZXh0T2JqZWN0Lmdlb2pzb24pIHtcclxuICAgICAgbGV0IHRleHRIaWVyYXJjaHlzID0gW11cclxuICAgICAgbGV0IHRleHRHZW9qc29uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRleHRPYmplY3QuZ2VvanNvbikpXHJcbiAgICAgIGNvbnN0IHJlY3Vyc2lvbjIgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2ldID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0T2JqZWN0LmZsaXBlLnggJiYgaSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGRhdGFbaV0gPSAtZGF0YVtpXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHRPYmplY3QuZmxpcGUueSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0YVtpXSA9IC1kYXRhW2ldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWN1cnNpb24yKGRhdGFbaV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByZWN1cnNpb24odGV4dEdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXMpXHJcbiAgICAgIH1cclxuICAgICAgdGV4dEdlb2pzb24uZmVhdHVyZXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgIGxldCBmZWF0dXJlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSlcclxuICAgICAgICB0aGlzLl91cGRhdGVHZW9qc29uKGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHgsIHkpXHJcbiAgICAgICAgZmVhdHVyZSA9IHR1cmYudHJhbnNmb3JtUm90YXRlKGZlYXR1cmUsIHRoaXMuYW5nbGUsIHsgcGl2b3Q6IFswLCAwXSB9KTtcclxuICAgICAgICBsZXQgZGlyZWN0aW9uRGlzdGFuY2UgPSBbXVxyXG4gICAgICAgIGlmIChmZWF0dXJlLmdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGFycmF5MiA9IFtdXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQxID0gdHVyZi5wb2ludChbMCwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVtuXVsxXV0pXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQyID0gdHVyZi5wb2ludChbLi4uZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVtuXV0pXHJcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSB0dXJmLmRpc3RhbmNlKHBvaW50MSwgcG9pbnQyLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW5nbGUyID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQxLCBwb2ludDIpO1xyXG4gICAgICAgICAgICAgICAgYXJyYXkyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1bbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlOiBhbmdsZTJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBhcnJheS5wdXNoKGFycmF5MilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXJlY3Rpb25EaXN0YW5jZS5wdXNoKGFycmF5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV0ubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICBsZXQgYXJyYXkyID0gW11cclxuICAgICAgICAgICAgICBsZXQgcG9pbnQxID0gdHVyZi5wb2ludChbMCwgZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVttXVsxXV0pXHJcbiAgICAgICAgICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoWy4uLmZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1dKVxyXG4gICAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9IHR1cmYuZGlzdGFuY2UocG9pbnQxLCBwb2ludDIsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICAgICAgICBsZXQgYW5nbGUyID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQxLCBwb2ludDIpO1xyXG4gICAgICAgICAgICAgIGFycmF5LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luOiBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dLFxyXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgYW5nbGU6IGFuZ2xlMlxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlyZWN0aW9uRGlzdGFuY2UucHVzaChhcnJheSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5kaXJlY3Rpb25EaXN0YW5jZSA9IGRpcmVjdGlvbkRpc3RhbmNlXHJcblxyXG4gICAgICAgIC8vIHRoaXMuYmJveCA9IFsuLi5pbnRlcmltQmJveF1cclxuXHJcblxyXG4gICAgICAgIGxldCB3ID0gMy41ICogdGhpcy5zY2FsZS54XHJcbiAgICAgICAgbGV0IGggPSAzLjUgKiB0aGlzLnNjYWxlLnlcclxuICAgICAgICBsZXQgd2ggPSBNYXRoLnNxcnQoKCh3IC8gMikgKiogMikgKyAoKGggLyAyKSAqKiAyKSlcclxuICAgICAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4oKHcgLyAyKSAvIChoIC8gMikpICogKDE4MCAvIE1hdGguUEkpXHJcbiAgICAgICAgaWYgKGlzTmFOKGFuZ2xlKSkge1xyXG4gICAgICAgICAgYW5nbGUgPSAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb250cm9sUG9pbnRzID0gW11cclxuICAgICAgICBjb250cm9sUG9pbnRzWzBdID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgaCAvIDIgKiAxLjUsIDAgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgY29udHJvbFBvaW50c1sxXSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAxODAgKyBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICBjb250cm9sUG9pbnRzWzJdID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgaCAvIDIsIDE4MCArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICBjb250cm9sUG9pbnRzWzNdID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgd2gsIDE4MCAtIGFuZ2xlICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgIGNvbnRyb2xQb2ludHNbNF0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3IC8gMiwgMjcwICsgdGhpcy5vcHRpb25zLmFuZ2xlLCBvcHRpb25zKS5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICAgIGNvbnRyb2xQb2ludHNbNV0gPSBbdGhpcy5wb3NpdGlvbi5sbmcsIHRoaXMucG9zaXRpb24ubGF0XVxyXG4gICAgICAgIGNvbnRyb2xQb2ludHNbNl0gPSB0dXJmLmRlc3RpbmF0aW9uKHBvaW50LCB3IC8gMiwgOTAgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgY29udHJvbFBvaW50c1s3XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAzNjAgLSBhbmdsZSArIHRoaXMub3B0aW9ucy5hbmdsZSwgb3B0aW9ucykuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgICBjb250cm9sUG9pbnRzWzhdID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludCwgaCAvIDIsIDAgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgY29udHJvbFBvaW50c1s5XSA9IHR1cmYuZGVzdGluYXRpb24ocG9pbnQsIHdoLCAwICsgYW5nbGUgKyB0aGlzLm9wdGlvbnMuYW5nbGUsIG9wdGlvbnMpLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcblxyXG4gICAgICAgIGxldCBwb2ludHMgPSB0dXJmLnBvaW50cyhjb250cm9sUG9pbnRzKTtcclxuICAgICAgICBjb250cm9sUG9pbnRzID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29udHJvbFBvaW50cy5wdXNoKHBvaW50cy5mZWF0dXJlc1tpXS5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250cm9sUG9pbnRzID0gY29udHJvbFBvaW50c1xyXG5cclxuICAgICAgICBpZiAoZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBoaWVyYXJjaHkgPSB0aGlzLmdldEhpZXJhcmNoeVBvbHlnb24oZmVhdHVyZSwgaSlcclxuICAgICAgICAgICAgYXJyYXkucHVzaChoaWVyYXJjaHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhpZXJhcmNoeSA9IHRoaXMuZ2V0SGllcmFyY2h5UG9seWdvbihmZWF0dXJlKVxyXG4gICAgICAgICAgYXJyYXkucHVzaChoaWVyYXJjaHkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRleHRIaWVyYXJjaHlzLnB1c2goYXJyYXkpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudGV4dE9iamVjdC5oaWVyYXJjaHlzID0gWy4uLnRleHRIaWVyYXJjaHlzXVxyXG5cclxuICAgICAgLy8gaWYgKHRoaXMuX0RpYWxvZ09iamVjdCB8fCB0aGlzLl9pc2RyYWcpIHtcclxuICAgICAgLy8gICBsZXQgayA9IDBcclxuICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGV4dE9iamVjdC5oaWVyYXJjaHlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRoaXMudGV4dE9iamVjdC5oaWVyYXJjaHlzW2ldLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmVudGl0eS52YWx1ZXNba10ucG9seWdvbi5oaWVyYXJjaHkuaXNDb25zdGFudCkge1xyXG4gICAgICAvLyAgICAgICAgIHRoaXMuZW50aXR5LnZhbHVlc1trXS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgIC8vICAgICAgICAgICBsZXQgaGllcmFyY2h5ID0gdGhpcy50ZXh0T2JqZWN0LmhpZXJhcmNoeXNbaV1bbV1cclxuICAgICAgLy8gICAgICAgICAgIGxldCBob2xlcyA9IFtdXHJcbiAgICAgIC8vICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhpZXJhcmNoeS5ob2xlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAvLyAgICAgICAgICAgICBob2xlcy5wdXNoKHtcclxuICAgICAgLy8gICAgICAgICAgICAgICBwb3NpdGlvbnM6IGhpZXJhcmNoeS5ob2xlc1tuXVxyXG4gICAgICAvLyAgICAgICAgICAgICB9KVxyXG4gICAgICAvLyAgICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgICAgICAgcG9zaXRpb25zOiBoaWVyYXJjaHkucG9zaXRpb25zLFxyXG4gICAgICAvLyAgICAgICAgICAgICBob2xlczogaG9sZXNcclxuICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgLy8gICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBrKytcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgbGV0IGsgPSAwXHJcbiAgICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRleHRPYmplY3QuaGllcmFyY2h5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0aGlzLnRleHRPYmplY3QuaGllcmFyY2h5c1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAvLyAgICAgICAvLyBpZiAoIXRoaXMuZW50aXR5LnZhbHVlc1trXS5wb2x5Z29uLmhpZXJhcmNoeS5pc0NvbnN0YW50KSB7XHJcbiAgICAgIC8vICAgICAgIHRoaXMuZW50aXR5LnZhbHVlc1trXS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgIC8vICAgICAgICAgbGV0IGhpZXJhcmNoeSA9IHRoaXMudGV4dE9iamVjdC5oaWVyYXJjaHlzW2ldW21dXHJcbiAgICAgIC8vICAgICAgICAgbGV0IGhvbGVzID0gW11cclxuICAgICAgLy8gICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhpZXJhcmNoeS5ob2xlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAvLyAgICAgICAgICAgaG9sZXMucHVzaCh7XHJcbiAgICAgIC8vICAgICAgICAgICAgIHBvc2l0aW9uczogaGllcmFyY2h5LmhvbGVzW25dXHJcbiAgICAgIC8vICAgICAgICAgICB9KVxyXG4gICAgICAvLyAgICAgICAgIH1cclxuICAgICAgLy8gICAgICAgICByZXR1cm4ge1xyXG4gICAgICAvLyAgICAgICAgICAgcG9zaXRpb25zOiBoaWVyYXJjaHkucG9zaXRpb25zLFxyXG4gICAgICAvLyAgICAgICAgICAgaG9sZXM6IGhvbGVzXHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICB9LCAhdGhpcy5pc21vdmUpXHJcbiAgICAgIC8vICAgICAgIC8vIH1cclxuICAgICAgLy8gICAgICAgaysrXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdGV4dFBvc1BpY2soKSB7XHJcbiAgICBsZXQgRHJhdyA9IG5ldyBEcmF3UG9pbnQodGhpcy5zZGspXHJcbiAgICBEcmF3LnN0YXJ0KGFzeW5jIChhLCBwb3NpdGlvbikgPT4ge1xyXG4gICAgICBsZXQgcG9pbnQxID0gdHVyZi5wb2ludChbdGhpcy5wb3NpdGlvbi5sbmcsIHRoaXMucG9zaXRpb24ubGF0XSlcclxuICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgbGV0IGRpc3RhbmNlID0gdHVyZi5kaXN0YW5jZShwb2ludDEsIHBvaW50MiwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgYW5nbGUgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludDEsIHBvaW50Mik7XHJcbiAgICAgIHRoaXMuX3RleHRUb0NlbnRlciA9IHtcclxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXHJcbiAgICAgICAgYW5nbGU6IGFuZ2xlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLnRleHQucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICBpZiAodGhpcy50ZXh0KSB7XHJcbiAgICAgICAgdGhpcy50ZXh0LnBvc2l0aW9uID0gW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0LCBwb3NpdGlvbi5hbHRdXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgR3JvdW5kU3ZnLmNyZWF0ZVRleHQodGhpcylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWQoY2FsbGJhY2spIHtcclxuICAgIGlmICh0aGlzLiNsb2FkZWQpIHtcclxuICAgICAgY2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLiNsb2FkRXZlbnQgPSBjYWxsYmFja1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge31cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFnKGZhbHNlKVxyXG4gICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy50ZXh0ICYmIHRoaXMudGV4dC5yZW1vdmUoKVxyXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuZW50aXR5LnZhbHVlcy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkudmFsdWVzW2ldKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXVxyXG4gICAgICAgIC52YWx1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdsaW5rX2FkZCdcclxuICAgICAgICApWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICApWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgLy8gdmFyIHVlID0gVUUuZ2V0RWRpdG9yKCdhcHAnKTtcclxuICAgIHJpY2hUZXh0Lm9wZW4oXHJcbiAgICAgIHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnRcclxuICAgIClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IGNvbnRlbnQgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24odikge1xyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5pc21vdmUgPSB0cnVlXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHt9XHJcbiAgICAgIHBvc2l0aW9uLmxuZyA9IHYucG9zaXRpb24ubG5nXHJcbiAgICAgIHBvc2l0aW9uLmxhdCA9IHYucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNtb3ZlID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZSgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICBwb3NpdGlvbi5hbHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQocG9zaXRpb24pXHJcbiAgICAgIH1cclxuICAgICAgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcgKyBwb3NpdGlvbi5sbmdcclxuICAgICAgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQgKyBwb3NpdGlvbi5sYXRcclxuICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRyb2xQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtsbmc6IHRoaXMuY29udHJvbFBvaW50c1tpXVswXSwgbGF0OiB0aGlzLmNvbnRyb2xQb2ludHNbaV1bMV19KVxyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmNvbnRyb2xQb2ludHNbaV1bMF0sIHRoaXMuY29udHJvbFBvaW50c1tpXVsxXSwgaGVpZ2h0KVxyXG4gICAgICAgIGFycmF5LnB1c2goY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueilcclxuICAgICAgfVxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKGFycmF5KVxyXG5cclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKEJvdW5kaW5nU3BoZXJlLCB7XHJcbiAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtNjAuMCksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyb3VuZFN2ZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBbURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFqQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0RBO0FBekRBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFnREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFDQTtBQUFBO0FBQUE7QUEyQ0E7QUE1Q0E7QUFBQTtBQUFBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFnQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUF4RUE7QUF5RUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUEzUEE7QUFBQTtBQUFBO0FBQUE7QUE2UEE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBbUtBO0FBQUE7QUFqS0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUlBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBYkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQUFBO0FBQUE7QUF1QkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFBQTtBQUFBO0FBa0JBO0FBbkJBO0FBQUE7QUFBQTtBQW9CQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFBQTtBQUFBO0FBa0JBO0FBbkJBO0FBQUE7QUFBQTtBQW9CQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdCQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQW5EQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBL3ZDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQTVCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxekNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/GroundSvg/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Heatmap/index.js": /*!***************************************!*\ !*** ./src/Obj/Base/Heatmap/index.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return HeatMap; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n// import Tools from '../../Tools'\n\nvar HeatMap = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 热力图\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.gradient {object} 渐变色\r\n * @param {Array.} options.positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param {Array.} options.data 热力图数据 [{lon,lat,value},...]\r\n * */\n function HeatMap(sdk, options) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, HeatMap);\n _this = _callSuper(this, HeatMap, [sdk, options]);\n _this.viewer = sdk.viewer;\n _this.options.show = options.show || options.show === false ? options.show : true;\n _this.options.positions = _this.options.positions || [];\n _this.options.data = _this.options.data;\n _this.options.gradient = options.gradient || {\n '0.9': 'red',\n '0.8': 'orange',\n '0.7': 'yellow',\n '0.5': 'blue',\n '0.3': 'green'\n };\n _this.entity = {\n id: _this.options.id\n };\n if (!_this.options.positions || _this.options.positions.length < 3) {\n _this._error = '最少需要三个坐标!';\n console.warn(_this._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n var array = [];\n for (var i = 0; i < _this.options.positions.length; i++) {\n array.push([_this.options.positions[i].lng, _this.options.positions[i].lat]);\n }\n var line = turf.lineString(array);\n var bbox = turf.bbox(line);\n _this.bounds = {\n west: bbox[0],\n south: bbox[1],\n east: bbox[2],\n north: bbox[3]\n };\n HeatMap.add(_this);\n }\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(HeatMap, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(HeatMap, [{\n key: \"remove\",\n value: function remove() {\n this.viewer.entities.remove(this.entity);\n this.entity = null;\n }\n }, {\n key: \"createHeatMap\",\n value: function createHeatMap(max, data) {\n var heatMap = CesiumHeatmap.create(this.bounds,\n // 矩形坐标\n {\n // heatmap相应参数\n backgroundColor: \"rgba(0,0,0,0)\",\n radius: 20,\n maxOpacity: .5,\n minOpacity: 0,\n blur: .75,\n gradient: this.options.gradient\n });\n heatMap.setWGS84Data(0, max, data);\n return heatMap;\n }\n }], [{\n key: \"add\",\n value: function add(that) {\n var arr = [];\n that.options.positions.forEach(function (item) {\n arr.push(item.lng, item.lat);\n });\n var data = HeatMap.getData(that);\n var heatMap = that.createHeatMap(data.max, data.data);\n that.entity = new Cesium.Entity({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(arr)),\n material: heatMap._heatmap._renderer.canvas,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n that.viewer.entities.add(that.entity);\n }\n }, {\n key: \"getData\",\n value: function getData(that) {\n var len = 1000;\n var data = [];\n if (that.options.data && Array.isArray(that.options.data)) {\n var max = that.options.data[0].value;\n for (var i = 0; i < that.options.data.length; i++) {\n var val = that.options.data[i].value;\n max = Math.max(max, val);\n data.push({\n x: that.options.data[i].lng,\n y: that.options.data[i].lat,\n value: val\n });\n }\n return {\n max: max,\n data: data\n };\n } else {\n //构建一些随机数据点\n var _max = 0;\n while (len--) {\n var _val = Math.floor(Math.random() * 1000);\n _max = Math.max(_max, _val);\n var point = {\n x: Math.random() * (that.bounds.east - that.bounds.west) + that.bounds.west,\n y: Math.random() * (that.bounds.north - that.bounds.south) + that.bounds.south,\n value: _val\n };\n data.push(point);\n }\n return {\n max: _max,\n data: data\n };\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvSGVhdG1hcC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9IZWF0bWFwL2luZGV4LmpzPzlhNzIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IFRvb2xzIGZyb20gJy4uLy4uL1Rvb2xzJ1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYXRNYXAgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOeDreWKm+WbvlxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOWUr+S4gOagh+ivhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZ3JhZGllbnQge29iamVjdH0g5riQ5Y+Y6ImyXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0ge0FycmF5LjxvYmplY3Q+fSBvcHRpb25zLmRhdGEg54Ot5Yqb5Zu+5pWw5o2uIFt7bG9uLGxhdCx2YWx1ZX0sLi4uXVxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zKSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXJcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuZGF0YSA9IHRoaXMub3B0aW9ucy5kYXRhXHJcbiAgICB0aGlzLm9wdGlvbnMuZ3JhZGllbnQgPSBvcHRpb25zLmdyYWRpZW50IHx8IHtcclxuICAgICAgJzAuOSc6ICdyZWQnLFxyXG4gICAgICAnMC44JzogJ29yYW5nZScsXHJcbiAgICAgICcwLjcnOiAneWVsbG93JyxcclxuICAgICAgJzAuNSc6ICdibHVlJyxcclxuICAgICAgJzAuMyc6ICdncmVlbidcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5ID0ge1xyXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wb3NpdGlvbnMgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHRoaXMuX2Vycm9yID0gJ+acgOWwkemcgOimgeS4ieS4quWdkOagh++8gSdcclxuICAgICAgY29uc29sZS53YXJuKHRoaXMuX2Vycm9yKVxyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLl9lcnJvcixcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyYXkucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhhcnJheSk7XHJcbiAgICAgIGxldCBiYm94ID0gdHVyZi5iYm94KGxpbmUpO1xyXG4gICAgICB0aGlzLmJvdW5kcyA9IHtcclxuICAgICAgICB3ZXN0OiBiYm94WzBdLCBzb3V0aDogYmJveFsxXSwgZWFzdDogYmJveFsyXSwgbm9ydGg6IGJib3hbM11cclxuICAgICAgfVxyXG4gICAgICBIZWF0TWFwLmFkZCh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZCh0aGF0KSB7XHJcbiAgICBsZXQgYXJyID0gW11cclxuICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgYXJyLnB1c2goaXRlbS5sbmcsIGl0ZW0ubGF0KVxyXG4gICAgfSlcclxuICAgIGxldCBkYXRhID0gSGVhdE1hcC5nZXREYXRhKHRoYXQpXHJcbiAgICBsZXQgaGVhdE1hcCA9IHRoYXQuY3JlYXRlSGVhdE1hcChkYXRhLm1heCwgZGF0YS5kYXRhKVxyXG4gICAgdGhhdC5lbnRpdHkgPSBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoXHJcbiAgICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGFycilcclxuICAgICAgICApLFxyXG4gICAgICAgIG1hdGVyaWFsOiBoZWF0TWFwLl9oZWF0bWFwLl9yZW5kZXJlci5jYW52YXMsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGF0LnNkay5fZW50aXR5WkluZGV4ICsrXHJcbiAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQodGhhdC5lbnRpdHkpXHJcbiAgfVxyXG5cclxuICByZW1vdmUoKSB7XHJcbiAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREYXRhKHRoYXQpIHtcclxuICAgIGxldCBsZW4gPSAxMDAwXHJcbiAgICBsZXQgZGF0YSA9IFtdXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLmRhdGEgJiYgQXJyYXkuaXNBcnJheSh0aGF0Lm9wdGlvbnMuZGF0YSkpIHtcclxuICAgICAgbGV0IG1heCA9IHRoYXQub3B0aW9ucy5kYXRhWzBdLnZhbHVlXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLmRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgdmFsID0gdGhhdC5vcHRpb25zLmRhdGFbaV0udmFsdWVcclxuICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIHZhbClcclxuICAgICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICAgeDogdGhhdC5vcHRpb25zLmRhdGFbaV0ubG5nLFxyXG4gICAgICAgICAgeTogdGhhdC5vcHRpb25zLmRhdGFbaV0ubGF0LFxyXG4gICAgICAgICAgdmFsdWU6IHZhbFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHsgbWF4OiBtYXgsIGRhdGE6IGRhdGEgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8v5p6E5bu65LiA5Lqb6ZqP5py65pWw5o2u54K5XHJcbiAgICAgIGxldCBtYXggPSAwXHJcbiAgICAgIHdoaWxlIChsZW4tLSkge1xyXG4gICAgICAgIGxldCB2YWwgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKVxyXG4gICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgdmFsKVxyXG4gICAgICAgIGxldCBwb2ludCA9IHtcclxuICAgICAgICAgIHg6IE1hdGgucmFuZG9tKCkgKiAodGhhdC5ib3VuZHMuZWFzdCAtIHRoYXQuYm91bmRzLndlc3QpICsgdGhhdC5ib3VuZHMud2VzdCxcclxuICAgICAgICAgIHk6IE1hdGgucmFuZG9tKCkgKiAodGhhdC5ib3VuZHMubm9ydGggLSB0aGF0LmJvdW5kcy5zb3V0aCkgKyB0aGF0LmJvdW5kcy5zb3V0aCxcclxuICAgICAgICAgIHZhbHVlOiB2YWxcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YS5wdXNoKHBvaW50KVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IG1heDogbWF4LCBkYXRhOiBkYXRhIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUhlYXRNYXAobWF4LCBkYXRhKSB7XHJcbiAgICBsZXQgaGVhdE1hcCA9IENlc2l1bUhlYXRtYXAuY3JlYXRlKFxyXG4gICAgICB0aGlzLmJvdW5kcywgLy8g55+p5b2i5Z2Q5qCHXHJcbiAgICAgIHsgLy8gaGVhdG1hcOebuOW6lOWPguaVsFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDAsMCwwLDApXCIsXHJcbiAgICAgICAgcmFkaXVzOiAyMCxcclxuICAgICAgICBtYXhPcGFjaXR5OiAuNSxcclxuICAgICAgICBtaW5PcGFjaXR5OiAwLFxyXG4gICAgICAgIGJsdXI6IC43NSxcclxuICAgICAgICBncmFkaWVudDogdGhpcy5vcHRpb25zLmdyYWRpZW50XHJcbiAgICAgIH1cclxuICAgIClcclxuICAgIGhlYXRNYXAuc2V0V0dTODREYXRhKDAsIG1heCwgZGF0YSk7XHJcbiAgICByZXR1cm4gaGVhdE1hcFxyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFvQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXpFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/Heatmap/index.js\n"); /***/ }), /***/ "./src/Obj/Base/KML/index.js": /*!***********************************!*\ !*** ./src/Obj/Base/KML/index.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_5___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * @name: kml\r\n * @author: Administrator\r\n * @date: 2023-07-19 09:25\r\n * @description:kml\r\n * @update: 2023-07-19 09:25\r\n */\n\n\nvar KML = /*#__PURE__*/function (_Base) {\n function KML(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, KML);\n _this = _callSuper(this, KML, [sdk, options]);\n _this.source = new Cesium.CustomDataSource(_this.options.id);\n // this.source = new Cesium.CompositeEntityCollection([])\n _this.detail = [];\n // this.load()\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(KML, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(KML, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(val) {\n if (this.source) {\n this.source.show = val;\n this.options.show = val;\n }\n }\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n var _this$options$show;\n this.options.id = this.options.id || Cesium.createGuid();\n this.options.url = this.options.url || '';\n this.options.show = (_this$options$show = this.options.show) !== null && _this$options$show !== void 0 ? _this$options$show : true;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var duration,\n orientation,\n lng,\n lat,\n alt,\n destination,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n duration = _args.length > 0 && _args[0] !== undefined ? _args[0] : 3;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_9__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_9__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_9__[\"closeViewFollow\"])(this.sdk);\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation,\n duration: duration\n });\n } else {\n if (this.source) this.viewer.flyTo(this.source, {\n duration: duration\n });\n }\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n _superPropGet(KML, \"remove\", this, 3)([]);\n this.viewer.dataSources.remove(this.source);\n this.source = null;\n }\n }, {\n key: \"on\",\n value: function () {\n var _on = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var _this2 = this;\n var source;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n this.show = this.options.show;\n _context2.next = 3;\n return Cesium.KmlDataSource.load(this.options.url, {\n camera: this.viewer.scene.camera,\n canvas: this.viewer.scene.canvas\n // clampToGround: true\n });\n case 3:\n source = _context2.sent;\n source.entities.values.forEach(function (entity, index) {\n _this2.detail.push({\n name: entity.name,\n id: entity.id\n });\n if (entity.label) {\n var scale = 1;\n if (entity.billboard) {\n scale = entity.billboard.scale._value;\n }\n entity.label.pixelOffset = new Cesium.Cartesian2(0, -32 * scale - 15);\n entity.label.horizontalOrigin = Cesium.HorizontalOrigin.CENTER;\n entity.label.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n }\n if (entity.polygon) {\n //polygon需要重写,不然无法贴地\n var polygon = {\n hierarchy: entity.polygon.hierarchy.getValue().positions,\n material: entity.polygon.material,\n classificationType: Cesium.ClassificationType.BOTH\n };\n //拆分边线,因为边线不能贴地,需要改为polyline,但是有可能存在entity本身就有polyline,所以需要单独创建一个entity,\n if (entity.polygon.outline.getValue()) {\n var positions = entity.polygon.hierarchy.getValue().positions;\n var entity2 = new Cesium.Entity({\n id: _this2.getOutlineId(entity.id),\n polyline: {\n positions: positions,\n width: entity.polygon.outlineWidth.getValue(),\n material: entity.polygon.outlineColor.getValue(),\n clampToGround: true,\n zIndex: _this2.sdk._entityZIndex\n }\n });\n _this2.source.entities.add(entity2);\n }\n entity.polygon = polygon;\n }\n if (entity.billboard) {\n entity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n }\n if (entity.polyline) {\n entity.polyline = {\n positions: entity.polyline.positions.getValue(),\n material: entity.polyline.material,\n clampToGround: true,\n width: entity.polyline.width ? entity.polyline.width.getValue() : 1\n };\n //这里在设置贴地的时候,需要单独创建polyline,部分kml的polyline设置贴地,会导致引擎崩溃,原因暂未查询到\n }\n entity.show = true;\n _this2.source.entities.add(entity);\n });\n _context2.next = 7;\n return this.viewer.dataSources.add(this.source);\n case 7:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function on() {\n return _on.apply(this, arguments);\n }\n return on;\n }()\n }, {\n key: \"getOutlineId\",\n value: function getOutlineId(id) {\n return [id, 'outline'].join('_');\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (KML);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvS01ML2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0tNTC9pbmRleC5qcz8xZDM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbmFtZToga21sXHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMDctMTkgMDk6MjVcclxuICogQGRlc2NyaXB0aW9u77yaa21sXHJcbiAqIEB1cGRhdGU6IDIwMjMtMDctMTkgMDk6MjVcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2luZGV4J1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3d9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBLTUwgZXh0ZW5kcyBCYXNlIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5zb3VyY2UgPSBuZXcgQ2VzaXVtLkN1c3RvbURhdGFTb3VyY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgLy8gdGhpcy5zb3VyY2UgPSBuZXcgQ2VzaXVtLkNvbXBvc2l0ZUVudGl0eUNvbGxlY3Rpb24oW10pXHJcbiAgICB0aGlzLmRldGFpbCA9IFtdXHJcbiAgICAvLyB0aGlzLmxvYWQoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHZhbCkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlKSB7XHJcbiAgICAgIHRoaXMuc291cmNlLnNob3cgPSB2YWxcclxuICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2YWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSgpIHtcclxuICAgIHRoaXMub3B0aW9ucy5pZCA9IHRoaXMub3B0aW9ucy5pZCB8fCBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCAnJ1xyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSB0aGlzLm9wdGlvbnMuc2hvdyA/PyB0cnVlXHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhkdXJhdGlvbiA9IDMpIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvbixcclxuICAgICAgICBkdXJhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSkgdGhpcy52aWV3ZXIuZmx5VG8odGhpcy5zb3VyY2UsIHsgZHVyYXRpb24gfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHN1cGVyLnJlbW92ZSgpXHJcbiAgICB0aGlzLnZpZXdlci5kYXRhU291cmNlcy5yZW1vdmUodGhpcy5zb3VyY2UpXHJcbiAgICB0aGlzLnNvdXJjZSA9IG51bGxcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uKCkge1xyXG4gICAgdGhpcy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgIGxldCBzb3VyY2UgPSBhd2FpdCBDZXNpdW0uS21sRGF0YVNvdXJjZS5sb2FkKHRoaXMub3B0aW9ucy51cmwsIHtcclxuICAgICAgY2FtZXJhOiB0aGlzLnZpZXdlci5zY2VuZS5jYW1lcmEsXHJcbiAgICAgIGNhbnZhczogdGhpcy52aWV3ZXIuc2NlbmUuY2FudmFzXHJcbiAgICAgIC8vIGNsYW1wVG9Hcm91bmQ6IHRydWVcclxuICAgIH0pXHJcbiAgICBzb3VyY2UuZW50aXRpZXMudmFsdWVzLmZvckVhY2goKGVudGl0eSwgaW5kZXgpID0+IHtcclxuICAgICAgdGhpcy5kZXRhaWwucHVzaCh7IG5hbWU6IGVudGl0eS5uYW1lLCBpZDogZW50aXR5LmlkIH0pXHJcbiAgICAgIGlmIChlbnRpdHkubGFiZWwpIHtcclxuICAgICAgICBsZXQgc2NhbGUgPSAxXHJcbiAgICAgICAgaWYgKGVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICAgIHNjYWxlID0gZW50aXR5LmJpbGxib2FyZC5zY2FsZS5fdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZW50aXR5LmxhYmVsLnBpeGVsT2Zmc2V0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC0zMiAqIHNjYWxlIC0gMTUpXHJcbiAgICAgICAgZW50aXR5LmxhYmVsLmhvcml6b250YWxPcmlnaW4gPSBDZXNpdW0uSG9yaXpvbnRhbE9yaWdpbi5DRU5URVJcclxuICAgICAgICBlbnRpdHkubGFiZWwuZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVudGl0eS5wb2x5Z29uKSB7XHJcbiAgICAgICAgLy9wb2x5Z29u6ZyA6KaB6YeN5YaZ77yM5LiN54S25peg5rOV6LS05ZywXHJcbiAgICAgICAgbGV0IHBvbHlnb24gPSB7XHJcbiAgICAgICAgICBoaWVyYXJjaHk6IGVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeS5nZXRWYWx1ZSgpLnBvc2l0aW9ucyxcclxuICAgICAgICAgIG1hdGVyaWFsOiBlbnRpdHkucG9seWdvbi5tYXRlcmlhbCxcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uVHlwZTogQ2VzaXVtLkNsYXNzaWZpY2F0aW9uVHlwZS5CT1RIXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5ouG5YiG6L6557q/77yM5Zug5Li66L6557q/5LiN6IO96LS05ZywLOmcgOimgeaUueS4unBvbHlsaW5l77yM5L2G5piv5pyJ5Y+v6IO95a2Y5ZyoZW50aXR55pys6Lqr5bCx5pyJcG9seWxpbmXvvIzmiYDku6XpnIDopoHljZXni6zliJvlu7rkuIDkuKplbnRpdHnvvIxcclxuICAgICAgICBpZiAoZW50aXR5LnBvbHlnb24ub3V0bGluZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gZW50aXR5LnBvbHlnb24uaGllcmFyY2h5LmdldFZhbHVlKCkucG9zaXRpb25zXHJcbiAgICAgICAgICBsZXQgZW50aXR5MiA9IG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0T3V0bGluZUlkKGVudGl0eS5pZCksXHJcbiAgICAgICAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBlbnRpdHkucG9seWdvbi5vdXRsaW5lV2lkdGguZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICBtYXRlcmlhbDogZW50aXR5LnBvbHlnb24ub3V0bGluZUNvbG9yLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICB6SW5kZXg6IHRoaXMuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuc291cmNlLmVudGl0aWVzLmFkZChlbnRpdHkyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbnRpdHkucG9seWdvbiA9IHBvbHlnb25cclxuICAgICAgfVxyXG4gICAgICBpZiAoZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICAgIGVudGl0eS5iaWxsYm9hcmQuaGVpZ2h0UmVmZXJlbmNlID1cclxuICAgICAgICAgIENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5EXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVudGl0eS5wb2x5bGluZSkge1xyXG4gICAgICAgIGVudGl0eS5wb2x5bGluZSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IGVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCxcclxuICAgICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogZW50aXR5LnBvbHlsaW5lLndpZHRoID8gZW50aXR5LnBvbHlsaW5lLndpZHRoLmdldFZhbHVlKCkgOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v6L+Z6YeM5Zyo6K6+572u6LS05Zyw55qE5pe25YCZ77yM6ZyA6KaB5Y2V54us5Yib5bu6cG9seWxpbmXvvIzpg6jliIZrbWznmoRwb2x5bGluZeiuvue9rui0tOWcsO+8jOS8muWvvOiHtOW8leaTjuW0qea6g++8jOWOn+WboOaaguacquafpeivouWIsFxyXG4gICAgICB9XHJcbiAgICAgIGVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNvdXJjZS5lbnRpdGllcy5hZGQoZW50aXR5KVxyXG4gICAgfSlcclxuICAgIGF3YWl0IHRoaXMudmlld2VyLmRhdGFTb3VyY2VzLmFkZCh0aGlzLnNvdXJjZSlcclxuICB9XHJcblxyXG4gIGdldE91dGxpbmVJZChpZCkge1xyXG4gICAgcmV0dXJuIFtpZCwgJ291dGxpbmUnXS5qb2luKCdfJylcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEtNTFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBM0RBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOERBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/KML/index.js\n"); /***/ }), /***/ "./src/Obj/Base/LabelObject/index.js": /*!*******************************************!*\ !*** ./src/Obj/Base/LabelObject/index.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/cluster/cluster */ \"./src/Global/cluster/cluster.js\");\n\n\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 标注\r\n */\n\n\n\n\n\nvar LabelObject = /*#__PURE__*/function (_Base) {\n function LabelObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var model = arguments.length > 2 ? arguments[2] : undefined;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, LabelObject);\n _this2 = _callSuper(this, LabelObject, [sdk, options]);\n _this2.model = model;\n _this2._canvas = document.createElement('canvas');\n _this2._canvas2 = document.createElement('canvas');\n _this2.options.near = options.near || options.near === 0 ? options.near : 2000;\n _this2.options.far = options.far || options.far === 0 ? options.far : 100000;\n _this2.options.scaleByDistance = options.scaleByDistance || false;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.text = options.text;\n var textArray = _this2.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 40) {\n textArray[i] = textArray[i].slice(0, 40 - textArray[i].length);\n }\n }\n if (textArray.length > 10) {\n textArray.splice(10 - textArray.length);\n }\n _this2.options.text = textArray.join('\\n');\n _this2.options.fontFamily = options.fontFamily || 0;\n _this2.font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_12__[\"getFontFamily\"])(_this2.options.fontFamily) || 'SimHei';\n _this2.options.fontSize = options.fontSize || 20;\n _this2.options.lineWidth = options.lineWidth || 4;\n _this2.options.lineColor = options.lineColor || '#00ffff80';\n _this2.options.color = options.color || '#ffffff';\n _this2.options.ground = options.ground || options.ground === false ? options.ground : true;\n _this2.options.pixelOffset = options.pixelOffset || options.pixelOffset === 0 ? options.pixelOffset : 20;\n _this2.options.backgroundColor = options.backgroundColor || ['#00ffff80', '#00ffff80'];\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_this2.sdk);\n _this2.entity;\n _this2.create(_this2.options.position);\n _this2.picking = true;\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(LabelObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(LabelObject, [{\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this, id, oldEntity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n if (!(!this.options.position[2] && this.options.position[2] !== 0)) {\n _context.next = 5;\n break;\n }\n _context.next = 4;\n return this.getClampToHeight({\n lng: this.options.position[0],\n lat: this.options.position[1]\n });\n case 4:\n this.options.position[2] = _context.sent;\n case 5:\n this.originalOptions = _copyObj(this.options);\n id = this.options.id + '-label';\n oldEntity = this.sdk.viewer.entities.getById(id);\n if (oldEntity) {\n this.sdk.viewer.entities.remove(oldEntity);\n }\n this.entity = this.sdk.viewer.entities.add({\n show: this.options.show,\n id: this.options.id + '-label',\n position: new Cesium.CallbackProperty(function () {\n if (_this.model) {\n // return Cesium.Cartesian3.fromDegrees(_this.options.position[0], _this.options.position[1], _this.model.originalBoundingSphereRadius*2*_this.model.customScale.z + _this.options.position[2])\n if (_this.model.isMove) {\n var scale = _this.model.customScale.x;\n if (_this.model.customScale.y > scale) {\n scale = _this.model.customScale.y;\n }\n if (_this.model.customScale.z > scale) {\n scale = _this.model.customScale.z;\n }\n var point1 = Cesium.Cartesian3.fromDegrees(_this.options.position[0], _this.options.position[1], _this.options.position[2] + (_this.model.originalBoundingSphereRadius || 1) * 2 * (scale || 0.01));\n // 点2的位置,也使用经纬高表示\n var point2 = Cesium.Cartesian3.fromDegrees(_this.options.position[0], _this.options.position[1], _this.options.position[2] - (_this.model.originalBoundingSphereRadius || 1) * 2 * (scale || 0.01));\n var direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n var c = Cesium.Cartesian3.normalize(direction, direction);\n var ray = new Cesium.Ray(point1, c);\n var pickedObjects = _this.viewer.scene.drillPickFromRay(ray, 5);\n for (var i = 0; i < pickedObjects.length; i++) {\n if (pickedObjects[i].object && pickedObjects[i].object.id && pickedObjects[i].object.id === _this.model.id) {\n var pos84 = _this.cartesian3Towgs84(pickedObjects[i].position, _this.sdk.viewer);\n _this.options.position[0] = pos84.lng;\n _this.options.position[1] = pos84.lat;\n _this.options.position[2] = pos84.alt;\n break;\n }\n }\n }\n return Cesium.Cartesian3.fromDegrees(_this.options.position[0], _this.options.position[1], _this.options.position[2]);\n } else {\n var _Cesium$Cartesian;\n return (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(_this.options.position));\n }\n }, false),\n billboard: {\n image: this.getcanvas(),\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_11__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false),\n scaleByDistance: this.options.scaleByDistance ? new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0) : undefined,\n pixelOffsetScaleByDistance: this.options.scaleByDistance ? new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0) : undefined\n }\n // label: {\n // show: this.options.show,\n // text: new Cesium.CallbackProperty(function () {\n // return _this.options.text\n // }, false),\n // font: this.options.fontSize + \"px Helvetica\",\n // fillColor: Cesium.Color.fromCssColorString(this.options.color),\n // pixelOffset: new Cesium.Cartesian2(0, -this.options.pixelOffset),\n // outlineColor: Cesium.Color.BLACK,\n // backgroundColor: Cesium.Color.fromCssColorString('#42c6ef'),\n // backgroundPadding: new Cesium.Cartesian2(12, 12),\n // showBackground: true,\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // outlineWidth: 1,\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // },\n });\n case 10:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function create() {\n return _create.apply(this, arguments);\n }\n return create;\n }()\n }, {\n key: \"position\",\n get: function get() {\n return this.options.position;\n },\n set: function set(v) {\n var _this3 = this;\n // console.log(v)\n this.options.position = v;\n if (!v[2] && v[2] !== 0) {\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(this.sdk.viewer.entities.values);\n this.getClampToHeight({\n lng: v[0],\n lat: v[1]\n }, objectsToExclude).then(function (height) {\n v[2] = height;\n _this3.options.position = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(v);\n });\n // let point1 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], 0);\n // let point2 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], 10000000);\n // let direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n // let c = Cesium.Cartesian3.normalize(direction, direction);\n // let ray = new Cesium.Ray(point1, c);\n // let r = {}\n // let pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n // for (let i = 0; i < pickedObjects.length; i++) {\n // if (pickedObjects[i].position) {\n // r = pickedObjects[i]\n // break\n // }\n // }\n // if (r && r.position) {\n // this.options.position[2] = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt\n // }\n // else {\n // try {\n // let promise = Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(this.options.position[0], this.options.position[1])]);\n // promise.then((p) => {\n // this.options.position[2] = p[0].height\n // }).catch((e)=>{\n // })\n // } catch (error) {\n // }\n // }\n } else {\n this.options.position = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(v);\n }\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.show = v;\n if (!this.entity) {\n return;\n }\n this.entity.show = v;\n if (this.model) {\n // return Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], this.model.originalBoundingSphereRadius*2*this.model.customScale.z + this.options.position[2])\n var scale = this.model.customScale.x;\n if (this.model.customScale.y > scale) {\n scale = this.model.customScale.y;\n }\n if (this.model.customScale.z > scale) {\n scale = this.model.customScale.z;\n }\n var point1 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], this.options.position[2] + (this.model.originalBoundingSphereRadius || 1) * 2 * (scale || 0.01));\n // 点2的位置,也使用经纬高表示\n var point2 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], this.options.position[2] - (this.model.originalBoundingSphereRadius || 1) * 2 * (scale || 0.01));\n var direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n var c = Cesium.Cartesian3.normalize(direction, direction);\n var ray = new Cesium.Ray(point1, c);\n var pickedObjects = this.viewer.scene.drillPickFromRay(ray, 5);\n for (var i = 0; i < pickedObjects.length; i++) {\n if (pickedObjects[i].object && pickedObjects[i].object.id && pickedObjects[i].object.id === this.model.id) {\n var pos84 = this.cartesian3Towgs84(pickedObjects[i].position, this.sdk.viewer);\n this.options.position[0] = pos84.lng;\n this.options.position[1] = pos84.lat;\n this.options.position[2] = pos84.alt;\n break;\n }\n }\n } else if (this.options.ground) {\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(this.sdk.viewer.entities.values);\n this.getClampToHeight({\n lng: this.options.position[0],\n lat: this.options.position[1]\n }, objectsToExclude).then(function (height) {\n _this4.options.position[2] = height;\n });\n }\n }\n }, {\n key: \"text\",\n get: function get() {\n return this.options.text;\n },\n set: function set(v) {\n this.options.text = v;\n var textArray = this.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 40) {\n textArray[i] = textArray[i].slice(0, 40 - textArray[i].length);\n }\n }\n if (textArray.length > 10) {\n textArray.splice(10 - textArray.length);\n }\n this.options.text = textArray.join('\\n');\n this.entity && this.updateBillboardImage();\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n this.options.color = v;\n this.entity && (this.entity.billboard.image = this.getcanvas());\n }\n }, {\n key: \"scaleByDistance\",\n get: function get() {\n return this.options.scaleByDistance;\n },\n set: function set(v) {\n this.options.scaleByDistance = v;\n if (!this.entity) {\n return;\n }\n if (this.options.scaleByDistance) {\n this.entity.billboard.scaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n } else {\n this.entity.billboard.scaleByDistance = undefined;\n this.entity.billboard.pixelOffsetScaleByDistance = undefined;\n }\n }\n }, {\n key: \"near\",\n get: function get() {\n return this.options.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.far) {\n near = this.far;\n }\n this.options.near = near;\n if (!this.entity) {\n return;\n }\n if (this.options.scaleByDistance) {\n this.entity.billboard.scaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n } else {\n this.entity.billboard.scaleByDistance = undefined;\n this.entity.billboard.pixelOffsetScaleByDistance = undefined;\n }\n }\n }, {\n key: \"far\",\n get: function get() {\n return this.options.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.near) {\n far = this.near;\n }\n this.options.far = far;\n if (!this.entity) {\n return;\n }\n if (this.options.scaleByDistance) {\n this.entity.billboard.scaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n this.entity.billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(this.options.near, 1, this.options.far, 0);\n } else {\n this.entity.billboard.scaleByDistance = undefined;\n this.entity.billboard.pixelOffsetScaleByDistance = undefined;\n }\n }\n }, {\n key: \"fontSize\",\n get: function get() {\n return this.options.fontSize;\n },\n set: function set(v) {\n this.options.fontSize = Number(v);\n if (!this.entity) {\n return;\n }\n this.updateBillboardImage();\n }\n }, {\n key: \"fontFamily\",\n get: function get() {\n return this.options.fontFamily;\n },\n set: function set(v) {\n this.options.fontFamily = v || 0;\n this.font = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_12__[\"getFontFamily\"])(this.options.fontFamily) || 'SimHei';\n this.updateBillboardImage();\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.lineWidth;\n },\n set: function set(v) {\n this.options.lineWidth = Number(v) || Number(v) === 0 ? Number(v) : 4;\n if (!this.entity) {\n return;\n }\n this.updateBillboardImage();\n }\n }, {\n key: \"pixelOffset\",\n get: function get() {\n return this.options.pixelOffset;\n },\n set: function set(v) {\n this.options.pixelOffset = Number(v);\n if (!this.entity) {\n return;\n }\n this.updateBillboardImage();\n }\n }, {\n key: \"updateBillboardImage\",\n value: function updateBillboardImage() {\n this.entity.billboard.image = this.getcanvas();\n // clearTimeout(this.#updateBillboardImageTimeout)\n // this.#updateBillboardImageTimeout = setTimeout(() => {\n // clearTimeout(this.#updateBillboardImageTimeout)\n // this.entity.billboard.image = this.getcanvas()\n // }, 500)\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.pixelOffset;\n },\n set: function set(v) {\n this.options.lineColor = v || '#00ffff80';\n if (!this.entity) {\n return;\n }\n this.entity.billboard.image = this.getcanvas();\n }\n }, {\n key: \"backgroundColor\",\n get: function get() {\n return this.options.backgroundColor;\n },\n set: function set(v) {\n this.options.backgroundColor = v;\n if (!this.entity) {\n return;\n }\n this.entity.billboard.image = this.getcanvas();\n }\n }, {\n key: \"ground\",\n get: function get() {\n return this.options.ground;\n },\n set: function set(v) {\n this.options.ground = v;\n }\n\n // get backgroundColorStart() {\n // return this.options.backgroundColor[0]\n // }\n // set backgroundColorStart(v) {\n // this.options.backgroundColor[0] = v\n // this.entity.billboard.image = this.getcanvas()\n // }\n // get backgroundColorEnd() {\n // return this.options.backgroundColor[1]\n // }\n // set backgroundColorEnd(v) {\n // this.options.backgroundColor[1] = v\n // this.entity.billboard.image = this.getcanvas()\n // }\n }, {\n key: \"getcanvas\",\n value: function getcanvas() {\n var ctx = this._canvas.getContext('2d');\n ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n ctx.font = this.options.fontSize + 'px ' + this.font;\n var texts = this.options.text.split('\\n');\n var canvasWidth = 0;\n var canvasHeight = 0;\n for (var i = 0; i < texts.length; i++) {\n var text = texts[i];\n var width = ctx.measureText(text).width;\n if (width > canvasWidth) {\n canvasWidth = width;\n }\n canvasHeight += this.options.fontSize;\n }\n canvasHeight = canvasHeight + 20 + (texts.length - 1) * 5;\n canvasWidth = canvasWidth + 30;\n if (canvasWidth < this.options.lineWidth) {\n canvasWidth = this.options.lineWidth;\n }\n this._canvas.width = canvasWidth;\n this._canvas.height = this.options.pixelOffset + canvasHeight;\n var linearGradient = ctx.createLinearGradient(0, 0, canvasWidth, canvasHeight + 20);\n linearGradient.addColorStop(0, this.options.backgroundColor[0]);\n linearGradient.addColorStop(1, this.options.backgroundColor[1]);\n ctx.fillStyle = linearGradient;\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n ctx.fillStyle = this.options.color;\n ctx.font = this.options.fontSize + 'px ' + this.font;\n var maxWidth = 0;\n for (var _i = 0; _i < texts.length; _i++) {\n var _width = ctx.measureText(texts[_i]).width;\n if (maxWidth < _width) {\n maxWidth = _width;\n }\n }\n maxWidth = maxWidth + 30;\n var centerDistance = (canvasWidth - maxWidth) / 2;\n for (var _i2 = 0; _i2 < texts.length; _i2++) {\n var _text = texts[_i2];\n if (this.options.fontSize < 10) {\n ctx.fillText(_text, 15 + centerDistance, this.options.fontSize * (_i2 + 1) + 10 + _i2 * 5);\n } else {\n ctx.fillText(_text, 15 + centerDistance, this.options.fontSize * (_i2 + 1) + 10 * 10 / this.options.fontSize + _i2 * 5);\n }\n }\n\n // 虚线\n ctx.strokeStyle = this.options.lineColor;\n ctx.setLineDash([4, 4]); //设置虚线长度4,间隔为4\n ctx.lineWidth = this.options.lineWidth;\n ctx.beginPath();\n ctx.moveTo(canvasWidth / 2, canvasHeight);\n ctx.lineTo(canvasWidth / 2, canvasHeight + this.options.pixelOffset);\n ctx.stroke();\n ctx.closePath();\n var ctx2 = this._canvas2.getContext('2d');\n this._canvas2.width = this._canvas.width + 10;\n this._canvas2.height = this._canvas.height + 10;\n ctx2.drawImage(this._canvas, 5, 5);\n\n // const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n // ctx.putImageData(imageData, 40, 40);\n return this._canvas2.toDataURL(\"image/png\");\n }\n }, {\n key: \"remove\",\n value: function remove() {\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (LabelObject);\nvar _copyObj = function copyObj() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n //变量先置空\n var newobj = null;\n\n //判断是否需要继续进行递归\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(obj) == 'object' && obj !== null) {\n newobj = obj instanceof Array ? [] : {}; //进行下一层递归克隆\n for (var i in obj) {\n newobj[i] = _copyObj(obj[i]);\n } //如果不是对象直接赋值\n } else newobj = obj;\n return newobj;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTGFiZWxPYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvTGFiZWxPYmplY3QvaW5kZXguanM/MzkxOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog5qCH5rOoXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9pbmRleCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7XHJcbiAgZ2V0R3JvdW5kQ292ZXJcclxufSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgeyBnZXRGb250RmFtaWx5IH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQge1xyXG4gIGFkZENsdXN0ZXIsXHJcbiAgcmVtb3ZlX2VudGl0eV9mcm9tX2NsdXN0ZXJcclxufSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvY2x1c3Rlci9jbHVzdGVyJ1xyXG5cclxuY2xhc3MgTGFiZWxPYmplY3QgZXh0ZW5kcyBCYXNlIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgbW9kZWwpIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMubW9kZWwgPSBtb2RlbFxyXG4gICAgdGhpcy5fY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgIHRoaXMuX2NhbnZhczIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgdGhpcy5vcHRpb25zLm5lYXIgPSBvcHRpb25zLm5lYXIgfHwgb3B0aW9ucy5uZWFyID09PSAwID8gb3B0aW9ucy5uZWFyIDogMjAwMFxyXG4gICAgdGhpcy5vcHRpb25zLmZhciA9IG9wdGlvbnMuZmFyIHx8IG9wdGlvbnMuZmFyID09PSAwID8gb3B0aW9ucy5mYXIgOiAxMDAwMDBcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZUJ5RGlzdGFuY2UgPSBvcHRpb25zLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPVxyXG4gICAgICBvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gb3B0aW9ucy50ZXh0XHJcbiAgICBsZXQgdGV4dEFycmF5ID0gdGhpcy5vcHRpb25zLnRleHQuc3BsaXQoJ1xcbicpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGV4dEFycmF5W2ldLmxlbmd0aCA+IDQwKSB7XHJcbiAgICAgICAgdGV4dEFycmF5W2ldID0gdGV4dEFycmF5W2ldLnNsaWNlKDAsIDQwIC0gdGV4dEFycmF5W2ldLmxlbmd0aClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRleHRBcnJheS5sZW5ndGggPiAxMCkge1xyXG4gICAgICB0ZXh0QXJyYXkuc3BsaWNlKDEwIC0gdGV4dEFycmF5Lmxlbmd0aClcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gdGV4dEFycmF5LmpvaW4oJ1xcbicpXHJcbiAgICB0aGlzLm9wdGlvbnMuZm9udEZhbWlseSA9IG9wdGlvbnMuZm9udEZhbWlseSB8fCAwXHJcbiAgICB0aGlzLmZvbnQgPSBnZXRGb250RmFtaWx5KHRoaXMub3B0aW9ucy5mb250RmFtaWx5KSB8fCAnU2ltSGVpJ1xyXG4gICAgdGhpcy5vcHRpb25zLmZvbnRTaXplID0gb3B0aW9ucy5mb250U2l6ZSB8fCAyMFxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmVXaWR0aCA9IG9wdGlvbnMubGluZVdpZHRoIHx8IDRcclxuICAgIHRoaXMub3B0aW9ucy5saW5lQ29sb3IgPSBvcHRpb25zLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCAnI2ZmZmZmZidcclxuICAgIHRoaXMub3B0aW9ucy5ncm91bmQgPVxyXG4gICAgICBvcHRpb25zLmdyb3VuZCB8fCBvcHRpb25zLmdyb3VuZCA9PT0gZmFsc2UgPyBvcHRpb25zLmdyb3VuZCA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5waXhlbE9mZnNldCA9XHJcbiAgICAgIG9wdGlvbnMucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5waXhlbE9mZnNldCA9PT0gMFxyXG4gICAgICAgID8gb3B0aW9ucy5waXhlbE9mZnNldFxyXG4gICAgICAgIDogMjBcclxuICAgIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCBbXHJcbiAgICAgICcjMDBmZmZmODAnLFxyXG4gICAgICAnIzAwZmZmZjgwJ1xyXG4gICAgXVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMuY3JlYXRlKHRoaXMub3B0aW9ucy5wb3NpdGlvbilcclxuICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZSgpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9uWzJdICYmIHRoaXMub3B0aW9ucy5wb3NpdGlvblsyXSAhPT0gMCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25bMl0gPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgIGxuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uWzBdLFxyXG4gICAgICAgIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uWzFdXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IGNvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGxldCBpZCA9IHRoaXMub3B0aW9ucy5pZCArICctbGFiZWwnXHJcbiAgICBsZXQgb2xkRW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmdldEJ5SWQoaWQpXHJcbiAgICBpZiAob2xkRW50aXR5KSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUob2xkRW50aXR5KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgc2hvdzogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQgKyAnLWxhYmVsJyxcclxuICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKF90aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoX3RoaXMub3B0aW9ucy5wb3NpdGlvblswXSwgX3RoaXMub3B0aW9ucy5wb3NpdGlvblsxXSwgX3RoaXMubW9kZWwub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyoyKl90aGlzLm1vZGVsLmN1c3RvbVNjYWxlLnogKyBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzJdKVxyXG4gICAgICAgICAgaWYgKF90aGlzLm1vZGVsLmlzTW92ZSkge1xyXG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBfdGhpcy5tb2RlbC5jdXN0b21TY2FsZS54XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5tb2RlbC5jdXN0b21TY2FsZS55ID4gc2NhbGUpIHtcclxuICAgICAgICAgICAgICBzY2FsZSA9IF90aGlzLm1vZGVsLmN1c3RvbVNjYWxlLnlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMubW9kZWwuY3VzdG9tU2NhbGUueiA+IHNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgc2NhbGUgPSBfdGhpcy5tb2RlbC5jdXN0b21TY2FsZS56XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBvaW50MSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIF90aGlzLm9wdGlvbnMucG9zaXRpb25bMF0sXHJcbiAgICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvblsxXSxcclxuICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzJdICtcclxuICAgICAgICAgICAgICAoX3RoaXMubW9kZWwub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyB8fCAxKSAqXHJcbiAgICAgICAgICAgICAgMiAqXHJcbiAgICAgICAgICAgICAgKHNjYWxlIHx8IDAuMDEpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8g54K5MueahOS9jee9ru+8jOS5n+S9v+eUqOe7j+e6rOmrmOihqOekulxyXG4gICAgICAgICAgICBsZXQgcG9pbnQyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvblswXSxcclxuICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzFdLFxyXG4gICAgICAgICAgICAgIF90aGlzLm9wdGlvbnMucG9zaXRpb25bMl0gLVxyXG4gICAgICAgICAgICAgIChfdGhpcy5tb2RlbC5vcmlnaW5hbEJvdW5kaW5nU3BoZXJlUmFkaXVzIHx8IDEpICpcclxuICAgICAgICAgICAgICAyICpcclxuICAgICAgICAgICAgICAoc2NhbGUgfHwgMC4wMSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgICAgICAgICAgcG9pbnQyLFxyXG4gICAgICAgICAgICAgIHBvaW50MSxcclxuICAgICAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGxldCBjID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpcmVjdGlvbiwgZGlyZWN0aW9uKVxyXG4gICAgICAgICAgICBsZXQgcmF5ID0gbmV3IENlc2l1bS5SYXkocG9pbnQxLCBjKVxyXG4gICAgICAgICAgICBsZXQgcGlja2VkT2JqZWN0cyA9IF90aGlzLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSwgNSlcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGlja2VkT2JqZWN0c1tpXS5vYmplY3QgJiZcclxuICAgICAgICAgICAgICAgIHBpY2tlZE9iamVjdHNbaV0ub2JqZWN0LmlkICYmXHJcbiAgICAgICAgICAgICAgICBwaWNrZWRPYmplY3RzW2ldLm9iamVjdC5pZCA9PT0gX3RoaXMubW9kZWwuaWRcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb3M4NCA9IF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBpY2tlZE9iamVjdHNbaV0ucG9zaXRpb24sIF90aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzBdID0gcG9zODQubG5nXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzFdID0gcG9zODQubGF0XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uWzJdID0gcG9zODQuYWx0XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvblswXSxcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvblsxXSxcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvblsyXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoLi4uX3RoaXMub3B0aW9ucy5wb3NpdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0Y2FudmFzKCksXHJcbiAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgICAgICAgICA/IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcih0aGlzLm9wdGlvbnMubmVhciwgMSwgdGhpcy5vcHRpb25zLmZhciwgMClcclxuICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlOiB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgICAgICAgICA/IG5ldyBDZXNpdW0uTmVhckZhclNjYWxhcih0aGlzLm9wdGlvbnMubmVhciwgMSwgdGhpcy5vcHRpb25zLmZhciwgMClcclxuICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgLy8gbGFiZWw6IHtcclxuICAgICAgLy8gICBzaG93OiB0aGlzLm9wdGlvbnMuc2hvdyxcclxuICAgICAgLy8gICB0ZXh0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMudGV4dFxyXG4gICAgICAvLyAgIH0sIGZhbHNlKSxcclxuICAgICAgLy8gICBmb250OiB0aGlzLm9wdGlvbnMuZm9udFNpemUgKyBcInB4IEhlbHZldGljYVwiLFxyXG4gICAgICAvLyAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpLFxyXG4gICAgICAvLyAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgLXRoaXMub3B0aW9ucy5waXhlbE9mZnNldCksXHJcbiAgICAgIC8vICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuQkxBQ0ssXHJcbiAgICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjNDJjNmVmJyksXHJcbiAgICAgIC8vICAgYmFja2dyb3VuZFBhZGRpbmc6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxMiwgMTIpLFxyXG4gICAgICAvLyAgIHNob3dCYWNrZ3JvdW5kOiB0cnVlLFxyXG4gICAgICAvLyAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAvLyAgIG91dGxpbmVXaWR0aDogMSxcclxuICAgICAgLy8gICBzdHlsZTogQ2VzaXVtLkxhYmVsU3R5bGUuRklMTF9BTkRfT1VUTElORSxcclxuICAgICAgLy8gfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uXHJcbiAgfVxyXG4gIHNldCBwb3NpdGlvbih2KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh2KVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gdlxyXG4gICAgaWYgKCF2WzJdICYmIHZbMl0gIT09IDApIHtcclxuICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICBsbmc6IHZbMF0sXHJcbiAgICAgICAgbGF0OiB2WzFdXHJcbiAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICB2WzJdID0gaGVpZ2h0XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gWy4uLnZdXHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIGxldCBwb2ludDEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb25bMF0sIHRoaXMub3B0aW9ucy5wb3NpdGlvblsxXSwgMCk7XHJcbiAgICAgIC8vIGxldCBwb2ludDIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb25bMF0sIHRoaXMub3B0aW9ucy5wb3NpdGlvblsxXSwgMTAwMDAwMDApO1xyXG4gICAgICAvLyBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QocG9pbnQyLCBwb2ludDEsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgLy8gbGV0IGMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBkaXJlY3Rpb24pO1xyXG4gICAgICAvLyBsZXQgcmF5ID0gbmV3IENlc2l1bS5SYXkocG9pbnQxLCBjKTtcclxuICAgICAgLy8gbGV0IHIgPSB7fVxyXG4gICAgICAvLyBsZXQgcGlja2VkT2JqZWN0cyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5kcmlsbFBpY2tGcm9tUmF5KHJheSk7XHJcbiAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcGlja2VkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgIGlmIChwaWNrZWRPYmplY3RzW2ldLnBvc2l0aW9uKSB7XHJcbiAgICAgIC8vICAgICByID0gcGlja2VkT2JqZWN0c1tpXVxyXG4gICAgICAvLyAgICAgYnJlYWtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaWYgKHIgJiYgci5wb3NpdGlvbikge1xyXG4gICAgICAvLyAgIHRoaXMub3B0aW9ucy5wb3NpdGlvblsyXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoci5wb3NpdGlvbiwgdGhpcy5zZGsudmlld2VyKS5hbHRcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBlbHNlIHtcclxuICAgICAgLy8gICB0cnkge1xyXG4gICAgICAvLyAgICAgbGV0IHByb21pc2UgPSBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZCh0aGlzLnNkay52aWV3ZXIudGVycmFpblByb3ZpZGVyLCBbQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMucG9zaXRpb25bMF0sIHRoaXMub3B0aW9ucy5wb3NpdGlvblsxXSldKTtcclxuICAgICAgLy8gICAgIHByb21pc2UudGhlbigocCkgPT4ge1xyXG4gICAgICAvLyAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25bMl0gPSBwWzBdLmhlaWdodFxyXG4gICAgICAvLyAgICAgfSkuY2F0Y2goKGUpPT57XHJcbiAgICAgIC8vICAgICB9KVxyXG4gICAgICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBbLi4udl1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAvLyByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uWzBdLCB0aGlzLm9wdGlvbnMucG9zaXRpb25bMV0sIHRoaXMubW9kZWwub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyoyKnRoaXMubW9kZWwuY3VzdG9tU2NhbGUueiArIHRoaXMub3B0aW9ucy5wb3NpdGlvblsyXSlcclxuICAgICAgbGV0IHNjYWxlID0gdGhpcy5tb2RlbC5jdXN0b21TY2FsZS54XHJcbiAgICAgIGlmICh0aGlzLm1vZGVsLmN1c3RvbVNjYWxlLnkgPiBzY2FsZSkge1xyXG4gICAgICAgIHNjYWxlID0gdGhpcy5tb2RlbC5jdXN0b21TY2FsZS55XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubW9kZWwuY3VzdG9tU2NhbGUueiA+IHNjYWxlKSB7XHJcbiAgICAgICAgc2NhbGUgPSB0aGlzLm1vZGVsLmN1c3RvbVNjYWxlLnpcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9pbnQxID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uWzBdLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvblsxXSxcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25bMl0gK1xyXG4gICAgICAgICh0aGlzLm1vZGVsLm9yaWdpbmFsQm91bmRpbmdTcGhlcmVSYWRpdXMgfHwgMSkgKlxyXG4gICAgICAgIDIgKlxyXG4gICAgICAgIChzY2FsZSB8fCAwLjAxKVxyXG4gICAgICApXHJcbiAgICAgIC8vIOeCuTLnmoTkvY3nva7vvIzkuZ/kvb/nlKjnu4/nuqzpq5jooajnpLpcclxuICAgICAgbGV0IHBvaW50MiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvblswXSxcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25bMV0sXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uWzJdIC1cclxuICAgICAgICAodGhpcy5tb2RlbC5vcmlnaW5hbEJvdW5kaW5nU3BoZXJlUmFkaXVzIHx8IDEpICpcclxuICAgICAgICAyICpcclxuICAgICAgICAoc2NhbGUgfHwgMC4wMSlcclxuICAgICAgKVxyXG4gICAgICBsZXQgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgICAgcG9pbnQyLFxyXG4gICAgICAgIHBvaW50MSxcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApXHJcbiAgICAgIGxldCBjID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpcmVjdGlvbiwgZGlyZWN0aW9uKVxyXG4gICAgICBsZXQgcmF5ID0gbmV3IENlc2l1bS5SYXkocG9pbnQxLCBjKVxyXG4gICAgICBsZXQgcGlja2VkT2JqZWN0cyA9IHRoaXMudmlld2VyLnNjZW5lLmRyaWxsUGlja0Zyb21SYXkocmF5LCA1KVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwaWNrZWRPYmplY3RzW2ldLm9iamVjdCAmJlxyXG4gICAgICAgICAgcGlja2VkT2JqZWN0c1tpXS5vYmplY3QuaWQgJiZcclxuICAgICAgICAgIHBpY2tlZE9iamVjdHNbaV0ub2JqZWN0LmlkID09PSB0aGlzLm1vZGVsLmlkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBpY2tlZE9iamVjdHNbaV0ucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvblswXSA9IHBvczg0LmxuZ1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uWzFdID0gcG9zODQubGF0XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25bMl0gPSBwb3M4NC5hbHRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ3JvdW5kKSB7XHJcbiAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgbG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb25bMF0sXHJcbiAgICAgICAgbGF0OiB0aGlzLm9wdGlvbnMucG9zaXRpb25bMV1cclxuICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSkudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvblsyXSA9IGhlaWdodFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50ZXh0XHJcbiAgfVxyXG4gIHNldCB0ZXh0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gdlxyXG4gICAgbGV0IHRleHRBcnJheSA9IHRoaXMub3B0aW9ucy50ZXh0LnNwbGl0KCdcXG4nKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRleHRBcnJheVtpXS5sZW5ndGggPiA0MCkge1xyXG4gICAgICAgIHRleHRBcnJheVtpXSA9IHRleHRBcnJheVtpXS5zbGljZSgwLCA0MCAtIHRleHRBcnJheVtpXS5sZW5ndGgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0ZXh0QXJyYXkubGVuZ3RoID4gMTApIHtcclxuICAgICAgdGV4dEFycmF5LnNwbGljZSgxMCAtIHRleHRBcnJheS5sZW5ndGgpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHRleHRBcnJheS5qb2luKCdcXG4nKVxyXG4gICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMudXBkYXRlQmlsbGJvYXJkSW1hZ2UoKSlcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHZcclxuICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSB0aGlzLmdldGNhbnZhcygpKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBzY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubmVhclxyXG4gIH1cclxuICBzZXQgbmVhcih2KSB7XHJcbiAgICBsZXQgbmVhciA9IHZcclxuICAgIGlmIChuZWFyID4gdGhpcy5mYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMuZmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubmVhciA9IG5lYXJcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mYXJcclxuICB9XHJcbiAgc2V0IGZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLm5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5mYXIgPSBmYXJcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlQnlEaXN0YW5jZSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuc2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gbmV3IENlc2l1bS5OZWFyRmFyU2NhbGFyKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uZWFyLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZhcixcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5zY2FsZUJ5RGlzdGFuY2UgPSB1bmRlZmluZWRcclxuICAgICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLnBpeGVsT2Zmc2V0U2NhbGVCeURpc3RhbmNlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBmb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZm9udFNpemUgPSBOdW1iZXIodilcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUJpbGxib2FyZEltYWdlKClcclxuICB9XHJcblxyXG4gIGdldCBmb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgZm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5mb250ID0gZ2V0Rm9udEZhbWlseSh0aGlzLm9wdGlvbnMuZm9udEZhbWlseSkgfHwgJ1NpbUhlaSdcclxuICAgIHRoaXMudXBkYXRlQmlsbGJvYXJkSW1hZ2UoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmVXaWR0aCA9ICgoTnVtYmVyKHYpIHx8IE51bWJlcih2KSA9PT0gMCkgPyBOdW1iZXIodikgOiA0KVxyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQmlsbGJvYXJkSW1hZ2UoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgcGl4ZWxPZmZzZXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBpeGVsT2Zmc2V0ID0gTnVtYmVyKHYpXHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVCaWxsYm9hcmRJbWFnZSgpXHJcbiAgfVxyXG4gIHVwZGF0ZUJpbGxib2FyZEltYWdlKCkge1xyXG4gICAgdGhpcy5lbnRpdHkuYmlsbGJvYXJkLmltYWdlID0gdGhpcy5nZXRjYW52YXMoKVxyXG4gICAgLy8gY2xlYXJUaW1lb3V0KHRoaXMuI3VwZGF0ZUJpbGxib2FyZEltYWdlVGltZW91dClcclxuICAgIC8vIHRoaXMuI3VwZGF0ZUJpbGxib2FyZEltYWdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICBjbGVhclRpbWVvdXQodGhpcy4jdXBkYXRlQmlsbGJvYXJkSW1hZ2VUaW1lb3V0KVxyXG4gICAgLy8gICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSB0aGlzLmdldGNhbnZhcygpXHJcbiAgICAvLyB9LCA1MDApXHJcbiAgfVxyXG4gIGdldCBsaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBpeGVsT2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBsaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmVDb2xvciA9IHYgfHwgJyMwMGZmZmY4MCdcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5iaWxsYm9hcmQuaW1hZ2UgPSB0aGlzLmdldGNhbnZhcygpXHJcbiAgfVxyXG5cclxuICBnZXQgYmFja2dyb3VuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3JcclxuICB9XHJcbiAgc2V0IGJhY2tncm91bmRDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yID0gdlxyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZSA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICB9XHJcblxyXG4gIGdldCBncm91bmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdyb3VuZFxyXG4gIH1cclxuICBzZXQgZ3JvdW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5ncm91bmQgPSB2XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgYmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvclswXVxyXG4gIC8vIH1cclxuICAvLyBzZXQgYmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAvLyAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZSA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAvLyB9XHJcbiAgLy8gZ2V0IGJhY2tncm91bmRDb2xvckVuZCgpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgLy8gfVxyXG4gIC8vIHNldCBiYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAvLyAgIHRoaXMuZW50aXR5LmJpbGxib2FyZC5pbWFnZSA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAvLyB9XHJcblxyXG4gIGdldGNhbnZhcygpIHtcclxuICAgIGNvbnN0IGN0eCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7XHJcbiAgICBjdHguZm9udCA9IHRoaXMub3B0aW9ucy5mb250U2l6ZSArICdweCAnICsgdGhpcy5mb250XHJcbiAgICBsZXQgdGV4dHMgPSB0aGlzLm9wdGlvbnMudGV4dC5zcGxpdCgnXFxuJylcclxuICAgIGxldCBjYW52YXNXaWR0aCA9IDBcclxuICAgIGxldCBjYW52YXNIZWlnaHQgPSAwXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0c1tpXVxyXG4gICAgICBjb25zdCB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0ZXh0KS53aWR0aFxyXG4gICAgICBpZiAod2lkdGggPiBjYW52YXNXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhc1dpZHRoID0gd2lkdGhcclxuICAgICAgfVxyXG4gICAgICBjYW52YXNIZWlnaHQgKz0gdGhpcy5vcHRpb25zLmZvbnRTaXplXHJcbiAgICB9XHJcbiAgICBjYW52YXNIZWlnaHQgPSBjYW52YXNIZWlnaHQgKyAyMCArICh0ZXh0cy5sZW5ndGggLSAxKSAqIDVcclxuICAgIGNhbnZhc1dpZHRoID0gY2FudmFzV2lkdGggKyAzMFxyXG4gICAgaWYgKGNhbnZhc1dpZHRoIDwgdGhpcy5vcHRpb25zLmxpbmVXaWR0aCkge1xyXG4gICAgICBjYW52YXNXaWR0aCA9IHRoaXMub3B0aW9ucy5saW5lV2lkdGhcclxuICAgIH1cclxuICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoXHJcbiAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnBpeGVsT2Zmc2V0ICsgY2FudmFzSGVpZ2h0XHJcbiAgICBjb25zdCBsaW5lYXJHcmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChcclxuICAgICAgMCxcclxuICAgICAgMCxcclxuICAgICAgY2FudmFzV2lkdGgsXHJcbiAgICAgIGNhbnZhc0hlaWdodCArIDIwXHJcbiAgICApXHJcbiAgICBsaW5lYXJHcmFkaWVudC5hZGRDb2xvclN0b3AoMCwgdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvclswXSlcclxuICAgIGxpbmVhckdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yWzFdKVxyXG4gICAgY3R4LmZpbGxTdHlsZSA9IGxpbmVhckdyYWRpZW50XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodClcclxuICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgIGN0eC5mb250ID0gdGhpcy5vcHRpb25zLmZvbnRTaXplICsgJ3B4ICcgKyB0aGlzLmZvbnRcclxuICAgIGxldCBtYXhXaWR0aCA9IDBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KHRleHRzW2ldKS53aWR0aFxyXG4gICAgICBpZiAobWF4V2lkdGggPCB3aWR0aCkge1xyXG4gICAgICAgIG1heFdpZHRoID0gd2lkdGhcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbWF4V2lkdGggPSBtYXhXaWR0aCArIDMwXHJcbiAgICBsZXQgY2VudGVyRGlzdGFuY2UgPSAoY2FudmFzV2lkdGggLSBtYXhXaWR0aCkgLyAyXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0c1tpXVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZvbnRTaXplIDwgMTApIHtcclxuICAgICAgICBjdHguZmlsbFRleHQodGV4dCwgMTUgKyBjZW50ZXJEaXN0YW5jZSwgdGhpcy5vcHRpb25zLmZvbnRTaXplICogKGkgKyAxKSArIDEwICsgaSAqIDUpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmZpbGxUZXh0KFxyXG4gICAgICAgICAgdGV4dCxcclxuICAgICAgICAgIDE1ICsgY2VudGVyRGlzdGFuY2UsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9udFNpemUgKiAoaSArIDEpICtcclxuICAgICAgICAgICgxMCAqIDEwKSAvIHRoaXMub3B0aW9ucy5mb250U2l6ZSArXHJcbiAgICAgICAgICBpICogNVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiZmue6v1xyXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5vcHRpb25zLmxpbmVDb2xvclxyXG4gICAgY3R4LnNldExpbmVEYXNoKFs0LCA0XSkgLy/orr7nva7omZrnur/plb/luqY077yM6Ze06ZqU5Li6NFxyXG4gICAgY3R4LmxpbmVXaWR0aCA9IHRoaXMub3B0aW9ucy5saW5lV2lkdGhcclxuICAgIGN0eC5iZWdpblBhdGgoKVxyXG4gICAgY3R4Lm1vdmVUbyhjYW52YXNXaWR0aCAvIDIsIGNhbnZhc0hlaWdodClcclxuICAgIGN0eC5saW5lVG8oY2FudmFzV2lkdGggLyAyLCBjYW52YXNIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGl4ZWxPZmZzZXQpXHJcbiAgICBjdHguc3Ryb2tlKClcclxuICAgIGN0eC5jbG9zZVBhdGgoKVxyXG5cclxuICAgIGNvbnN0IGN0eDIgPSB0aGlzLl9jYW52YXMyLmdldENvbnRleHQoJzJkJylcclxuICAgIHRoaXMuX2NhbnZhczIud2lkdGggPSB0aGlzLl9jYW52YXMud2lkdGggKyAxMFxyXG4gICAgdGhpcy5fY2FudmFzMi5oZWlnaHQgPSB0aGlzLl9jYW52YXMuaGVpZ2h0ICsgMTBcclxuICAgIGN0eDIuZHJhd0ltYWdlKHRoaXMuX2NhbnZhcywgNSwgNSk7XHJcblxyXG4gICAgLy8gY29uc3QgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgLy8gY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDQwLCA0MCk7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FudmFzMi50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIilcclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGFiZWxPYmplY3RcclxuXHJcbmNvbnN0IGNvcHlPYmogPSAob2JqID0ge30pID0+IHtcclxuICAvL+WPmOmHj+WFiOe9ruepulxyXG4gIGxldCBuZXdvYmogPSBudWxsXHJcblxyXG4gIC8v5Yik5pat5piv5ZCm6ZyA6KaB57un57ut6L+b6KGM6YCS5b2SXHJcbiAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XHJcbiAgICBuZXdvYmogPSBvYmogaW5zdGFuY2VvZiBBcnJheSA/IFtdIDoge30gLy/ov5vooYzkuIvkuIDlsYLpgJLlvZLlhYvpmoZcclxuICAgIGZvciAodmFyIGkgaW4gb2JqKSB7XHJcbiAgICAgIG5ld29ialtpXSA9IGNvcHlPYmoob2JqW2ldKVxyXG4gICAgfSAvL+WmguaenOS4jeaYr+WvueixoeebtOaOpei1i+WAvFxyXG4gIH0gZWxzZSBuZXdvYmogPSBvYmpcclxuICByZXR1cm4gbmV3b2JqXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUFBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQVFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE1R0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUErR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBUUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBR0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/LabelObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/LoadObjModel/AModelLoader.js": /*!***************************************************!*\ !*** ./src/Obj/Base/LoadObjModel/AModelLoader.js ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _flvplayer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flvplayer */ \"./src/Obj/Base/LoadObjModel/flvplayer.js\");\n/* harmony import */ var _jessibucaPlayer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./jessibucaPlayer */ \"./src/Obj/Base/LoadObjModel/jessibucaPlayer.js\");\n\n\n\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\nvar _object_pattern = /^[og]\\s*(.+)?/;\nvar _material_library_pattern = /^mtllib /;\nvar _material_use_pattern = /^usemtl /;\nvar _map_use_pattern = /^usemap /;\nvar _face_vertex_data_separator_pattern = /\\s+/;\nvar _color = {\n red: 1,\n green: 1,\n blue: 1,\n alpha: 1\n};\nfunction ParserState() {\n var state = {\n objects: [],\n object: {},\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n materials: {},\n materialLibraries: [],\n startObject: function startObject(name, fromDeclaration) {\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration !== false;\n return;\n }\n var previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false\n },\n materials: [],\n smooth: true,\n startMaterial: function startMaterial(name, libraries) {\n var previous = this._finalize(false);\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n var material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n clone: function clone(index) {\n var cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false\n };\n cloned.clone = this.clone.bind(cloned);\n return cloned;\n }\n };\n this.materials.push(material);\n return material;\n },\n currentMaterial: function currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n return undefined;\n },\n _finalize: function _finalize(end) {\n var lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n if (end && this.materials.length > 1) {\n for (var mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n return lastMultiMaterial;\n }\n };\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n var declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n this.objects.push(this.object);\n },\n finalize: function finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n },\n parseVertexIndex: function parseVertexIndex(value, len) {\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n parseNormalIndex: function parseNormalIndex(value, len) {\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n parseUVIndex: function parseUVIndex(value, len) {\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n },\n addVertex: function addVertex(a, b, c) {\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addVertexPoint: function addVertexPoint(a) {\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n },\n addVertexLine: function addVertexLine(a) {\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n },\n addNormal: function addNormal(a, b, c) {\n var src = this.normals;\n var dst = this.object.geometry.normals;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addFaceNormal: function addFaceNormal(a, b, c) {\n console.warn('addFaceNormal');\n // const src = this.vertices;\n // const dst = this.object.geometry.normals;\n\n // _vA.fromArray( src, a );\n // _vB.fromArray( src, b );\n // _vC.fromArray( src, c );\n\n // _cb.subVectors( _vC, _vB );\n // _ab.subVectors( _vA, _vB );\n // _cb.cross( _ab );\n\n // _cb.normalize();\n\n // dst.push( _cb.x, _cb.y, _cb.z );\n // dst.push( _cb.x, _cb.y, _cb.z );\n // dst.push( _cb.x, _cb.y, _cb.z );\n },\n addColor: function addColor(a, b, c) {\n var src = this.colors;\n var dst = this.object.geometry.colors;\n if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2]);\n if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2]);\n if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addUV: function addUV(a, b, c) {\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n },\n addDefaultUV: function addDefaultUV() {\n var dst = this.object.geometry.uvs;\n dst.push(0, 0);\n dst.push(0, 0);\n dst.push(0, 0);\n },\n addUVLine: function addUVLine(a) {\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n dst.push(src[a + 0], src[a + 1]);\n },\n addFace: function addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n var vLen = this.vertices.length;\n var ia = this.parseVertexIndex(a, vLen);\n var ib = this.parseVertexIndex(b, vLen);\n var ic = this.parseVertexIndex(c, vLen);\n this.addVertex(ia, ib, ic);\n this.addColor(ia, ib, ic);\n if (na !== undefined && na !== '') {\n var nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n ib = this.parseNormalIndex(nb, nLen);\n ic = this.parseNormalIndex(nc, nLen);\n this.addNormal(ia, ib, ic);\n } else {\n this.addFaceNormal(ia, ib, ic);\n }\n if (ua !== undefined && ua !== '') {\n var uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n this.object.geometry.hasUVIndices = true;\n } else {\n this.addDefaultUV();\n }\n },\n addPointGeometry: function addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n var vLen = this.vertices.length;\n for (var vi = 0, l = vertices.length; vi < l; vi++) {\n var index = this.parseVertexIndex(vertices[vi], vLen);\n this.addVertexPoint(index);\n this.addColor(index);\n }\n },\n addLineGeometry: function addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n var vLen = this.vertices.length;\n var uvLen = this.uvs.length;\n for (var vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));\n }\n for (var uvi = 0, _l = uvs.length; uvi < _l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));\n }\n }\n };\n state.startObject('', false);\n return state;\n}\nvar hlsjsDefaults = {\n debug: false,\n enableWorker: true,\n lowLatencyMode: true,\n // maxBufferLength: 300,\n // maxMaxBufferLength: 6000,\n // liveDurationInfinity: true,\n // maxBufferSize: 600 * 1000 * 1000,\n backBufferLength: 60 * 1.5\n};\nvar AModelLoader = /*#__PURE__*/function () {\n function AModelLoader(context) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, AModelLoader);\n this.context = context;\n // this.hls = new Hls(hlsjsDefaults);\n }\n\n /**\r\n * 异步调用\r\n * @param {*} url\r\n */\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(AModelLoader, [{\n key: \"Load\",\n value: function Load(url, videoId, host) {\n var _this = this;\n //解析obj数据\n this.host = host;\n this.videoId = videoId;\n var name = url.substr(url.lastIndexOf('/') + 1);\n name = name.substring(0, name.lastIndexOf('.'));\n return Cesium.Resource.fetchText(url).then(function (result) {\n return _this.Parse(result, url.substring(0, url.lastIndexOf('/') + 1), name);\n });\n }\n }, {\n key: \"Parse\",\n value: function Parse(text, path, n) {\n var state = new ParserState();\n if (text.indexOf('\\r\\n') !== -1) {\n text = text.replace(/\\r\\n/g, '\\n');\n }\n if (text.indexOf('\\\\\\n') !== -1) {\n text = text.replace(/\\\\\\n/g, '');\n }\n var lines = text.split('\\n');\n var result = [];\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i].trimStart();\n if (line.length === 0) continue;\n var lineFirstChar = line.charAt(0);\n if (lineFirstChar === '#') continue;\n if (lineFirstChar === 'v') {\n var data = line.split(_face_vertex_data_separator_pattern);\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length >= 7) {\n Cesium.Color.fromBytes(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]), 1, _color);\n state.colors.push(_color.red, _color.green, _color.blue);\n } else {\n state.colors.push(undefined, undefined, undefined);\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n }\n } else if (lineFirstChar === 'f') {\n var lineData = line.slice(1).trim();\n var vertexData = lineData.split(_face_vertex_data_separator_pattern);\n var faceVertices = [];\n for (var j = 0, jl = vertexData.length; j < jl; j++) {\n var vertex = vertexData[j];\n if (vertex.length > 0) {\n var vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n var v1 = faceVertices[0];\n for (var _j = 1, _jl = faceVertices.length - 1; _j < _jl; _j++) {\n var v2 = faceVertices[_j];\n var v3 = faceVertices[_j + 1];\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n var lineParts = line.substring(1).trim().split(' ');\n var lineVertices = [];\n var lineUVs = [];\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n for (var li = 0, llen = lineParts.length; li < llen; li++) {\n var parts = lineParts[li].split('/');\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n var _lineData = line.slice(1).trim();\n var pointData = _lineData.split(' ');\n state.addPointGeometry(pointData);\n } else if ((result = _object_pattern.exec(line)) !== null) {\n var name = (' ' + result[0].slice(1).trim()).slice(1);\n state.startObject(n);\n } else if (_material_use_pattern.test(line)) {\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (_material_library_pattern.test(line)) {\n state.materialLibraries.push(line.substring(7).trim());\n } else if (_map_use_pattern.test(line)) {\n console.warn('Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.');\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n if (result.length > 1) {\n var value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n state.object.smooth = true;\n }\n var material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n if (line === '\\0') continue;\n console.warn('Unexpected line: \"' + line + '\"');\n }\n }\n state.finalize();\n var container = new Node(this.context, this.hls, this.videoId, this.host, n);\n var hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0);\n if (hasPrimitives === true) {\n for (var _i = 0, _l2 = state.objects.length; _i < _l2; _i++) {\n var object = state.objects[_i];\n var geometry = object.geometry;\n var materials = object.materials;\n if (geometry.vertices.length === 0) continue;\n var mesh = new Mesh(this.context, geometry);\n for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\n var sourceMaterial = materials[mi];\n var materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_';\n var _material = state.materials[materialHash];\n sourceMaterial.mtllib = n + '.mtl';\n if (_material === undefined) {\n _material = new Material(this.context, geometry, path, sourceMaterial.mtllib);\n _material.name = sourceMaterial.name;\n _material.flatShading = sourceMaterial.smooth ? false : true;\n state.materials[materialHash] = _material;\n }\n mesh.setMaterial(_material);\n }\n mesh.name = object.name;\n container.add(mesh);\n }\n }\n return container;\n }\n }]);\n}();\nvar Material = /*#__PURE__*/function () {\n function Material(context, geometry, path, mtllib) {\n var _this2 = this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Material);\n this.context = context;\n this.ready = false;\n var canvas = document.createElement('canvas');\n canvas.width = 512; //默认\n canvas.height = 512; //默认\n this.canvas = canvas;\n var promise = Cesium.Resource.fetchText(path + mtllib).then(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(text) {\n var result, lines, i, l, line, t, map, picture;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n result = [];\n lines = text.split('\\n');\n i = 0, l = lines.length;\n case 3:\n if (!(i < l)) {\n _context.next = 20;\n break;\n }\n line = lines[i].trimStart();\n if (!(line.length === 0)) {\n _context.next = 7;\n break;\n }\n return _context.abrupt(\"continue\", 17);\n case 7:\n t = line.split(' ')[0];\n if (!(t === 'map_Kd')) {\n _context.next = 17;\n break;\n }\n map = line.split(' ')[1];\n picture = mtllib.replace(\".mtl\", \"_result.jpg\");\n _context.t0 = result;\n _context.next = 14;\n return _this2.loadTexture(path + picture);\n case 14:\n _context.t1 = _context.sent;\n _context.t2 = {\n diffusemap: _context.t1\n };\n _context.t0.push.call(_context.t0, _context.t2);\n case 17:\n i++;\n _context.next = 3;\n break;\n case 20:\n return _context.abrupt(\"return\", Promise.all(result));\n case 21:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n\n //创建shader\n var vs = 'attribute vec3 position;\\n';\n var fs = '';\n var outVS = '';\n var hasNormal = false;\n var hasVertexColors = false;\n var hasSt = false;\n if (geometry.normals.length > 0) {\n hasNormal = true;\n }\n //顶点色\n if (geometry.colors.length > 0) {\n hasVertexColors = true;\n }\n // UV\n if (geometry.hasUVIndices === true) {\n hasSt = true;\n }\n if (hasNormal) {\n vs += 'attribute vec3 normal;\\n';\n vs += 'varying vec3 v_normal;\\n';\n fs += 'varying vec3 v_normal;\\n';\n outVS += 'v_normal = normal;\\n';\n }\n if (hasVertexColors) {\n vs += 'attribute vec3 color;\\n';\n vs += 'varying vec2 v_color;\\n';\n fs += 'varying vec2 v_color;\\n';\n outVS += 'v_color = color;\\n';\n }\n if (hasSt) {\n vs += 'attribute vec2 uv;\\n';\n vs += 'varying vec2 v_uv;\\n';\n fs += 'varying vec2 v_uv;\\n';\n outVS += 'v_uv = uv;\\n';\n }\n vs += \"\\n void main() {\\n gl_Position = czm_modelViewProjection * vec4(position, 1.);\\n \".concat(outVS, \"\\n }\\n \");\n fs += \"\\n\\t\\tuniform sampler2D colorTexture;\\n void main() {\\n\\t\\t\\t vec4 color = texture2D(colorTexture, v_uv);\\n\\t\\t\\t\\t\\t\\tgl_FragColor = color;\\n }\\n \";\n this.program = Cesium.ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs\n });\n this.uniformMap = {};\n var that = this;\n promise.then(function (images) {\n var _loop = function _loop() {\n var element = images[i];\n var diffusemap = element.diffusemap;\n _this2.uniformMap.colorTexture = function () {\n return diffusemap;\n };\n };\n for (var i = 0; i < images.length; i++) {\n _loop();\n }\n that.ready = true;\n });\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Material, [{\n key: \"updateColorTexture\",\n value: function updateColorTexture(video, width, height) {\n if (this.ready /*&& Cesium.defined(video.videojs)*/) {\n // video.videojs.play();\n var colorTexture = this.uniformMap.colorTexture();\n if (video.playing && video.timeupdate) {\n if (width !== colorTexture.width || height !== colorTexture.height) {\n colorTexture.destroy();\n this.canvas.width = 1280;\n this.canvas.height = 960;\n\n // 重新创建texture\n var canvasContext = this.canvas.getContext('2d');\n canvasContext.drawImage(video.dom, 0, 0, 1280, 960, 0, 0, this.canvas.width, this.canvas.height);\n var texture = new Cesium.Texture({\n context: this.context,\n source: this.canvas\n });\n this.uniformMap.colorTexture = function () {\n return texture;\n };\n }\n // console.log(\"update texture 2\");\n // const canvasContext = this.canvas.getContext(\"2d\");\n // canvasContext.drawImage(\n // \tvideo.dom,\n // \t0,\n // \t0,\n // \tvideo.width,\n // \tvideo.height,\n // \t0,\n // \t0,\n // \tthis.canvas.width,\n // \tthis.canvas.height\n // );\n // this.uniformMap.colorTexture().copyFrom({\n // \tsource: this.canvas\n // });\n }\n }\n }\n }, {\n key: \"setCommand\",\n value: function setCommand(drawCommand) {\n drawCommand.shaderProgram = this.program;\n drawCommand.uniformMap = this.uniformMap;\n }\n }, {\n key: \"loadTexture\",\n value: function loadTexture(url) {\n var _this3 = this;\n return Cesium.Resource.fetchImage(url).then(function (image) {\n _this3.canvas.width = image.width;\n _this3.canvas.height = image.height;\n var canvasContext = _this3.canvas.getContext('2d');\n canvasContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, _this3.canvas.width, _this3.canvas.height);\n var texture = new Cesium.Texture({\n context: _this3.context,\n source: _this3.canvas,\n sampler: Cesium.Sampler.NEAREST\n });\n return texture;\n });\n }\n }]);\n}();\nvar Mesh = /*#__PURE__*/function () {\n function Mesh(context, geometry) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Mesh);\n this.lastState = false;\n this.name = undefined;\n this.geometry = geometry;\n var vaAttributes = [];\n var index = 0;\n this.material = undefined;\n\n //创建顶点索引\n var vertexBuffer = Cesium.Buffer.createVertexBuffer({\n context: context,\n typedArray: Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, geometry.vertices),\n usage: Cesium.BufferUsage.STATIC_DRAW\n });\n vaAttributes.push({\n index: index,\n enabled: true,\n vertexBuffer: vertexBuffer,\n componentDatatype: Cesium.ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false\n });\n //法线\n if (geometry.normals.length > 0) {\n index++;\n var normalBuffer = Cesium.Buffer.createVertexBuffer({\n context: context,\n typedArray: Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, geometry.normals),\n usage: Cesium.BufferUsage.STATIC_DRAW\n });\n vaAttributes.push({\n index: index,\n enabled: true,\n vertexBuffer: normalBuffer,\n componentDatatype: Cesium.ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false\n });\n }\n //顶点色\n if (geometry.colors.length > 0) {\n index++;\n var colorBuffer = Cesium.Buffer.createVertexBuffer({\n context: context,\n typedArray: Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, geometry.colors),\n usage: Cesium.BufferUsage.STATIC_DRAW\n });\n vaAttributes.push({\n index: index,\n enabled: true,\n vertexBuffer: colorBuffer,\n componentDatatype: Cesium.ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false\n });\n }\n // UV\n if (geometry.hasUVIndices === true) {\n index++;\n var uvBuffer = Cesium.Buffer.createVertexBuffer({\n context: context,\n typedArray: Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, geometry.uvs),\n usage: Cesium.BufferUsage.STATIC_DRAW\n });\n vaAttributes.push({\n index: index,\n enabled: true,\n vertexBuffer: uvBuffer,\n componentDatatype: Cesium.ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n normalize: false\n });\n }\n var vertexArray = new Cesium.VertexArray({\n context: context,\n attributes: vaAttributes\n });\n var renderState = Cesium.RenderState.fromCache({\n cull: {\n enabled: false\n },\n depthMask: true,\n depthTest: {\n enabled: true\n }\n });\n this.drawCommand = new Cesium.DrawCommand({\n owner: this,\n primitiveType: Cesium.PrimitiveType.TRIANGLES,\n vertexArray: vertexArray,\n renderState: renderState,\n pass: Cesium.Pass.OPAQUE\n // debugShowBoundingVolume: true\n });\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Mesh, [{\n key: \"setMaterial\",\n value: function setMaterial(material) {\n this.material = material;\n material.setCommand(this.drawCommand);\n }\n }, {\n key: \"update\",\n value: function update(frameState) {\n if (Cesium.defined(this.material)) {\n if (this.material.ready) {\n frameState.commandList.push(this.drawCommand);\n }\n }\n }\n }, {\n key: \"updateVideo\",\n value: function updateVideo(camera, video, cullingVolume) {\n var playVideo = false;\n if (Cesium.defined(this.material)) {\n if (this.material.ready) {\n var visibility = cullingVolume.computeVisibility(this.drawCommand.boundingVolume);\n if (visibility >= 0 && this.material.ready) {\n //如果视频可见\n //计算level\n // cam\n var distance = camera.distanceToBoundingSphere(this.drawCommand.boundingVolume);\n var width = video.width;\n var height = video.height;\n if (distance >= 20 && distance < 100) {\n width = video.width / 2;\n height = video.height / 2;\n } else if (distance >= 100) {\n width = video.width / 10;\n height = video.height / 10;\n }\n playVideo = true;\n this.material.updateColorTexture(video, Math.floor(width), Math.floor(height));\n } else {\n playVideo = false;\n // if(video.videojs) {\n // \tvideo.videojs.pause();\n // }\n }\n }\n }\n\n // if(playVideo != this.lastState) {\n // \tif(playVideo) {\n // \t\tconsole.log(\"play\");\n // \t\tvideo.videojs.play();\n // \t} else {\n // \t\tconsole.log(\"pause\");\n // \t\tvideo.videojs.pause();\n // \t}\n // }\n this.lastState = playVideo;\n }\n }]);\n}();\nvar _show = /*#__PURE__*/new WeakMap();\nvar Node = /*#__PURE__*/function () {\n function Node(context, hls, videoId, host, n) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Node);\n _classPrivateFieldInitSpec(this, _show, true);\n this.context = context;\n this.videoId = videoId;\n this.host = host;\n this._modelMatrix = Cesium.Matrix4.IDENTITY;\n this.parent = null;\n this.children = [];\n this.video = {\n // hls: hls,\n // videojs: null,\n dom: null,\n playing: false,\n timeupdate: false,\n width: 0,\n height: 0,\n tracks: null\n };\n this.time = 0;\n this.name = n;\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Node, [{\n key: \"show\",\n get: function get() {\n return _classPrivateFieldGet(_show, this);\n },\n set: function set(v) {\n if (typeof v === 'boolean') {\n _classPrivateFieldSet(_show, this, v);\n if (v) {\n this.video.player && this.video.player.getVueInstance().play();\n // if (this.video.player && !this.video.playing) {\n // if (this.videoId) {\n // this.requestVideoResource()\n // }\n // else {\n // this.setFlvVideo(this.video.url)\n // }\n // }\n // this.video.player && this.video.player.resume()\n } else {\n this.video.player && this.video.player.getVueInstance().pause();\n // if (this.video.player) {\n // let canvas = document.createElement(\"canvas\");\n // canvas.width = this.video.width;\n // canvas.height = this.video.height;\n // canvas.getContext(\"2d\").drawImage(this.video.dom, 0, 0, this.video.width, this.video.height);\n // for (let i = 0; i < this.children.length; i++) {\n // const child = this.children[i]\n // child.material.uniformMap['colorTexture'] = () => {\n // let texture = new Cesium.Texture({\n // context: this.context,\n // source: canvas\n // })\n // return texture\n // }\n // }\n // this.video.playing = false\n // this.video.player.destroy()\n // }\n }\n } else {\n console.error('参数必须为boolean');\n }\n }\n }, {\n key: \"requestVideoResource\",\n value: function requestVideoResource() {\n var _this4 = this;\n var host = \"\";\n if (this.host.endsWith(\"yjearth4.0\")) host = this.host;else host = this.host + '/yjearth4.0';\n var url = host + '/videoFusion/' + this.videoId;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(/*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee3(res) {\n var text;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return res.text();\n case 2:\n text = _context3.sent;\n text = JSON.parse(text);\n if (![0, 200].includes(text.code)) {\n _context3.next = 13;\n break;\n }\n if (!text.data.deviceCode.length) {\n _context3.next = 9;\n break;\n }\n return _context3.abrupt(\"return\", fetch(host + '/videoFusion/vide/stream', {\n method: 'post',\n body: JSON.stringify({\n type: 'flv',\n deviceCode: text.data.deviceCode\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(/*#__PURE__*/function () {\n var _ref3 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2(res2) {\n var text2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return res2.text();\n case 2:\n text2 = _context2.sent;\n text2 = JSON.parse(text2);\n if (![0, 200].includes(text2.code)) {\n _context2.next = 9;\n break;\n }\n if (text2.data.url.length) {\n _this4.video.player.url = text2.data.url;\n _this4.setFlvVideo(text2.data.url);\n } else console.warn('地址不存在');\n return _context2.abrupt(\"return\");\n case 9:\n console.warn(text2.msg || text2.message);\n return _context2.abrupt(\"return\");\n case 11:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }()));\n case 9:\n console.warn('设备不存在');\n case 10:\n return _context3.abrupt(\"return\");\n case 13:\n console.warn(text.msg || text.message);\n return _context3.abrupt(\"return\");\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n }\n }, {\n key: \"modelMatrix\",\n get: function get() {\n return this._modelMatrix;\n },\n set: function set(matrix) {\n this._modelMatrix = matrix.clone();\n this.updateModelMatrix();\n }\n }, {\n key: \"updateModelMatrix\",\n value: function updateModelMatrix() {\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n child.drawCommand.modelMatrix = this._modelMatrix;\n //计算包围盒\n var sphere = Cesium.BoundingSphere.fromVertices(child.geometry.vertices);\n var newMat = Cesium.Matrix4.multiplyByTranslation(this._modelMatrix, sphere.center, new Cesium.Matrix4());\n sphere.center = Cesium.Matrix4.getTranslation(newMat, new Cesium.Cartesian3());\n child.drawCommand.boundingVolume = sphere;\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(position) {\n Cesium.Matrix4.multiplyByTranslation(this._modelMatrix, position, this._modelMatrix);\n this.updateModelMatrix();\n }\n }, {\n key: \"add\",\n value: function add(object) {\n object.parent = this;\n this.children.push(object);\n }\n }, {\n key: \"update\",\n value: function update(frameState) {\n if (this.show) {\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n child.update(frameState);\n }\n } else {}\n }\n\n /**\r\n * 设置视频\r\n * @param {*} url\r\n */\n }, {\n key: \"setVideo\",\n value: function setVideo(url) {\n var _this5 = this;\n this.video.playing = false;\n this.video.timeupdate = false;\n if (!url) {\n return;\n }\n var videoType = /^.+\\.m3u8$/.test(url) ? 'application/x-mpegURL' : 'video/mp4';\n\n // if (videoType === 'application/x-mpegURL') {\n var id = 'video_' + Cesium.createGuid();\n var video = document.createElement('div');\n video.setAttribute('id', id);\n video.style.display = 'none';\n this.video.parentDom = video;\n var that = this;\n var player = new WasmPlayer(null, video, function (e) {\n if (e === 'play') {\n var _videoElm = video.getElementsByTagName('video')[0];\n var canvasElm = video.getElementsByTagName('canvas')[0];\n if (_videoElm && canvasElm) {\n setTimeout(function () {\n player.play();\n }, 1000);\n } else {\n if (_videoElm) {\n that.video.dom = _videoElm;\n that.video.width = _videoElm.videoWidth;\n that.video.height = _videoElm.videoHeight;\n that.video.playing = true;\n var texture = new Cesium.Texture({\n context: that.context,\n source: _videoElm\n });\n for (var i = 0; i < that.children.length; i++) {\n var child = that.children[i];\n child.material.uniformMap['colorTexture'] = function () {\n // if (\n // videoElm.videoWidth != that.video.width ||\n // videoElm.videoHeight != that.video.height\n // ) {\n // console.log('resize texture')\n // texture.destroy()\n\n // texture = new Cesium.Texture({\n // context: that.context,\n // source: videoElm\n // })\n // }\n that.video.width = _videoElm.videoWidth;\n that.video.height = _videoElm.videoHeight;\n\n // texture.copyFrom({\n // source: videoElm\n // })\n texture.destroy();\n texture = new Cesium.Texture({\n context: that.context,\n source: _videoElm\n });\n return texture;\n };\n // if(that._clearMemoryIntervalEvent) {\n // clearInterval(that._clearMemoryIntervalEvent)\n // that._clearMemoryIntervalEvent = null\n // }\n // that._clearMemoryIntervalEvent = setInterval(() => {\n // let canvas = document.createElement(\"canvas\");\n // canvas.width = that.video.width;\n // canvas.height = that.video.height;\n // canvas.getContext(\"2d\").drawImage(videoElm, 0, 0, that.video.width, that.video.height);\n // child.material.uniformMap['colorTexture'] = () => {\n // texture.destroy()\n // texture = new Cesium.Texture({\n // context: that.context,\n // source: canvas\n // })\n // return texture\n // }\n // that.loaded = false\n // that.video.player.stop()\n // that.video.player.destroy()\n // setTimeout(() => {\n // that.video.player.play(that.video.player.url, 1)\n // }, 0);\n\n // if(that._videoLoadedIntervalEvent) {\n // clearInterval(that._videoLoadedIntervalEvent)\n // that._videoLoadedIntervalEvent = null\n // }\n // that._videoLoadedIntervalEvent = setInterval(() => {\n // if(that.loaded) {\n // child.material.uniformMap['colorTexture'] = () => {\n // texture.destroy()\n // texture = new Cesium.Texture({\n // context: that.context,\n // source: videoElm\n // })\n // return texture\n // }\n // clearInterval(that._videoLoadedIntervalEvent)\n // that._videoLoadedIntervalEvent = null\n // }\n // }, 500);\n // }, 60000);\n }\n } else if (canvasElm) {\n that.video.dom = canvasElm;\n that.video.width = canvasElm.width;\n that.video.height = canvasElm.height;\n that.video.playing = true;\n var _texture = new Cesium.Texture({\n context: that.context,\n source: canvasElm\n });\n for (var _i2 = 0; _i2 < that.children.length; _i2++) {\n var _child = that.children[_i2];\n _child.material.uniformMap['colorTexture'] = function () {\n if (canvasElm.width != that.video.width || canvasElm.height != that.video.height) {\n console.log('resize texture');\n _texture.destroy();\n _texture = new Cesium.Texture({\n context: that.context,\n source: canvasElm\n });\n }\n that.video.width = canvasElm.width;\n that.video.height = canvasElm.height;\n // texture.copyFrom({\n // source: canvasElm\n // })\n _texture.destroy();\n _texture = new Cesium.Texture({\n context: that.context,\n source: canvasElm\n });\n return _texture;\n };\n }\n }\n }\n }\n });\n player.play(url, 1);\n this.video.player = player;\n var videoElm = video.getElementsByTagName('video')[0];\n videoElm.addEventListener('loadeddata', function () {\n _this5.loaded = true;\n // for (let i = 0; i < this.children.length; i++) {\n // const child = this.children[i]\n // child.material.uniformMap['colorTexture'] = () => {\n // let texture = new Cesium.Texture({\n // context: this.context,\n // source: videoElm\n // })\n // return texture\n // }\n // }\n });\n // }\n }\n\n /**\r\n * 设置视频\r\n * @param {*} url\r\n */\n }, {\n key: \"setFlvVideo3\",\n value: function setFlvVideo3(url) {\n this.video.playing = false;\n this.video.timeupdate = false;\n this.video.url = url;\n if (!url) {\n return;\n }\n var id = 'video_' + Cesium.createGuid();\n var video = document.createElement('video');\n video.setAttribute('id', id);\n // document.body.appendChild(video)\n // video.style.display = 'none'\n var that = this;\n var player = new _flvplayer__WEBPACK_IMPORTED_MODULE_4__[\"default\"](video, {\n url: url\n });\n this.video.player = player;\n player.on('Events', 'MEDIA_INFO', function (info) {});\n player.flvPlayer.play().then(function () {\n that.video.dom = video;\n that.video.width = video.videoWidth;\n that.video.height = video.videoHeight;\n that.video.playing = true;\n var texture = new Cesium.Texture({\n context: that.context,\n source: video\n });\n for (var i = 0; i < that.children.length; i++) {\n var child = that.children[i];\n child.material.uniformMap['colorTexture'] = function () {\n that.video.width = video.videoWidth;\n that.video.height = video.videoHeight;\n texture.destroy();\n texture = new Cesium.Texture({\n context: that.context,\n source: video\n });\n return texture;\n };\n }\n });\n }\n }, {\n key: \"setFlvVideo2\",\n value: function setFlvVideo2(url) {\n this.video.playing = false;\n this.video.timeupdate = false;\n this.video.url = url;\n if (!url) {\n return;\n }\n var id = 'video_' + Cesium.createGuid();\n var videoBox = document.createElement('div');\n videoBox.setAttribute('id', id);\n videoBox.style.display = 'none';\n var that = this;\n var player = new _jessibucaPlayer__WEBPACK_IMPORTED_MODULE_5__[\"default\"](videoBox, {\n url: url\n });\n this.video.player = player;\n this.video.player.player.on(\"play\", function (flag) {\n console.log('1111111111');\n var video = videoBox.getElementsByTagName('canvas')[0];\n videoBox.innerHTML = '';\n that.video.dom = video;\n that.video.width = video.width;\n that.video.height = video.height;\n that.video.playing = true;\n var texture = new Cesium.Texture({\n context: that.context,\n source: video\n });\n for (var i = 0; i < that.children.length; i++) {\n var child = that.children[i];\n child.material.uniformMap['colorTexture'] = function () {\n that.video.width = video.width;\n that.video.height = video.height;\n texture.copyFrom({\n source: video\n });\n return texture;\n };\n }\n });\n }\n }, {\n key: \"setFlvVideo\",\n value: function setFlvVideo(url) {\n var _this6 = this;\n this.video.playing = false;\n this.video.timeupdate = false;\n this.video.url = url;\n if (!url) {\n return;\n }\n var that = this;\n var id = 'video_' + Cesium.createGuid();\n var parentDom = document.getElementById('yj-sdk-live-player-box');\n if (!parentDom) {\n parentDom = document.createElement('div');\n parentDom.setAttribute('id', 'yj-sdk-live-player-box');\n parentDom.style.display = 'none';\n document.body.appendChild(parentDom);\n }\n var videoBox = document.createElement('live-player');\n videoBox.setAttribute('id', id);\n videoBox.setAttribute('video-url', this.video.url);\n videoBox.setAttribute('live', true);\n videoBox.style.display = 'none';\n parentDom.appendChild(videoBox);\n this.video.player = videoBox;\n videoBox.addEventListener('play', function (evt) {\n console.log('播放成功', _this6.video.url, _this6.name);\n var video = videoBox.getElementsByTagName('video')[0];\n that.video.dom = video;\n that.video.width = video.width;\n that.video.height = video.height;\n that.video.playing = true;\n var texture = new Cesium.Texture({\n context: that.context,\n source: video\n });\n for (var i = 0; i < that.children.length; i++) {\n var child = that.children[i];\n child.material.uniformMap['colorTexture'] = function () {\n that.video.width = video.width;\n that.video.height = video.height;\n texture.copyFrom({\n source: video\n });\n return texture;\n };\n }\n });\n }\n }, {\n key: \"isDestroyed\",\n value: function isDestroyed() {\n return false;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // this.video.player && this.video.player.destroy()\n if (this.video.player) {\n this.video.player.setAttribute('video-url', null);\n var parentDom = document.getElementById('yj-sdk-live-player-box');\n parentDom.removeChild(this.video.player);\n this.video.player = null;\n }\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (AModelLoader);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9hZE9iak1vZGVsL0FNb2RlbExvYWRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Mb2FkT2JqTW9kZWwvQU1vZGVsTG9hZGVyLmpzP2E5NjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZsdnBsYXllciBmcm9tIFwiLi9mbHZwbGF5ZXJcIjtcclxuaW1wb3J0IGplc3NpYnVjYVBsYXllciBmcm9tIFwiLi9qZXNzaWJ1Y2FQbGF5ZXJcIjtcclxuXHJcbmNvbnN0IF9vYmplY3RfcGF0dGVybiA9IC9eW29nXVxccyooLispPy9cclxuY29uc3QgX21hdGVyaWFsX2xpYnJhcnlfcGF0dGVybiA9IC9ebXRsbGliIC9cclxuY29uc3QgX21hdGVyaWFsX3VzZV9wYXR0ZXJuID0gL151c2VtdGwgL1xyXG5jb25zdCBfbWFwX3VzZV9wYXR0ZXJuID0gL151c2VtYXAgL1xyXG5jb25zdCBfZmFjZV92ZXJ0ZXhfZGF0YV9zZXBhcmF0b3JfcGF0dGVybiA9IC9cXHMrL1xyXG5cclxuY29uc3QgX2NvbG9yID0ge1xyXG4gIHJlZDogMSxcclxuICBncmVlbjogMSxcclxuICBibHVlOiAxLFxyXG4gIGFscGhhOiAxXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBhcnNlclN0YXRlKCkge1xyXG4gIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgb2JqZWN0czogW10sXHJcbiAgICBvYmplY3Q6IHt9LFxyXG5cclxuICAgIHZlcnRpY2VzOiBbXSxcclxuICAgIG5vcm1hbHM6IFtdLFxyXG4gICAgY29sb3JzOiBbXSxcclxuICAgIHV2czogW10sXHJcblxyXG4gICAgbWF0ZXJpYWxzOiB7fSxcclxuICAgIG1hdGVyaWFsTGlicmFyaWVzOiBbXSxcclxuXHJcbiAgICBzdGFydE9iamVjdDogZnVuY3Rpb24gKG5hbWUsIGZyb21EZWNsYXJhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5vYmplY3QgJiYgdGhpcy5vYmplY3QuZnJvbURlY2xhcmF0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0Lm5hbWUgPSBuYW1lXHJcbiAgICAgICAgdGhpcy5vYmplY3QuZnJvbURlY2xhcmF0aW9uID0gZnJvbURlY2xhcmF0aW9uICE9PSBmYWxzZVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzTWF0ZXJpYWwgPVxyXG4gICAgICAgIHRoaXMub2JqZWN0ICYmIHR5cGVvZiB0aGlzLm9iamVjdC5jdXJyZW50TWF0ZXJpYWwgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgID8gdGhpcy5vYmplY3QuY3VycmVudE1hdGVyaWFsKClcclxuICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgIGlmICh0aGlzLm9iamVjdCAmJiB0eXBlb2YgdGhpcy5vYmplY3QuX2ZpbmFsaXplID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3QuX2ZpbmFsaXplKHRydWUpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vYmplY3QgPSB7XHJcbiAgICAgICAgbmFtZTogbmFtZSB8fCAnJyxcclxuICAgICAgICBmcm9tRGVjbGFyYXRpb246IGZyb21EZWNsYXJhdGlvbiAhPT0gZmFsc2UsXHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgICAgICB2ZXJ0aWNlczogW10sXHJcbiAgICAgICAgICBub3JtYWxzOiBbXSxcclxuICAgICAgICAgIGNvbG9yczogW10sXHJcbiAgICAgICAgICB1dnM6IFtdLFxyXG4gICAgICAgICAgaGFzVVZJbmRpY2VzOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBzbW9vdGg6IHRydWUsXHJcblxyXG4gICAgICAgIHN0YXJ0TWF0ZXJpYWw6IGZ1bmN0aW9uIChuYW1lLCBsaWJyYXJpZXMpIHtcclxuICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fZmluYWxpemUoZmFsc2UpXHJcbiAgICAgICAgICBpZiAocHJldmlvdXMgJiYgKHByZXZpb3VzLmluaGVyaXRlZCB8fCBwcmV2aW91cy5ncm91cENvdW50IDw9IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzLnNwbGljZShwcmV2aW91cy5pbmRleCwgMSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IG1hdGVyaWFsID0ge1xyXG4gICAgICAgICAgICBpbmRleDogdGhpcy5tYXRlcmlhbHMubGVuZ3RoLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICBtdGxsaWI6XHJcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShsaWJyYXJpZXMpICYmIGxpYnJhcmllcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/IGxpYnJhcmllc1tsaWJyYXJpZXMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgIHNtb290aDogcHJldmlvdXMgIT09IHVuZGVmaW5lZCA/IHByZXZpb3VzLnNtb290aCA6IHRoaXMuc21vb3RoLFxyXG4gICAgICAgICAgICBncm91cFN0YXJ0OiBwcmV2aW91cyAhPT0gdW5kZWZpbmVkID8gcHJldmlvdXMuZ3JvdXBFbmQgOiAwLFxyXG4gICAgICAgICAgICBncm91cEVuZDogLTEsXHJcbiAgICAgICAgICAgIGdyb3VwQ291bnQ6IC0xLFxyXG4gICAgICAgICAgICBpbmhlcml0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2xvbmVkID0ge1xyXG4gICAgICAgICAgICAgICAgaW5kZXg6IHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgPyBpbmRleCA6IHRoaXMuaW5kZXgsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBtdGxsaWI6IHRoaXMubXRsbGliLFxyXG4gICAgICAgICAgICAgICAgc21vb3RoOiB0aGlzLnNtb290aCxcclxuICAgICAgICAgICAgICAgIGdyb3VwU3RhcnQ6IDAsXHJcbiAgICAgICAgICAgICAgICBncm91cEVuZDogLTEsXHJcbiAgICAgICAgICAgICAgICBncm91cENvdW50OiAtMSxcclxuICAgICAgICAgICAgICAgIGluaGVyaXRlZDogZmFsc2VcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY2xvbmVkLmNsb25lID0gdGhpcy5jbG9uZS5iaW5kKGNsb25lZClcclxuICAgICAgICAgICAgICByZXR1cm4gY2xvbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubWF0ZXJpYWxzLnB1c2gobWF0ZXJpYWwpXHJcbiAgICAgICAgICByZXR1cm4gbWF0ZXJpYWxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjdXJyZW50TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1t0aGlzLm1hdGVyaWFscy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9maW5hbGl6ZTogZnVuY3Rpb24gKGVuZCkge1xyXG4gICAgICAgICAgY29uc3QgbGFzdE11bHRpTWF0ZXJpYWwgPSB0aGlzLmN1cnJlbnRNYXRlcmlhbCgpXHJcbiAgICAgICAgICBpZiAobGFzdE11bHRpTWF0ZXJpYWwgJiYgbGFzdE11bHRpTWF0ZXJpYWwuZ3JvdXBFbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGxhc3RNdWx0aU1hdGVyaWFsLmdyb3VwRW5kID0gdGhpcy5nZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggLyAzXHJcbiAgICAgICAgICAgIGxhc3RNdWx0aU1hdGVyaWFsLmdyb3VwQ291bnQgPVxyXG4gICAgICAgICAgICAgIGxhc3RNdWx0aU1hdGVyaWFsLmdyb3VwRW5kIC0gbGFzdE11bHRpTWF0ZXJpYWwuZ3JvdXBTdGFydFxyXG4gICAgICAgICAgICBsYXN0TXVsdGlNYXRlcmlhbC5pbmhlcml0ZWQgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbmQgJiYgdGhpcy5tYXRlcmlhbHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtaSA9IHRoaXMubWF0ZXJpYWxzLmxlbmd0aCAtIDE7IG1pID49IDA7IG1pLS0pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbHNbbWldLmdyb3VwQ291bnQgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHMuc3BsaWNlKG1pLCAxKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbmQgJiYgdGhpcy5tYXRlcmlhbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgIHNtb290aDogdGhpcy5zbW9vdGhcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBsYXN0TXVsdGlNYXRlcmlhbFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXZpb3VzTWF0ZXJpYWwgJiZcclxuICAgICAgICBwcmV2aW91c01hdGVyaWFsLm5hbWUgJiZcclxuICAgICAgICB0eXBlb2YgcHJldmlvdXNNYXRlcmlhbC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBkZWNsYXJlZCA9IHByZXZpb3VzTWF0ZXJpYWwuY2xvbmUoMClcclxuICAgICAgICBkZWNsYXJlZC5pbmhlcml0ZWQgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5vYmplY3QubWF0ZXJpYWxzLnB1c2goZGVjbGFyZWQpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vYmplY3RzLnB1c2godGhpcy5vYmplY3QpXHJcbiAgICB9LFxyXG4gICAgZmluYWxpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKHRoaXMub2JqZWN0ICYmIHR5cGVvZiB0aGlzLm9iamVjdC5fZmluYWxpemUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aGlzLm9iamVjdC5fZmluYWxpemUodHJ1ZSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHBhcnNlVmVydGV4SW5kZXg6IGZ1bmN0aW9uICh2YWx1ZSwgbGVuKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQodmFsdWUsIDEwKVxyXG4gICAgICByZXR1cm4gKGluZGV4ID49IDAgPyBpbmRleCAtIDEgOiBpbmRleCArIGxlbiAvIDMpICogM1xyXG4gICAgfSxcclxuICAgIHBhcnNlTm9ybWFsSW5kZXg6IGZ1bmN0aW9uICh2YWx1ZSwgbGVuKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQodmFsdWUsIDEwKVxyXG4gICAgICByZXR1cm4gKGluZGV4ID49IDAgPyBpbmRleCAtIDEgOiBpbmRleCArIGxlbiAvIDMpICogM1xyXG4gICAgfSxcclxuICAgIHBhcnNlVVZJbmRleDogZnVuY3Rpb24gKHZhbHVlLCBsZW4pIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCh2YWx1ZSwgMTApXHJcbiAgICAgIHJldHVybiAoaW5kZXggPj0gMCA/IGluZGV4IC0gMSA6IGluZGV4ICsgbGVuIC8gMikgKiAyXHJcbiAgICB9LFxyXG4gICAgYWRkVmVydGV4OiBmdW5jdGlvbiAoYSwgYiwgYykge1xyXG4gICAgICBjb25zdCBzcmMgPSB0aGlzLnZlcnRpY2VzXHJcbiAgICAgIGNvbnN0IGRzdCA9IHRoaXMub2JqZWN0Lmdlb21ldHJ5LnZlcnRpY2VzXHJcbiAgICAgIGRzdC5wdXNoKHNyY1thICsgMF0sIHNyY1thICsgMV0sIHNyY1thICsgMl0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tiICsgMF0sIHNyY1tiICsgMV0sIHNyY1tiICsgMl0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tjICsgMF0sIHNyY1tjICsgMV0sIHNyY1tjICsgMl0pXHJcbiAgICB9LFxyXG4gICAgYWRkVmVydGV4UG9pbnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgIGNvbnN0IHNyYyA9IHRoaXMudmVydGljZXNcclxuICAgICAgY29uc3QgZHN0ID0gdGhpcy5vYmplY3QuZ2VvbWV0cnkudmVydGljZXNcclxuXHJcbiAgICAgIGRzdC5wdXNoKHNyY1thICsgMF0sIHNyY1thICsgMV0sIHNyY1thICsgMl0pXHJcbiAgICB9LFxyXG4gICAgYWRkVmVydGV4TGluZTogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgY29uc3Qgc3JjID0gdGhpcy52ZXJ0aWNlc1xyXG4gICAgICBjb25zdCBkc3QgPSB0aGlzLm9iamVjdC5nZW9tZXRyeS52ZXJ0aWNlc1xyXG4gICAgICBkc3QucHVzaChzcmNbYSArIDBdLCBzcmNbYSArIDFdLCBzcmNbYSArIDJdKVxyXG4gICAgfSxcclxuICAgIGFkZE5vcm1hbDogZnVuY3Rpb24gKGEsIGIsIGMpIHtcclxuICAgICAgY29uc3Qgc3JjID0gdGhpcy5ub3JtYWxzXHJcbiAgICAgIGNvbnN0IGRzdCA9IHRoaXMub2JqZWN0Lmdlb21ldHJ5Lm5vcm1hbHNcclxuXHJcbiAgICAgIGRzdC5wdXNoKHNyY1thICsgMF0sIHNyY1thICsgMV0sIHNyY1thICsgMl0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tiICsgMF0sIHNyY1tiICsgMV0sIHNyY1tiICsgMl0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tjICsgMF0sIHNyY1tjICsgMV0sIHNyY1tjICsgMl0pXHJcbiAgICB9LFxyXG4gICAgYWRkRmFjZU5vcm1hbDogZnVuY3Rpb24gKGEsIGIsIGMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdhZGRGYWNlTm9ybWFsJylcclxuICAgICAgLy8gY29uc3Qgc3JjID0gdGhpcy52ZXJ0aWNlcztcclxuICAgICAgLy8gY29uc3QgZHN0ID0gdGhpcy5vYmplY3QuZ2VvbWV0cnkubm9ybWFscztcclxuXHJcbiAgICAgIC8vIF92QS5mcm9tQXJyYXkoIHNyYywgYSApO1xyXG4gICAgICAvLyBfdkIuZnJvbUFycmF5KCBzcmMsIGIgKTtcclxuICAgICAgLy8gX3ZDLmZyb21BcnJheSggc3JjLCBjICk7XHJcblxyXG4gICAgICAvLyBfY2Iuc3ViVmVjdG9ycyggX3ZDLCBfdkIgKTtcclxuICAgICAgLy8gX2FiLnN1YlZlY3RvcnMoIF92QSwgX3ZCICk7XHJcbiAgICAgIC8vIF9jYi5jcm9zcyggX2FiICk7XHJcblxyXG4gICAgICAvLyBfY2Iubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAvLyBkc3QucHVzaCggX2NiLngsIF9jYi55LCBfY2IueiApO1xyXG4gICAgICAvLyBkc3QucHVzaCggX2NiLngsIF9jYi55LCBfY2IueiApO1xyXG4gICAgICAvLyBkc3QucHVzaCggX2NiLngsIF9jYi55LCBfY2IueiApO1xyXG4gICAgfSxcclxuICAgIGFkZENvbG9yOiBmdW5jdGlvbiAoYSwgYiwgYykge1xyXG4gICAgICBjb25zdCBzcmMgPSB0aGlzLmNvbG9yc1xyXG4gICAgICBjb25zdCBkc3QgPSB0aGlzLm9iamVjdC5nZW9tZXRyeS5jb2xvcnNcclxuICAgICAgaWYgKHNyY1thXSAhPT0gdW5kZWZpbmVkKSBkc3QucHVzaChzcmNbYSArIDBdLCBzcmNbYSArIDFdLCBzcmNbYSArIDJdKVxyXG4gICAgICBpZiAoc3JjW2JdICE9PSB1bmRlZmluZWQpIGRzdC5wdXNoKHNyY1tiICsgMF0sIHNyY1tiICsgMV0sIHNyY1tiICsgMl0pXHJcbiAgICAgIGlmIChzcmNbY10gIT09IHVuZGVmaW5lZCkgZHN0LnB1c2goc3JjW2MgKyAwXSwgc3JjW2MgKyAxXSwgc3JjW2MgKyAyXSlcclxuICAgIH0sXHJcbiAgICBhZGRVVjogZnVuY3Rpb24gKGEsIGIsIGMpIHtcclxuICAgICAgY29uc3Qgc3JjID0gdGhpcy51dnNcclxuICAgICAgY29uc3QgZHN0ID0gdGhpcy5vYmplY3QuZ2VvbWV0cnkudXZzXHJcbiAgICAgIGRzdC5wdXNoKHNyY1thICsgMF0sIHNyY1thICsgMV0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tiICsgMF0sIHNyY1tiICsgMV0pXHJcbiAgICAgIGRzdC5wdXNoKHNyY1tjICsgMF0sIHNyY1tjICsgMV0pXHJcbiAgICB9LFxyXG4gICAgYWRkRGVmYXVsdFVWOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IGRzdCA9IHRoaXMub2JqZWN0Lmdlb21ldHJ5LnV2c1xyXG4gICAgICBkc3QucHVzaCgwLCAwKVxyXG4gICAgICBkc3QucHVzaCgwLCAwKVxyXG4gICAgICBkc3QucHVzaCgwLCAwKVxyXG4gICAgfSxcclxuICAgIGFkZFVWTGluZTogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgY29uc3Qgc3JjID0gdGhpcy51dnNcclxuICAgICAgY29uc3QgZHN0ID0gdGhpcy5vYmplY3QuZ2VvbWV0cnkudXZzXHJcbiAgICAgIGRzdC5wdXNoKHNyY1thICsgMF0sIHNyY1thICsgMV0pXHJcbiAgICB9LFxyXG4gICAgYWRkRmFjZTogZnVuY3Rpb24gKGEsIGIsIGMsIHVhLCB1YiwgdWMsIG5hLCBuYiwgbmMpIHtcclxuICAgICAgY29uc3QgdkxlbiA9IHRoaXMudmVydGljZXMubGVuZ3RoXHJcbiAgICAgIGxldCBpYSA9IHRoaXMucGFyc2VWZXJ0ZXhJbmRleChhLCB2TGVuKVxyXG4gICAgICBsZXQgaWIgPSB0aGlzLnBhcnNlVmVydGV4SW5kZXgoYiwgdkxlbilcclxuICAgICAgbGV0IGljID0gdGhpcy5wYXJzZVZlcnRleEluZGV4KGMsIHZMZW4pXHJcbiAgICAgIHRoaXMuYWRkVmVydGV4KGlhLCBpYiwgaWMpXHJcbiAgICAgIHRoaXMuYWRkQ29sb3IoaWEsIGliLCBpYylcclxuICAgICAgaWYgKG5hICE9PSB1bmRlZmluZWQgJiYgbmEgIT09ICcnKSB7XHJcbiAgICAgICAgY29uc3QgbkxlbiA9IHRoaXMubm9ybWFscy5sZW5ndGhcclxuICAgICAgICBpYSA9IHRoaXMucGFyc2VOb3JtYWxJbmRleChuYSwgbkxlbilcclxuICAgICAgICBpYiA9IHRoaXMucGFyc2VOb3JtYWxJbmRleChuYiwgbkxlbilcclxuICAgICAgICBpYyA9IHRoaXMucGFyc2VOb3JtYWxJbmRleChuYywgbkxlbilcclxuICAgICAgICB0aGlzLmFkZE5vcm1hbChpYSwgaWIsIGljKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRkRmFjZU5vcm1hbChpYSwgaWIsIGljKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh1YSAhPT0gdW5kZWZpbmVkICYmIHVhICE9PSAnJykge1xyXG4gICAgICAgIGNvbnN0IHV2TGVuID0gdGhpcy51dnMubGVuZ3RoXHJcbiAgICAgICAgaWEgPSB0aGlzLnBhcnNlVVZJbmRleCh1YSwgdXZMZW4pXHJcbiAgICAgICAgaWIgPSB0aGlzLnBhcnNlVVZJbmRleCh1YiwgdXZMZW4pXHJcbiAgICAgICAgaWMgPSB0aGlzLnBhcnNlVVZJbmRleCh1YywgdXZMZW4pXHJcbiAgICAgICAgdGhpcy5hZGRVVihpYSwgaWIsIGljKVxyXG4gICAgICAgIHRoaXMub2JqZWN0Lmdlb21ldHJ5Lmhhc1VWSW5kaWNlcyA9IHRydWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFkZERlZmF1bHRVVigpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBhZGRQb2ludEdlb21ldHJ5OiBmdW5jdGlvbiAodmVydGljZXMpIHtcclxuICAgICAgdGhpcy5vYmplY3QuZ2VvbWV0cnkudHlwZSA9ICdQb2ludHMnXHJcbiAgICAgIGNvbnN0IHZMZW4gPSB0aGlzLnZlcnRpY2VzLmxlbmd0aFxyXG4gICAgICBmb3IgKGxldCB2aSA9IDAsIGwgPSB2ZXJ0aWNlcy5sZW5ndGg7IHZpIDwgbDsgdmkrKykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJzZVZlcnRleEluZGV4KHZlcnRpY2VzW3ZpXSwgdkxlbilcclxuICAgICAgICB0aGlzLmFkZFZlcnRleFBvaW50KGluZGV4KVxyXG4gICAgICAgIHRoaXMuYWRkQ29sb3IoaW5kZXgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBhZGRMaW5lR2VvbWV0cnk6IGZ1bmN0aW9uICh2ZXJ0aWNlcywgdXZzKSB7XHJcbiAgICAgIHRoaXMub2JqZWN0Lmdlb21ldHJ5LnR5cGUgPSAnTGluZSdcclxuICAgICAgY29uc3QgdkxlbiA9IHRoaXMudmVydGljZXMubGVuZ3RoXHJcbiAgICAgIGNvbnN0IHV2TGVuID0gdGhpcy51dnMubGVuZ3RoXHJcbiAgICAgIGZvciAobGV0IHZpID0gMCwgbCA9IHZlcnRpY2VzLmxlbmd0aDsgdmkgPCBsOyB2aSsrKSB7XHJcbiAgICAgICAgdGhpcy5hZGRWZXJ0ZXhMaW5lKHRoaXMucGFyc2VWZXJ0ZXhJbmRleCh2ZXJ0aWNlc1t2aV0sIHZMZW4pKVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IHV2aSA9IDAsIGwgPSB1dnMubGVuZ3RoOyB1dmkgPCBsOyB1dmkrKykge1xyXG4gICAgICAgIHRoaXMuYWRkVVZMaW5lKHRoaXMucGFyc2VVVkluZGV4KHV2c1t1dmldLCB1dkxlbikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGUuc3RhcnRPYmplY3QoJycsIGZhbHNlKVxyXG4gIHJldHVybiBzdGF0ZVxyXG59XHJcblxyXG5jb25zdCBobHNqc0RlZmF1bHRzID0ge1xyXG4gIGRlYnVnOiBmYWxzZSxcclxuICBlbmFibGVXb3JrZXI6IHRydWUsXHJcbiAgbG93TGF0ZW5jeU1vZGU6IHRydWUsXHJcbiAgLy8gbWF4QnVmZmVyTGVuZ3RoOiAzMDAsXHJcbiAgLy8gbWF4TWF4QnVmZmVyTGVuZ3RoOiA2MDAwLFxyXG4gIC8vIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxyXG4gIC8vIG1heEJ1ZmZlclNpemU6IDYwMCAqIDEwMDAgKiAxMDAwLFxyXG4gIGJhY2tCdWZmZXJMZW5ndGg6IDYwICogMS41XHJcbn1cclxuXHJcbmNsYXNzIEFNb2RlbExvYWRlciB7XHJcbiAgY29uc3RydWN0b3IoY29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxyXG4gICAgLy8gdGhpcy5obHMgPSBuZXcgSGxzKGhsc2pzRGVmYXVsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5byC5q2l6LCD55SoXHJcbiAgICogQHBhcmFtIHsqfSB1cmxcclxuICAgKi9cclxuICBMb2FkKHVybCwgdmlkZW9JZCwgaG9zdCkge1xyXG4gICAgLy/op6PmnpBvYmrmlbDmja5cclxuICAgIHRoaXMuaG9zdCA9IGhvc3RcclxuICAgIHRoaXMudmlkZW9JZCA9IHZpZGVvSWRcclxuICAgIGxldCBuYW1lID0gdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpXHJcbiAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKVxyXG4gICAgcmV0dXJuIENlc2l1bS5SZXNvdXJjZS5mZXRjaFRleHQodXJsKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLlBhcnNlKHJlc3VsdCwgdXJsLnN1YnN0cmluZygwLCB1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpLCBuYW1lKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIFBhcnNlKHRleHQsIHBhdGgsIG4pIHtcclxuICAgIGNvbnN0IHN0YXRlID0gbmV3IFBhcnNlclN0YXRlKClcclxuICAgIGlmICh0ZXh0LmluZGV4T2YoJ1xcclxcbicpICE9PSAtMSkge1xyXG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXHJcbiAgICB9XHJcbiAgICBpZiAodGV4dC5pbmRleE9mKCdcXFxcXFxuJykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcXFxcXG4vZywgJycpXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXHJcbiAgICBsZXQgcmVzdWx0ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltU3RhcnQoKVxyXG4gICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlXHJcbiAgICAgIGNvbnN0IGxpbmVGaXJzdENoYXIgPSBsaW5lLmNoYXJBdCgwKVxyXG4gICAgICBpZiAobGluZUZpcnN0Q2hhciA9PT0gJyMnKSBjb250aW51ZVxyXG4gICAgICBpZiAobGluZUZpcnN0Q2hhciA9PT0gJ3YnKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGxpbmUuc3BsaXQoX2ZhY2VfdmVydGV4X2RhdGFfc2VwYXJhdG9yX3BhdHRlcm4pXHJcbiAgICAgICAgc3dpdGNoIChkYXRhWzBdKSB7XHJcbiAgICAgICAgICBjYXNlICd2JzpcclxuICAgICAgICAgICAgc3RhdGUudmVydGljZXMucHVzaChcclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KGRhdGFbMV0pLFxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoZGF0YVsyXSksXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChkYXRhWzNdKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+PSA3KSB7XHJcbiAgICAgICAgICAgICAgQ2VzaXVtLkNvbG9yLmZyb21CeXRlcyhcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoZGF0YVs0XSksXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGRhdGFbNV0pLFxyXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChkYXRhWzZdKSxcclxuICAgICAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgICAgICBfY29sb3JcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgc3RhdGUuY29sb3JzLnB1c2goX2NvbG9yLnJlZCwgX2NvbG9yLmdyZWVuLCBfY29sb3IuYmx1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzdGF0ZS5jb2xvcnMucHVzaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICd2bic6XHJcbiAgICAgICAgICAgIHN0YXRlLm5vcm1hbHMucHVzaChcclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KGRhdGFbMV0pLFxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoZGF0YVsyXSksXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChkYXRhWzNdKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICd2dCc6XHJcbiAgICAgICAgICAgIHN0YXRlLnV2cy5wdXNoKHBhcnNlRmxvYXQoZGF0YVsxXSksIHBhcnNlRmxvYXQoZGF0YVsyXSkpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmVGaXJzdENoYXIgPT09ICdmJykge1xyXG4gICAgICAgIGNvbnN0IGxpbmVEYXRhID0gbGluZS5zbGljZSgxKS50cmltKClcclxuICAgICAgICBjb25zdCB2ZXJ0ZXhEYXRhID0gbGluZURhdGEuc3BsaXQoX2ZhY2VfdmVydGV4X2RhdGFfc2VwYXJhdG9yX3BhdHRlcm4pXHJcbiAgICAgICAgY29uc3QgZmFjZVZlcnRpY2VzID0gW11cclxuICAgICAgICBmb3IgKGxldCBqID0gMCwgamwgPSB2ZXJ0ZXhEYXRhLmxlbmd0aDsgaiA8IGpsOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHZlcnRleERhdGFbal1cclxuICAgICAgICAgIGlmICh2ZXJ0ZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2ZXJ0ZXhQYXJ0cyA9IHZlcnRleC5zcGxpdCgnLycpXHJcbiAgICAgICAgICAgIGZhY2VWZXJ0aWNlcy5wdXNoKHZlcnRleFBhcnRzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2MSA9IGZhY2VWZXJ0aWNlc1swXVxyXG4gICAgICAgIGZvciAobGV0IGogPSAxLCBqbCA9IGZhY2VWZXJ0aWNlcy5sZW5ndGggLSAxOyBqIDwgamw7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgdjIgPSBmYWNlVmVydGljZXNbal1cclxuICAgICAgICAgIGNvbnN0IHYzID0gZmFjZVZlcnRpY2VzW2ogKyAxXVxyXG4gICAgICAgICAgc3RhdGUuYWRkRmFjZShcclxuICAgICAgICAgICAgdjFbMF0sXHJcbiAgICAgICAgICAgIHYyWzBdLFxyXG4gICAgICAgICAgICB2M1swXSxcclxuICAgICAgICAgICAgdjFbMV0sXHJcbiAgICAgICAgICAgIHYyWzFdLFxyXG4gICAgICAgICAgICB2M1sxXSxcclxuICAgICAgICAgICAgdjFbMl0sXHJcbiAgICAgICAgICAgIHYyWzJdLFxyXG4gICAgICAgICAgICB2M1syXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChsaW5lRmlyc3RDaGFyID09PSAnbCcpIHtcclxuICAgICAgICBjb25zdCBsaW5lUGFydHMgPSBsaW5lXHJcbiAgICAgICAgICAuc3Vic3RyaW5nKDEpXHJcbiAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAuc3BsaXQoJyAnKVxyXG4gICAgICAgIGxldCBsaW5lVmVydGljZXMgPSBbXVxyXG4gICAgICAgIGNvbnN0IGxpbmVVVnMgPSBbXVxyXG4gICAgICAgIGlmIChsaW5lLmluZGV4T2YoJy8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGxpbmVWZXJ0aWNlcyA9IGxpbmVQYXJ0c1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBsaSA9IDAsIGxsZW4gPSBsaW5lUGFydHMubGVuZ3RoOyBsaSA8IGxsZW47IGxpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lUGFydHNbbGldLnNwbGl0KCcvJylcclxuICAgICAgICAgICAgaWYgKHBhcnRzWzBdICE9PSAnJykgbGluZVZlcnRpY2VzLnB1c2gocGFydHNbMF0pXHJcbiAgICAgICAgICAgIGlmIChwYXJ0c1sxXSAhPT0gJycpIGxpbmVVVnMucHVzaChwYXJ0c1sxXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuYWRkTGluZUdlb21ldHJ5KGxpbmVWZXJ0aWNlcywgbGluZVVWcylcclxuICAgICAgfSBlbHNlIGlmIChsaW5lRmlyc3RDaGFyID09PSAncCcpIHtcclxuICAgICAgICBjb25zdCBsaW5lRGF0YSA9IGxpbmUuc2xpY2UoMSkudHJpbSgpXHJcbiAgICAgICAgY29uc3QgcG9pbnREYXRhID0gbGluZURhdGEuc3BsaXQoJyAnKVxyXG4gICAgICAgIHN0YXRlLmFkZFBvaW50R2VvbWV0cnkocG9pbnREYXRhKVxyXG4gICAgICB9IGVsc2UgaWYgKChyZXN1bHQgPSBfb2JqZWN0X3BhdHRlcm4uZXhlYyhsaW5lKSkgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gKCcgJyArIHJlc3VsdFswXS5zbGljZSgxKS50cmltKCkpLnNsaWNlKDEpXHJcbiAgICAgICAgc3RhdGUuc3RhcnRPYmplY3QobilcclxuICAgICAgfSBlbHNlIGlmIChfbWF0ZXJpYWxfdXNlX3BhdHRlcm4udGVzdChsaW5lKSkge1xyXG4gICAgICAgIHN0YXRlLm9iamVjdC5zdGFydE1hdGVyaWFsKFxyXG4gICAgICAgICAgbGluZS5zdWJzdHJpbmcoNykudHJpbSgpLFxyXG4gICAgICAgICAgc3RhdGUubWF0ZXJpYWxMaWJyYXJpZXNcclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoX21hdGVyaWFsX2xpYnJhcnlfcGF0dGVybi50ZXN0KGxpbmUpKSB7XHJcbiAgICAgICAgc3RhdGUubWF0ZXJpYWxMaWJyYXJpZXMucHVzaChsaW5lLnN1YnN0cmluZyg3KS50cmltKCkpXHJcbiAgICAgIH0gZWxzZSBpZiAoX21hcF91c2VfcGF0dGVybi50ZXN0KGxpbmUpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgJ1JlbmRlcmluZyBpZGVudGlmaWVyIFwidXNlbWFwXCIgbm90IHN1cHBvcnRlZC4gVGV4dHVyZXMgbXVzdCBiZSBkZWZpbmVkIGluIE1UTCBmaWxlcy4nXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmVGaXJzdENoYXIgPT09ICdzJykge1xyXG4gICAgICAgIHJlc3VsdCA9IGxpbmUuc3BsaXQoJyAnKVxyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN1bHRbMV0udHJpbSgpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIHN0YXRlLm9iamVjdC5zbW9vdGggPSB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnb2ZmJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdGF0ZS5vYmplY3Quc21vb3RoID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHN0YXRlLm9iamVjdC5jdXJyZW50TWF0ZXJpYWwoKVxyXG4gICAgICAgIGlmIChtYXRlcmlhbCkgbWF0ZXJpYWwuc21vb3RoID0gc3RhdGUub2JqZWN0LnNtb290aFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChsaW5lID09PSAnXFwwJykgY29udGludWVcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1VuZXhwZWN0ZWQgbGluZTogXCInICsgbGluZSArICdcIicpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5maW5hbGl6ZSgpXHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IE5vZGUodGhpcy5jb250ZXh0LCB0aGlzLmhscywgdGhpcy52aWRlb0lkLCB0aGlzLmhvc3QsIG4pXHJcbiAgICBjb25zdCBoYXNQcmltaXRpdmVzID0gIShcclxuICAgICAgc3RhdGUub2JqZWN0cy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgc3RhdGUub2JqZWN0c1swXS5nZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggPT09IDBcclxuICAgIClcclxuXHJcbiAgICBpZiAoaGFzUHJpbWl0aXZlcyA9PT0gdHJ1ZSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHN0YXRlLm9iamVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gc3RhdGUub2JqZWN0c1tpXVxyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5XHJcbiAgICAgICAgY29uc3QgbWF0ZXJpYWxzID0gb2JqZWN0Lm1hdGVyaWFsc1xyXG4gICAgICAgIGlmIChnZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggPT09IDApIGNvbnRpbnVlXHJcblxyXG4gICAgICAgIGxldCBtZXNoID0gbmV3IE1lc2godGhpcy5jb250ZXh0LCBnZW9tZXRyeSlcclxuICAgICAgICBmb3IgKGxldCBtaSA9IDAsIG1pTGVuID0gbWF0ZXJpYWxzLmxlbmd0aDsgbWkgPCBtaUxlbjsgbWkrKykge1xyXG4gICAgICAgICAgY29uc3Qgc291cmNlTWF0ZXJpYWwgPSBtYXRlcmlhbHNbbWldXHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbEhhc2ggPVxyXG4gICAgICAgICAgICBzb3VyY2VNYXRlcmlhbC5uYW1lICsgJ18nICsgc291cmNlTWF0ZXJpYWwuc21vb3RoICsgJ18nXHJcbiAgICAgICAgICBsZXQgbWF0ZXJpYWwgPSBzdGF0ZS5tYXRlcmlhbHNbbWF0ZXJpYWxIYXNoXVxyXG5cclxuICAgICAgICAgIHNvdXJjZU1hdGVyaWFsLm10bGxpYiA9IG4gKyAnLm10bCdcclxuXHJcbiAgICAgICAgICBpZiAobWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbChcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICBzb3VyY2VNYXRlcmlhbC5tdGxsaWJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5uYW1lID0gc291cmNlTWF0ZXJpYWwubmFtZVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IHNvdXJjZU1hdGVyaWFsLnNtb290aCA/IGZhbHNlIDogdHJ1ZVxyXG5cclxuICAgICAgICAgICAgc3RhdGUubWF0ZXJpYWxzW21hdGVyaWFsSGFzaF0gPSBtYXRlcmlhbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbWVzaC5zZXRNYXRlcmlhbChtYXRlcmlhbClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lc2gubmFtZSA9IG9iamVjdC5uYW1lXHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5hZGQobWVzaClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250YWluZXJcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIE1hdGVyaWFsIHtcclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBnZW9tZXRyeSwgcGF0aCwgbXRsbGliKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XHJcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2VcclxuXHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgY2FudmFzLndpZHRoID0gNTEyIC8v6buY6K6kXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gNTEyIC8v6buY6K6kXHJcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhc1xyXG4gICAgbGV0IHByb21pc2UgPSBDZXNpdW0uUmVzb3VyY2UuZmV0Y2hUZXh0KHBhdGggKyBtdGxsaWIpLnRoZW4oYXN5bmMgdGV4dCA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBbXVxyXG4gICAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW1TdGFydCgpXHJcbiAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZVxyXG4gICAgICAgIGNvbnN0IHQgPSBsaW5lLnNwbGl0KCcgJylbMF1cclxuICAgICAgICBpZiAodCA9PT0gJ21hcF9LZCcpIHtcclxuICAgICAgICAgIGxldCBtYXAgPSBsaW5lLnNwbGl0KCcgJylbMV1cclxuICAgICAgICAgIGxldCBwaWN0dXJlID0gbXRsbGliLnJlcGxhY2UoXCIubXRsXCIsIFwiX3Jlc3VsdC5qcGdcIilcclxuXHJcblxyXG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgICBkaWZmdXNlbWFwOiBhd2FpdCB0aGlzLmxvYWRUZXh0dXJlKHBhdGggKyBwaWN0dXJlKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdClcclxuICAgIH0pXHJcblxyXG4gICAgLy/liJvlu7pzaGFkZXJcclxuICAgIGxldCB2cyA9ICdhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG4nXHJcbiAgICBsZXQgZnMgPSAnJ1xyXG5cclxuICAgIGxldCBvdXRWUyA9ICcnXHJcblxyXG4gICAgbGV0IGhhc05vcm1hbCA9IGZhbHNlXHJcbiAgICBsZXQgaGFzVmVydGV4Q29sb3JzID0gZmFsc2VcclxuICAgIGxldCBoYXNTdCA9IGZhbHNlXHJcblxyXG4gICAgaWYgKGdlb21ldHJ5Lm5vcm1hbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBoYXNOb3JtYWwgPSB0cnVlXHJcbiAgICB9XHJcbiAgICAvL+mhtueCueiJslxyXG4gICAgaWYgKGdlb21ldHJ5LmNvbG9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGhhc1ZlcnRleENvbG9ycyA9IHRydWVcclxuICAgIH1cclxuICAgIC8vIFVWXHJcbiAgICBpZiAoZ2VvbWV0cnkuaGFzVVZJbmRpY2VzID09PSB0cnVlKSB7XHJcbiAgICAgIGhhc1N0ID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNOb3JtYWwpIHtcclxuICAgICAgdnMgKz0gJ2F0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcXG4nXHJcblxyXG4gICAgICB2cyArPSAndmFyeWluZyB2ZWMzIHZfbm9ybWFsO1xcbidcclxuICAgICAgZnMgKz0gJ3ZhcnlpbmcgdmVjMyB2X25vcm1hbDtcXG4nXHJcbiAgICAgIG91dFZTICs9ICd2X25vcm1hbCA9IG5vcm1hbDtcXG4nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc1ZlcnRleENvbG9ycykge1xyXG4gICAgICB2cyArPSAnYXR0cmlidXRlIHZlYzMgY29sb3I7XFxuJ1xyXG5cclxuICAgICAgdnMgKz0gJ3ZhcnlpbmcgdmVjMiB2X2NvbG9yO1xcbidcclxuICAgICAgZnMgKz0gJ3ZhcnlpbmcgdmVjMiB2X2NvbG9yO1xcbidcclxuICAgICAgb3V0VlMgKz0gJ3ZfY29sb3IgPSBjb2xvcjtcXG4nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc1N0KSB7XHJcbiAgICAgIHZzICs9ICdhdHRyaWJ1dGUgdmVjMiB1djtcXG4nXHJcbiAgICAgIHZzICs9ICd2YXJ5aW5nIHZlYzIgdl91djtcXG4nXHJcblxyXG4gICAgICBmcyArPSAndmFyeWluZyB2ZWMyIHZfdXY7XFxuJ1xyXG4gICAgICBvdXRWUyArPSAndl91diA9IHV2O1xcbidcclxuICAgIH1cclxuXHJcbiAgICB2cyArPSBgXHJcbiAgICAgICAgdm9pZCBtYWluKCkge1xyXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGN6bV9tb2RlbFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgICAgICAgICAke291dFZTfVxyXG4gICAgICAgIH1cclxuICAgICAgICBgXHJcblxyXG4gICAgZnMgKz0gYFxyXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgY29sb3JUZXh0dXJlO1xyXG4gICAgICAgIHZvaWQgbWFpbigpIHtcclxuXHRcdFx0ICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKGNvbG9yVGV4dHVyZSwgdl91dik7XHJcblx0XHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBgXHJcblxyXG4gICAgdGhpcy5wcm9ncmFtID0gQ2VzaXVtLlNoYWRlclByb2dyYW0uZnJvbUNhY2hlKHtcclxuICAgICAgY29udGV4dDogY29udGV4dCxcclxuICAgICAgdmVydGV4U2hhZGVyU291cmNlOiB2cyxcclxuICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2U6IGZzXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMudW5pZm9ybU1hcCA9IHt9XHJcblxyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBwcm9taXNlLnRoZW4oaW1hZ2VzID0+IHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaW1hZ2VzW2ldXHJcbiAgICAgICAgbGV0IGRpZmZ1c2VtYXAgPSBlbGVtZW50LmRpZmZ1c2VtYXBcclxuICAgICAgICB0aGlzLnVuaWZvcm1NYXAuY29sb3JUZXh0dXJlID0gKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGRpZmZ1c2VtYXBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhhdC5yZWFkeSA9IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb2xvclRleHR1cmUodmlkZW8sIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIGlmICh0aGlzLnJlYWR5IC8qJiYgQ2VzaXVtLmRlZmluZWQodmlkZW8udmlkZW9qcykqLykge1xyXG4gICAgICAvLyB2aWRlby52aWRlb2pzLnBsYXkoKTtcclxuICAgICAgbGV0IGNvbG9yVGV4dHVyZSA9IHRoaXMudW5pZm9ybU1hcC5jb2xvclRleHR1cmUoKVxyXG4gICAgICBpZiAodmlkZW8ucGxheWluZyAmJiB2aWRlby50aW1ldXBkYXRlKSB7XHJcbiAgICAgICAgaWYgKHdpZHRoICE9PSBjb2xvclRleHR1cmUud2lkdGggfHwgaGVpZ2h0ICE9PSBjb2xvclRleHR1cmUuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBjb2xvclRleHR1cmUuZGVzdHJveSgpXHJcblxyXG4gICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSAxMjgwXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSA5NjBcclxuXHJcbiAgICAgICAgICAvLyDph43mlrDliJvlu7p0ZXh0dXJlXHJcbiAgICAgICAgICBjb25zdCBjYW52YXNDb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG4gICAgICAgICAgY2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICAgIHZpZGVvLmRvbSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMTI4MCxcclxuICAgICAgICAgICAgOTYwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0XHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgbGV0IHRleHR1cmUgPSBuZXcgQ2VzaXVtLlRleHR1cmUoe1xyXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXHJcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5jYW52YXNcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhpcy51bmlmb3JtTWFwLmNvbG9yVGV4dHVyZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ1cGRhdGUgdGV4dHVyZSAyXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGNhbnZhc0NvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgLy8gY2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgLy8gXHR2aWRlby5kb20sXHJcbiAgICAgICAgLy8gXHQwLFxyXG4gICAgICAgIC8vIFx0MCxcclxuICAgICAgICAvLyBcdHZpZGVvLndpZHRoLFxyXG4gICAgICAgIC8vIFx0dmlkZW8uaGVpZ2h0LFxyXG4gICAgICAgIC8vIFx0MCxcclxuICAgICAgICAvLyBcdDAsXHJcbiAgICAgICAgLy8gXHR0aGlzLmNhbnZhcy53aWR0aCxcclxuICAgICAgICAvLyBcdHRoaXMuY2FudmFzLmhlaWdodFxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgLy8gdGhpcy51bmlmb3JtTWFwLmNvbG9yVGV4dHVyZSgpLmNvcHlGcm9tKHtcclxuICAgICAgICAvLyBcdHNvdXJjZTogdGhpcy5jYW52YXNcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q29tbWFuZChkcmF3Q29tbWFuZCkge1xyXG4gICAgZHJhd0NvbW1hbmQuc2hhZGVyUHJvZ3JhbSA9IHRoaXMucHJvZ3JhbVxyXG4gICAgZHJhd0NvbW1hbmQudW5pZm9ybU1hcCA9IHRoaXMudW5pZm9ybU1hcFxyXG4gIH1cclxuXHJcbiAgbG9hZFRleHR1cmUodXJsKSB7XHJcbiAgICByZXR1cm4gQ2VzaXVtLlJlc291cmNlLmZldGNoSW1hZ2UodXJsKS50aGVuKGltYWdlID0+IHtcclxuICAgICAgdGhpcy5jYW52YXMud2lkdGggPSBpbWFnZS53aWR0aFxyXG4gICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHRcclxuICAgICAgY29uc3QgY2FudmFzQ29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJylcclxuICAgICAgY2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgaW1hZ2UsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGltYWdlLndpZHRoLFxyXG4gICAgICAgIGltYWdlLmhlaWdodCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgdGhpcy5jYW52YXMud2lkdGgsXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0XHJcbiAgICAgIClcclxuICAgICAgbGV0IHRleHR1cmUgPSBuZXcgQ2VzaXVtLlRleHR1cmUoe1xyXG4gICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dCxcclxuICAgICAgICBzb3VyY2U6IHRoaXMuY2FudmFzLFxyXG4gICAgICAgIHNhbXBsZXI6IENlc2l1bS5TYW1wbGVyLk5FQVJFU1RcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBNZXNoIHtcclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBnZW9tZXRyeSkge1xyXG4gICAgdGhpcy5sYXN0U3RhdGUgPSBmYWxzZVxyXG4gICAgdGhpcy5uYW1lID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnlcclxuICAgIGNvbnN0IHZhQXR0cmlidXRlcyA9IFtdXHJcbiAgICBsZXQgaW5kZXggPSAwXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbCA9IHVuZGVmaW5lZFxyXG5cclxuICAgIC8v5Yib5bu66aG254K557Si5byVXHJcbiAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBDZXNpdW0uQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcih7XHJcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgIHR5cGVkQXJyYXk6IENlc2l1bS5Db21wb25lbnREYXRhdHlwZS5jcmVhdGVUeXBlZEFycmF5KFxyXG4gICAgICAgIENlc2l1bS5Db21wb25lbnREYXRhdHlwZS5GTE9BVCxcclxuICAgICAgICBnZW9tZXRyeS52ZXJ0aWNlc1xyXG4gICAgICApLFxyXG4gICAgICB1c2FnZTogQ2VzaXVtLkJ1ZmZlclVzYWdlLlNUQVRJQ19EUkFXXHJcbiAgICB9KVxyXG4gICAgdmFBdHRyaWJ1dGVzLnB1c2goe1xyXG4gICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHZlcnRleEJ1ZmZlcjogdmVydGV4QnVmZmVyLFxyXG4gICAgICBjb21wb25lbnREYXRhdHlwZTogQ2VzaXVtLkNvbXBvbmVudERhdGF0eXBlLkZMT0FULFxyXG4gICAgICBjb21wb25lbnRzUGVyQXR0cmlidXRlOiAzLFxyXG4gICAgICBub3JtYWxpemU6IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgLy/ms5Xnur9cclxuICAgIGlmIChnZW9tZXRyeS5ub3JtYWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaW5kZXgrK1xyXG4gICAgICBjb25zdCBub3JtYWxCdWZmZXIgPSBDZXNpdW0uQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcih7XHJcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcclxuICAgICAgICB0eXBlZEFycmF5OiBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuY3JlYXRlVHlwZWRBcnJheShcclxuICAgICAgICAgIENlc2l1bS5Db21wb25lbnREYXRhdHlwZS5GTE9BVCxcclxuICAgICAgICAgIGdlb21ldHJ5Lm5vcm1hbHNcclxuICAgICAgICApLFxyXG4gICAgICAgIHVzYWdlOiBDZXNpdW0uQnVmZmVyVXNhZ2UuU1RBVElDX0RSQVdcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhQXR0cmlidXRlcy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB2ZXJ0ZXhCdWZmZXI6IG5vcm1hbEJ1ZmZlcixcclxuICAgICAgICBjb21wb25lbnREYXRhdHlwZTogQ2VzaXVtLkNvbXBvbmVudERhdGF0eXBlLkZMT0FULFxyXG4gICAgICAgIGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6IDMsXHJcbiAgICAgICAgbm9ybWFsaXplOiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy/pobbngrnoibJcclxuICAgIGlmIChnZW9tZXRyeS5jb2xvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpbmRleCsrXHJcbiAgICAgIGNvbnN0IGNvbG9yQnVmZmVyID0gQ2VzaXVtLkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoe1xyXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgICAgdHlwZWRBcnJheTogQ2VzaXVtLkNvbXBvbmVudERhdGF0eXBlLmNyZWF0ZVR5cGVkQXJyYXkoXHJcbiAgICAgICAgICBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuRkxPQVQsXHJcbiAgICAgICAgICBnZW9tZXRyeS5jb2xvcnNcclxuICAgICAgICApLFxyXG4gICAgICAgIHVzYWdlOiBDZXNpdW0uQnVmZmVyVXNhZ2UuU1RBVElDX0RSQVdcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhQXR0cmlidXRlcy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB2ZXJ0ZXhCdWZmZXI6IGNvbG9yQnVmZmVyLFxyXG4gICAgICAgIGNvbXBvbmVudERhdGF0eXBlOiBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuRkxPQVQsXHJcbiAgICAgICAgY29tcG9uZW50c1BlckF0dHJpYnV0ZTogMyxcclxuICAgICAgICBub3JtYWxpemU6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBVVlxyXG4gICAgaWYgKGdlb21ldHJ5Lmhhc1VWSW5kaWNlcyA9PT0gdHJ1ZSkge1xyXG4gICAgICBpbmRleCsrXHJcbiAgICAgIGNvbnN0IHV2QnVmZmVyID0gQ2VzaXVtLkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoe1xyXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgICAgdHlwZWRBcnJheTogQ2VzaXVtLkNvbXBvbmVudERhdGF0eXBlLmNyZWF0ZVR5cGVkQXJyYXkoXHJcbiAgICAgICAgICBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuRkxPQVQsXHJcbiAgICAgICAgICBnZW9tZXRyeS51dnNcclxuICAgICAgICApLFxyXG4gICAgICAgIHVzYWdlOiBDZXNpdW0uQnVmZmVyVXNhZ2UuU1RBVElDX0RSQVdcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhQXR0cmlidXRlcy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB2ZXJ0ZXhCdWZmZXI6IHV2QnVmZmVyLFxyXG4gICAgICAgIGNvbXBvbmVudERhdGF0eXBlOiBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuRkxPQVQsXHJcbiAgICAgICAgY29tcG9uZW50c1BlckF0dHJpYnV0ZTogMixcclxuICAgICAgICBub3JtYWxpemU6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmVydGV4QXJyYXkgPSBuZXcgQ2VzaXVtLlZlcnRleEFycmF5KHtcclxuICAgICAgY29udGV4dDogY29udGV4dCxcclxuICAgICAgYXR0cmlidXRlczogdmFBdHRyaWJ1dGVzXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHJlbmRlclN0YXRlID0gQ2VzaXVtLlJlbmRlclN0YXRlLmZyb21DYWNoZSh7XHJcbiAgICAgIGN1bGw6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBkZXB0aE1hc2s6IHRydWUsXHJcbiAgICAgIGRlcHRoVGVzdDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmRyYXdDb21tYW5kID0gbmV3IENlc2l1bS5EcmF3Q29tbWFuZCh7XHJcbiAgICAgIG93bmVyOiB0aGlzLFxyXG4gICAgICBwcmltaXRpdmVUeXBlOiBDZXNpdW0uUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsXHJcbiAgICAgIHZlcnRleEFycmF5OiB2ZXJ0ZXhBcnJheSxcclxuICAgICAgcmVuZGVyU3RhdGU6IHJlbmRlclN0YXRlLFxyXG4gICAgICBwYXNzOiBDZXNpdW0uUGFzcy5PUEFRVUVcclxuICAgICAgLy8gZGVidWdTaG93Qm91bmRpbmdWb2x1bWU6IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRNYXRlcmlhbChtYXRlcmlhbCkge1xyXG4gICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICBtYXRlcmlhbC5zZXRDb21tYW5kKHRoaXMuZHJhd0NvbW1hbmQpXHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZnJhbWVTdGF0ZSkge1xyXG4gICAgaWYgKENlc2l1bS5kZWZpbmVkKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgIGlmICh0aGlzLm1hdGVyaWFsLnJlYWR5KSB7XHJcbiAgICAgICAgZnJhbWVTdGF0ZS5jb21tYW5kTGlzdC5wdXNoKHRoaXMuZHJhd0NvbW1hbmQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZGVvKGNhbWVyYSwgdmlkZW8sIGN1bGxpbmdWb2x1bWUpIHtcclxuICAgIHZhciBwbGF5VmlkZW8gPSBmYWxzZVxyXG4gICAgaWYgKENlc2l1bS5kZWZpbmVkKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgIGlmICh0aGlzLm1hdGVyaWFsLnJlYWR5KSB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IGN1bGxpbmdWb2x1bWUuY29tcHV0ZVZpc2liaWxpdHkoXHJcbiAgICAgICAgICB0aGlzLmRyYXdDb21tYW5kLmJvdW5kaW5nVm9sdW1lXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmICh2aXNpYmlsaXR5ID49IDAgJiYgdGhpcy5tYXRlcmlhbC5yZWFkeSkge1xyXG4gICAgICAgICAgLy/lpoLmnpzop4bpopHlj6/op4FcclxuICAgICAgICAgIC8v6K6h566XbGV2ZWxcclxuICAgICAgICAgIC8vIGNhbVxyXG4gICAgICAgICAgbGV0IGRpc3RhbmNlID0gY2FtZXJhLmRpc3RhbmNlVG9Cb3VuZGluZ1NwaGVyZShcclxuICAgICAgICAgICAgdGhpcy5kcmF3Q29tbWFuZC5ib3VuZGluZ1ZvbHVtZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgbGV0IHdpZHRoID0gdmlkZW8ud2lkdGhcclxuICAgICAgICAgIGxldCBoZWlnaHQgPSB2aWRlby5oZWlnaHRcclxuICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAyMCAmJiBkaXN0YW5jZSA8IDEwMCkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHZpZGVvLndpZHRoIC8gMlxyXG4gICAgICAgICAgICBoZWlnaHQgPSB2aWRlby5oZWlnaHQgLyAyXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID49IDEwMCkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHZpZGVvLndpZHRoIC8gMTBcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdmlkZW8uaGVpZ2h0IC8gMTBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwbGF5VmlkZW8gPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVwZGF0ZUNvbG9yVGV4dHVyZShcclxuICAgICAgICAgICAgdmlkZW8sXHJcbiAgICAgICAgICAgIE1hdGguZmxvb3Iod2lkdGgpLFxyXG4gICAgICAgICAgICBNYXRoLmZsb29yKGhlaWdodClcclxuICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGxheVZpZGVvID0gZmFsc2VcclxuICAgICAgICAgIC8vIGlmKHZpZGVvLnZpZGVvanMpIHtcclxuICAgICAgICAgIC8vIFx0dmlkZW8udmlkZW9qcy5wYXVzZSgpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmKHBsYXlWaWRlbyAhPSB0aGlzLmxhc3RTdGF0ZSkge1xyXG4gICAgLy8gXHRpZihwbGF5VmlkZW8pIHtcclxuICAgIC8vIFx0XHRjb25zb2xlLmxvZyhcInBsYXlcIik7XHJcbiAgICAvLyBcdFx0dmlkZW8udmlkZW9qcy5wbGF5KCk7XHJcbiAgICAvLyBcdH0gZWxzZSB7XHJcbiAgICAvLyBcdFx0Y29uc29sZS5sb2coXCJwYXVzZVwiKTtcclxuICAgIC8vIFx0XHR2aWRlby52aWRlb2pzLnBhdXNlKCk7XHJcbiAgICAvLyBcdH1cclxuICAgIC8vIH1cclxuICAgIHRoaXMubGFzdFN0YXRlID0gcGxheVZpZGVvXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBOb2RlIHtcclxuICAjc2hvdyA9IHRydWVcclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBobHMsIHZpZGVvSWQsIGhvc3QsIG4pIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcclxuICAgIHRoaXMudmlkZW9JZCA9IHZpZGVvSWRcclxuICAgIHRoaXMuaG9zdCA9IGhvc3RcclxuICAgIHRoaXMuX21vZGVsTWF0cml4ID0gQ2VzaXVtLk1hdHJpeDQuSURFTlRJVFlcclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG51bGxcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXVxyXG5cclxuICAgIHRoaXMudmlkZW8gPSB7XHJcbiAgICAgIC8vIGhsczogaGxzLFxyXG4gICAgICAvLyB2aWRlb2pzOiBudWxsLFxyXG4gICAgICBkb206IG51bGwsXHJcbiAgICAgIHBsYXlpbmc6IGZhbHNlLFxyXG4gICAgICB0aW1ldXBkYXRlOiBmYWxzZSxcclxuICAgICAgd2lkdGg6IDAsXHJcbiAgICAgIGhlaWdodDogMCxcclxuICAgICAgdHJhY2tzOiBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRpbWUgPSAwXHJcbiAgICB0aGlzLm5hbWUgPSBuXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLiNzaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLiNzaG93ID0gdlxyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMudmlkZW8ucGxheWVyICYmIHRoaXMudmlkZW8ucGxheWVyLmdldFZ1ZUluc3RhbmNlKCkucGxheSgpXHJcbiAgICAgICAgLy8gaWYgKHRoaXMudmlkZW8ucGxheWVyICYmICF0aGlzLnZpZGVvLnBsYXlpbmcpIHtcclxuICAgICAgICAvLyAgIGlmICh0aGlzLnZpZGVvSWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZXF1ZXN0VmlkZW9SZXNvdXJjZSgpXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5zZXRGbHZWaWRlbyh0aGlzLnZpZGVvLnVybClcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gdGhpcy52aWRlby5wbGF5ZXIgJiYgdGhpcy52aWRlby5wbGF5ZXIucmVzdW1lKClcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnZpZGVvLnBsYXllciAmJiB0aGlzLnZpZGVvLnBsYXllci5nZXRWdWVJbnN0YW5jZSgpLnBhdXNlKClcclxuICAgICAgICAvLyBpZiAodGhpcy52aWRlby5wbGF5ZXIpIHtcclxuICAgICAgICAvLyAgIGxldCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG4gICAgICAgIC8vICAgY2FudmFzLndpZHRoID0gdGhpcy52aWRlby53aWR0aDtcclxuICAgICAgICAvLyAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnZpZGVvLmhlaWdodDtcclxuICAgICAgICAvLyAgIGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMudmlkZW8uZG9tLCAwLCAwLCB0aGlzLnZpZGVvLndpZHRoLCB0aGlzLnZpZGVvLmhlaWdodCk7XHJcbiAgICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldXHJcbiAgICAgICAgLy8gICAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dCxcclxuICAgICAgICAvLyAgICAgICAgIHNvdXJjZTogY2FudmFzXHJcbiAgICAgICAgLy8gICAgICAgfSlcclxuICAgICAgICAvLyAgICAgICByZXR1cm4gdGV4dHVyZVxyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICB0aGlzLnZpZGVvLnBsYXlpbmcgPSBmYWxzZVxyXG4gICAgICAgIC8vICAgdGhpcy52aWRlby5wbGF5ZXIuZGVzdHJveSgpXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCflj4LmlbDlv4XpobvkuLpib29sZWFuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlcXVlc3RWaWRlb1Jlc291cmNlKCkge1xyXG4gICAgbGV0IGhvc3QgPSBcIlwiXHJcbiAgICBpZiAodGhpcy5ob3N0LmVuZHNXaXRoKFwieWplYXJ0aDQuMFwiKSlcclxuICAgICAgaG9zdCA9IHRoaXMuaG9zdFxyXG4gICAgZWxzZVxyXG4gICAgICBob3N0ID0gdGhpcy5ob3N0ICsgJy95amVhcnRoNC4wJ1xyXG4gICAgbGV0IHVybCA9IGhvc3QgKyAnL3ZpZGVvRnVzaW9uLycgKyB0aGlzLnZpZGVvSWRcclxuICAgIHJldHVybiBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICBsZXQgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KClcclxuICAgICAgdGV4dCA9IEpTT04ucGFyc2UodGV4dClcclxuICAgICAgaWYgKFswLCAyMDBdLmluY2x1ZGVzKHRleHQuY29kZSkpIHtcclxuICAgICAgICBpZiAodGV4dC5kYXRhLmRldmljZUNvZGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmV0Y2goaG9zdCArICcvdmlkZW9GdXNpb24vdmlkZS9zdHJlYW0nLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxyXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdmbHYnLCBkZXZpY2VDb2RlOiB0ZXh0LmRhdGEuZGV2aWNlQ29kZSB9KSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkudGhlbihhc3luYyAocmVzMikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdGV4dDIgPSBhd2FpdCByZXMyLnRleHQoKVxyXG4gICAgICAgICAgICB0ZXh0MiA9IEpTT04ucGFyc2UodGV4dDIpXHJcbiAgICAgICAgICAgIGlmIChbMCwgMjAwXS5pbmNsdWRlcyh0ZXh0Mi5jb2RlKSkge1xyXG4gICAgICAgICAgICAgIGlmICh0ZXh0Mi5kYXRhLnVybC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheWVyLnVybCA9IHRleHQyLmRhdGEudXJsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZsdlZpZGVvKHRleHQyLmRhdGEudXJsKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+WcsOWdgOS4jeWtmOWcqCcpXHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKHRleHQyLm1zZyB8fCB0ZXh0Mi5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ+iuvuWkh+S4jeWtmOWcqCcpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKHRleHQubXNnIHx8IHRleHQubWVzc2FnZSlcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBtb2RlbE1hdHJpeCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbE1hdHJpeFxyXG4gIH1cclxuICBzZXQgbW9kZWxNYXRyaXgobWF0cml4KSB7XHJcbiAgICB0aGlzLl9tb2RlbE1hdHJpeCA9IG1hdHJpeC5jbG9uZSgpXHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsTWF0cml4KClcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1vZGVsTWF0cml4KCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXVxyXG5cclxuICAgICAgY2hpbGQuZHJhd0NvbW1hbmQubW9kZWxNYXRyaXggPSB0aGlzLl9tb2RlbE1hdHJpeFxyXG4gICAgICAvL+iuoeeul+WMheWbtOebklxyXG4gICAgICBjb25zdCBzcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKGNoaWxkLmdlb21ldHJ5LnZlcnRpY2VzKVxyXG4gICAgICBsZXQgbmV3TWF0ID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVRyYW5zbGF0aW9uKFxyXG4gICAgICAgIHRoaXMuX21vZGVsTWF0cml4LFxyXG4gICAgICAgIHNwaGVyZS5jZW50ZXIsXHJcbiAgICAgICAgbmV3IENlc2l1bS5NYXRyaXg0KClcclxuICAgICAgKVxyXG4gICAgICBzcGhlcmUuY2VudGVyID0gQ2VzaXVtLk1hdHJpeDQuZ2V0VHJhbnNsYXRpb24oXHJcbiAgICAgICAgbmV3TWF0LFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgIClcclxuICAgICAgY2hpbGQuZHJhd0NvbW1hbmQuYm91bmRpbmdWb2x1bWUgPSBzcGhlcmVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7XHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5VHJhbnNsYXRpb24oXHJcbiAgICAgIHRoaXMuX21vZGVsTWF0cml4LFxyXG4gICAgICBwb3NpdGlvbixcclxuICAgICAgdGhpcy5fbW9kZWxNYXRyaXhcclxuICAgIClcclxuICAgIHRoaXMudXBkYXRlTW9kZWxNYXRyaXgoKVxyXG4gIH1cclxuXHJcbiAgYWRkKG9iamVjdCkge1xyXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXNcclxuICAgIHRoaXMuY2hpbGRyZW4ucHVzaChvYmplY3QpXHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZnJhbWVTdGF0ZSkge1xyXG4gICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV1cclxuICAgICAgICBjaGlsZC51cGRhdGUoZnJhbWVTdGF0ZSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7op4bpopFcclxuICAgKiBAcGFyYW0geyp9IHVybFxyXG4gICAqL1xyXG4gIHNldFZpZGVvKHVybCkge1xyXG4gICAgdGhpcy52aWRlby5wbGF5aW5nID0gZmFsc2VcclxuICAgIHRoaXMudmlkZW8udGltZXVwZGF0ZSA9IGZhbHNlXHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmlkZW9UeXBlID0gL14uK1xcLm0zdTgkLy50ZXN0KHVybClcclxuICAgICAgPyAnYXBwbGljYXRpb24veC1tcGVnVVJMJ1xyXG4gICAgICA6ICd2aWRlby9tcDQnXHJcblxyXG4gICAgLy8gaWYgKHZpZGVvVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbXBlZ1VSTCcpIHtcclxuICAgIGxldCBpZCA9ICd2aWRlb18nICsgQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgdmlkZW8uc2V0QXR0cmlidXRlKCdpZCcsIGlkKVxyXG4gICAgdmlkZW8uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgdGhpcy52aWRlby5wYXJlbnREb20gPSB2aWRlb1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBsZXQgcGxheWVyID0gbmV3IFdhc21QbGF5ZXIobnVsbCwgdmlkZW8sIGUgPT4ge1xyXG4gICAgICBpZiAoZSA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgbGV0IHZpZGVvRWxtID0gdmlkZW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJylbMF1cclxuICAgICAgICBsZXQgY2FudmFzRWxtID0gdmlkZW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdXHJcbiAgICAgICAgaWYgKHZpZGVvRWxtICYmIGNhbnZhc0VsbSkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHBsYXllci5wbGF5KClcclxuICAgICAgICAgIH0sIDEwMDApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh2aWRlb0VsbSkge1xyXG4gICAgICAgICAgICB0aGF0LnZpZGVvLmRvbSA9IHZpZGVvRWxtXHJcbiAgICAgICAgICAgIHRoYXQudmlkZW8ud2lkdGggPSB2aWRlb0VsbS52aWRlb1dpZHRoXHJcbiAgICAgICAgICAgIHRoYXQudmlkZW8uaGVpZ2h0ID0gdmlkZW9FbG0udmlkZW9IZWlnaHRcclxuICAgICAgICAgICAgdGhhdC52aWRlby5wbGF5aW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICBsZXQgdGV4dHVyZSA9IG5ldyBDZXNpdW0uVGV4dHVyZSh7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgIHNvdXJjZTogdmlkZW9FbG1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGF0LmNoaWxkcmVuW2ldXHJcbiAgICAgICAgICAgICAgY2hpbGQubWF0ZXJpYWwudW5pZm9ybU1hcFsnY29sb3JUZXh0dXJlJ10gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoXHJcbiAgICAgICAgICAgICAgICAvLyAgIHZpZGVvRWxtLnZpZGVvV2lkdGggIT0gdGhhdC52aWRlby53aWR0aCB8fFxyXG4gICAgICAgICAgICAgICAgLy8gICB2aWRlb0VsbS52aWRlb0hlaWdodCAhPSB0aGF0LnZpZGVvLmhlaWdodFxyXG4gICAgICAgICAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdyZXNpemUgdGV4dHVyZScpXHJcbiAgICAgICAgICAgICAgICAvLyAgIHRleHR1cmUuZGVzdHJveSgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBjb250ZXh0OiB0aGF0LmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgc291cmNlOiB2aWRlb0VsbVxyXG4gICAgICAgICAgICAgICAgLy8gICB9KVxyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvRWxtLnZpZGVvV2lkdGhcclxuICAgICAgICAgICAgICAgIHRoYXQudmlkZW8uaGVpZ2h0ID0gdmlkZW9FbG0udmlkZW9IZWlnaHRcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0ZXh0dXJlLmNvcHlGcm9tKHtcclxuICAgICAgICAgICAgICAgIC8vICAgc291cmNlOiB2aWRlb0VsbVxyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZGVzdHJveSgpXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6IHZpZGVvRWxtXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gaWYodGhhdC5fY2xlYXJNZW1vcnlJbnRlcnZhbEV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjbGVhckludGVydmFsKHRoYXQuX2NsZWFyTWVtb3J5SW50ZXJ2YWxFdmVudClcclxuICAgICAgICAgICAgICAvLyAgIHRoYXQuX2NsZWFyTWVtb3J5SW50ZXJ2YWxFdmVudCA9IG51bGxcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gdGhhdC5fY2xlYXJNZW1vcnlJbnRlcnZhbEV2ZW50ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XHJcbiAgICAgICAgICAgICAgLy8gICBjYW52YXMud2lkdGggPSB0aGF0LnZpZGVvLndpZHRoO1xyXG4gICAgICAgICAgICAgIC8vICAgY2FudmFzLmhlaWdodCA9IHRoYXQudmlkZW8uaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIC8vICAgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodmlkZW9FbG0sIDAsIDAsIHRoYXQudmlkZW8ud2lkdGgsIHRoYXQudmlkZW8uaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAvLyAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vICAgICB0ZXh0dXJlLmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgIC8vICAgICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgICAvLyAgICAgICBjb250ZXh0OiB0aGF0LmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgc291cmNlOiBjYW52YXNcclxuICAgICAgICAgICAgICAvLyAgICAgfSlcclxuICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAvLyAgIHRoYXQubG9hZGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAvLyAgIHRoYXQudmlkZW8ucGxheWVyLnN0b3AoKVxyXG4gICAgICAgICAgICAgIC8vICAgdGhhdC52aWRlby5wbGF5ZXIuZGVzdHJveSgpXHJcbiAgICAgICAgICAgICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyAgICAgdGhhdC52aWRlby5wbGF5ZXIucGxheSh0aGF0LnZpZGVvLnBsYXllci51cmwsIDEpXHJcbiAgICAgICAgICAgICAgLy8gICB9LCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gICBpZih0aGF0Ll92aWRlb0xvYWRlZEludGVydmFsRXZlbnQpIHtcclxuICAgICAgICAgICAgICAvLyAgICAgY2xlYXJJbnRlcnZhbCh0aGF0Ll92aWRlb0xvYWRlZEludGVydmFsRXZlbnQpXHJcbiAgICAgICAgICAgICAgLy8gICAgIHRoYXQuX3ZpZGVvTG9hZGVkSW50ZXJ2YWxFdmVudCA9IG51bGxcclxuICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAvLyAgIHRoYXQuX3ZpZGVvTG9hZGVkSW50ZXJ2YWxFdmVudCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyAgICAgaWYodGhhdC5sb2FkZWQpIHtcclxuICAgICAgICAgICAgICAvLyAgICAgICBjaGlsZC5tYXRlcmlhbC51bmlmb3JtTWFwWydjb2xvclRleHR1cmUnXSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAvLyAgICAgICAgIHRleHR1cmUuZGVzdHJveSgpXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICBzb3VyY2U6IHZpZGVvRWxtXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gICAgICAgY2xlYXJJbnRlcnZhbCh0aGF0Ll92aWRlb0xvYWRlZEludGVydmFsRXZlbnQpXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgdGhhdC5fdmlkZW9Mb2FkZWRJbnRlcnZhbEV2ZW50ID0gbnVsbFxyXG4gICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgIC8vIH0sIDYwMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjYW52YXNFbG0pIHtcclxuICAgICAgICAgICAgdGhhdC52aWRlby5kb20gPSBjYW52YXNFbG1cclxuICAgICAgICAgICAgdGhhdC52aWRlby53aWR0aCA9IGNhbnZhc0VsbS53aWR0aFxyXG4gICAgICAgICAgICB0aGF0LnZpZGVvLmhlaWdodCA9IGNhbnZhc0VsbS5oZWlnaHRcclxuICAgICAgICAgICAgdGhhdC52aWRlby5wbGF5aW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICBsZXQgdGV4dHVyZSA9IG5ldyBDZXNpdW0uVGV4dHVyZSh7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgIHNvdXJjZTogY2FudmFzRWxtXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhhdC5jaGlsZHJlbltpXVxyXG4gICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBjYW52YXNFbG0ud2lkdGggIT0gdGhhdC52aWRlby53aWR0aCB8fFxyXG4gICAgICAgICAgICAgICAgICBjYW52YXNFbG0uaGVpZ2h0ICE9IHRoYXQudmlkZW8uaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Jlc2l6ZSB0ZXh0dXJlJylcclxuICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kZXN0cm95KClcclxuICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBDZXNpdW0uVGV4dHVyZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogY2FudmFzRWxtXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGF0LnZpZGVvLndpZHRoID0gY2FudmFzRWxtLndpZHRoXHJcbiAgICAgICAgICAgICAgICB0aGF0LnZpZGVvLmhlaWdodCA9IGNhbnZhc0VsbS5oZWlnaHRcclxuICAgICAgICAgICAgICAgIC8vIHRleHR1cmUuY29weUZyb20oe1xyXG4gICAgICAgICAgICAgICAgLy8gICBzb3VyY2U6IGNhbnZhc0VsbVxyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZGVzdHJveSgpXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6IGNhbnZhc0VsbVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcGxheWVyLnBsYXkodXJsLCAxKVxyXG4gICAgdGhpcy52aWRlby5wbGF5ZXIgPSBwbGF5ZXJcclxuICAgIGxldCB2aWRlb0VsbSA9IHZpZGVvLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpWzBdXHJcbiAgICB2aWRlb0VsbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXVxyXG4gICAgICAvLyAgICAgY2hpbGQubWF0ZXJpYWwudW5pZm9ybU1hcFsnY29sb3JUZXh0dXJlJ10gPSAoKSA9PiB7XHJcbiAgICAgIC8vICAgICAgIGxldCB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgLy8gICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXHJcbiAgICAgIC8vICAgICAgICAgc291cmNlOiB2aWRlb0VsbVxyXG4gICAgICAvLyAgICAgICB9KVxyXG4gICAgICAvLyAgICAgICByZXR1cm4gdGV4dHVyZVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiuvue9ruinhumikVxyXG4gICAqIEBwYXJhbSB7Kn0gdXJsXHJcbiAgICovXHJcbiAgc2V0Rmx2VmlkZW8zKHVybCkge1xyXG4gICAgdGhpcy52aWRlby5wbGF5aW5nID0gZmFsc2VcclxuICAgIHRoaXMudmlkZW8udGltZXVwZGF0ZSA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZGVvLnVybCA9IHVybFxyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgaWQgPSAndmlkZW9fJyArIENlc2l1bS5jcmVhdGVHdWlkKClcclxuICAgIGNvbnN0IHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKVxyXG4gICAgdmlkZW8uc2V0QXR0cmlidXRlKCdpZCcsIGlkKVxyXG4gICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aWRlbylcclxuICAgIC8vIHZpZGVvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgbGV0IHBsYXllciA9IG5ldyBmbHZwbGF5ZXIodmlkZW8sIHsgdXJsOiB1cmwgfSlcclxuICAgIHRoaXMudmlkZW8ucGxheWVyID0gcGxheWVyXHJcblxyXG4gICAgcGxheWVyLm9uKCdFdmVudHMnLCAnTUVESUFfSU5GTycsIGZ1bmN0aW9uIChpbmZvKSB7XHJcbiAgICB9KTtcclxuXHJcbiAgICBwbGF5ZXIuZmx2UGxheWVyLnBsYXkoKS50aGVuKCgpID0+IHtcclxuICAgICAgdGhhdC52aWRlby5kb20gPSB2aWRlb1xyXG4gICAgICB0aGF0LnZpZGVvLndpZHRoID0gdmlkZW8udmlkZW9XaWR0aFxyXG4gICAgICB0aGF0LnZpZGVvLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0XHJcbiAgICAgIHRoYXQudmlkZW8ucGxheWluZyA9IHRydWVcclxuICAgICAgbGV0IHRleHR1cmUgPSBuZXcgQ2VzaXVtLlRleHR1cmUoe1xyXG4gICAgICAgIGNvbnRleHQ6IHRoYXQuY29udGV4dCxcclxuICAgICAgICBzb3VyY2U6IHZpZGVvXHJcbiAgICAgIH0pXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhhdC5jaGlsZHJlbltpXVxyXG4gICAgICAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGhcclxuICAgICAgICAgIHRoYXQudmlkZW8uaGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHRcclxuICAgICAgICAgIHRleHR1cmUuZGVzdHJveSgpXHJcbiAgICAgICAgICB0ZXh0dXJlID0gbmV3IENlc2l1bS5UZXh0dXJlKHtcclxuICAgICAgICAgICAgY29udGV4dDogdGhhdC5jb250ZXh0LFxyXG4gICAgICAgICAgICBzb3VyY2U6IHZpZGVvXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHRleHR1cmVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBzZXRGbHZWaWRlbzIodXJsKSB7XHJcbiAgICB0aGlzLnZpZGVvLnBsYXlpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy52aWRlby50aW1ldXBkYXRlID0gZmFsc2VcclxuICAgIHRoaXMudmlkZW8udXJsID0gdXJsXHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBpZCA9ICd2aWRlb18nICsgQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgY29uc3QgdmlkZW9Cb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgdmlkZW9Cb3guc2V0QXR0cmlidXRlKCdpZCcsIGlkKVxyXG4gICAgdmlkZW9Cb3guc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBsZXQgcGxheWVyID0gbmV3IGplc3NpYnVjYVBsYXllcih2aWRlb0JveCwgeyB1cmw6IHVybCB9KVxyXG5cclxuICAgIHRoaXMudmlkZW8ucGxheWVyID0gcGxheWVyXHJcbiAgICB0aGlzLnZpZGVvLnBsYXllci5wbGF5ZXIub24oXCJwbGF5XCIsIGZ1bmN0aW9uIChmbGFnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcxMTExMTExMTExJylcclxuICAgICAgbGV0IHZpZGVvID0gdmlkZW9Cb3guZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdXHJcbiAgICAgIHZpZGVvQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgIHRoYXQudmlkZW8uZG9tID0gdmlkZW9cclxuICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvLndpZHRoXHJcbiAgICAgIHRoYXQudmlkZW8uaGVpZ2h0ID0gdmlkZW8uaGVpZ2h0XHJcbiAgICAgIHRoYXQudmlkZW8ucGxheWluZyA9IHRydWVcclxuICAgICAgbGV0IHRleHR1cmUgPSBuZXcgQ2VzaXVtLlRleHR1cmUoe1xyXG4gICAgICAgIGNvbnRleHQ6IHRoYXQuY29udGV4dCxcclxuICAgICAgICBzb3VyY2U6IHZpZGVvXHJcbiAgICAgIH0pXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhhdC5jaGlsZHJlbltpXVxyXG4gICAgICAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvLndpZHRoXHJcbiAgICAgICAgICB0aGF0LnZpZGVvLmhlaWdodCA9IHZpZGVvLmhlaWdodFxyXG4gICAgICAgICAgdGV4dHVyZS5jb3B5RnJvbSh7XHJcbiAgICAgICAgICAgIHNvdXJjZTogdmlkZW9cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gdGV4dHVyZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldEZsdlZpZGVvKHVybCkge1xyXG4gICAgdGhpcy52aWRlby5wbGF5aW5nID0gZmFsc2VcclxuICAgIHRoaXMudmlkZW8udGltZXVwZGF0ZSA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZGVvLnVybCA9IHVybFxyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGxldCBpZCA9ICd2aWRlb18nICsgQ2VzaXVtLmNyZWF0ZUd1aWQoKVxyXG4gICAgbGV0IHBhcmVudERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5ai1zZGstbGl2ZS1wbGF5ZXItYm94JylcclxuICAgIGlmICghcGFyZW50RG9tKSB7XHJcbiAgICAgIHBhcmVudERvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgIHBhcmVudERvbS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3lqLXNkay1saXZlLXBsYXllci1ib3gnKVxyXG4gICAgICBwYXJlbnREb20uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudERvbSlcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZGVvQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGl2ZS1wbGF5ZXInKVxyXG4gICAgdmlkZW9Cb3guc2V0QXR0cmlidXRlKCdpZCcsIGlkKVxyXG4gICAgdmlkZW9Cb3guc2V0QXR0cmlidXRlKCd2aWRlby11cmwnLCB0aGlzLnZpZGVvLnVybClcclxuICAgIHZpZGVvQm94LnNldEF0dHJpYnV0ZSgnbGl2ZScsIHRydWUpXHJcbiAgICB2aWRlb0JveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICBwYXJlbnREb20uYXBwZW5kQ2hpbGQodmlkZW9Cb3gpXHJcbiAgICB0aGlzLnZpZGVvLnBsYXllciA9IHZpZGVvQm94XHJcbiAgICB2aWRlb0JveC5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgZXZ0ID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ+aSreaUvuaIkOWKnycsIHRoaXMudmlkZW8udXJsLCB0aGlzLm5hbWUpXHJcbiAgICAgIGxldCB2aWRlbyA9IHZpZGVvQm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpWzBdXHJcbiAgICAgIHRoYXQudmlkZW8uZG9tID0gdmlkZW9cclxuICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvLndpZHRoXHJcbiAgICAgIHRoYXQudmlkZW8uaGVpZ2h0ID0gdmlkZW8uaGVpZ2h0XHJcbiAgICAgIHRoYXQudmlkZW8ucGxheWluZyA9IHRydWVcclxuICAgICAgbGV0IHRleHR1cmUgPSBuZXcgQ2VzaXVtLlRleHR1cmUoe1xyXG4gICAgICAgIGNvbnRleHQ6IHRoYXQuY29udGV4dCxcclxuICAgICAgICBzb3VyY2U6IHZpZGVvXHJcbiAgICAgIH0pXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhhdC5jaGlsZHJlbltpXVxyXG4gICAgICAgIGNoaWxkLm1hdGVyaWFsLnVuaWZvcm1NYXBbJ2NvbG9yVGV4dHVyZSddID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhhdC52aWRlby53aWR0aCA9IHZpZGVvLndpZHRoXHJcbiAgICAgICAgICB0aGF0LnZpZGVvLmhlaWdodCA9IHZpZGVvLmhlaWdodFxyXG4gICAgICAgICAgdGV4dHVyZS5jb3B5RnJvbSh7XHJcbiAgICAgICAgICAgIHNvdXJjZTogdmlkZW9cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gdGV4dHVyZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0Rlc3Ryb3llZCgpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIC8vIHRoaXMudmlkZW8ucGxheWVyICYmIHRoaXMudmlkZW8ucGxheWVyLmRlc3Ryb3koKVxyXG4gICAgaWYodGhpcy52aWRlby5wbGF5ZXIpIHtcclxuICAgICAgdGhpcy52aWRlby5wbGF5ZXIuc2V0QXR0cmlidXRlKCd2aWRlby11cmwnLCBudWxsKVxyXG4gICAgICBsZXQgcGFyZW50RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lqLXNkay1saXZlLXBsYXllci1ib3gnKVxyXG4gICAgICBwYXJlbnREb20ucmVtb3ZlQ2hpbGQodGhpcy52aWRlby5wbGF5ZXIpXHJcbiAgICAgIHRoaXMudmlkZW8ucGxheWVyID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQU1vZGVsTG9hZGVyXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQVRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/LoadObjModel/AModelLoader.js\n"); /***/ }), /***/ "./src/Obj/Base/LoadObjModel/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Base/LoadObjModel/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u6D77\\u62D4\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7F29\\u653E\\n
\\n \\n \\u662F\\u5426\\u7B49\\u6BD4\\u4F8B\\u7F29\\u653E\\n
\\n
\\n
\\n
\\n
\\n
\\n x \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n y \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n z \\u8F74\\n \\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7B49\\u6BD4\\u4F8B\\u7F29\\u653E\\n \\n
\\n \\n \\u500D\\n \\n
\\n\\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9hZE9iak1vZGVsL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0xvYWRPYmpNb2RlbC9fZWxlbWVudC5qcz8zODgwIl0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5mdW5jdGlvbiBodG1sKCkge1xyXG4gIHJldHVybiBgXHJcbiAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgbmFtZVwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTE4MFwiIG1heD1cIjE4MFwiIEBtb2RlbD1cImxuZ1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mtbfmi5Tpq5jluqY8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwibGF0XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFibGUtbGVmdC1saW5lXCI+XHJcbiAgICAgICAgPHNwYW4+57yp5pS+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1ib3hcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjttYXJnaW4tbGVmdDogMjBweDtcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBzdHlsZT1cIndpZHRoOiAxNHB4O2hlaWdodDogMTRweDttYXJnaW4tdG9wOiAycHg7bWFyZ2luLXJpZ2h0OiA1cHg7Y3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgPHNwYW4+5piv5ZCm562J5q+U5L6L57yp5pS+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBuby1lcXVhbFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj54IOi9tDwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNjYWxlLXhcIiBzdHlsZT1cImZsZXg6IDE7bWFyZ2luLXJpZ2h0OiAxNXB4O1wiIHR5cGU9XCJyYW5nZVwiIG1heD1cIjk5XCIgbWluPVwiMC4wMDAxXCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJzY2FsZVhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IGF1dG87XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNjYWxlLXhcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInNjYWxlWFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+eSDovbQ8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzY2FsZS15XCIgc3R5bGU9XCJmbGV4OiAxO21hcmdpbi1yaWdodDogMTVweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCI5OVwiIG1pbj1cIjAuMDAwMVwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwic2NhbGVZXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIiBzdHlsZT1cIndpZHRoOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzY2FsZS15XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5XCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJzY2FsZVlcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+5YCNPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnog6L20PC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwic2NhbGUtelwiIHN0eWxlPVwiZmxleDogMTttYXJnaW4tcmlnaHQ6IDE1cHg7XCIgdHlwZT1cInJhbmdlXCIgbWF4PVwiOTlcIiBtaW49XCIwLjAwMDFcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInNjYWxlWlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogYXV0bztcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2NhbGUtelwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OVwiIHN0ZXA9XCIwLjAxXCIgQG1vZGVsPVwic2NhbGVaXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPuWAjTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBlcXVhbFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nrYnmr5TkvovnvKnmlL48L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgIGNsYXNzPVwic2NhbGUtYWxsXCIgc3R5bGU9XCJmbGV4OiAxO21hcmdpbi1yaWdodDogMTVweDtcIiB0eXBlPVwicmFuZ2VcIiBtYXg9XCI5OVwiIG1pbj1cIjAuMDAwMVwiIHN0ZXA9XCIwLjAxXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIiBzdHlsZT1cIndpZHRoOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzY2FsZS1hbGxcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBzdGVwPVwiMC4wMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7lgI08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFvR0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/LoadObjModel/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/LoadObjModel/flvplayer.js": /*!************************************************!*\ !*** ./src/Obj/Base/LoadObjModel/flvplayer.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar flvplayer = /*#__PURE__*/function () {\n function flvplayer(dom, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, flvplayer);\n this.dom = dom;\n this.playerUrl = options.url;\n this.init();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(flvplayer, [{\n key: \"init\",\n value: function init() {\n this.flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: this.playerUrl,\n isLive: true,\n hasAudio: false,\n hasVideo: true\n }, {\n enableWorker: true,\n enableStashBuffer: false,\n stashInitialSize: 128\n });\n this.flvPlayer.attachMediaElement(this.dom);\n this.flvPlayer.load();\n // this.flvPlayer.play();\n }\n }, {\n key: \"on\",\n value: function on(type, Events, cd) {\n this.flvPlayer.on(flvjs[type][Events], cd);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.flvPlayer.destroy();\n this.flvPlayer = null;\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (flvplayer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9hZE9iak1vZGVsL2ZsdnBsYXllci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Mb2FkT2JqTW9kZWwvZmx2cGxheWVyLmpzP2Q4YWMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgZmx2cGxheWVyIHtcclxuICBjb25zdHJ1Y3Rvcihkb20sIG9wdGlvbnMpIHtcclxuICAgIHRoaXMuZG9tID0gZG9tXHJcbiAgICB0aGlzLnBsYXllclVybCA9IG9wdGlvbnMudXJsXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMuZmx2UGxheWVyID0gZmx2anMuY3JlYXRlUGxheWVyKHtcclxuICAgICAgdHlwZTogJ2ZsdicsXHJcbiAgICAgIHVybDogdGhpcy5wbGF5ZXJVcmwsXHJcbiAgICAgIGlzTGl2ZTogdHJ1ZSxcclxuICAgICAgaGFzQXVkaW86IGZhbHNlLFxyXG4gICAgICBoYXNWaWRlbzogdHJ1ZVxyXG4gICAgfSx7XHJcbiAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcclxuICAgICAgZW5hYmxlU3Rhc2hCdWZmZXI6IGZhbHNlLFxyXG4gICAgICBzdGFzaEluaXRpYWxTaXplOiAxMjhcclxuICB9KTtcclxuICAgIHRoaXMuZmx2UGxheWVyLmF0dGFjaE1lZGlhRWxlbWVudCh0aGlzLmRvbSk7XHJcbiAgICB0aGlzLmZsdlBsYXllci5sb2FkKCk7XHJcbiAgICAvLyB0aGlzLmZsdlBsYXllci5wbGF5KCk7XHJcbiAgfVxyXG5cclxuICBvbih0eXBlLCBFdmVudHMsIGNkKSB7XHJcbiAgICB0aGlzLmZsdlBsYXllci5vbihmbHZqc1t0eXBlXVtFdmVudHNdLCBjZClcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmZsdlBsYXllci5kZXN0cm95KClcclxuICAgIHRoaXMuZmx2UGxheWVyID0gbnVsbFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmx2cGxheWVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/LoadObjModel/flvplayer.js\n"); /***/ }), /***/ "./src/Obj/Base/LoadObjModel/index.js": /*!********************************************!*\ !*** ./src/Obj/Base/LoadObjModel/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return LoadObjModel; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/LoadObjModel/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Controller */ \"./src/Controller/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\nvar LoadObjModel = /*#__PURE__*/function (_tools) {\n function LoadObjModel(sdk, options) {\n var _this;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, LoadObjModel);\n _this = _callSuper(this, LoadObjModel);\n // eslint-disable-next-line no-undef\n _this.sdk = sdk;\n _this.viwer = sdk.viewer;\n _this.options = _objectSpread({}, options);\n _this.options.host = options.host || Object(_on__WEBPACK_IMPORTED_MODULE_8__[\"getHost\"])();\n _this.options.name = options.name || '未命名对象';\n _this.options.show = options.show || options.show === false ? options.show : true;\n if (typeof options.scale === 'number') {\n _this.options.scale = {};\n _this.options.scale.x = options.scale;\n _this.options.scale.y = options.scale;\n _this.options.scale.z = options.scale;\n } else {\n _this.options.scale = options.scale || {};\n _this.options.scale.x = _this.options.scale.x || _this.options.scale.x === 0 ? _this.options.scale.x : 1;\n _this.options.scale.y = _this.options.scale.y || _this.options.scale.y === 0 ? _this.options.scale.y : 1;\n _this.options.scale.z = _this.options.scale.z || _this.options.scale.z === 0 ? _this.options.scale.z : 1;\n }\n _this.primitive = null;\n _this._loadEvent = void 0;\n _this._loaded = false;\n _this._elms = {};\n _this.Dialog = _Dialog;\n _this._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n LoadObjModel.setDefaultValue(_this);\n _this.requestResource();\n _this.ControllerObject = new _Controller__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this.sdk, {\n position: _objectSpread({}, _this.options.position),\n rotate: {\n x: (360 + _this.options.roll % 360) % 360,\n y: (360 + -_this.options.pitch % 360) % 360,\n z: (360 + -_this.options.heading % 360) % 360\n }\n });\n _this.ControllerObject.controllerCallBack = _this.controllerCallBack;\n _this.HeadingPitchRollCallBack = _this.Dialog.HeadingPitchRollCallBack;\n\n // this.viwer.camera.moveEnd.addEventListener(() => {\n // if (this.options.show && this.primitive && this.primitive.video && this.primitive.video.player && this.options.position) {\n // const position1 = Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt);\n // const position2 = this.viwer.camera.position\n // const distance = Cesium.Cartesian3.distance(position1, position2);\n // if (this.options.playDistance && distance > this.options.playDistance) {\n // this.primitive.video.player.getVueInstance().pause()\n // }\n // else {\n // this.primitive.video.player.getVueInstance().play()\n // }\n // }\n // })\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(LoadObjModel, _tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(LoadObjModel, [{\n key: \"requestResource\",\n value: function requestResource() {\n this.addResource().then(function (r) {});\n }\n }, {\n key: \"addResource\",\n value: function () {\n var _addResource = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var that, xml, xmlString, parser, xmlDoc, position, crs, result, scene, origin, obj_modelMatrix, obj;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n that = this;\n that.options.xmlURL = that.options.objUrl.replace('.obj', '.xml');\n if (!(that.options.xmlURL !== '')) {\n _context.next = 34;\n break;\n }\n _context.next = 5;\n return fetch(that.options.xmlURL);\n case 5:\n xml = _context.sent;\n if (!xml.ok) {\n _context.next = 32;\n break;\n }\n _context.next = 9;\n return xml.text();\n case 9:\n xmlString = _context.sent;\n parser = new DOMParser();\n xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // console.log('xmlDocxmlDocxmlDoc', xmlDoc)\n position = xmlDoc.getElementsByTagName('Position')[0].textContent.split(','); // const bbox = xmlDoc.getElementsByTagName('bbox')[0]\n crs = xmlDoc.getElementsByTagName('Crs')[0].textContent;\n result = that.convert([{\n x: position[0],\n y: position[1],\n z: position[2]\n }], crs, 'EPSG:4326');\n that.options.position = that.options.position || {\n lng: result.points[0].x,\n lat: result.points[0].y,\n alt: result.points[0].z\n };\n that.ControllerObject.position = that.options.position;\n scene = that.viwer.scene;\n origin = Cesium.Cartesian3.fromDegrees(that.options.position.lng, that.options.position.lat, that.options.position.alt);\n obj_modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(origin, new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(0.85), Cesium.Math.toRadians(0), Cesium.Math.toRadians(0)));\n _context.next = 22;\n return window.objLoader.Load(that.options.objUrl);\n case 22:\n obj = _context.sent;\n obj.show = that.options.show;\n obj.modelMatrix = obj_modelMatrix;\n obj.setFlvVideo(that.options.videoUrl);\n scene.primitives.add(obj);\n that.primitive = obj;\n that.controllerCallBack({\n rotate: {\n x: that.options.roll,\n y: -that.options.pitch,\n z: -that.options.heading\n },\n position: _objectSpread({}, that.options.position)\n });\n this.loaded = true;\n this._loaded = true;\n if (this._loadEvent) {\n this._loadEvent();\n }\n case 32:\n _context.next = 36;\n break;\n case 34:\n // eslint-disable-next-line no-console\n console.error('请填写xml路径');\n return _context.abrupt(\"return\");\n case 36:\n if (!(that.options.objUrl === '')) {\n _context.next = 39;\n break;\n }\n // eslint-disable-next-line no-console\n console.error('请填写obj模型路径');\n return _context.abrupt(\"return\");\n case 39:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function addResource() {\n return _addResource.apply(this, arguments);\n }\n return addResource;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n a,\n latitude,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!this._error) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 28;\n break;\n case 25:\n a = 100 * Math.tan(60);\n latitude = a / 111319.55;\n this.sdk.viewer.camera.flyTo({\n destination: new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat - latitude, this.options.position.alt + 100),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 28:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var _this2 = this;\n var state,\n equal,\n contentElm,\n equalSwitchElm,\n equalBoxElm,\n noEqualBoxElm,\n equalElms,\n all_elm,\n i,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n state = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n equal = false;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context3.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.options, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this2.name = _this2.name.trim();\n if (!_this2.name) {\n _this2.name = '未命名对象';\n }\n _this2.originalOptions = _this2.deepCopyObj(_this2.options);\n _this2._DialogObject.close();\n _this2.Dialog.confirmCallBack && _this2.Dialog.confirmCallBack(_this2.originalOptions);\n },\n // resetCallBack: () => {\n // this.name = this.originalOptions.name\n // this.Dialog.resetCallBack && this.Dialog.resetCallBack()\n // },\n resetCallBack: function resetCallBack() {\n _this2.reset();\n _this2.Dialog.resetCallBack && _this2.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this2.Dialog.removeCallBack && _this2.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this2.reset();\n _this2.positionEditing = false;\n _this2.Dialog.closeCallBack && _this2.Dialog.closeCallBack();\n },\n rotateCallBack: function rotateCallBack() {\n if (_this2.rotationEditing) {\n _this2.rotationEditing = false;\n } else {\n _this2.rotationEditing = true;\n }\n },\n translationalCallBack: function translationalCallBack() {\n if (_this2.positionEditing) {\n _this2.positionEditing = false;\n } else {\n _this2.positionEditing = true;\n }\n }\n }, true);\n case 6:\n this._DialogObject = _context3.sent;\n contentElm = document.createElement('div');\n contentElm.style.width = '448px';\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n equalSwitchElm = this._DialogObject._element.content.getElementsByClassName('checkbox-box')[0].querySelector('input');\n equalBoxElm = this._DialogObject._element.content.getElementsByClassName('equal')[0];\n noEqualBoxElm = this._DialogObject._element.content.getElementsByClassName('no-equal')[0];\n equalSwitchElm.checked = equal;\n equalSwitchElm.addEventListener('change', function (e) {\n equal = e.target.checked;\n if (equal) {\n equalBoxElm.style.display = 'flex';\n noEqualBoxElm.style.display = 'none';\n } else {\n equalBoxElm.style.display = 'none';\n noEqualBoxElm.style.display = 'flex';\n }\n });\n equalElms = equalBoxElm.getElementsByTagName('input');\n equalElms[0].value = this.scaleX;\n equalElms[1].value = this.scaleX;\n equalElms[0].addEventListener('input', function (e) {\n _this2.scaleX = e.target.value;\n _this2.scaleY = e.target.value;\n _this2.scaleZ = e.target.value;\n });\n equalElms[1].addEventListener('input', function (e) {\n _this2.scaleX = e.target.value;\n _this2.scaleY = e.target.value;\n _this2.scaleZ = e.target.value;\n });\n if (equal) {\n equalBoxElm.style.display = 'flex';\n noEqualBoxElm.style.display = 'none';\n } else {\n equalBoxElm.style.display = 'none';\n noEqualBoxElm.style.display = 'flex';\n }\n setTimeout(function () {\n if (_this2._DialogObject._element.foot) {\n var translationalElm = _this2._DialogObject._element.foot.getElementsByClassName('rotate')[0];\n if (translationalElm) {\n translationalElm.style.position = 'absolute';\n translationalElm.style.left = '100px';\n }\n }\n }, 0);\n all_elm = contentElm.getElementsByTagName(\"*\");\n for (i = 0; i < all_elm.length; i++) {\n all_elm[i].addEventListener('input', function (e) {\n if (e.target.value === '0' && e.target.min === '0') {\n switch (e.target.className) {\n case 'scale-x':\n _this2.scaleX = 0.0001;\n break;\n case 'scale-y':\n _this2.scaleY = 0.0001;\n break;\n case 'scale-z':\n _this2.scaleZ = 0.0001;\n case 'scale-all':\n _this2.scaleX = 0.0001;\n _this2.scaleY = 0.0001;\n _this2.scaleZ = 0.0001;\n break;\n case 3:\n }\n }\n });\n }\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.scaleX.push(equalElms[0], equalElms[1]);\n case 28:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n this.ControllerObject.destroy();\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.options.name;\n if (!this.primitive) {\n return;\n }\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt));\n this.primitive.modelMatrix = m;\n // 旋转\n this.primitive.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(this.primitive.modelMatrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(this.options.heading, this.options.pitch, this.options.roll)), this.primitive.modelMatrix);\n\n // 缩放\n var scaleX = this.options.scale.x;\n var scaleY = this.options.scale.y;\n var scaleZ = this.options.scale.z;\n if (scaleX === 0) {\n scaleX = 0.00001;\n }\n if (scaleY === 0) {\n scaleY = 0.00001;\n }\n if (scaleZ === 0) {\n scaleZ = 0.00001;\n }\n Cesium.Matrix4.multiplyByScale(this.primitive.modelMatrix, new Cesium.Cartesian3(scaleX, scaleY, scaleZ), this.primitive.modelMatrix);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n this.sdk.viewer.scene.primitives.remove(this.primitive);\n this.primitive = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }, {\n key: \"controllerCallBack\",\n get: function get() {\n var _this3 = this;\n return function (params) {\n _this3.options.heading = -params.rotate.z;\n _this3.options.pitch = -params.rotate.y;\n _this3.options.roll = params.rotate.x;\n _this3.HeadingPitchRollCallBack && _this3.HeadingPitchRollCallBack(params);\n var lng = Number(Number(params.position.lng).toFixed(8));\n var lat = Number(Number(params.position.lat).toFixed(8));\n var alt = Number(Number(params.position.alt).toFixed(2));\n _this3.options.position = {\n lng: lng,\n lat: lat,\n alt: alt\n };\n // 平移\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt));\n _this3.primitive.modelMatrix = m;\n // 旋转\n Cesium.Matrix4.multiplyByMatrix3(_this3.primitive.modelMatrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(-params.rotate.z, -params.rotate.y, params.rotate.x)), _this3.primitive.modelMatrix);\n\n // 缩放\n var scaleX = _this3.options.scale.x;\n var scaleY = _this3.options.scale.y;\n var scaleZ = _this3.options.scale.z;\n if (scaleX === 0) {\n scaleX = 0.00001;\n }\n if (scaleY === 0) {\n scaleY = 0.00001;\n }\n if (scaleZ === 0) {\n scaleZ = 0.00001;\n }\n Cesium.Matrix4.multiplyByScale(_this3.primitive.modelMatrix, new Cesium.Cartesian3(scaleX, scaleY, scaleZ), _this3.primitive.modelMatrix);\n _this3._elms.lng && _this3._elms.lng.forEach(function (item) {\n item.value = _this3.options.position.lng;\n });\n _this3._elms.lat && _this3._elms.lat.forEach(function (item) {\n item.value = _this3.options.position.lat;\n });\n _this3._elms.alt && _this3._elms.alt.forEach(function (item) {\n item.value = _this3.options.position.alt;\n });\n };\n },\n set: function set(callback) {\n this._controllerCallBack = callback;\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @desc 打开模型旋转功能\r\n * @param status {boolean}\r\n * @methodOf Source\r\n * */\n }, {\n key: \"rotationEditing\",\n get:\n /**\r\n * @desc 获取模型旋转状态\r\n * @method rotationEditing\r\n * @return boolean\r\n * @methodOf Source\r\n * */\n function get() {\n if (this.ControllerObject.getActiveState() === 'rtation') {\n return true;\n }\n return false;\n }\n\n /**@desc 打开平移模型功能\r\n *\r\n * @memberOf Source\r\n *@param status {boolean}\r\n *\r\n * */,\n set: function set(status) {\n if (status) {\n this.ControllerObject.editRtation();\n } else {\n this.ControllerObject.destroy();\n }\n }\n }, {\n key: \"scaleX\",\n get: function get() {\n return this.options.scale.x;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.scale.x = Number(Number(v).toFixed(4));\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n this._elms.scaleX && this._elms.scaleX.forEach(function (item) {\n item.value = _this4.options.scale.x;\n });\n }\n }, {\n key: \"scaleY\",\n get: function get() {\n return this.options.scale.y;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.scale.y = Number(Number(v).toFixed(4));\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n this._elms.scaleY && this._elms.scaleY.forEach(function (item) {\n item.value = _this5.options.scale.y;\n });\n }\n }, {\n key: \"scaleZ\",\n get: function get() {\n return this.options.scale.z;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.scale.z = Number(Number(v).toFixed(4));\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n this._elms.scaleZ && this._elms.scaleZ.forEach(function (item) {\n item.value = _this6.options.scale.z;\n });\n }\n }, {\n key: \"positionEditing\",\n get: function get() {\n if (this.ControllerObject.getActiveState() === 'translational') {\n return true;\n }\n return false;\n },\n set: function set(status) {\n if (!this.sdk || !this.sdk.viewer || !this.ControllerObject) {\n return;\n }\n if (status) {\n this.ControllerObject.editTranslational();\n } else {\n this.ControllerObject.destroy();\n }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.position.lng;\n },\n set: function set(v) {\n this.options.position.lng = v;\n this.ControllerObject.position = {\n lng: this.options.position.lng,\n lat: this.options.position.lat,\n alt: this.options.position.alt\n };\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.position.lat;\n },\n set: function set(v) {\n this.options.position.lat = v;\n this.ControllerObject.position = {\n lng: this.options.position.lng,\n lat: this.options.position.lat,\n alt: this.options.position.alt\n };\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.position.alt;\n },\n set: function set(v) {\n this.options.position.alt = v;\n this.ControllerObject.position = {\n lng: this.options.position.lng,\n lat: this.options.position.lat,\n alt: this.options.position.alt\n };\n this.controllerCallBack({\n position: _objectSpread({}, this.options.position),\n rotate: {\n x: (360 + this.options.roll % 360) % 360,\n y: (360 + -this.options.pitch % 360) % 360,\n z: (360 + -this.options.heading % 360) % 360\n }\n });\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n this.options.show = v;\n this.primitive.show = v;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"playDistance\",\n get: function get() {\n return this.options.playDistance;\n },\n set: function set(v) {\n this.options.playDistance = v;\n // this._elms.playDistance && this._elms.playDistance.forEach((item) => {\n // item.value = this.options.playDistance\n // })\n // if (this.options.show && this.primitive && this.primitive.video && this.primitive.video.player && this.options.position) {\n // const position1 = Cesium.Cartesian3.fromDegrees(this.options.position.lng, this.options.position.lat, this.options.position.alt);\n // const position2 = this.viwer.camera.position\n // const distance = Cesium.Cartesian3.distance(position1, position2);\n // if (this.options.playDistance && distance > this.options.playDistance) {\n // this.primitive.video.player.getVueInstance().pause()\n // }\n // else {\n // this.primitive.video.player.getVueInstance().play()\n // }\n // }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }, {\n key: \"load\",\n value: function load(callback) {\n if (this._loaded) {\n callback();\n } else {\n this._loadEvent = callback;\n }\n }\n }, {\n key: \"customView\",\n get: function get() {\n this.options.customView;\n }\n\n // 设置视角\n }, {\n key: \"setCustomView\",\n value: function setCustomView(val) {\n if (val) {\n this.options.customView = val;\n } else {\n var camera = this.sdk.viewer.camera;\n this.options.customView = {\n orientation: {\n heading: camera.heading,\n pitch: camera.pitch,\n roll: camera.roll\n },\n position: {\n x: camera.position.x,\n y: camera.position.y,\n z: camera.position.z\n }\n };\n this.originalOptions && (this.originalOptions.customView = this.options.customView);\n }\n }\n // 重置视角\n }, {\n key: \"resetCustomView\",\n value: function resetCustomView() {\n this.options.customView = undefined;\n }\n }], [{\n key: \"setDefaultValue\",\n value: function setDefaultValue(that) {\n that.options.id = that.options.id || that.randomString();\n that.options.position = that.options.position;\n that.options.objUrl = that.options.objUrl || '';\n that.options.videoUrl = that.options.videoUrl || '';\n that.options.xmlURL = that.options.xmlURL || '';\n that.options.heading = that.options.heading || 0;\n that.options.pitch = that.options.pitch || 0;\n that.options.roll = that.options.roll || 0;\n }\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9hZE9iak1vZGVsL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL0xvYWRPYmpNb2RlbC9pbmRleC5qcz8wYWQ4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEhvc3QsIGdldFRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCB0b29scyBmcm9tICcuLi8uLi8uLi9Ub29scydcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nL2V2ZW50QmluZGluZyc7XHJcbmltcG9ydCBDb250cm9sbGVyT2JqZWN0IGZyb20gJy4uLy4uLy4uL0NvbnRyb2xsZXInXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvYWRPYmpNb2RlbCBleHRlbmRzIHRvb2xzIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICB0aGlzLnNkayA9IHNka1xyXG4gICAgdGhpcy52aXdlciA9IHNkay52aWV3ZXJcclxuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9XHJcbiAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCBnZXRIb3N0KClcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2NhbGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IHt9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZS54ID0gb3B0aW9ucy5zY2FsZVxyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGUueSA9IG9wdGlvbnMuc2NhbGVcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLnogPSBvcHRpb25zLnNjYWxlXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlID0gb3B0aW9ucy5zY2FsZSB8fCB7fVxyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGUueCA9ICh0aGlzLm9wdGlvbnMuc2NhbGUueCB8fCB0aGlzLm9wdGlvbnMuc2NhbGUueCA9PT0gMCkgPyB0aGlzLm9wdGlvbnMuc2NhbGUueCA6IDFcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLnkgPSAodGhpcy5vcHRpb25zLnNjYWxlLnkgfHwgdGhpcy5vcHRpb25zLnNjYWxlLnkgPT09IDApID8gdGhpcy5vcHRpb25zLnNjYWxlLnkgOiAxXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZS56ID0gKHRoaXMub3B0aW9ucy5zY2FsZS56IHx8IHRoaXMub3B0aW9ucy5zY2FsZS56ID09PSAwKSA/IHRoaXMub3B0aW9ucy5zY2FsZS56IDogMVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcmltaXRpdmUgPSBudWxsXHJcbiAgICB0aGlzLl9sb2FkRXZlbnQgPSB2b2lkIDBcclxuICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgTG9hZE9iak1vZGVsLnNldERlZmF1bHRWYWx1ZSh0aGlzKVxyXG4gICAgdGhpcy5yZXF1ZXN0UmVzb3VyY2UoKVxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ID0gbmV3IENvbnRyb2xsZXJPYmplY3QodGhpcy5zZGssIHtcclxuICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH0sXHJcbiAgICAgIHJvdGF0ZToge1xyXG4gICAgICAgIHg6ICgzNjAgKyAodGhpcy5vcHRpb25zLnJvbGwgJSAzNjApKSAlIDM2MCxcclxuICAgICAgICB5OiAoMzYwICsgKC10aGlzLm9wdGlvbnMucGl0Y2ggJSAzNjApKSAlIDM2MCxcclxuICAgICAgICB6OiAoMzYwICsgKC10aGlzLm9wdGlvbnMuaGVhZGluZyAlIDM2MCkpICUgMzYwXHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmNvbnRyb2xsZXJDYWxsQmFjayA9IHRoaXMuY29udHJvbGxlckNhbGxCYWNrXHJcbiAgICB0aGlzLkhlYWRpbmdQaXRjaFJvbGxDYWxsQmFjayA9IHRoaXMuRGlhbG9nLkhlYWRpbmdQaXRjaFJvbGxDYWxsQmFja1xyXG5cclxuICAgIC8vIHRoaXMudml3ZXIuY2FtZXJhLm1vdmVFbmQuYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAvLyAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdyAmJiB0aGlzLnByaW1pdGl2ZSAmJiB0aGlzLnByaW1pdGl2ZS52aWRlbyAmJiB0aGlzLnByaW1pdGl2ZS52aWRlby5wbGF5ZXIgJiYgdGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAvLyAgICAgY29uc3QgcG9zaXRpb24xID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCk7XHJcbiAgICAvLyAgICAgY29uc3QgcG9zaXRpb24yID0gdGhpcy52aXdlci5jYW1lcmEucG9zaXRpb25cclxuICAgIC8vICAgICBjb25zdCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvc2l0aW9uMSwgcG9zaXRpb24yKTtcclxuICAgIC8vICAgICBpZiAodGhpcy5vcHRpb25zLnBsYXlEaXN0YW5jZSAmJiBkaXN0YW5jZSA+IHRoaXMub3B0aW9ucy5wbGF5RGlzdGFuY2UpIHtcclxuICAgIC8vICAgICAgIHRoaXMucHJpbWl0aXZlLnZpZGVvLnBsYXllci5nZXRWdWVJbnN0YW5jZSgpLnBhdXNlKClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnByaW1pdGl2ZS52aWRlby5wbGF5ZXIuZ2V0VnVlSW5zdGFuY2UoKS5wbGF5KClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzb3VyY2UoKSB7XHJcbiAgICB0aGlzLmFkZFJlc291cmNlKCkudGhlbihyID0+IHsgfSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXREZWZhdWx0VmFsdWUodGhhdCkge1xyXG4gICAgdGhhdC5vcHRpb25zLmlkID0gdGhhdC5vcHRpb25zLmlkIHx8IHRoYXQucmFuZG9tU3RyaW5nKClcclxuICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbiA9IHRoYXQub3B0aW9ucy5wb3NpdGlvblxyXG4gICAgdGhhdC5vcHRpb25zLm9ialVybCA9IHRoYXQub3B0aW9ucy5vYmpVcmwgfHwgJydcclxuICAgIHRoYXQub3B0aW9ucy52aWRlb1VybCA9IHRoYXQub3B0aW9ucy52aWRlb1VybCB8fCAnJ1xyXG4gICAgdGhhdC5vcHRpb25zLnhtbFVSTCA9IHRoYXQub3B0aW9ucy54bWxVUkwgfHwgJydcclxuICAgIHRoYXQub3B0aW9ucy5oZWFkaW5nID0gdGhhdC5vcHRpb25zLmhlYWRpbmcgfHwgMFxyXG4gICAgdGhhdC5vcHRpb25zLnBpdGNoID0gdGhhdC5vcHRpb25zLnBpdGNoIHx8IDBcclxuICAgIHRoYXQub3B0aW9ucy5yb2xsID0gdGhhdC5vcHRpb25zLnJvbGwgfHwgMFxyXG4gIH1cclxuICBhc3luYyBhZGRSZXNvdXJjZSgpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgdGhhdC5vcHRpb25zLnhtbFVSTCA9IHRoYXQub3B0aW9ucy5vYmpVcmwucmVwbGFjZSgnLm9iaicsICcueG1sJylcclxuICAgIGlmICh0aGF0Lm9wdGlvbnMueG1sVVJMICE9PSAnJykge1xyXG4gICAgICBjb25zdCB4bWwgPSBhd2FpdCBmZXRjaCh0aGF0Lm9wdGlvbnMueG1sVVJMKVxyXG4gICAgICBpZiAoeG1sLm9rKSB7XHJcbiAgICAgICAgY29uc3QgeG1sU3RyaW5nID0gYXdhaXQgeG1sLnRleHQoKVxyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKVxyXG4gICAgICAgIGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCAndGV4dC94bWwnKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd4bWxEb2N4bWxEb2N4bWxEb2MnLCB4bWxEb2MpXHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB4bWxEb2NcclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnUG9zaXRpb24nKVswXVxyXG4gICAgICAgICAgLnRleHRDb250ZW50LnNwbGl0KCcsJylcclxuICAgICAgICAvLyBjb25zdCBiYm94ID0geG1sRG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYm94JylbMF1cclxuICAgICAgICBjb25zdCBjcnMgPSB4bWxEb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0NycycpWzBdLnRleHRDb250ZW50XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhhdC5jb252ZXJ0KFxyXG4gICAgICAgICAgW3sgeDogcG9zaXRpb25bMF0sIHk6IHBvc2l0aW9uWzFdLCB6OiBwb3NpdGlvblsyXSB9XSxcclxuICAgICAgICAgIGNycyxcclxuICAgICAgICAgICdFUFNHOjQzMjYnXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb24gPSB0aGF0Lm9wdGlvbnMucG9zaXRpb24gfHwgeyBsbmc6IHJlc3VsdC5wb2ludHNbMF0ueCwgbGF0OiByZXN1bHQucG9pbnRzWzBdLnksIGFsdDogcmVzdWx0LnBvaW50c1swXS56IH1cclxuICAgICAgICB0aGF0LkNvbnRyb2xsZXJPYmplY3QucG9zaXRpb24gPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25cclxuICAgICAgICBjb25zdCBzY2VuZSA9IHRoYXQudml3ZXIuc2NlbmVcclxuICAgICAgICBjb25zdCBvcmlnaW4gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb24ubGF0LFxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgIClcclxuICAgICAgICBjb25zdCBvYmpfbW9kZWxNYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKFxyXG4gICAgICAgICAgb3JpZ2luLFxyXG4gICAgICAgICAgbmV3IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsKFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC44NSksXHJcbiAgICAgICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucygwKSxcclxuICAgICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGxldCBvYmogPSBhd2FpdCB3aW5kb3cub2JqTG9hZGVyLkxvYWQodGhhdC5vcHRpb25zLm9ialVybClcclxuICAgICAgICBvYmouc2hvdyA9IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICAgICAgb2JqLm1vZGVsTWF0cml4ID0gb2JqX21vZGVsTWF0cml4XHJcbiAgICAgICAgb2JqLnNldEZsdlZpZGVvKHRoYXQub3B0aW9ucy52aWRlb1VybClcclxuICAgICAgICBzY2VuZS5wcmltaXRpdmVzLmFkZChvYmopXHJcbiAgICAgICAgdGhhdC5wcmltaXRpdmUgPSBvYmpcclxuICAgICAgICB0aGF0LmNvbnRyb2xsZXJDYWxsQmFjayh7XHJcbiAgICAgICAgICByb3RhdGU6IHsgeDogdGhhdC5vcHRpb25zLnJvbGwsIHk6IC10aGF0Lm9wdGlvbnMucGl0Y2gsIHo6IC10aGF0Lm9wdGlvbnMuaGVhZGluZyB9LFxyXG4gICAgICAgICAgcG9zaXRpb246IHsgLi4udGhhdC5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWVcclxuICAgICAgICBpZiAodGhpcy5fbG9hZEV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRXZlbnQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5lcnJvcign6K+35aGr5YaZeG1s6Lev5b6EJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodGhhdC5vcHRpb25zLm9ialVybCA9PT0gJycpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5lcnJvcign6K+35aGr5YaZb2Jq5qih5Z6L6Lev5b6EJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBhID0gMTAwICogTWF0aC50YW4oNjApXHJcbiAgICAgIGxldCBsYXRpdHVkZSA9IGEgLyAxMTEzMTkuNTVcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gbGF0aXR1ZGUsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ICsgMTAwXHJcbiAgICAgICAgKSxcclxuICAgICAgICBvcmllbnRhdGlvbjogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTYwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBlcXVhbCA9IGZhbHNlXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgIHRpdGxlOiAn57yW6L6R5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgfSxcclxuICAgICAgLy8gcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgICAgLy8gICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAvLyB9LFxyXG4gICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgfSxcclxuICAgICAgcm90YXRlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yb3RhdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgIHRoaXMucm90YXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJvdGF0aW9uRWRpdGluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdHJ1ZSlcclxuICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIGNvbnRlbnRFbG0uc3R5bGUud2lkdGggPSAnNDQ4cHgnXHJcbiAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG5cclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgIGxldCBlcXVhbFN3aXRjaEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NoZWNrYm94LWJveCcpWzBdLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcclxuICAgIGxldCBlcXVhbEJveEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2VxdWFsJylbMF1cclxuICAgIGxldCBub0VxdWFsQm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tZXF1YWwnKVswXVxyXG4gICAgZXF1YWxTd2l0Y2hFbG0uY2hlY2tlZCA9IGVxdWFsXHJcbiAgICBlcXVhbFN3aXRjaEVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICBlcXVhbCA9IGUudGFyZ2V0LmNoZWNrZWRcclxuICAgICAgaWYgKGVxdWFsKSB7XHJcbiAgICAgICAgZXF1YWxCb3hFbG0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgIG5vRXF1YWxCb3hFbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICBub0VxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBsZXQgZXF1YWxFbG1zID0gZXF1YWxCb3hFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylcclxuICAgIGVxdWFsRWxtc1swXS52YWx1ZSA9IHRoaXMuc2NhbGVYXHJcbiAgICBlcXVhbEVsbXNbMV0udmFsdWUgPSB0aGlzLnNjYWxlWFxyXG5cclxuICAgIGVxdWFsRWxtc1swXS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2NhbGVYID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgdGhpcy5zY2FsZVkgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICB0aGlzLnNjYWxlWiA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICB9KVxyXG4gICAgZXF1YWxFbG1zWzFdLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgdGhpcy5zY2FsZVggPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICB0aGlzLnNjYWxlWSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgIHRoaXMuc2NhbGVaID0gZS50YXJnZXQudmFsdWVcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGVxdWFsKSB7XHJcbiAgICAgIGVxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgbm9FcXVhbEJveEVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZXF1YWxCb3hFbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICBub0VxdWFsQm94RWxtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5mb290KSB7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uYWxFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyb3RhdGUnKVswXVxyXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbmFsRWxtKSB7XHJcbiAgICAgICAgICB0cmFuc2xhdGlvbmFsRWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gICAgICAgICAgdHJhbnNsYXRpb25hbEVsbS5zdHlsZS5sZWZ0ID0gJzEwMHB4J1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsX2VsbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBhbGxfZWxtW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgPT09ICcwJyAmJiBlLnRhcmdldC5taW4gPT09ICcwJykge1xyXG4gICAgICAgICAgc3dpdGNoIChlLnRhcmdldC5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc2NhbGUteCc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2FsZVggPSAwLjAwMDFcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2NhbGUteSc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2FsZVkgPSAwLjAwMDFcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2NhbGUteic6XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2FsZVogPSAwLjAwMDFcclxuICAgICAgICAgICAgY2FzZSAnc2NhbGUtYWxsJzpcclxuICAgICAgICAgICAgICB0aGlzLnNjYWxlWCA9IDAuMDAwMVxyXG4gICAgICAgICAgICAgIHRoaXMuc2NhbGVZID0gMC4wMDAxXHJcbiAgICAgICAgICAgICAgdGhpcy5zY2FsZVogPSAwLjAwMDFcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgdGhpcy5fZWxtcyA9IHRoaXMuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlWC5wdXNoKGVxdWFsRWxtc1swXSwgZXF1YWxFbG1zWzFdKVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWVcclxuICAgIGlmICghdGhpcy5wcmltaXRpdmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgbSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKFxyXG4gICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdClcclxuICAgIClcclxuICAgIHRoaXMucHJpbWl0aXZlLm1vZGVsTWF0cml4ID0gbVxyXG4gICAgLy8g5peL6L2sXHJcbiAgICB0aGlzLnByaW1pdGl2ZS5tb2RlbE1hdHJpeCA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlNYXRyaXgzKFxyXG4gICAgICB0aGlzLnByaW1pdGl2ZS5tb2RlbE1hdHJpeCxcclxuICAgICAgQ2VzaXVtLk1hdHJpeDMuZnJvbUhlYWRpbmdQaXRjaFJvbGwoXHJcbiAgICAgICAgQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmhlYWRpbmcsIHRoaXMub3B0aW9ucy5waXRjaCwgdGhpcy5vcHRpb25zLnJvbGwpXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLm1vZGVsTWF0cml4XHJcbiAgICApXHJcblxyXG4gICAgLy8g57yp5pS+XHJcbiAgICBsZXQgc2NhbGVYID0gdGhpcy5vcHRpb25zLnNjYWxlLnhcclxuICAgIGxldCBzY2FsZVkgPSB0aGlzLm9wdGlvbnMuc2NhbGUueVxyXG4gICAgbGV0IHNjYWxlWiA9IHRoaXMub3B0aW9ucy5zY2FsZS56XHJcbiAgICBpZiAoc2NhbGVYID09PSAwKSB7XHJcbiAgICAgIHNjYWxlWCA9IDAuMDAwMDFcclxuICAgIH1cclxuICAgIGlmIChzY2FsZVkgPT09IDApIHtcclxuICAgICAgc2NhbGVZID0gMC4wMDAwMVxyXG4gICAgfVxyXG4gICAgaWYgKHNjYWxlWiA9PT0gMCkge1xyXG4gICAgICBzY2FsZVogPSAwLjAwMDAxXHJcbiAgICB9XHJcbiAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUodGhpcy5wcmltaXRpdmUubW9kZWxNYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhzY2FsZVgsIHNjYWxlWSwgc2NhbGVaKSwgdGhpcy5wcmltaXRpdmUubW9kZWxNYXRyaXgpXHJcbiAgfVxyXG5cclxuICByZW1vdmUoKSB7XHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5wcmltaXRpdmUpXHJcbiAgICB0aGlzLnByaW1pdGl2ZSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IGNvbnRyb2xsZXJDYWxsQmFjayhjYWxsYmFjaykge1xyXG4gICAgdGhpcy5fY29udHJvbGxlckNhbGxCYWNrID0gY2FsbGJhY2tcclxuICB9XHJcbiAgZ2V0IGNvbnRyb2xsZXJDYWxsQmFjaygpIHtcclxuICAgIHJldHVybiBwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVhZGluZyA9IC1wYXJhbXMucm90YXRlLnpcclxuICAgICAgdGhpcy5vcHRpb25zLnBpdGNoID0gLXBhcmFtcy5yb3RhdGUueVxyXG4gICAgICB0aGlzLm9wdGlvbnMucm9sbCA9IHBhcmFtcy5yb3RhdGUueFxyXG4gICAgICB0aGlzLkhlYWRpbmdQaXRjaFJvbGxDYWxsQmFjayAmJiB0aGlzLkhlYWRpbmdQaXRjaFJvbGxDYWxsQmFjayhwYXJhbXMpXHJcbiAgICAgIGxldCBsbmcgPSBOdW1iZXIoTnVtYmVyKHBhcmFtcy5wb3NpdGlvbi5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgIGxldCBsYXQgPSBOdW1iZXIoTnVtYmVyKHBhcmFtcy5wb3NpdGlvbi5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgIGxldCBhbHQgPSBOdW1iZXIoTnVtYmVyKHBhcmFtcy5wb3NpdGlvbi5hbHQpLnRvRml4ZWQoMikpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IHsgbG5nLCBsYXQsIGFsdCB9XHJcbiAgICAgIC8vIOW5s+enu1xyXG4gICAgICBsZXQgbSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwYXJhbXMucG9zaXRpb24ubG5nLCBwYXJhbXMucG9zaXRpb24ubGF0LCBwYXJhbXMucG9zaXRpb24uYWx0KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLm1vZGVsTWF0cml4ID0gbVxyXG4gICAgICAvLyDml4vovaxcclxuICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeU1hdHJpeDMoXHJcbiAgICAgICAgdGhpcy5wcmltaXRpdmUubW9kZWxNYXRyaXgsXHJcbiAgICAgICAgQ2VzaXVtLk1hdHJpeDMuZnJvbUhlYWRpbmdQaXRjaFJvbGwoXHJcbiAgICAgICAgICBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbC5mcm9tRGVncmVlcygtcGFyYW1zLnJvdGF0ZS56LCAtcGFyYW1zLnJvdGF0ZS55LCBwYXJhbXMucm90YXRlLngpXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0aGlzLnByaW1pdGl2ZS5tb2RlbE1hdHJpeFxyXG4gICAgICApXHJcblxyXG4gICAgICAvLyDnvKnmlL5cclxuICAgICAgbGV0IHNjYWxlWCA9IHRoaXMub3B0aW9ucy5zY2FsZS54XHJcbiAgICAgIGxldCBzY2FsZVkgPSB0aGlzLm9wdGlvbnMuc2NhbGUueVxyXG4gICAgICBsZXQgc2NhbGVaID0gdGhpcy5vcHRpb25zLnNjYWxlLnpcclxuICAgICAgaWYgKHNjYWxlWCA9PT0gMCkge1xyXG4gICAgICAgIHNjYWxlWCA9IDAuMDAwMDFcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2NhbGVZID09PSAwKSB7XHJcbiAgICAgICAgc2NhbGVZID0gMC4wMDAwMVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzY2FsZVogPT09IDApIHtcclxuICAgICAgICBzY2FsZVogPSAwLjAwMDAxXHJcbiAgICAgIH1cclxuICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVNjYWxlKHRoaXMucHJpbWl0aXZlLm1vZGVsTWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoc2NhbGVYLCBzY2FsZVksIHNjYWxlWiksIHRoaXMucHJpbWl0aXZlLm1vZGVsTWF0cml4KVxyXG5cclxuICAgICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXQgbmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubmFtZVxyXG4gIH1cclxuICBzZXQgbmFtZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubmFtZSAmJiB0aGlzLl9lbG1zLm5hbWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIOaJk+W8gOaooeWei+aXi+i9rOWKn+iDvVxyXG4gICAqIEBwYXJhbSBzdGF0dXMge2Jvb2xlYW59XHJcbiAgICogQG1ldGhvZE9mIFNvdXJjZVxyXG4gICAqICovXHJcbiAgc2V0IHJvdGF0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmVkaXRSdGF0aW9uKClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXQgc2NhbGVYKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZS54XHJcbiAgfVxyXG5cclxuICBzZXQgc2NhbGVYKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZS54ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDQpKVxyXG4gICAgdGhpcy5jb250cm9sbGVyQ2FsbEJhY2soXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogeyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfSxcclxuICAgICAgICByb3RhdGU6IHtcclxuICAgICAgICAgIHg6ICgzNjAgKyAodGhpcy5vcHRpb25zLnJvbGwgJSAzNjApKSAlIDM2MCxcclxuICAgICAgICAgIHk6ICgzNjAgKyAoLXRoaXMub3B0aW9ucy5waXRjaCAlIDM2MCkpICUgMzYwLFxyXG4gICAgICAgICAgejogKDM2MCArICgtdGhpcy5vcHRpb25zLmhlYWRpbmcgJSAzNjApKSAlIDM2MFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgIClcclxuICAgIHRoaXMuX2VsbXMuc2NhbGVYICYmIHRoaXMuX2VsbXMuc2NhbGVYLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5zY2FsZS54XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlWSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2NhbGUueVxyXG4gIH1cclxuXHJcbiAgc2V0IHNjYWxlWSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2NhbGUueSA9IE51bWJlcihOdW1iZXIodikudG9GaXhlZCg0KSlcclxuICAgIHRoaXMuY29udHJvbGxlckNhbGxCYWNrKFxyXG4gICAgICB7XHJcbiAgICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH0sXHJcbiAgICAgICAgcm90YXRlOiB7XHJcbiAgICAgICAgICB4OiAoMzYwICsgKHRoaXMub3B0aW9ucy5yb2xsICUgMzYwKSkgJSAzNjAsXHJcbiAgICAgICAgICB5OiAoMzYwICsgKC10aGlzLm9wdGlvbnMucGl0Y2ggJSAzNjApKSAlIDM2MCxcclxuICAgICAgICAgIHo6ICgzNjAgKyAoLXRoaXMub3B0aW9ucy5oZWFkaW5nICUgMzYwKSkgJSAzNjBcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlWSAmJiB0aGlzLl9lbG1zLnNjYWxlWS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuc2NhbGUueVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBzY2FsZVooKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNjYWxlLnpcclxuICB9XHJcblxyXG4gIHNldCBzY2FsZVoodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlLnogPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoNCkpXHJcbiAgICB0aGlzLmNvbnRyb2xsZXJDYWxsQmFjayhcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9LFxyXG4gICAgICAgIHJvdGF0ZToge1xyXG4gICAgICAgICAgeDogKDM2MCArICh0aGlzLm9wdGlvbnMucm9sbCAlIDM2MCkpICUgMzYwLFxyXG4gICAgICAgICAgeTogKDM2MCArICgtdGhpcy5vcHRpb25zLnBpdGNoICUgMzYwKSkgJSAzNjAsXHJcbiAgICAgICAgICB6OiAoMzYwICsgKC10aGlzLm9wdGlvbnMuaGVhZGluZyAlIDM2MCkpICUgMzYwXHJcbiAgICAgICAgfSxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgdGhpcy5fZWxtcy5zY2FsZVogJiYgdGhpcy5fZWxtcy5zY2FsZVouZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnNjYWxlLnpcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyDojrflj5bmqKHlnovml4vovaznirbmgIFcclxuICAgKiBAbWV0aG9kIHJvdGF0aW9uRWRpdGluZ1xyXG4gICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAqIEBtZXRob2RPZiBTb3VyY2VcclxuXHJcbiAgICogKi9cclxuICBnZXQgcm90YXRpb25FZGl0aW5nKCkge1xyXG4gICAgaWYgKHRoaXMuQ29udHJvbGxlck9iamVjdC5nZXRBY3RpdmVTdGF0ZSgpID09PSAncnRhdGlvbicpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75qih5Z6L5Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICpAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLkNvbnRyb2xsZXJPYmplY3QpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgaWYgKHRoaXMuQ29udHJvbGxlck9iamVjdC5nZXRBY3RpdmVTdGF0ZSgpID09PSAndHJhbnNsYXRpb25hbCcpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nXHJcbiAgfVxyXG4gIHNldCBsbmcodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyA9IHZcclxuICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5wb3NpdGlvbiA9IHtsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcsIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0fVxyXG4gICAgdGhpcy5jb250cm9sbGVyQ2FsbEJhY2soXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogeyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfSxcclxuICAgICAgICByb3RhdGU6IHtcclxuICAgICAgICAgIHg6ICgzNjAgKyAodGhpcy5vcHRpb25zLnJvbGwgJSAzNjApKSAlIDM2MCxcclxuICAgICAgICAgIHk6ICgzNjAgKyAoLXRoaXMub3B0aW9ucy5waXRjaCAlIDM2MCkpICUgMzYwLFxyXG4gICAgICAgICAgejogKDM2MCArICgtdGhpcy5vcHRpb25zLmhlYWRpbmcgJSAzNjApKSAlIDM2MFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldCBsYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gIH1cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgPSB2XHJcbiAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QucG9zaXRpb24gPSB7bG5nOiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQsIGFsdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdH1cclxuICAgIHRoaXMuY29udHJvbGxlckNhbGxCYWNrKFxyXG4gICAgICB7XHJcbiAgICAgICAgcG9zaXRpb246IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH0sXHJcbiAgICAgICAgcm90YXRlOiB7XHJcbiAgICAgICAgICB4OiAoMzYwICsgKHRoaXMub3B0aW9ucy5yb2xsICUgMzYwKSkgJSAzNjAsXHJcbiAgICAgICAgICB5OiAoMzYwICsgKC10aGlzLm9wdGlvbnMucGl0Y2ggJSAzNjApKSAlIDM2MCxcclxuICAgICAgICAgIHo6ICgzNjAgKyAoLXRoaXMub3B0aW9ucy5oZWFkaW5nICUgMzYwKSkgJSAzNjBcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXQgYWx0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHRcclxuICB9XHJcbiAgc2V0IGFsdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24uYWx0ID0gdlxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID0ge2xuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgbGF0OiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0LCBhbHQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5hbHR9XHJcbiAgICB0aGlzLmNvbnRyb2xsZXJDYWxsQmFjayhcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9LFxyXG4gICAgICAgIHJvdGF0ZToge1xyXG4gICAgICAgICAgeDogKDM2MCArICh0aGlzLm9wdGlvbnMucm9sbCAlIDM2MCkpICUgMzYwLFxyXG4gICAgICAgICAgeTogKDM2MCArICgtdGhpcy5vcHRpb25zLnBpdGNoICUgMzYwKSkgJSAzNjAsXHJcbiAgICAgICAgICB6OiAoMzYwICsgKC10aGlzLm9wdGlvbnMuaGVhZGluZyAlIDM2MCkpICUgMzYwXHJcbiAgICAgICAgfSxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLnNob3cgPSB2XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBsYXlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGxheURpc3RhbmNlXHJcbiAgfVxyXG5cclxuICBzZXQgcGxheURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wbGF5RGlzdGFuY2UgPSB2XHJcbiAgICAvLyB0aGlzLl9lbG1zLnBsYXlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLnBsYXlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAvLyAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMucGxheURpc3RhbmNlXHJcbiAgICAvLyB9KVxyXG4gICAgLy8gaWYgKHRoaXMub3B0aW9ucy5zaG93ICYmIHRoaXMucHJpbWl0aXZlICYmIHRoaXMucHJpbWl0aXZlLnZpZGVvICYmIHRoaXMucHJpbWl0aXZlLnZpZGVvLnBsYXllciAmJiB0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgIC8vICAgY29uc3QgcG9zaXRpb24xID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmFsdCk7XHJcbiAgICAvLyAgIGNvbnN0IHBvc2l0aW9uMiA9IHRoaXMudml3ZXIuY2FtZXJhLnBvc2l0aW9uXHJcbiAgICAvLyAgIGNvbnN0IGRpc3RhbmNlID0gQ2VzaXVtLkNhcnRlc2lhbjMuZGlzdGFuY2UocG9zaXRpb24xLCBwb3NpdGlvbjIpO1xyXG4gICAgLy8gICBpZiAodGhpcy5vcHRpb25zLnBsYXlEaXN0YW5jZSAmJiBkaXN0YW5jZSA+IHRoaXMub3B0aW9ucy5wbGF5RGlzdGFuY2UpIHtcclxuICAgIC8vICAgICB0aGlzLnByaW1pdGl2ZS52aWRlby5wbGF5ZXIuZ2V0VnVlSW5zdGFuY2UoKS5wYXVzZSgpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5wcmltaXRpdmUudmlkZW8ucGxheWVyLmdldFZ1ZUluc3RhbmNlKCkucGxheSgpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxuXHJcbiAgbG9hZChjYWxsYmFjaykge1xyXG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gICAgICBjYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvYWRFdmVudCA9IGNhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tVmlldygpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3XHJcbiAgfVxyXG5cclxuICAvLyDorr7nva7op4bop5JcclxuICBzZXRDdXN0b21WaWV3KHZhbCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyA9IHZhbFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBjYW1lcmEgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ID0ge1xyXG4gICAgICAgIG9yaWVudGF0aW9uOiB7IGhlYWRpbmc6IGNhbWVyYS5oZWFkaW5nLCBwaXRjaDogY2FtZXJhLnBpdGNoLCByb2xsOiBjYW1lcmEucm9sbCB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7IHg6IGNhbWVyYS5wb3NpdGlvbi54LCB5OiBjYW1lcmEucG9zaXRpb24ueSwgejogY2FtZXJhLnBvc2l0aW9uLnogfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zICYmICh0aGlzLm9yaWdpbmFsT3B0aW9ucy5jdXN0b21WaWV3ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOmHjee9ruinhuinklxyXG4gIHJlc2V0Q3VzdG9tVmlldygpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ID0gdW5kZWZpbmVkXHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQS9EQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0VBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBekVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUEzQ0E7QUE0Q0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXJJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQW5EQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBc0RBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUE2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXJGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFrQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFybkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/LoadObjModel/index.js\n"); /***/ }), /***/ "./src/Obj/Base/LoadObjModel/jessibucaPlayer.js": /*!******************************************************!*\ !*** ./src/Obj/Base/LoadObjModel/jessibucaPlayer.js ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar jessibucaPlayer = /*#__PURE__*/function () {\n function jessibucaPlayer(dom, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, jessibucaPlayer);\n this.dom = dom;\n this.url = options.url;\n this.init();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(jessibucaPlayer, [{\n key: \"init\",\n value: function init() {\n this.player = new Jessibuca({\n container: this.dom,\n decoder: this.getSourceRootPath() + '/3rdparty/jessibuca/decoder.js',\n timeout: 30,\n heartTimeout: 30,\n heartTimeoutReplay: false,\n loadingTimeout: 30,\n loadingTimeoutReplay: false,\n wasmDecodeErrorReplay: false,\n videoBuffer: 0.2,\n // 缓存时长\n isResize: false,\n text: \"\",\n loadingText: \"\",\n useMSE: false,\n debug: true,\n showBandwidth: false,\n // 显示网速\n operateBtns: {\n fullscreen: false,\n screenshot: false,\n play: false,\n audio: false,\n recorder: false\n },\n forceNoOffscreen: false,\n isNotMute: false\n });\n this.player.play(this.url);\n }\n }, {\n key: \"on\",\n value: function on(Events, cd) {\n this.player.on(Events, cd);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.player.destroy();\n this.player = null;\n }\n }, {\n key: \"getSourceRootPath\",\n value: function getSourceRootPath() {\n var sdkName = 'YJEarth.min.js';\n var scripts = document.querySelectorAll('script');\n var prefix = '';\n scripts.forEach(function (item) {\n if (item.src && item.src.indexOf(sdkName) > -1) {\n var arr = item.src.split('/');\n arr.pop();\n prefix = arr.join('/');\n }\n });\n return prefix;\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (jessibucaPlayer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9hZE9iak1vZGVsL2plc3NpYnVjYVBsYXllci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Mb2FkT2JqTW9kZWwvamVzc2lidWNhUGxheWVyLmpzPzhhNzQiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmNsYXNzIGplc3NpYnVjYVBsYXllciB7XHJcbiAgY29uc3RydWN0b3IoZG9tLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRvbSA9IGRvbVxyXG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybFxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICB0aGlzLnBsYXllciA9IG5ldyBKZXNzaWJ1Y2Eoe1xyXG4gICAgICBjb250YWluZXI6IHRoaXMuZG9tLFxyXG4gICAgICBkZWNvZGVyOnRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvM3JkcGFydHkvamVzc2lidWNhL2RlY29kZXIuanMnLFxyXG4gICAgICB0aW1lb3V0OiAzMCxcclxuICAgICAgaGVhcnRUaW1lb3V0OiAzMCxcclxuICAgICAgaGVhcnRUaW1lb3V0UmVwbGF5OiBmYWxzZSxcclxuICAgICAgbG9hZGluZ1RpbWVvdXQ6IDMwLFxyXG4gICAgICBsb2FkaW5nVGltZW91dFJlcGxheTogZmFsc2UsXHJcbiAgICAgIHdhc21EZWNvZGVFcnJvclJlcGxheTogZmFsc2UsXHJcbiAgICAgIHZpZGVvQnVmZmVyOiAwLjIsIC8vIOe8k+WtmOaXtumVv1xyXG4gICAgICBpc1Jlc2l6ZTogZmFsc2UsXHJcbiAgICAgIHRleHQ6IFwiXCIsXHJcbiAgICAgIGxvYWRpbmdUZXh0OiBcIlwiLFxyXG4gICAgICB1c2VNU0U6IGZhbHNlLFxyXG4gICAgICBkZWJ1ZzogdHJ1ZSxcclxuICAgICAgc2hvd0JhbmR3aWR0aDogZmFsc2UsIC8vIOaYvuekuue9kemAn1xyXG4gICAgICBvcGVyYXRlQnRuczoge1xyXG4gICAgICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxyXG4gICAgICAgIHNjcmVlbnNob3Q6IGZhbHNlLFxyXG4gICAgICAgIHBsYXk6IGZhbHNlLFxyXG4gICAgICAgIGF1ZGlvOiBmYWxzZSxcclxuICAgICAgICByZWNvcmRlcjogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgZm9yY2VOb09mZnNjcmVlbjogZmFsc2UsXHJcbiAgICAgIGlzTm90TXV0ZTogZmFsc2UsXHJcbiAgICB9LCk7XHJcbiAgICB0aGlzLnBsYXllci5wbGF5KHRoaXMudXJsKTtcclxuICB9XHJcblxyXG4gIG9uKEV2ZW50cywgY2QpIHtcclxuICAgIHRoaXMucGxheWVyLm9uKEV2ZW50cywgY2QpXHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpXHJcbiAgICB0aGlzLnBsYXllciA9IG51bGxcclxuICB9XHJcblxyXG4gIGdldFNvdXJjZVJvb3RQYXRoKCkge1xyXG4gICAgbGV0IHNka05hbWUgPSAnWUpFYXJ0aC5taW4uanMnXHJcbiAgICBsZXQgc2NyaXB0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdCcpXHJcbiAgICBsZXQgcHJlZml4ID0gJydcclxuICAgIHNjcmlwdHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5zcmMgJiYgaXRlbS5zcmMuaW5kZXhPZihzZGtOYW1lKSA+IC0xKSB7XHJcbiAgICAgICAgbGV0IGFyciA9IGl0ZW0uc3JjLnNwbGl0KCcvJylcclxuICAgICAgICBhcnIucG9wKClcclxuICAgICAgICBwcmVmaXggPSBhcnIuam9pbignLycpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gcHJlZml4XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBqZXNzaWJ1Y2FQbGF5ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/LoadObjModel/jessibucaPlayer.js\n"); /***/ }), /***/ "./src/Obj/Base/LocateCurrent/index.js": /*!*********************************************!*\ !*** ./src/Obj/Base/LocateCurrent/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\nvar _canvas = /*#__PURE__*/new WeakMap();\nvar _img = /*#__PURE__*/new WeakMap();\nvar LocateCurrent = /*#__PURE__*/function () {\n function LocateCurrent(sdk) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, LocateCurrent);\n _classPrivateFieldInitSpec(this, _canvas, null);\n _classPrivateFieldInitSpec(this, _img, {\n bgimg: null,\n img1: null,\n img2: null,\n img3: null,\n img4: null\n });\n this.sdk = sdk;\n this.options = options;\n this.data = {};\n this._webSocketCallback = callback;\n this._tools = new _Tools__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.sdk);\n this.requestResource();\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(LocateCurrent, [{\n key: \"requestResource\",\n value: function requestResource() {\n var _this = this;\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_4__[\"getHost\"])();\n var url = \"\";\n url = this.options.host + '/yjearth4.0/api/v1/gps/state';\n this.reconnecting = new ReconnectingWebSocket('ws://' + url, [], {\n maxReconnectAttempts: 8\n });\n this.reconnecting.onopen = function (event) {\n _this.reconnecting.onmessage = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(event) {\n var height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this.data = JSON.parse(event.data);\n if (!(_this.data && _this.data.rmc)) {\n _context.next = 7;\n break;\n }\n _context.next = 4;\n return _this._tools.getClampToHeight(_this.data.rmc);\n case 4:\n height = _context.sent;\n _this.position = new Cesium.Cartesian3.fromDegrees(_this.data.rmc.lng, _this.data.rmc.lat, height);\n _this.create();\n case 7:\n _this._webSocketCallback && _this._webSocketCallback(_this.data);\n case 8:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n };\n\n // let _this = this\n // this.data = {\n // rmc: {\n // lng: 116.397428,\n // lat: 39.90923,\n // alt: 100\n // }\n // }\n // this.position = new Cesium.Cartesian3.fromDegrees(this.data.rmc.lng, this.data.rmc.lat, 0);\n // setInterval(() => {\n // _this.create()\n // console.log(1111)\n // }, 50);\n }\n }, {\n key: \"create\",\n value: function create() {\n var _this2 = this;\n this.getcanvas();\n if (this.data && this.data.rmc && !this.entity) {\n this.entity = new Cesium.CustomDataSource();\n this.sdk.viewer.dataSources.add(this.entity);\n var point = new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var c3 = _this2.position;\n return c3;\n }, false),\n billboard: {\n image: this._tools.getSourceRootPath() + '/img/locate2.png',\n scale: 1,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_6__[\"getGroundCover\"])() ? undefined : 100000000;\n }, false),\n width: 31,\n height: 36,\n pixelOffset: new Cesium.Cartesian2(0, -15)\n }\n });\n var lable = new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var c3 = _this2.position;\n return c3;\n }, false),\n billboard: {\n image: new Cesium.CallbackProperty(function () {\n return _this2.lableCanvas;\n }),\n scale: 1,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_6__[\"getGroundCover\"])() ? undefined : 100000000;\n }, false),\n width: 220,\n height: 140,\n pixelOffset: new Cesium.Cartesian2(0, -110)\n }\n });\n this.entity.entities.add(point);\n this.entity.entities.add(lable);\n }\n }\n }, {\n key: \"loaded\",\n value: function loaded(cd) {\n var data;\n Object.defineProperty(this, 'data', {\n get: function get() {\n return data;\n },\n set: function set(value) {\n data = value;\n if (cd) {\n cd();\n cd = undefined;\n }\n }\n });\n }\n }, {\n key: \"getcanvas\",\n value: function getcanvas() {\n var _this3 = this;\n var data = [{\n images: this._tools.getSourceRootPath() + '/img/bubble/lng.png',\n text: '经度:' + parseFloat(this.data.rmc.lng.toFixed(10))\n }, {\n images: this._tools.getSourceRootPath() + '/img/bubble/lat.png',\n text: '纬度:' + parseFloat(this.data.rmc.lat.toFixed(10))\n }, {\n images: this._tools.getSourceRootPath() + '/img/bubble/h.png',\n text: '海拔:' + parseFloat(this.data.rmc.alt.toFixed(10))\n }, {\n images: this._tools.getSourceRootPath() + '/img/bubble/satellite.png',\n text: '卫星:' + this.data.satellites || false\n }];\n if (_classPrivateFieldGet(_canvas, this)) {\n var ctx = _classPrivateFieldGet(_canvas, this).getContext('2d');\n ctx.clearRect(0, 0, _classPrivateFieldGet(_canvas, this).width, _classPrivateFieldGet(_canvas, this).height);\n ctx.drawImage(_classPrivateFieldGet(_img, this).bgimg, 0, 0, _classPrivateFieldGet(_canvas, this).width, _classPrivateFieldGet(_canvas, this).height);\n var imagesLoaded = 0;\n data.forEach(function (item, index) {\n ctx.drawImage(_classPrivateFieldGet(_img, _this3)['img' + (index + 1)], 12, 12 + index * 26);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"16px Arial\";\n ctx.fillText(item.text, 44, 28 + index * 26);\n imagesLoaded++;\n if (imagesLoaded === data.length) {\n _this3.lableCanvas = _classPrivateFieldGet(_canvas, _this3).toDataURL();\n }\n });\n } else {\n _classPrivateFieldSet(_canvas, this, document.createElement('canvas'));\n var _ctx = _classPrivateFieldGet(_canvas, this).getContext('2d');\n _classPrivateFieldGet(_canvas, this).width = 220;\n _classPrivateFieldGet(_canvas, this).height = 140;\n var img = new Image();\n _classPrivateFieldGet(_img, this).bgimg = img;\n img.src = this._tools.getSourceRootPath() + '/img/bubble/bubble.png';\n var _imagesLoaded = 0;\n img.onload = function () {\n _ctx.drawImage(img, 0, 0, _classPrivateFieldGet(_canvas, _this3).width, _classPrivateFieldGet(_canvas, _this3).height);\n data.forEach(function (item, index) {\n var img = new Image();\n _classPrivateFieldGet(_img, _this3)['img' + (index + 1)] = img;\n img.src = item.images;\n img.onload = function () {\n _ctx.drawImage(img, 12, 12 + index * 26);\n _ctx.fillStyle = \"#fff\";\n _ctx.font = \"16px Arial\";\n _ctx.fillText(item.text, 44, 28 + index * 26);\n _imagesLoaded++;\n if (_imagesLoaded === data.length) {\n _this3.lableCanvas = _classPrivateFieldGet(_canvas, _this3).toDataURL();\n }\n };\n });\n };\n }\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2() {\n var options,\n height,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!(this.data && this.data.rmc)) {\n _context2.next = 9;\n break;\n }\n _context2.next = 4;\n return this._tools.getClampToHeight(this.data.rmc);\n case 4:\n height = _context2.sent;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_6__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_6__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_6__[\"closeViewFollow\"])(this.sdk);\n this.sdk.viewer.camera.flyTo({\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n destination: Cesium.Cartesian3.fromDegrees(this.data.rmc.lng, this.data.rmc.lat, height + (options.height || 500))\n });\n case 9:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n _classPrivateFieldSet(_canvas, this, null);\n _classPrivateFieldSet(_img, this, {});\n this.reconnecting && this.reconnecting.close();\n this.sdk.viewer.dataSources.remove(this.entity);\n this.entity = null;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (LocateCurrent);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvTG9jYXRlQ3VycmVudC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Mb2NhdGVDdXJyZW50L2luZGV4LmpzPzg5NWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SG9zdCB9IGZyb20gXCIuLi8uLi8uLi9vblwiO1xyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uLy4uLy4uL1Rvb2xzXCI7XHJcbmltcG9ydCB7IGdldEdyb3VuZENvdmVyIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93fSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgTG9jYXRlQ3VycmVudCB7XHJcbiAgI2NhbnZhcyA9IG51bGxcclxuICAjaW1nID0ge1xyXG4gICAgYmdpbWc6IG51bGwsXHJcbiAgICBpbWcxOiBudWxsLFxyXG4gICAgaW1nMjogbnVsbCxcclxuICAgIGltZzM6IG51bGwsXHJcbiAgICBpbWc0OiBudWxsLFxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuc2RrID0gc2RrXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXHJcbiAgICB0aGlzLmRhdGEgPSB7fVxyXG4gICAgdGhpcy5fd2ViU29ja2V0Q2FsbGJhY2sgPSBjYWxsYmFja1xyXG4gICAgdGhpcy5fdG9vbHMgPSBuZXcgVG9vbHModGhpcy5zZGspXHJcbiAgICB0aGlzLnJlcXVlc3RSZXNvdXJjZSgpXHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzb3VyY2UoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0IHx8IGdldEhvc3QoKVxyXG4gICAgbGV0IHVybCA9IFwiXCJcclxuICAgIHVybCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy95amVhcnRoNC4wL2FwaS92MS9ncHMvc3RhdGUnXHJcbiAgICB0aGlzLnJlY29ubmVjdGluZyA9IG5ldyBSZWNvbm5lY3RpbmdXZWJTb2NrZXQoJ3dzOi8vJyArIHVybCwgW10sIHsgbWF4UmVjb25uZWN0QXR0ZW1wdHM6IDggfSlcclxuICAgIHRoaXMucmVjb25uZWN0aW5nLm9ub3BlbiA9IChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnJlY29ubmVjdGluZy5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEucm1jKSB7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5fdG9vbHMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLmRhdGEucm1jKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmRhdGEucm1jLmxuZywgdGhpcy5kYXRhLnJtYy5sYXQsIGhlaWdodCk7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dlYlNvY2tldENhbGxiYWNrICYmIHRoaXMuX3dlYlNvY2tldENhbGxiYWNrKHRoaXMuZGF0YSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIC8vIHRoaXMuZGF0YSA9IHtcclxuICAgIC8vICAgcm1jOiB7XHJcbiAgICAvLyAgICAgbG5nOiAxMTYuMzk3NDI4LFxyXG4gICAgLy8gICAgIGxhdDogMzkuOTA5MjMsXHJcbiAgICAvLyAgICAgYWx0OiAxMDBcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5wb3NpdGlvbiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmRhdGEucm1jLmxuZywgdGhpcy5kYXRhLnJtYy5sYXQsIDApO1xyXG4gICAgLy8gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgLy8gICBfdGhpcy5jcmVhdGUoKVxyXG4gICAgLy8gICBjb25zb2xlLmxvZygxMTExKVxyXG4gICAgLy8gfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlKCkge1xyXG4gICAgdGhpcy5nZXRjYW52YXMoKVxyXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEucm1jICYmICF0aGlzLmVudGl0eSkge1xyXG4gICAgICB0aGlzLmVudGl0eSA9IG5ldyBDZXNpdW0uQ3VzdG9tRGF0YVNvdXJjZSgpO1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZGF0YVNvdXJjZXMuYWRkKHRoaXMuZW50aXR5KTtcclxuICAgICAgbGV0IHBvaW50ID0gbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGMzID0gdGhpcy5wb3NpdGlvblxyXG4gICAgICAgICAgcmV0dXJuIGMzXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoaXMuX3Rvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9sb2NhdGUyLnBuZycsXHJcbiAgICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiAxMDAwMDAwMDBcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIHdpZHRoOiAzMSxcclxuICAgICAgICAgIGhlaWdodDogMzYsXHJcbiAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC0xNSksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmxlID0gbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGMzID0gdGhpcy5wb3NpdGlvblxyXG4gICAgICAgICAgcmV0dXJuIGMzXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhYmxlQ2FudmFzXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHNjYWxlOiAxLFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0R3JvdW5kQ292ZXIoKSA/IHVuZGVmaW5lZCA6IDEwMDAwMDAwMFxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgd2lkdGg6IDIyMCxcclxuICAgICAgICAgIGhlaWdodDogMTQwLFxyXG4gICAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigwLCAtMTEwKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmVudGl0eS5lbnRpdGllcy5hZGQocG9pbnQpXHJcbiAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLmFkZChsYWJsZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRlZChjZCkge1xyXG4gICAgbGV0IGRhdGFcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZGF0YScsIHtcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiBkYXRhXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldCh2YWx1ZSkge1xyXG4gICAgICAgIGRhdGEgPSB2YWx1ZVxyXG4gICAgICAgIGlmIChjZCkge1xyXG4gICAgICAgICAgY2QoKVxyXG4gICAgICAgICAgY2QgPSB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRjYW52YXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgaW1hZ2VzOiB0aGlzLl90b29scy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvYnViYmxlL2xuZy5wbmcnLFxyXG4gICAgICAgIHRleHQ6ICfnu4/luqbvvJonICsgcGFyc2VGbG9hdCh0aGlzLmRhdGEucm1jLmxuZy50b0ZpeGVkKDEwKSlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGltYWdlczogdGhpcy5fdG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2J1YmJsZS9sYXQucG5nJyxcclxuICAgICAgICB0ZXh0OiAn57qs5bqm77yaJyArIHBhcnNlRmxvYXQodGhpcy5kYXRhLnJtYy5sYXQudG9GaXhlZCgxMCkpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpbWFnZXM6IHRoaXMuX3Rvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvaC5wbmcnLFxyXG4gICAgICAgIHRleHQ6ICfmtbfmi5TvvJonICsgcGFyc2VGbG9hdCh0aGlzLmRhdGEucm1jLmFsdC50b0ZpeGVkKDEwKSlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGltYWdlczogdGhpcy5fdG9vbHMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2J1YmJsZS9zYXRlbGxpdGUucG5nJyxcclxuICAgICAgICB0ZXh0OiAn5Y2r5pif77yaJyArIHRoaXMuZGF0YS5zYXRlbGxpdGVzIHx8IDBcclxuICAgICAgfVxyXG4gICAgXVxyXG4gICAgaWYgKHRoaXMuI2NhbnZhcykge1xyXG4gICAgICBjb25zdCBjdHggPSB0aGlzLiNjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG4gICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuI2NhbnZhcy53aWR0aCwgdGhpcy4jY2FudmFzLmhlaWdodCk7XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy4jaW1nLmJnaW1nLCAwLCAwLCB0aGlzLiNjYW52YXMud2lkdGgsIHRoaXMuI2NhbnZhcy5oZWlnaHQpO1xyXG4gICAgICBsZXQgaW1hZ2VzTG9hZGVkID0gMFxyXG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLiNpbWdbJ2ltZycgKyAoaW5kZXggKyAxKV0sIDEyLCAxMiArIChpbmRleCAqIDI2KSk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwiI2ZmZlwiO1xyXG4gICAgICAgIGN0eC5mb250ID0gXCIxNnB4IEFyaWFsXCI7XHJcbiAgICAgICAgY3R4LmZpbGxUZXh0KGl0ZW0udGV4dCwgNDQsIDI4ICsgKGluZGV4ICogMjYpKTtcclxuICAgICAgICBpbWFnZXNMb2FkZWQrKztcclxuICAgICAgICBpZiAoaW1hZ2VzTG9hZGVkID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5sYWJsZUNhbnZhcyA9IHRoaXMuI2NhbnZhcy50b0RhdGFVUkwoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLiNjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY3R4ID0gdGhpcy4jY2FudmFzLmdldENvbnRleHQoJzJkJylcclxuICAgICAgdGhpcy4jY2FudmFzLndpZHRoID0gMjIwXHJcbiAgICAgIHRoaXMuI2NhbnZhcy5oZWlnaHQgPSAxNDBcclxuICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICB0aGlzLiNpbWcuYmdpbWcgPSBpbWdcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuX3Rvb2xzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9idWJibGUvYnViYmxlLnBuZyc7XHJcbiAgICAgIGxldCBpbWFnZXNMb2FkZWQgPSAwXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHRoaXMuI2NhbnZhcy53aWR0aCwgdGhpcy4jY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICB0aGlzLiNpbWdbJ2ltZycgKyAoaW5kZXggKyAxKV0gPSBpbWdcclxuICAgICAgICAgIGltZy5zcmMgPSBpdGVtLmltYWdlcztcclxuICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAxMiwgMTIgKyAoaW5kZXggKiAyNikpO1xyXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCIjZmZmXCI7XHJcbiAgICAgICAgICAgIGN0eC5mb250ID0gXCIxNnB4IEFyaWFsXCI7XHJcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChpdGVtLnRleHQsIDQ0LCAyOCArIChpbmRleCAqIDI2KSk7XHJcbiAgICAgICAgICAgIGltYWdlc0xvYWRlZCsrO1xyXG4gICAgICAgICAgICBpZiAoaW1hZ2VzTG9hZGVkID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubGFibGVDYW52YXMgPSB0aGlzLiNjYW52YXMudG9EYXRhVVJMKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5ybWMpIHtcclxuICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoaXMuX3Rvb2xzLmdldENsYW1wVG9IZWlnaHQodGhpcy5kYXRhLnJtYylcclxuICAgICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gIGNsb3NlVmlld0ZvbGxvdyh0aGlzLnNkaylcclxuXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuZGF0YS5ybWMubG5nLCB0aGlzLmRhdGEucm1jLmxhdCwgaGVpZ2h0ICsgKG9wdGlvbnMuaGVpZ2h0IHx8IDUwMCkpLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy4jY2FudmFzID0gbnVsbFxyXG4gICAgdGhpcy4jaW1nID0ge31cclxuICAgIHRoaXMucmVjb25uZWN0aW5nICYmIHRoaXMucmVjb25uZWN0aW5nLmNsb3NlKClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5kYXRhU291cmNlcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9jYXRlQ3VycmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBaEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/LocateCurrent/index.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Flame/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Flame/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u989C\\u8272\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u53D1\\u5C04\\u901F\\u7387\\uFF08\\u4E2A/\\u79D2\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\u5C3A\\u5BF8\\uFF08\\u50CF\\u7D20\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZsYW1lL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9GbGFtZS9fZWxlbWVudC5qcz84NmI4Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwibGF0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7otbflp4vpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFydF9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbjogMDtqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uT5p2f6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5kX2NvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/liJ3pgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cIm1pbmltdW1TcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5Yid6YCf5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJtYXhpbXVtU3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/lrZjlnKjml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjAuMDFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwibWluaW11bVBhcnRpY2xlTGlmZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5a2Y5Zyo5pe26Ze0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwLjAxXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cIm1heGltdW1QYXJ0aWNsZUxpZmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7otbflp4vmr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzdGFydFNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5PmnZ/mr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJlbmRTY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPuWPkeWwhOmAn+eOh++8iOS4qi/np5LvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImVtaXNzaW9uUmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5bC65a+477yI5YOP57Sg77yJPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJwYXJ0aWNsZVNpemVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBNEdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Flame/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Flame/eventBinding.js": /*!************************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Flame/eventBinding.js ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' || e.target.type == 'range') {\n value = Number(value);\n }\n that[m.value] = value;\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that.Dialog[m.value] === 'function') {\n that.Dialog[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZsYW1lL2V2ZW50QmluZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9QYXJ0aWNsZUVmZmVjdHMvRmxhbWUvZXZlbnRCaW5kaW5nLmpzP2VjMzEiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgZXZlbnRCaW5kaW5nIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgfVxyXG4gIHN0YXRpYyBldmVudCA9IHt9XHJcblxyXG4gIGdldEV2ZW50KG5hbWUpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV1cclxuICB9XHJcblxyXG4gIGdldEV2ZW50QWxsKCkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFxyXG4gIH1cclxuXHJcbiAgc2V0RXZlbnQobmFtZSwgZXZlbnQpIHtcclxuICAgIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXSA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBvbih0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgfHwgZS50YXJnZXQudHlwZSA9PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBpZihlbGVtZW50c1tpXS5ub2RlTmFtZT09J0lNRycpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5lbGVtZW50W20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdC5EaWFsb2dbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LkRpYWxvZ1ttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IG49MDtuPHJlbW92ZU5hbWUubGVuZ3RoO24rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50Lmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgIEV2ZW50W3RdKGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEV2ZW50QmluZGluZyA9IG5ldyBldmVudEJpbmRpbmcoKTtcclxuZXhwb3J0IGRlZmF1bHQgRXZlbnRCaW5kaW5nOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVDQTtBQUFBO0FBQUE7QUE0Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5FQTtBQUFBO0FBS0E7QUErREE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Flame/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Flame/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Flame/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/ParticleEffects/Flame/_element.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/ParticleEffects/Flame/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * 火焰特效\r\n */\n\n\n\n\n\n\n\n\n\n\nvar Flame = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 火焰特效\r\n * @param sdk \r\n * @param options {object} 粒子属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 贴图地址\r\n * @param options.startColor=\"#ff0000\" {string} 起始颜色\r\n * @param options.endColor=\"#fff000\" {string} 结束颜色\r\n * @param options.startScale=0.5 {number} 初始比例\r\n * @param options.endScale=2 {number} 结束比例\r\n * @param options.minimumSpeed=1 {number} 最小初速度\r\n * @param options.maximumSpeed=30 {number} 最大初速度\r\n * @param options.minimumParticleLife=1 {number} 最小存在时间(秒)\r\n * @param options.maximumParticleLife=2 {number} 最大存在时间(秒)\r\n * @param options.emissionRate=60 {number} 发射速率(个/每秒)\r\n * @param options.particleSize=10 {number} 粒子尺大小\r\n * @param options.lng 经度\r\n * @param options.lat 纬度\r\n * @param options.alt 高度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function Flame(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Flame);\n _this2 = _callSuper(this, Flame, [sdk, options]);\n _this2.options.url = options.url;\n _this2.options.startColor = options.startColor || \"#ff0000\";\n _this2.options.endColor = options.endColor || \"#fff000\";\n _this2.options.startScale = options.startScale || 0.5;\n _this2.options.endScale = options.endScale || 2;\n _this2.options.minimumParticleLife = options.minimumParticleLife || 1;\n _this2.options.maximumParticleLife = options.maximumParticleLife || 2;\n _this2.options.minimumSpeed = options.minimumSpeed || 1;\n _this2.options.maximumSpeed = options.maximumSpeed || 30;\n _this2.options.emissionRate = options.emissionRate || 60;\n _this2.options.particleSize = options.particleSize || 10;\n _this2.options.show = options.show === false ? false : true;\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2._element = null;\n _this2.particleSystem;\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.add();\n _this2.operate = {};\n _this2._elms = {};\n _this2.previous = {\n positions: {\n lng: _this2.options.lng,\n lat: _this2.options.lat,\n alt: _this2.options.alt\n }\n };\n _this2.Dialog = _Dialog;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this2.sdk);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Flame, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Flame, [{\n key: \"type\",\n get: function get() {\n return \"ParticleEffects\";\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = this.options.show;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = this.options.show;\n }\n } else {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = false;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this3 = this;\n var scene, cartographic, position, matrix, cameraHeight;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n this.originalOptions = this.deepCopyObj(this.options);\n scene = this.sdk.viewer.scene;\n cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(1, 1, 1), matrix);\n cameraHeight = this.sdk.viewer.camera.positionCartographic.height;\n this.particleSystem = scene.primitives.add(new Cesium.ParticleSystem({\n show: cameraHeight >= 10000000 ? false : this.options.show,\n image: this.options.url || this.getSourceRootPath() + '/img/particlesystem/smoke.png',\n startColor: Cesium.Color.fromCssColorString(this.options.startColor),\n //粒子出生时的颜色\n endColor: Cesium.Color.fromCssColorString(this.options.endColor),\n //当粒子死亡时的颜色\n startScale: this.options.startScale,\n //粒子出生时的比例\n endScale: this.options.endScale,\n //粒子在死亡时的比例\n minimumParticleLife: this.options.minimumParticleLife,\n //设置粒子寿命的可能持续时间的最小界限(以秒为单位)\n maximumParticleLife: this.options.maximumParticleLife,\n //设置粒子寿命的可能持续时间的最大界限(以秒为单位)\n minimumSpeed: this.options.minimumSpeed,\n //设置以米/秒为单位的最小界限,超过该最小界限,随机选择粒子的实际速度。\n maximumSpeed: this.options.maximumSpeed,\n //设置以米/秒为单位的最大界限,超过该最大界限,随机选择粒子的实际速度。\n // imageSize: new Cesium.Cartesian2( //如果设置该属性,将会覆盖 minimumImageSize和maximumImageSize属性,以像素为单位缩放image的大小\n // this.options.imageSize || 10,\n // this.options.imageSize || 10\n // ),\n minimumImageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize),\n maximumImageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize),\n sizeInMeters: true,\n emissionRate: this.options.emissionRate,\n //每秒发射的粒子数。\n lifetime: 0.5,\n loop: true,\n emitter: new Cesium.ConeEmitter(Cesium.Math.toRadians(30.0)),\n modelMatrix: matrix,\n updateCallback: function updateCallback(r) {\n r._billboard.id = _this3.options.id;\n }\n }));\n\n // this.entity.modelMatrix\n this.particleSystem.id = this.options.id;\n this.entity = this.particleSystem;\n // this.entity.modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(100.0, 20.0)), new Cesium.Cartesian3(0.0, 0.0, 10000.0), new Cesium.Matrix4())\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n // this.editObj = new EditParticle(this.sdk, this.entity)\n\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"setSplitDirection\"])(0, this.options.id);\n }\n\n // 监听相机高度\n this.sdk.viewer.camera.changed.addEventListener(function () {\n if (_this3.entity && _this3.show) {\n var _cameraHeight = _this3.sdk.viewer.camera.positionCartographic.height;\n if (_cameraHeight >= 10000000) {\n _this3.entity.show = false;\n } else {\n _this3.entity.show = true;\n }\n }\n });\n case 14:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!this._error) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 26;\n break;\n case 25:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.alt + 500),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 26:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"startColor\",\n get: function get() {\n return this.options.startColor;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.startColor = v;\n this.particleSystem.startColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.startColor) {\n this._elms.startColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.startColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.startColor[i] = picker;\n });\n }\n }\n }, {\n key: \"endColor\",\n get: function get() {\n return this.options.endColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.endColor = v;\n this.particleSystem.endColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.endColor) {\n this._elms.endColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this5.endColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.endColor[i] = picker;\n });\n }\n }\n }, {\n key: \"minimumSpeed\",\n get: function get() {\n return this.options.minimumSpeed;\n },\n set: function set(v) {\n this.options.minimumSpeed = v;\n this.particleSystem.minimumSpeed = v;\n this._elms.minimumSpeed && this._elms.minimumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumSpeed\",\n get: function get() {\n return this.options.maximumSpeed;\n },\n set: function set(v) {\n this.options.maximumSpeed = v;\n this.particleSystem.maximumSpeed = v;\n this._elms.maximumSpeed && this._elms.maximumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"minimumParticleLife\",\n get: function get() {\n return this.options.minimumParticleLife;\n },\n set: function set(v) {\n this.options.minimumParticleLife = v;\n this.particleSystem.minimumParticleLife = v;\n this._elms.minimumParticleLife && this._elms.minimumParticleLife.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumParticleLife\",\n get: function get() {\n return this.options.maximumParticleLife;\n },\n set: function set(v) {\n this.options.maximumParticleLife = v;\n this.particleSystem.maximumParticleLife = v;\n this._elms.maximumParticleLife && this._elms.maximumParticleLife.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"startScale\",\n get: function get() {\n return this.options.startScale;\n },\n set: function set(v) {\n this.options.startScale = v;\n this.particleSystem.startScale = v;\n this._elms.startScale && this._elms.startScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"endScale\",\n get: function get() {\n return this.options.endScale;\n },\n set: function set(v) {\n this.options.endScale = v;\n this.particleSystem.endScale = v;\n this._elms.endScale && this._elms.endScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"emissionRate\",\n get: function get() {\n return this.options.emissionRate;\n },\n set: function set(v) {\n this.options.emissionRate = v;\n this.particleSystem.emissionRate = v;\n this._elms.emissionRate && this._elms.emissionRate.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"particleSize\",\n get: function get() {\n return this.options.particleSize;\n },\n set: function set(v) {\n this.options.particleSize = v;\n this.particleSystem.minimumImageSize = new Cesium.Cartesian2(v, v);\n this.particleSystem.maximumImageSize = new Cesium.Cartesian2(v, v);\n this._elms.particleSize && this._elms.particleSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.alt;\n },\n set: function set(v) {\n this.options.alt = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n var _this6 = this;\n var state,\n _this,\n contentElm,\n startColorPicker,\n endColorPicker,\n all_elm,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n state = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context3.next = 21;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.originalOptions, {\n title: '火焰属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this6.name = _this6.name.trim();\n if (!_this6.name) {\n _this6.name = '未命名对象';\n }\n _this6.originalOptions = _this6.deepCopyObj(_this6.options);\n _this6._DialogObject.close();\n _this6.Dialog.confirmCallBack && _this6.Dialog.confirmCallBack(_this6.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this6.sdk, _this6.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(_this6.sdk, _this6.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this6.reset();\n _this6.Dialog.resetCallBack && _this6.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this6.Dialog.removeCallBack && _this6.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this6.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this6.positionEditing = false;\n _this6.Dialog.closeCallBack && _this6.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this6.show = show;\n _this6.Dialog.showCallBack && _this6.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this6.positionEditing = !_this6.positionEditing;\n }\n }, true);\n case 7:\n this._DialogObject = _context3.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' particle-effects';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n startColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"start_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.startColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.startColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n endColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"end_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.endColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.endColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].element;\n this._elms.startColor = [startColorPicker];\n this._elms.endColor = [endColorPicker];\n _context3.next = 21;\n break;\n case 21:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.name = this.originalOptions.name;\n this.startColor = this.originalOptions.startColor;\n this.endColor = this.originalOptions.endColor;\n this.minimumSpeed = this.originalOptions.minimumSpeed;\n this.maximumSpeed = this.originalOptions.maximumSpeed;\n this.minimumParticleLife = this.originalOptions.minimumParticleLife;\n this.maximumParticleLife = this.originalOptions.maximumParticleLife;\n this.startScale = this.originalOptions.startScale;\n this.endScale = this.originalOptions.endScale;\n this.emissionRate = this.originalOptions.emissionRate;\n this.particleSize = this.originalOptions.particleSize;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.alt = this.originalOptions.alt;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncPrimitives\"])(this.entity);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _superPropGet(Flame, \"remove\", this, 3)([]);\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context4.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context4.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this7 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.picking = false;\n this.previous = {\n positions: _objectSpread({}, this.entity.position)\n };\n var movPos;\n this.event.mouse_move(function (movement, cartesian) {\n movPos = movement.endPosition;\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(_this7.options.lng, _this7.options.lat, _this7.options.alt);\n var position = _this7.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n _this7.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n _this7._elms.lng && _this7._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n _this7._elms.lat && _this7._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n if (!movPos || movPos.x !== movement.position.x || movPos.y !== movement.position.y - 2) {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n }\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this7.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n } else {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n }\n });\n });\n } else {\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n }\n this.tip && this.tip.destroy();\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.lng = this.entity.position.lng;\n this.options.lat = this.entity.position.lat;\n this.options.alt = this.entity.position.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Flame);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZsYW1lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9GbGFtZS9pbmRleC5qcz9iY2ZlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDngavnhLDnibnmlYhcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuL2V2ZW50QmluZGluZydcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uLy4uL2luZGV4XCI7XHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgeyBzeW5jUHJpbWl0aXZlcyB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc3luY0RhdGEsIGdldFNkayBhcyBnZXQyRFNkayB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIEZsYW1lIGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQGRlc2NyaXB0aW9uIOeBq+eEsOeJueaViFxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g57KS5a2Q5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5qCH5rOoaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnVybCB7c3RyaW5nfSDotLTlm77lnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zdGFydENvbG9yPVwiI2ZmMDAwMFwiIHtzdHJpbmd9IOi1t+Wni+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVuZENvbG9yPVwiI2ZmZjAwMFwiIHtzdHJpbmd9IOe7k+adn+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0U2NhbGU9MC41IHtudW1iZXJ9IOWIneWni+avlOS+i1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVuZFNjYWxlPTIge251bWJlcn0g57uT5p2f5q+U5L6LXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubWluaW11bVNwZWVkPTEge251bWJlcn0g5pyA5bCP5Yid6YCf5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubWF4aW11bVNwZWVkPTMwIHtudW1iZXJ9IOacgOWkp+WInemAn+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmU9MSB7bnVtYmVyfSDmnIDlsI/lrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmU9MiB7bnVtYmVyfSDmnIDlpKflrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVtaXNzaW9uUmF0ZT02MCB7bnVtYmVyfSDlj5HlsITpgJ/njoco5LiqL+avj+enkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWNsZVNpemU9MTAge251bWJlcn0g57KS5a2Q5bC65aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG5nIOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhdCDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hbHQg6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy51cmwgPSBvcHRpb25zLnVybFxyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3IgfHwgXCIjZmYwMDAwXCJcclxuICAgIHRoaXMub3B0aW9ucy5lbmRDb2xvciA9IG9wdGlvbnMuZW5kQ29sb3IgfHwgXCIjZmZmMDAwXCJcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydFNjYWxlID0gb3B0aW9ucy5zdGFydFNjYWxlIHx8IDAuNVxyXG4gICAgdGhpcy5vcHRpb25zLmVuZFNjYWxlID0gb3B0aW9ucy5lbmRTY2FsZSB8fCAyXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSB8fCAxXHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSB8fCAyXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gb3B0aW9ucy5taW5pbXVtU3BlZWQgfHwgMVxyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1TcGVlZCA9IG9wdGlvbnMubWF4aW11bVNwZWVkIHx8IDMwXHJcbiAgICB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlID0gb3B0aW9ucy5lbWlzc2lvblJhdGUgfHwgNjBcclxuICAgIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemUgPSBvcHRpb25zLnBhcnRpY2xlU2l6ZSB8fCAxMFxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICB0aGlzLnBvc2l0aW9uQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnJvdGF0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLm9uQ2xpY2tDYWxsYmFjayA9IG51bGxcclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgdGhpcy5hZGQoKVxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uczoge1xyXG4gICAgICAgIGxuZzogdGhpcy5vcHRpb25zLmxuZyxcclxuICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsXHJcbiAgICAgICAgYWx0OiB0aGlzLm9wdGlvbnMuYWx0LFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIFwiUGFydGljbGVFZmZlY3RzXCJcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGxldCBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmICghdGhpcy5pc1Nob3dWaWV3IHx8ICFzZGtEKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMyB8fCAhc2RrRCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodCA8IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAmJiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdykge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0IDwgMTAwMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93KSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bikge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuLmNoZWNrZWQgPSB2XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgdGhpcy5pc1Nob3dWaWV3ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoKSB7XHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmU7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygxLCAxLCAxKSwgbWF0cml4KVxyXG4gICAgbGV0IGNhbWVyYUhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtID0gc2NlbmUucHJpbWl0aXZlcy5hZGQoXHJcbiAgICAgIG5ldyBDZXNpdW0uUGFydGljbGVTeXN0ZW0oe1xyXG4gICAgICAgIHNob3c6IChjYW1lcmFIZWlnaHQgPj0gMTAwMDAwMDApID8gZmFsc2UgOiB0aGlzLm9wdGlvbnMuc2hvdyxcclxuICAgICAgICBpbWFnZTogdGhpcy5vcHRpb25zLnVybCB8fCAodGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcGFydGljbGVzeXN0ZW0vc21va2UucG5nJyksXHJcbiAgICAgICAgc3RhcnRDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuc3RhcnRDb2xvciksIC8v57KS5a2Q5Ye655Sf5pe255qE6aKc6ImyXHJcbiAgICAgICAgZW5kQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmVuZENvbG9yKSwgLy/lvZPnspLlrZDmrbvkuqHml7bnmoTpopzoibJcclxuICAgICAgICBzdGFydFNjYWxlOiB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZSwgIC8v57KS5a2Q5Ye655Sf5pe255qE5q+U5L6LXHJcbiAgICAgICAgZW5kU2NhbGU6IHRoaXMub3B0aW9ucy5lbmRTY2FsZSwgLy/nspLlrZDlnKjmrbvkuqHml7bnmoTmr5TkvotcclxuICAgICAgICBtaW5pbXVtUGFydGljbGVMaWZlOiB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSwgIC8v6K6+572u57KS5a2Q5a+/5ZG955qE5Y+v6IO95oyB57ut5pe26Ze055qE5pyA5bCP55WM6ZmQ77yI5Lul56eS5Li65Y2V5L2N77yJXHJcbiAgICAgICAgbWF4aW11bVBhcnRpY2xlTGlmZTogdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmUsIC8v6K6+572u57KS5a2Q5a+/5ZG955qE5Y+v6IO95oyB57ut5pe26Ze055qE5pyA5aSn55WM6ZmQ77yI5Lul56eS5Li65Y2V5L2N77yJXHJcbiAgICAgICAgbWluaW11bVNwZWVkOiB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkLC8v6K6+572u5Lul57GzL+enkuS4uuWNleS9jeeahOacgOWwj+eVjOmZkO+8jOi2hei/h+ivpeacgOWwj+eVjOmZkO+8jOmaj+acuumAieaLqeeykuWtkOeahOWunumZhemAn+W6puOAglxyXG4gICAgICAgIG1heGltdW1TcGVlZDogdGhpcy5vcHRpb25zLm1heGltdW1TcGVlZCwvL+iuvue9ruS7peexsy/np5LkuLrljZXkvY3nmoTmnIDlpKfnlYzpmZDvvIzotoXov4for6XmnIDlpKfnlYzpmZDvvIzpmo/mnLrpgInmi6nnspLlrZDnmoTlrp7pmYXpgJ/luqbjgIJcclxuICAgICAgICAvLyBpbWFnZVNpemU6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMiggIC8v5aaC5p6c6K6+572u6K+l5bGe5oCn77yM5bCG5Lya6KaG55uWIG1pbmltdW1JbWFnZVNpemXlkoxtYXhpbXVtSW1hZ2VTaXpl5bGe5oCn77yM5Lul5YOP57Sg5Li65Y2V5L2N57yp5pS+aW1hZ2XnmoTlpKflsI9cclxuICAgICAgICAvLyAgIHRoaXMub3B0aW9ucy5pbWFnZVNpemUgfHwgMTAsXHJcbiAgICAgICAgLy8gICB0aGlzLm9wdGlvbnMuaW1hZ2VTaXplIHx8IDEwXHJcbiAgICAgICAgLy8gKSxcclxuICAgICAgICBtaW5pbXVtSW1hZ2VTaXplOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF4aW11bUltYWdlU2l6ZTogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICAgICAgICApLFxyXG4gICAgICAgIHNpemVJbk1ldGVyczogdHJ1ZSxcclxuICAgICAgICBlbWlzc2lvblJhdGU6IHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUsIC8v5q+P56eS5Y+R5bCE55qE57KS5a2Q5pWw44CCXHJcbiAgICAgICAgbGlmZXRpbWU6IDAuNSxcclxuICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgIGVtaXR0ZXI6IG5ldyBDZXNpdW0uQ29uZUVtaXR0ZXIoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDMwLjApKSxcclxuICAgICAgICBtb2RlbE1hdHJpeDogbWF0cml4LFxyXG4gICAgICAgIHVwZGF0ZUNhbGxiYWNrOiAocikgPT4ge1xyXG4gICAgICAgICAgci5fYmlsbGJvYXJkLmlkID0gdGhpcy5vcHRpb25zLmlkXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeFxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5pZCA9IHRoaXMub3B0aW9ucy5pZFxyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlUcmFuc2xhdGlvbihDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygxMDAuMCwgMjAuMCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMC4wLCAwLjAsIDEwMDAwLjApLCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSlcclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgIC8vIHRoaXMuZWRpdE9iaiA9IG5ldyBFZGl0UGFydGljbGUodGhpcy5zZGssIHRoaXMuZW50aXR5KVxyXG5cclxuICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZih0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICAgXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm5HlkKznm7jmnLrpq5jluqZcclxuICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuY2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2hvdykge1xyXG4gICAgICAgIGxldCBjYW1lcmFIZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgICBpZiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCArIDUwMCksXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXJ0Q29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3JcclxuICB9XHJcblxyXG4gIHNldCBzdGFydENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydENvbG9yID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5zdGFydENvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMuc3RhcnRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLnN0YXJ0Q29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuc3RhcnRDb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmRDb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IGVuZENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbmRDb2xvciA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0uZW5kQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5lbmRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmVuZENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgcGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHYsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbmRDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3JbaV0gPSBwaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtaW5pbXVtU3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1TcGVlZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5taW5pbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZCAmJiB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heGltdW1TcGVlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgbWF4aW11bVNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1TcGVlZCA9IHZcclxuICAgIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkICYmIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWluaW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1QYXJ0aWNsZUxpZmUgJiYgdGhpcy5fZWxtcy5taW5pbXVtUGFydGljbGVMaWZlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWF4aW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1heGltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1heGltdW1QYXJ0aWNsZUxpZmUgJiYgdGhpcy5fZWxtcy5tYXhpbXVtUGFydGljbGVMaWZlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRTY2FsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IHN0YXJ0U2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLnN0YXJ0U2NhbGUgJiYgdGhpcy5fZWxtcy5zdGFydFNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZW5kU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVuZFNjYWxlXHJcbiAgfVxyXG5cclxuICBzZXQgZW5kU2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmVuZFNjYWxlID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbmRTY2FsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW5kU2NhbGUgJiYgdGhpcy5fZWxtcy5lbmRTY2FsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVtaXNzaW9uUmF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlXHJcbiAgfVxyXG5cclxuICBzZXQgZW1pc3Npb25SYXRlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLmVtaXNzaW9uUmF0ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlICYmIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcGFydGljbGVTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICB9XHJcblxyXG4gIHNldCBwYXJ0aWNsZVNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWluaW11bUltYWdlU2l6ZSA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMih2LCB2KVxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5tYXhpbXVtSW1hZ2VTaXplID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKHYsIHYpXHJcbiAgICB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZSAmJiB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG5nXHJcbiAgfVxyXG5cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYXQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hbHQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3JpZ2luYWxPcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfngavnhLDlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHBhcnRpY2xlLWVmZmVjdHMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBzdGFydENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzdGFydF9jb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5zdGFydENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbmRfY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuZW5kQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIEV2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5zdGFydENvbG9yID0gW3N0YXJ0Q29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3IgPSBbZW5kQ29sb3JQaWNrZXJdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5zdGFydENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3RhcnRDb2xvclxyXG4gICAgdGhpcy5lbmRDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmVuZENvbG9yXHJcbiAgICB0aGlzLm1pbmltdW1TcGVlZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gICAgdGhpcy5tYXhpbXVtU3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5tYXhpbXVtU3BlZWRcclxuICAgIHRoaXMubWluaW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMubWF4aW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMuc3RhcnRTY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnN0YXJ0U2NhbGVcclxuICAgIHRoaXMuZW5kU2NhbGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbmRTY2FsZVxyXG4gICAgdGhpcy5lbWlzc2lvblJhdGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbWlzc2lvblJhdGVcclxuICAgIHRoaXMucGFydGljbGVTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucGFydGljbGVTaXplXHJcbiAgICB0aGlzLmxuZyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxuZ1xyXG4gICAgdGhpcy5sYXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYXRcclxuICAgIHRoaXMuYWx0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYWx0XHJcbiAgICBzeW5jUHJpbWl0aXZlcyh0aGlzLmVudGl0eSlcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHN1cGVyLnJlbW92ZSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5lbnRpdHkpO1xyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAqXHJcbiAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICpcclxuICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgbW92UG9zXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIG1vdlBvcyA9IG1vdmVtZW50LmVuZFBvc2l0aW9uXHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICB0aGlzLm9wdGlvbnMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSBwb3NpdGlvbnMuYWx0XHJcbiAgICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCk7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjYXJ0b2dyYXBoaWMpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcblxyXG4gICAgICAgIHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoIW1vdlBvcyB8fCBtb3ZQb3MueCAhPT0gbW92ZW1lbnQucG9zaXRpb24ueCB8fCBtb3ZQb3MueSAhPT0gbW92ZW1lbnQucG9zaXRpb24ueS0yKSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24uYWx0XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG5nID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSBwb3NpdGlvbnMuYWx0XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIGlmKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sbmdcclxuICAgICAgdGhpcy5vcHRpb25zLmxhdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxhdFxyXG4gICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24uYWx0XHJcbiAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMub3B0aW9ucy5hbHQpO1xyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGNhcnRvZ3JhcGhpYyk7XHJcbiAgICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcblxyXG4gICAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2VsbXMuYWx0ICYmIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmFsdFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkgeyB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZsYW1lXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBckVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF1RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFoRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBcENBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQXJHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFxSUE7QUFDQTtBQUFBO0FBaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Flame/index.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Fountain/_element.js": /*!***********************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Fountain/_element.js ***! \***********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u989C\\u8272\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u53D1\\u5C04\\u901F\\u7387\\uFF08\\u4E2A/\\u79D2\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\u5C3A\\u5BF8\\uFF08\\u50CF\\u7D20\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZvdW50YWluL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9Gb3VudGFpbi9fZWxlbWVudC5qcz84ODY1Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwibGF0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7otbflp4vpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFydF9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbjogMDtqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uT5p2f6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5kX2NvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/liJ3pgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cIm1pbmltdW1TcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5Yid6YCf5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJtYXhpbXVtU3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/lrZjlnKjml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjAuMDFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwibWluaW11bVBhcnRpY2xlTGlmZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5a2Y5Zyo5pe26Ze0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwLjAxXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cIm1heGltdW1QYXJ0aWNsZUxpZmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7otbflp4vmr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzdGFydFNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5PmnZ/mr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJlbmRTY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPuWPkeWwhOmAn+eOh++8iOS4qi/np5LvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImVtaXNzaW9uUmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5bC65a+477yI5YOP57Sg77yJPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJwYXJ0aWNsZVNpemVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBNEdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Fountain/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Fountain/eventBinding.js": /*!***************************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Fountain/eventBinding.js ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' || e.target.type == 'range') {\n value = Number(value);\n }\n that[m.value] = value;\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that.Dialog[m.value] === 'function') {\n that.Dialog[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZvdW50YWluL2V2ZW50QmluZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9QYXJ0aWNsZUVmZmVjdHMvRm91bnRhaW4vZXZlbnRCaW5kaW5nLmpzPzRlNjciXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgZXZlbnRCaW5kaW5nIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgfVxyXG4gIHN0YXRpYyBldmVudCA9IHt9XHJcblxyXG4gIGdldEV2ZW50KG5hbWUpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV1cclxuICB9XHJcblxyXG4gIGdldEV2ZW50QWxsKCkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFxyXG4gIH1cclxuXHJcbiAgc2V0RXZlbnQobmFtZSwgZXZlbnQpIHtcclxuICAgIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXSA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBvbih0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgfHwgZS50YXJnZXQudHlwZSA9PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBpZihlbGVtZW50c1tpXS5ub2RlTmFtZT09J0lNRycpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5lbGVtZW50W20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdC5EaWFsb2dbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LkRpYWxvZ1ttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IG49MDtuPHJlbW92ZU5hbWUubGVuZ3RoO24rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50Lmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgIEV2ZW50W3RdKGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEV2ZW50QmluZGluZyA9IG5ldyBldmVudEJpbmRpbmcoKTtcclxuZXhwb3J0IGRlZmF1bHQgRXZlbnRCaW5kaW5nOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVDQTtBQUFBO0FBQUE7QUE0Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5FQTtBQUFBO0FBS0E7QUErREE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Fountain/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Fountain/index.js": /*!********************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Fountain/index.js ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/ParticleEffects/Fountain/_element.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/ParticleEffects/Fountain/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * 喷泉特效\r\n */\n\n\n\n\n\n\n\n\n\nvar Fountain = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 喷泉特效\r\n * @param sdk \r\n * @param options {object} 粒子属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 贴图地址\r\n * @param options.startColor=\"#c1f7f24d\" {string} 起始颜色\r\n * @param options.endColor=\"#ffffff00\" {string} 结束颜色\r\n * @param options.startScale=1 {number} 初始比例\r\n * @param options.endScale=20 {number} 结束比例\r\n * @param options.minimumSpeed=9 {number} 最小初速度\r\n * @param options.maximumSpeed=9.5 {number} 最大初速度\r\n * @param options.minimumParticleLife=6 {number} 最小存在时间(秒)\r\n * @param options.maximumParticleLife=7 {number} 最大存在时间(秒)\r\n * @param options.emissionRate=20 {number} 发射速率(个/每秒)\r\n * @param options.particleSize=0.5{number} 粒子尺大小\r\n * @param options.lng 经度\r\n * @param options.lat 纬度\r\n * @param options.alt 高度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function Fountain(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Fountain);\n _this2 = _callSuper(this, Fountain, [sdk, options]);\n _this2.options.url = options.url;\n _this2.options.startColor = options.startColor || \"#c1f7f24d\";\n _this2.options.endColor = options.endColor || \"#ffffff00\";\n _this2.options.startScale = options.startScale || 1;\n _this2.options.endScale = options.endScale || 20;\n _this2.options.minimumParticleLife = options.minimumParticleLife || 6;\n _this2.options.maximumParticleLife = options.maximumParticleLife || 7;\n _this2.options.minimumSpeed = options.minimumSpeed || 9;\n _this2.options.maximumSpeed = options.maximumSpeed || 9.5;\n _this2.options.emissionRate = options.emissionRate || 20;\n _this2.options.particleSize = options.particleSize || 0.5;\n // this.options.gravity = (options.gravity || options.gravity === 0) ? options.gravity : -3.5\n _this2.options.show = options.show === false ? false : true;\n _this2._elms = {};\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2._element = null;\n _this2.particleSystem;\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.add();\n _this2.operate = {};\n _this2.previous = {\n positions: {\n lng: _this2.options.lng,\n lat: _this2.options.lat,\n alt: _this2.options.alt\n }\n };\n _this2.Dialog = _Dialog;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this2.sdk);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Fountain, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Fountain, [{\n key: \"type\",\n get: function get() {\n return \"ParticleEffects\";\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = this.options.show;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = this.options.show;\n }\n } else {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = false;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this3 = this;\n var _this, scene, gravityScratch, cartographic, position, matrix, cameraHeight, gravityVector, gravity, applyGravity, computeEmitterodelMatrix, computeModelMatrix;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n computeModelMatrix = function _computeModelMatrix(position) {\n var center = Cesium.Cartesian3.fromDegrees(120.40100613624982, 36.09030781, -5);\n var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n return modelMatrix;\n };\n computeEmitterodelMatrix = function _computeEmitterodelMa() {\n var hpr = Cesium.HeadingPitchRoll.fromDegrees(0, 0, 0); //!!!发射粒子的方向\n var trs = new Cesium.TranslationRotationScale();\n trs.translation = Cesium.Cartesian3.fromElements(0, 0, 0);\n trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr);\n var Matrix4 = Cesium.Matrix4.fromTranslationRotationScale(trs);\n return Matrix4;\n };\n applyGravity = function _applyGravity(p, dt) {\n p._billboard.id = _this.options.id;\n var position = p.position;\n Cesium.Cartesian3.normalize(position, gravityVector);\n Cesium.Cartesian3.multiplyByScalar(gravityVector, gravity * dt, gravityVector);\n p.velocity = Cesium.Cartesian3.add(p.velocity, gravityVector, p.velocity);\n };\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n scene = this.sdk.viewer.scene;\n gravityScratch = new Cesium.Cartesian3();\n cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(1, 1, 1), matrix);\n cameraHeight = this.sdk.viewer.camera.positionCartographic.height;\n this.particleSystem = scene.primitives.add(new Cesium.ParticleSystem({\n show: cameraHeight >= 10000000 ? false : this.options.show,\n image: this.options.url || this.getSourceRootPath() + '/img/particlesystem/fountain.png',\n // 从绿色到白色淡出\n startColor: Cesium.Color.fromCssColorString(this.options.startColor),\n //粒子出生时的颜色\n endColor: Cesium.Color.fromCssColorString(this.options.endColor),\n //当粒子死亡时的颜色\n startScale: this.options.startScale,\n //粒子出生时的比例\n endScale: this.options.endScale,\n //粒子在死亡时的比例\n minimumParticleLife: this.options.minimumParticleLife,\n //设置粒子寿命的可能持续时间的最小界限(以秒为单位)\n maximumParticleLife: this.options.maximumParticleLife,\n //设置粒子寿命的可能持续时间的最大界限(以秒为单位)\n minimumSpeed: this.options.minimumSpeed,\n //设置以米/秒为单位的最小界限,超过该最小界限,随机选择粒子的实际速度。\n maximumSpeed: this.options.maximumSpeed,\n //设置以米/秒为单位的最大界限,超过该最大界限,随机选择粒子的实际速度。\n // imageSize: new Cesium.Cartesian2( //如果设置该属性,将会覆盖 minimumImageSize和maximumImageSize属性,以像素为单位缩放image的大小\n // this.options.imageSize || 10,\n // this.options.imageSize || 10\n // ),\n lifetime: 0.5,\n imageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize * 2),\n sizeInMeters: true,\n emissionRate: this.options.emissionRate,\n //每秒发射的粒子数。\n loop: true,\n emitter: new Cesium.ConeEmitter(Cesium.Math.toRadians(0.2)),\n modelMatrix: matrix,\n emitterModelMatrix: computeEmitterodelMatrix(),\n // 发射器转换为世界坐标\n\n // 增加重力场影像,\n updateCallback: applyGravity\n }));\n gravityVector = new Cesium.Cartesian3();\n gravity = -3.5; // !!!重力方向向上向下 -(9.8*9.8)\n // 计算粒子发射器的位置姿态\n // this.entity.modelMatrix\n this.particleSystem.id = this.options.id;\n this.entity = this.particleSystem;\n // this.entity.modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(100.0, 20.0)), new Cesium.Cartesian3(0.0, 0.0, 10000.0), new Cesium.Matrix4())\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n // this.editObj = new EditParticle(this.sdk, this.entity)\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"setSplitDirection\"])(0, this.options.id);\n }\n\n // 监听相机高度\n this.sdk.viewer.camera.changed.addEventListener(function () {\n if (_this3.entity && _this3.show) {\n var _cameraHeight = _this3.sdk.viewer.camera.positionCartographic.height;\n if (_cameraHeight >= 10000000) {\n _this3.entity.show = false;\n } else {\n _this3.entity.show = true;\n }\n }\n });\n case 21:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!this._error) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 26;\n break;\n case 25:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.alt + 500),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 26:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"startColor\",\n get: function get() {\n return this.options.startColor;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.startColor = v;\n this.particleSystem.startColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.startColor) {\n this._elms.startColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.startColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.startColor[i] = picker;\n });\n }\n }\n }, {\n key: \"endColor\",\n get: function get() {\n return this.options.endColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.endColor = v;\n this.particleSystem.endColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.endColor) {\n this._elms.endColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this5.endColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.endColor[i] = picker;\n });\n }\n }\n }, {\n key: \"minimumSpeed\",\n get: function get() {\n return this.options.minimumSpeed;\n },\n set: function set(v) {\n this.options.minimumSpeed = v;\n this.particleSystem.minimumSpeed = v;\n this._elms.minimumSpeed && this._elms.minimumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumSpeed\",\n get: function get() {\n return this.options.maximumSpeed;\n },\n set: function set(v) {\n this.options.maximumSpeed = v;\n this.particleSystem.maximumSpeed = v;\n this._elms.maximumSpeed && this._elms.maximumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"minimumParticleLife\",\n get: function get() {\n return this.options.minimumParticleLife;\n },\n set: function set(v) {\n this.options.minimumParticleLife = Number(v);\n this.particleSystem.minimumParticleLife = Number(v);\n this._elms.minimumParticleLife && this._elms.minimumParticleLife.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"maximumParticleLife\",\n get: function get() {\n return this.options.maximumParticleLife;\n },\n set: function set(v) {\n this.options.maximumParticleLife = Number(v);\n this.particleSystem.maximumParticleLife = Number(v);\n this._elms.maximumParticleLife && this._elms.maximumParticleLife.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"startScale\",\n get: function get() {\n return this.options.startScale;\n },\n set: function set(v) {\n this.options.startScale = v;\n this.particleSystem.startScale = v;\n this._elms.startScale && this._elms.startScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"endScale\",\n get: function get() {\n return this.options.endScale;\n },\n set: function set(v) {\n this.options.endScale = v;\n this.particleSystem.endScale = v;\n this._elms.endScale && this._elms.endScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"emissionRate\",\n get: function get() {\n return this.options.emissionRate;\n },\n set: function set(v) {\n this.options.emissionRate = v;\n this.particleSystem.emissionRate = v;\n this._elms.emissionRate && this._elms.emissionRate.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"particleSize\",\n get: function get() {\n return this.options.particleSize;\n },\n set: function set(v) {\n this.options.particleSize = v;\n this.particleSystem.minimumImageSize = new Cesium.Cartesian2(v, v);\n this.particleSystem.maximumImageSize = new Cesium.Cartesian2(v, v);\n this._elms.particleSize && this._elms.particleSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.alt;\n },\n set: function set(v) {\n this.options.alt = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n var _this6 = this;\n var state,\n _this,\n contentElm,\n startColorPicker,\n endColorPicker,\n all_elm,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n state = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context3.next = 21;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.originalOptions, {\n title: '喷泉属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this6.name = _this6.name.trim();\n if (!_this6.name) {\n _this6.name = '未命名对象';\n }\n _this6.originalOptions = _this6.deepCopyObj(_this6.options);\n _this6._DialogObject.close();\n _this6.Dialog.confirmCallBack && _this6.Dialog.confirmCallBack(_this6.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this6.sdk, _this6.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(_this6.sdk, _this6.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this6.reset();\n _this6.Dialog.resetCallBack && _this6.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this6.Dialog.removeCallBack && _this6.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this6.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this6.positionEditing = false;\n _this6.Dialog.closeCallBack && _this6.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this6.show = show;\n _this6.Dialog.showCallBack && _this6.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this6.positionEditing = !_this6.positionEditing;\n }\n }, true);\n case 7:\n this._DialogObject = _context3.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' particle-effects';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n startColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"start_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.startColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.startColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n endColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"end_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.endColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.endColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].element;\n this._elms.startColor = [startColorPicker];\n this._elms.endColor = [endColorPicker];\n _context3.next = 21;\n break;\n case 21:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.name = this.originalOptions.name;\n this.startColor = this.originalOptions.startColor;\n this.endColor = this.originalOptions.endColor;\n this.minimumSpeed = this.originalOptions.minimumSpeed;\n this.maximumSpeed = this.originalOptions.maximumSpeed;\n this.minimumParticleLife = this.originalOptions.minimumParticleLife;\n this.maximumParticleLife = this.originalOptions.maximumParticleLife;\n this.startScale = this.originalOptions.startScale;\n this.endScale = this.originalOptions.endScale;\n this.emissionRate = this.originalOptions.emissionRate;\n this.particleSize = this.originalOptions.particleSize;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.alt = this.originalOptions.alt;\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _superPropGet(Fountain, \"remove\", this, 3)([]);\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context4.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context4.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this7 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.picking = false;\n this.previous = {\n positions: _objectSpread({}, this.entity.position)\n };\n var movPos;\n this.event.mouse_move(function (movement, cartesian) {\n movPos = movement.endPosition;\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(_this7.options.lng, _this7.options.lat, _this7.options.alt);\n var position = _this7.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n _this7.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n _this7._elms.lng && _this7._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n _this7._elms.lat && _this7._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n if (!movPos || movPos.x !== movement.position.x || movPos.y !== movement.position.y - 2) {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n }\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this7.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n } else {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n }\n });\n });\n } else {\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.lng = this.entity.position.lng;\n this.options.lat = this.entity.position.lat;\n this.options.alt = this.entity.position.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Fountain);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL0ZvdW50YWluL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9Gb3VudGFpbi9pbmRleC5qcz84Y2FhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDllrfms4nnibnmlYhcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuL2V2ZW50QmluZGluZydcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uLy4uL2luZGV4XCI7XHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSwgZ2V0U2RrIGFzIGdldDJEU2RrIH0gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93fSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgRm91bnRhaW4gZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAZGVzY3JpcHRpb24g5Za35rOJ54m55pWIXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDnspLlrZDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDmoIfms6hpZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMudXJsIHtzdHJpbmd9IOi0tOWbvuWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0Q29sb3I9XCIjYzFmN2YyNGRcIiB7c3RyaW5nfSDotbflp4vpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5lbmRDb2xvcj1cIiNmZmZmZmYwMFwiIHtzdHJpbmd9IOe7k+adn+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0U2NhbGU9MSB7bnVtYmVyfSDliJ3lp4vmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5lbmRTY2FsZT0yMCB7bnVtYmVyfSDnu5PmnZ/mr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5taW5pbXVtU3BlZWQ9OSB7bnVtYmVyfSDmnIDlsI/liJ3pgJ/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhpbXVtU3BlZWQ9OS41IHtudW1iZXJ9IOacgOWkp+WInemAn+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmU9NiB7bnVtYmVyfSDmnIDlsI/lrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmU9NyB7bnVtYmVyfSDmnIDlpKflrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVtaXNzaW9uUmF0ZT0yMCB7bnVtYmVyfSDlj5HlsITpgJ/njoco5LiqL+avj+enkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWNsZVNpemU9MC41e251bWJlcn0g57KS5a2Q5bC65aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG5nIOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhdCDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hbHQg6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy51cmwgPSBvcHRpb25zLnVybFxyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3IgfHwgXCIjYzFmN2YyNGRcIlxyXG4gICAgdGhpcy5vcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBcIiNmZmZmZmYwMFwiXHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZSA9IG9wdGlvbnMuc3RhcnRTY2FsZSB8fCAxXHJcbiAgICB0aGlzLm9wdGlvbnMuZW5kU2NhbGUgPSBvcHRpb25zLmVuZFNjYWxlIHx8IDIwXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSB8fCA2XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSB8fCA3XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gb3B0aW9ucy5taW5pbXVtU3BlZWQgfHwgOVxyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1TcGVlZCA9IG9wdGlvbnMubWF4aW11bVNwZWVkIHx8IDkuNVxyXG4gICAgdGhpcy5vcHRpb25zLmVtaXNzaW9uUmF0ZSA9IG9wdGlvbnMuZW1pc3Npb25SYXRlIHx8IDIwXHJcbiAgICB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplID0gb3B0aW9ucy5wYXJ0aWNsZVNpemUgfHwgMC41XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuZ3Jhdml0eSA9IChvcHRpb25zLmdyYXZpdHkgfHwgb3B0aW9ucy5ncmF2aXR5ID09PSAwKSA/IG9wdGlvbnMuZ3Jhdml0eSA6IC0zLjVcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gb3B0aW9ucy5zaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5wb3NpdGlvbkNhbGxCYWNrID0gbnVsbFxyXG4gICAgdGhpcy5yb3RhdGlvbkNhbGxiYWNrID0gbnVsbFxyXG4gICAgdGhpcy5vbkNsaWNrQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbFxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIHRoaXMuYWRkKClcclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICBwb3NpdGlvbnM6IHtcclxuICAgICAgICBsbmc6IHRoaXMub3B0aW9ucy5sbmcsXHJcbiAgICAgICAgbGF0OiB0aGlzLm9wdGlvbnMubGF0LFxyXG4gICAgICAgIGFsdDogdGhpcy5vcHRpb25zLmFsdCxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiBcIlBhcnRpY2xlRWZmZWN0c1wiXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIH1cclxuXHJcbiAgc2V0IHNob3codikge1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICBsZXQgc2RrRCA9IGdldDJEU2RrKCkuc2RrRFxyXG4gICAgICBpZiAoIXRoaXMuaXNTaG93VmlldyB8fCAhc2RrRCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRpdHkgJiYgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYy5oZWlnaHQgPCAxMDAwMDAwMCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkuc2hvdyA9IHRoaXMub3B0aW9ucy5zaG93XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgJiYgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHRoaXMub3B0aW9ucy5zaG93XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodCA8IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAmJiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdykge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4uY2hlY2tlZCA9IHZcclxuICAgICAgfVxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHRoaXMuaXNTaG93VmlldyA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkKCkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGNvbnN0IHNjZW5lID0gdGhpcy5zZGsudmlld2VyLnNjZW5lO1xyXG4gICAgbGV0IGdyYXZpdHlTY3JhdGNoID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygxLCAxLCAxKSwgbWF0cml4KVxyXG5cclxuICAgIGxldCBjYW1lcmFIZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodFxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbSA9IHNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLlBhcnRpY2xlU3lzdGVtKHtcclxuICAgICAgICBzaG93OiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSA/IGZhbHNlIDogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgICAgaW1hZ2U6IHRoaXMub3B0aW9ucy51cmwgfHwgKHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BhcnRpY2xlc3lzdGVtL2ZvdW50YWluLnBuZycpLFxyXG4gICAgICAgIC8vIOS7jue7v+iJsuWIsOeZveiJsua3oeWHulxyXG4gICAgICAgIHN0YXJ0Q29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IpLCAvL+eykuWtkOWHuueUn+aXtueahOminOiJslxyXG4gICAgICAgIGVuZENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5lbmRDb2xvciksIC8v5b2T57KS5a2Q5q275Lqh5pe255qE6aKc6ImyXHJcbiAgICAgICAgc3RhcnRTY2FsZTogdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUsICAvL+eykuWtkOWHuueUn+aXtueahOavlOS+i1xyXG4gICAgICAgIGVuZFNjYWxlOiB0aGlzLm9wdGlvbnMuZW5kU2NhbGUsIC8v57KS5a2Q5Zyo5q275Lqh5pe255qE5q+U5L6LXHJcbiAgICAgICAgbWluaW11bVBhcnRpY2xlTGlmZTogdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUsICAvL+iuvue9rueykuWtkOWvv+WRveeahOWPr+iDveaMgee7reaXtumXtOeahOacgOWwj+eVjOmZkO+8iOS7peenkuS4uuWNleS9je+8iVxyXG4gICAgICAgIG1heGltdW1QYXJ0aWNsZUxpZmU6IHRoaXMub3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlLCAvL+iuvue9rueykuWtkOWvv+WRveeahOWPr+iDveaMgee7reaXtumXtOeahOacgOWkp+eVjOmZkO+8iOS7peenkuS4uuWNleS9je+8iVxyXG4gICAgICAgIG1pbmltdW1TcGVlZDogdGhpcy5vcHRpb25zLm1pbmltdW1TcGVlZCwvL+iuvue9ruS7peexsy/np5LkuLrljZXkvY3nmoTmnIDlsI/nlYzpmZDvvIzotoXov4for6XmnIDlsI/nlYzpmZDvvIzpmo/mnLrpgInmi6nnspLlrZDnmoTlrp7pmYXpgJ/luqbjgIJcclxuICAgICAgICBtYXhpbXVtU3BlZWQ6IHRoaXMub3B0aW9ucy5tYXhpbXVtU3BlZWQsLy/orr7nva7ku6XnsbMv56eS5Li65Y2V5L2N55qE5pyA5aSn55WM6ZmQ77yM6LaF6L+H6K+l5pyA5aSn55WM6ZmQ77yM6ZqP5py66YCJ5oup57KS5a2Q55qE5a6e6ZmF6YCf5bqm44CCXHJcbiAgICAgICAgLy8gaW1hZ2VTaXplOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoICAvL+WmguaenOiuvue9ruivpeWxnuaAp++8jOWwhuS8muimhuebliBtaW5pbXVtSW1hZ2VTaXpl5ZKMbWF4aW11bUltYWdlU2l6ZeWxnuaAp++8jOS7peWDj+e0oOS4uuWNleS9jee8qeaUvmltYWdl55qE5aSn5bCPXHJcbiAgICAgICAgLy8gICB0aGlzLm9wdGlvbnMuaW1hZ2VTaXplIHx8IDEwLFxyXG4gICAgICAgIC8vICAgdGhpcy5vcHRpb25zLmltYWdlU2l6ZSB8fCAxMFxyXG4gICAgICAgIC8vICksXHJcbiAgICAgICAgbGlmZXRpbWU6IDAuNSxcclxuICAgICAgICBpbWFnZVNpemU6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMih0aGlzLm9wdGlvbnMucGFydGljbGVTaXplLCB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplICogMiksXHJcbiAgICAgICAgc2l6ZUluTWV0ZXJzOiB0cnVlLFxyXG4gICAgICAgIGVtaXNzaW9uUmF0ZTogdGhpcy5vcHRpb25zLmVtaXNzaW9uUmF0ZSwgLy/mr4/np5Llj5HlsITnmoTnspLlrZDmlbDjgIJcclxuICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgIGVtaXR0ZXI6IG5ldyBDZXNpdW0uQ29uZUVtaXR0ZXIoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMikpLFxyXG4gICAgICAgIG1vZGVsTWF0cml4OiBtYXRyaXgsXHJcbiAgICAgICAgZW1pdHRlck1vZGVsTWF0cml4OiBjb21wdXRlRW1pdHRlcm9kZWxNYXRyaXgoKSwvLyDlj5HlsITlmajovazmjaLkuLrkuJbnlYzlnZDmoIdcclxuXHJcbiAgICAgICAgLy8g5aKe5Yqg6YeN5Yqb5Zy65b2x5YOP77yMXHJcbiAgICAgICAgdXBkYXRlQ2FsbGJhY2s6IGFwcGx5R3Jhdml0eSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBsZXQgZ3Jhdml0eVZlY3RvciA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpO1xyXG4gICAgbGV0IGdyYXZpdHkgPSAtMy41Oy8vICEhIemHjeWKm+aWueWQkeWQkeS4iuWQkeS4iyAtKDkuOCo5LjgpXHJcbiAgICBmdW5jdGlvbiBhcHBseUdyYXZpdHkocCwgZHQpIHtcclxuICAgICAgcC5fYmlsbGJvYXJkLmlkID0gX3RoaXMub3B0aW9ucy5pZFxyXG4gICAgICBsZXQgcG9zaXRpb24gPSBwLnBvc2l0aW9uO1xyXG4gICAgICBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUocG9zaXRpb24sIGdyYXZpdHlWZWN0b3IpO1xyXG4gICAgICBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKGdyYXZpdHlWZWN0b3IsIGdyYXZpdHkgKiBkdCwgZ3Jhdml0eVZlY3Rvcik7XHJcbiAgICAgIHAudmVsb2NpdHkgPSBDZXNpdW0uQ2FydGVzaWFuMy5hZGQocC52ZWxvY2l0eSwgZ3Jhdml0eVZlY3RvciwgcC52ZWxvY2l0eSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIOiuoeeul+eykuWtkOWPkeWwhOWZqOeahOS9jee9ruWnv+aAgVxyXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVtaXR0ZXJvZGVsTWF0cml4KCkge1xyXG4gICAgICBsZXQgaHByID0gQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXMoMCwgMCwgMCk7Ly8hISHlj5HlsITnspLlrZDnmoTmlrnlkJFcclxuICAgICAgbGV0IHRycyA9IG5ldyBDZXNpdW0uVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKCk7XHJcbiAgICAgIHRycy50cmFuc2xhdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21FbGVtZW50cygwLCAwLCAwKTtcclxuICAgICAgdHJzLnJvdGF0aW9uID0gQ2VzaXVtLlF1YXRlcm5pb24uZnJvbUhlYWRpbmdQaXRjaFJvbGwoaHByKTtcclxuICAgICAgbGV0IE1hdHJpeDQgPSBDZXNpdW0uTWF0cml4NC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKHRycyk7XHJcbiAgICAgIHJldHVybiBNYXRyaXg0XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb2RlbE1hdHJpeChwb3NpdGlvbikge1xyXG4gICAgICBsZXQgY2VudGVyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoMTIwLjQwMTAwNjEzNjI0OTgyLCAzNi4wOTAzMDc4MSwgLTUpXHJcbiAgICAgIGxldCBtb2RlbE1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGNlbnRlcik7XHJcbiAgICAgIHJldHVybiBtb2RlbE1hdHJpeDtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeFxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5pZCA9IHRoaXMub3B0aW9ucy5pZFxyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlUcmFuc2xhdGlvbihDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygxMDAuMCwgMjAuMCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMC4wLCAwLjAsIDEwMDAwLjApLCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSlcclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgIC8vIHRoaXMuZWRpdE9iaiA9IG5ldyBFZGl0UGFydGljbGUodGhpcy5zZGssIHRoaXMuZW50aXR5KVxyXG4gICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIGlmKHRoaXMub3B0aW9ucy5zaG93KSB7XHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm5HlkKznm7jmnLrpq5jluqZcclxuICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuY2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2hvdykge1xyXG4gICAgICAgIGxldCBjYW1lcmFIZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgICBpZiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCArIDUwMCksXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXJ0Q29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3JcclxuICB9XHJcblxyXG4gIHNldCBzdGFydENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydENvbG9yID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5zdGFydENvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMuc3RhcnRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLnN0YXJ0Q29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuc3RhcnRDb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmRDb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IGVuZENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbmRDb2xvciA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0uZW5kQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5lbmRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmVuZENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgcGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHYsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbmRDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3JbaV0gPSBwaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtaW5pbXVtU3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1TcGVlZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5taW5pbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZCAmJiB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heGltdW1TcGVlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgbWF4aW11bVNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1TcGVlZCA9IHZcclxuICAgIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkICYmIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWluaW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSBOdW1iZXIodilcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWluaW11bVBhcnRpY2xlTGlmZSA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5fZWxtcy5taW5pbXVtUGFydGljbGVMaWZlICYmIHRoaXMuX2VsbXMubWluaW11bVBhcnRpY2xlTGlmZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBOdW1iZXIodilcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWF4aW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1heGltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmUgPSBOdW1iZXIodilcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWF4aW11bVBhcnRpY2xlTGlmZSA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5fZWxtcy5tYXhpbXVtUGFydGljbGVMaWZlICYmIHRoaXMuX2VsbXMubWF4aW11bVBhcnRpY2xlTGlmZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBOdW1iZXIodilcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRTY2FsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IHN0YXJ0U2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLnN0YXJ0U2NhbGUgJiYgdGhpcy5fZWxtcy5zdGFydFNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZW5kU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVuZFNjYWxlXHJcbiAgfVxyXG5cclxuICBzZXQgZW5kU2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmVuZFNjYWxlID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbmRTY2FsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW5kU2NhbGUgJiYgdGhpcy5fZWxtcy5lbmRTY2FsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVtaXNzaW9uUmF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlXHJcbiAgfVxyXG5cclxuICBzZXQgZW1pc3Npb25SYXRlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLmVtaXNzaW9uUmF0ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlICYmIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcGFydGljbGVTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICB9XHJcblxyXG4gIHNldCBwYXJ0aWNsZVNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWluaW11bUltYWdlU2l6ZSA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMih2LCB2KVxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5tYXhpbXVtSW1hZ2VTaXplID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKHYsIHYpXHJcbiAgICB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZSAmJiB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG5nXHJcbiAgfVxyXG5cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYXQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hbHQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3JpZ2luYWxPcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfllrfms4nlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHBhcnRpY2xlLWVmZmVjdHMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBzdGFydENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzdGFydF9jb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5zdGFydENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbmRfY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuZW5kQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIEV2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5zdGFydENvbG9yID0gW3N0YXJ0Q29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3IgPSBbZW5kQ29sb3JQaWNrZXJdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5zdGFydENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3RhcnRDb2xvclxyXG4gICAgdGhpcy5lbmRDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmVuZENvbG9yXHJcbiAgICB0aGlzLm1pbmltdW1TcGVlZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gICAgdGhpcy5tYXhpbXVtU3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5tYXhpbXVtU3BlZWRcclxuICAgIHRoaXMubWluaW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMubWF4aW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMuc3RhcnRTY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnN0YXJ0U2NhbGVcclxuICAgIHRoaXMuZW5kU2NhbGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbmRTY2FsZVxyXG4gICAgdGhpcy5lbWlzc2lvblJhdGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbWlzc2lvblJhdGVcclxuICAgIHRoaXMucGFydGljbGVTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucGFydGljbGVTaXplXHJcbiAgICB0aGlzLmxuZyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxuZ1xyXG4gICAgdGhpcy5sYXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYXRcclxuICAgIHRoaXMuYWx0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYWx0XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICBzdXBlci5yZW1vdmUoKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KTtcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgKlxyXG4gICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAqXHJcbiAgKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uczogeyAuLi50aGlzLmVudGl0eS5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1vdlBvc1xyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBtb3ZQb3MgPSBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gcG9zaXRpb25zLmFsdFxyXG4gICAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMub3B0aW9ucy5hbHQpO1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgICAgICB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKVxyXG5cclxuICAgICAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuYWx0ICYmIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoIW1vdlBvcyB8fCBtb3ZQb3MueCAhPT0gbW92ZW1lbnQucG9zaXRpb24ueCB8fCBtb3ZQb3MueSAhPT0gbW92ZW1lbnQucG9zaXRpb24ueS0yKSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24uYWx0XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG5nID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSBwb3NpdGlvbnMuYWx0XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICB0aGlzLm9wdGlvbnMubGF0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCk7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgICAgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuXHJcbiAgICAgIHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRm91bnRhaW5cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUErREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFVQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE1RkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWhFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1FQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFwQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBckdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUF1SUE7QUFDQTtBQUFBO0FBbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Fountain/index.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Smoke/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Smoke/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u989C\\u8272\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u521D\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u53D1\\u5C04\\u901F\\u7387\\uFF08\\u4E2A/\\u79D2\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\u5C3A\\u5BF8\\uFF08\\u50CF\\u7D20\\uFF09\\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL1Ntb2tlL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9TbW9rZS9fZWxlbWVudC5qcz82MmZkIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwibGF0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7otbflp4vpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFydF9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbjogMDtqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uT5p2f6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5kX2NvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/liJ3pgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cIm1pbmltdW1TcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5Yid6YCf5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJtYXhpbXVtU3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlsI/lrZjlnKjml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjAuMDFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwibWluaW11bVBhcnRpY2xlTGlmZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyA5aSn5a2Y5Zyo5pe26Ze0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwLjAxXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cIm1heGltdW1QYXJ0aWNsZUxpZmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7otbflp4vmr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzdGFydFNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5PmnZ/mr5Tkvos8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJlbmRTY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPuWPkeWwhOmAn+eOh++8iOS4qi/np5LvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImVtaXNzaW9uUmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5bC65a+477yI5YOP57Sg77yJPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDBcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJwYXJ0aWNsZVNpemVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBNEdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Smoke/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Smoke/eventBinding.js": /*!************************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Smoke/eventBinding.js ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' || e.target.type == 'range') {\n value = Number(value);\n }\n that[m.value] = value;\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that.Dialog[m.value] === 'function') {\n that.Dialog[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL1Ntb2tlL2V2ZW50QmluZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9QYXJ0aWNsZUVmZmVjdHMvU21va2UvZXZlbnRCaW5kaW5nLmpzPzFjOTQiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgZXZlbnRCaW5kaW5nIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgfVxyXG4gIHN0YXRpYyBldmVudCA9IHt9XHJcblxyXG4gIGdldEV2ZW50KG5hbWUpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV1cclxuICB9XHJcblxyXG4gIGdldEV2ZW50QWxsKCkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFxyXG4gIH1cclxuXHJcbiAgc2V0RXZlbnQobmFtZSwgZXZlbnQpIHtcclxuICAgIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXSA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBvbih0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWUgXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZihlLnRhcmdldC50eXBlID09ICdudW1iZXInIHx8IGUudGFyZ2V0LnR5cGUgPT0gJ3JhbmdlJykge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudHNbaV0ubm9kZU5hbWU9PSdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZWxlbWVudFttLnZhbHVlXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXQuRGlhbG9nW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5EaWFsb2dbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yKGxldCBuPTA7bjxyZW1vdmVOYW1lLmxlbmd0aDtuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKHZlbnRUeXBlLCAoZSkgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICBFdmVudFt0XShlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBFdmVudEJpbmRpbmcgPSBuZXcgZXZlbnRCaW5kaW5nKCk7XHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50QmluZGluZzsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1Q0E7QUFBQTtBQUFBO0FBNENBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuRUE7QUFBQTtBQUtBO0FBK0RBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Smoke/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Smoke/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Smoke/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/ParticleEffects/Smoke/_element.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/ParticleEffects/Smoke/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * 烟雾特效\r\n */\n\n\n\n\n\n\n\n\n\nvar Smoke = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 烟雾特效\r\n * @param sdk\r\n * @param options {object} 粒子属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 贴图地址\r\n * @param options.startColor=\"#00000000\" {string} 起始颜色\r\n * @param options.endColor=\"#0000001a\" {string} 结束颜色\r\n * @param options.startScale=0.1 {number} 初始比例\r\n * @param options.endScale=10 {number} 结束比例\r\n * @param options.minimumSpeed=10 {number} 最小初速度\r\n * @param options.maximumSpeed=15 {number} 最大初速度\r\n * @param options.minimumParticleLife=6 {number} 最小存在时间(秒)\r\n * @param options.maximumParticleLife=7 {number} 最大存在时间(秒)\r\n * @param options.emissionRate=28 {number} 发射速率(个/每秒)\r\n * @param options.particleSize=2{number} 粒子尺大小\r\n * @param options.lng 经度\r\n * @param options.lat 纬度\r\n * @param options.alt 高度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function Smoke(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Smoke);\n _this2 = _callSuper(this, Smoke, [sdk, options]);\n _this2.options.url = options.url;\n _this2.options.startColor = options.startColor || \"#00000000\";\n _this2.options.endColor = options.endColor || \"#0000001a\";\n _this2.options.startScale = options.startScale || 0.1;\n _this2.options.endScale = options.endScale || 10;\n _this2.options.minimumParticleLife = options.minimumParticleLife || 6;\n _this2.options.maximumParticleLife = options.maximumParticleLife || 7;\n _this2.options.minimumSpeed = options.minimumSpeed || 10;\n _this2.options.maximumSpeed = options.maximumSpeed || 15;\n _this2.options.emissionRate = options.emissionRate || 28;\n _this2.options.particleSize = options.particleSize || 2;\n _this2.options.show = options.show === false ? false : true;\n _this2._elms = {};\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2._element = null;\n _this2.particleSystem;\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.add();\n _this2.operate = {};\n _this2.previous = {\n positions: {\n lng: _this2.options.lng,\n lat: _this2.options.lat,\n alt: _this2.options.alt\n }\n };\n _this2.Dialog = _Dialog;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this2.sdk);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Smoke, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Smoke, [{\n key: \"type\",\n get: function get() {\n return \"ParticleEffects\";\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = this.options.show;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = this.options.show;\n }\n } else {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = false;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this3 = this;\n var scene, cartographic, position, matrix, cameraHeight;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n this.originalOptions = this.deepCopyObj(this.options);\n scene = this.sdk.viewer.scene;\n cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(1, 1, 1), matrix);\n cameraHeight = this.sdk.viewer.camera.positionCartographic.height;\n this.particleSystem = scene.primitives.add(new Cesium.ParticleSystem({\n show: cameraHeight >= 10000000 ? false : this.options.show,\n image: this.options.url || this.getSourceRootPath() + '/img/particlesystem/smoke.png',\n startColor: Cesium.Color.fromCssColorString(this.options.startColor),\n //粒子出生时的颜色\n endColor: Cesium.Color.fromCssColorString(this.options.endColor),\n //当粒子死亡时的颜色\n startScale: this.options.startScale,\n //粒子出生时的比例\n endScale: this.options.endScale,\n //粒子在死亡时的比例\n minimumParticleLife: this.options.minimumParticleLife,\n //设置粒子寿命的可能持续时间的最小界限(以秒为单位)\n maximumParticleLife: this.options.maximumParticleLife,\n //设置粒子寿命的可能持续时间的最大界限(以秒为单位)\n minimumSpeed: this.options.minimumSpeed,\n //设置以米/秒为单位的最小界限,超过该最小界限,随机选择粒子的实际速度。\n maximumSpeed: this.options.maximumSpeed,\n //设置以米/秒为单位的最大界限,超过该最大界限,随机选择粒子的实际速度。\n // imageSize: new Cesium.Cartesian2( //如果设置该属性,将会覆盖 minimumImageSize和maximumImageSize属性,以像素为单位缩放image的大小\n // this.options.imageSize || 10,\n // this.options.imageSize || 10\n // ),\n minimumImageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize),\n maximumImageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize),\n sizeInMeters: true,\n emissionRate: this.options.emissionRate,\n //每秒发射的粒子数。\n lifetime: 0.5,\n //多长时间的粒子系统将以秒为单位发射粒子\n loop: true,\n emitter: new Cesium.CircleEmitter(0.2),\n performance: false,\n modelMatrix: matrix,\n updateCallback: function updateCallback(r) {\n r._billboard.id = _this3.options.id;\n }\n }));\n this.particleSystem.id = this.options.id;\n this.entity = this.particleSystem;\n // this.entity.modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(100.0, 20.0)), new Cesium.Cartesian3(0.0, 0.0, 10000.0), new Cesium.Matrix4())\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n // this.editObj = new EditParticle(this.sdk, this.entity)\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"setSplitDirection\"])(0, this.options.id);\n }\n\n // 监听相机高度\n this.sdk.viewer.camera.changed.addEventListener(function () {\n if (_this3.entity && _this3.show) {\n var _cameraHeight = _this3.sdk.viewer.camera.positionCartographic.height;\n if (_cameraHeight >= 10000000) {\n _this3.entity.show = false;\n } else {\n _this3.entity.show = true;\n }\n }\n });\n case 14:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!this._error) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 26;\n break;\n case 25:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.alt + 500),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 26:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"startColor\",\n get: function get() {\n return this.options.startColor;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.startColor = v;\n this.particleSystem.startColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.startColor) {\n this._elms.startColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.startColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.startColor[i] = picker;\n });\n }\n }\n }, {\n key: \"endColor\",\n get: function get() {\n return this.options.endColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.endColor = v;\n this.particleSystem.endColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.endColor) {\n this._elms.endColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this5.endColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.endColor[i] = picker;\n });\n }\n }\n }, {\n key: \"minimumSpeed\",\n get: function get() {\n return this.options.minimumSpeed;\n },\n set: function set(v) {\n this.options.minimumSpeed = v;\n this.particleSystem.minimumSpeed = v;\n this._elms.minimumSpeed && this._elms.minimumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumSpeed\",\n get: function get() {\n return this.options.maximumSpeed;\n },\n set: function set(v) {\n this.options.maximumSpeed = v;\n this.particleSystem.maximumSpeed = v;\n this._elms.maximumSpeed && this._elms.maximumSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"minimumParticleLife\",\n get: function get() {\n return this.options.minimumParticleLife;\n },\n set: function set(v) {\n this.options.minimumParticleLife = v;\n this.particleSystem.minimumParticleLife = v;\n this._elms.minimumParticleLife && this._elms.minimumParticleLife.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"maximumParticleLife\",\n get: function get() {\n return this.options.maximumParticleLife;\n },\n set: function set(v) {\n this.options.maximumParticleLife = v;\n this.particleSystem.maximumParticleLife = v;\n this._elms.maximumParticleLife && this._elms.maximumParticleLife.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"startScale\",\n get: function get() {\n return this.options.startScale;\n },\n set: function set(v) {\n this.options.startScale = v;\n this.particleSystem.startScale = v;\n this._elms.startScale && this._elms.startScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"endScale\",\n get: function get() {\n return this.options.endScale;\n },\n set: function set(v) {\n this.options.endScale = v;\n this.particleSystem.endScale = v;\n this._elms.endScale && this._elms.endScale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"emissionRate\",\n get: function get() {\n return this.options.emissionRate;\n },\n set: function set(v) {\n this.options.emissionRate = v;\n this.particleSystem.emissionRate = v;\n this._elms.emissionRate && this._elms.emissionRate.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"particleSize\",\n get: function get() {\n return this.options.particleSize;\n },\n set: function set(v) {\n this.options.particleSize = v;\n this.particleSystem.minimumImageSize = new Cesium.Cartesian2(v, v);\n this.particleSystem.maximumImageSize = new Cesium.Cartesian2(v, v);\n this._elms.particleSize && this._elms.particleSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.alt;\n },\n set: function set(v) {\n this.options.alt = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n var _this6 = this;\n var state,\n _this,\n contentElm,\n startColorPicker,\n endColorPicker,\n all_elm,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n state = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context3.next = 21;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.originalOptions, {\n title: '烟雾属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this6.name = _this6.name.trim();\n if (!_this6.name) {\n _this6.name = '未命名对象';\n }\n _this6.originalOptions = _this6.deepCopyObj(_this6.options);\n _this6._DialogObject.close();\n _this6.Dialog.confirmCallBack && _this6.Dialog.confirmCallBack(_this6.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this6.sdk, _this6.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(_this6.sdk, _this6.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this6.reset();\n _this6.Dialog.resetCallBack && _this6.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this6.Dialog.removeCallBack && _this6.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this6.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this6.positionEditing = false;\n _this6.Dialog.closeCallBack && _this6.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this6.show = show;\n _this6.Dialog.showCallBack && _this6.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this6.positionEditing = !_this6.positionEditing;\n }\n }, true);\n case 7:\n this._DialogObject = _context3.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' particle-effects';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n startColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"start_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.startColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.startColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n endColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"end_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.endColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.endColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"].element;\n this._elms.startColor = [startColorPicker];\n this._elms.endColor = [endColorPicker];\n _context3.next = 21;\n break;\n case 21:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.name = this.originalOptions.name;\n this.startColor = this.originalOptions.startColor;\n this.endColor = this.originalOptions.endColor;\n this.minimumSpeed = this.originalOptions.minimumSpeed;\n this.maximumSpeed = this.originalOptions.maximumSpeed;\n this.minimumParticleLife = this.originalOptions.minimumParticleLife;\n this.maximumParticleLife = this.originalOptions.maximumParticleLife;\n this.startScale = this.originalOptions.startScale;\n this.endScale = this.originalOptions.endScale;\n this.emissionRate = this.originalOptions.emissionRate;\n this.particleSize = this.originalOptions.particleSize;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.alt = this.originalOptions.alt;\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _superPropGet(Smoke, \"remove\", this, 3)([]);\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context4.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context4.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this7 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.picking = false;\n this.previous = {\n positions: _objectSpread({}, this.entity.position)\n };\n var movPos;\n this.event.mouse_move(function (movement, cartesian) {\n movPos = movement.endPosition;\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(_this7.options.lng, _this7.options.lat, _this7.options.alt);\n var position = _this7.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n _this7.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n _this7._elms.lng && _this7._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n _this7._elms.lat && _this7._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n if (!movPos || movPos.x !== movement.position.x || movPos.y !== movement.position.y - 2) {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n }\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this7.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n } else {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n }\n });\n });\n } else {\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.lng = this.entity.position.lng;\n this.options.lat = this.entity.position.lat;\n this.options.alt = this.entity.position.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.lng, this.options.lat, this.options.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = _this7.options.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = _this7.options.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this7.options.alt;\n });\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Smoke);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL1Ntb2tlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9TbW9rZS9pbmRleC5qcz80N2IwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDng5/pm77nibnmlYhcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sLCBjc3MgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4vZXZlbnRCaW5kaW5nJ1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vaW5kZXhcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7IHN5bmNEYXRhLCBnZXRTZGsgYXMgZ2V0MkRTZGsgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3d9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBTbW9rZSBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjcmlwdGlvbiDng5/pm77nibnmlYhcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g57KS5a2Q5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5qCH5rOoaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnVybCB7c3RyaW5nfSDotLTlm77lnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zdGFydENvbG9yPVwiIzAwMDAwMDAwXCIge3N0cmluZ30g6LW35aeL6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZW5kQ29sb3I9XCIjMDAwMDAwMWFcIiB7c3RyaW5nfSDnu5PmnZ/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zdGFydFNjYWxlPTAuMSB7bnVtYmVyfSDliJ3lp4vmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5lbmRTY2FsZT0xMCB7bnVtYmVyfSDnu5PmnZ/mr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5taW5pbXVtU3BlZWQ9MTAge251bWJlcn0g5pyA5bCP5Yid6YCf5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubWF4aW11bVNwZWVkPTE1IHtudW1iZXJ9IOacgOWkp+WInemAn+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmU9NiB7bnVtYmVyfSDmnIDlsI/lrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmU9NyB7bnVtYmVyfSDmnIDlpKflrZjlnKjml7bpl7Qo56eSKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVtaXNzaW9uUmF0ZT0yOCB7bnVtYmVyfSDlj5HlsITpgJ/njoco5LiqL+avj+enkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWNsZVNpemU9MntudW1iZXJ9IOeykuWtkOWwuuWkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxuZyDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYXQg57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYWx0IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zLCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMudXJsID0gb3B0aW9ucy51cmxcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydENvbG9yID0gb3B0aW9ucy5zdGFydENvbG9yIHx8IFwiIzAwMDAwMDAwXCJcclxuICAgIHRoaXMub3B0aW9ucy5lbmRDb2xvciA9IG9wdGlvbnMuZW5kQ29sb3IgfHwgXCIjMDAwMDAwMWFcIlxyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUgPSBvcHRpb25zLnN0YXJ0U2NhbGUgfHwgMC4xXHJcbiAgICB0aGlzLm9wdGlvbnMuZW5kU2NhbGUgPSBvcHRpb25zLmVuZFNjYWxlIHx8IDEwXHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSB8fCA2XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSA9IG9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZSB8fCA3XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gb3B0aW9ucy5taW5pbXVtU3BlZWQgfHwgMTBcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtU3BlZWQgPSBvcHRpb25zLm1heGltdW1TcGVlZCB8fCAxNVxyXG4gICAgdGhpcy5vcHRpb25zLmVtaXNzaW9uUmF0ZSA9IG9wdGlvbnMuZW1pc3Npb25SYXRlIHx8IDI4XHJcbiAgICB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplID0gb3B0aW9ucy5wYXJ0aWNsZVNpemUgfHwgMlxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLnBvc2l0aW9uQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnJvdGF0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLm9uQ2xpY2tDYWxsYmFjayA9IG51bGxcclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgdGhpcy5hZGQoKVxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uczoge1xyXG4gICAgICAgIGxuZzogdGhpcy5vcHRpb25zLmxuZyxcclxuICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsXHJcbiAgICAgICAgYWx0OiB0aGlzLm9wdGlvbnMuYWx0LFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIFwiUGFydGljbGVFZmZlY3RzXCJcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGxldCBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmICghdGhpcy5pc1Nob3dWaWV3IHx8ICFzZGtEKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMyB8fCAhc2RrRCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodCA8IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAmJiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdykge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0IDwgMTAwMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93KSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4pIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bi5jaGVja2VkID0gdlxyXG4gICAgICB9XHJcbiAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgdGhpcy5pc1Nob3dWaWV3ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoKSB7XHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmU7XHJcbiAgICB2YXIgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygxLCAxLCAxKSwgbWF0cml4KVxyXG4gICAgbGV0IGNhbWVyYUhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbSA9IHNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLlBhcnRpY2xlU3lzdGVtKHtcclxuICAgICAgICBzaG93OiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSA/IGZhbHNlIDogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgICAgaW1hZ2U6IHRoaXMub3B0aW9ucy51cmwgfHwgKHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BhcnRpY2xlc3lzdGVtL3Ntb2tlLnBuZycpLFxyXG4gICAgICAgIHN0YXJ0Q29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IpLCAvL+eykuWtkOWHuueUn+aXtueahOminOiJslxyXG4gICAgICAgIGVuZENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5lbmRDb2xvciksIC8v5b2T57KS5a2Q5q275Lqh5pe255qE6aKc6ImyXHJcbiAgICAgICAgc3RhcnRTY2FsZTogdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUsIC8v57KS5a2Q5Ye655Sf5pe255qE5q+U5L6LXHJcbiAgICAgICAgZW5kU2NhbGU6IHRoaXMub3B0aW9ucy5lbmRTY2FsZSwgLy/nspLlrZDlnKjmrbvkuqHml7bnmoTmr5TkvotcclxuICAgICAgICBtaW5pbXVtUGFydGljbGVMaWZlOiB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZSwgIC8v6K6+572u57KS5a2Q5a+/5ZG955qE5Y+v6IO95oyB57ut5pe26Ze055qE5pyA5bCP55WM6ZmQ77yI5Lul56eS5Li65Y2V5L2N77yJXHJcbiAgICAgICAgbWF4aW11bVBhcnRpY2xlTGlmZTogdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmUsIC8v6K6+572u57KS5a2Q5a+/5ZG955qE5Y+v6IO95oyB57ut5pe26Ze055qE5pyA5aSn55WM6ZmQ77yI5Lul56eS5Li65Y2V5L2N77yJXHJcbiAgICAgICAgbWluaW11bVNwZWVkOiB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkLC8v6K6+572u5Lul57GzL+enkuS4uuWNleS9jeeahOacgOWwj+eVjOmZkO+8jOi2hei/h+ivpeacgOWwj+eVjOmZkO+8jOmaj+acuumAieaLqeeykuWtkOeahOWunumZhemAn+W6puOAglxyXG4gICAgICAgIG1heGltdW1TcGVlZDogdGhpcy5vcHRpb25zLm1heGltdW1TcGVlZCwvL+iuvue9ruS7peexsy/np5LkuLrljZXkvY3nmoTmnIDlpKfnlYzpmZDvvIzotoXov4for6XmnIDlpKfnlYzpmZDvvIzpmo/mnLrpgInmi6nnspLlrZDnmoTlrp7pmYXpgJ/luqbjgIJcclxuICAgICAgICAvLyBpbWFnZVNpemU6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMiggIC8v5aaC5p6c6K6+572u6K+l5bGe5oCn77yM5bCG5Lya6KaG55uWIG1pbmltdW1JbWFnZVNpemXlkoxtYXhpbXVtSW1hZ2VTaXpl5bGe5oCn77yM5Lul5YOP57Sg5Li65Y2V5L2N57yp5pS+aW1hZ2XnmoTlpKflsI9cclxuICAgICAgICAvLyAgIHRoaXMub3B0aW9ucy5pbWFnZVNpemUgfHwgMTAsXHJcbiAgICAgICAgLy8gICB0aGlzLm9wdGlvbnMuaW1hZ2VTaXplIHx8IDEwXHJcbiAgICAgICAgLy8gKSxcclxuICAgICAgICBtaW5pbXVtSW1hZ2VTaXplOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF4aW11bUltYWdlU2l6ZTogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICAgICAgICApLFxyXG4gICAgICAgIHNpemVJbk1ldGVyczogdHJ1ZSxcclxuICAgICAgICBlbWlzc2lvblJhdGU6IHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUsIC8v5q+P56eS5Y+R5bCE55qE57KS5a2Q5pWw44CCXHJcbiAgICAgICAgbGlmZXRpbWU6IDAuNSwgIC8v5aSa6ZW/5pe26Ze055qE57KS5a2Q57O757uf5bCG5Lul56eS5Li65Y2V5L2N5Y+R5bCE57KS5a2QXHJcbiAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICBlbWl0dGVyOiBuZXcgQ2VzaXVtLkNpcmNsZUVtaXR0ZXIoMC4yKSxcclxuICAgICAgICBwZXJmb3JtYW5jZTogZmFsc2UsXHJcbiAgICAgICAgbW9kZWxNYXRyaXg6IG1hdHJpeCxcclxuICAgICAgICB1cGRhdGVDYWxsYmFjazogKHIpPT57XHJcbiAgICAgICAgICByLl9iaWxsYm9hcmQuaWQgPSB0aGlzLm9wdGlvbnMuaWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0uaWQgPSB0aGlzLm9wdGlvbnMuaWRcclxuICAgIHRoaXMuZW50aXR5ID0gdGhpcy5wYXJ0aWNsZVN5c3RlbVxyXG4gICAgLy8gdGhpcy5lbnRpdHkubW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5VHJhbnNsYXRpb24oQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoMTAwLjAsIDIwLjApKSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKDAuMCwgMC4wLCAxMDAwMC4wKSwgbmV3IENlc2l1bS5NYXRyaXg0KCkpXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICAvLyB0aGlzLmVkaXRPYmogPSBuZXcgRWRpdFBhcnRpY2xlKHRoaXMuc2RrLCB0aGlzLmVudGl0eSlcclxuICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZih0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICAgXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm5HlkKznm7jmnLrpq5jluqZcclxuICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuY2hhbmdlZC5hZGRFdmVudExpc3RlbmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2hvdykge1xyXG4gICAgICAgIGxldCBjYW1lcmFIZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgICBpZiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCArIDUwMCksXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXJ0Q29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3JcclxuICB9XHJcblxyXG4gIHNldCBzdGFydENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydENvbG9yID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5zdGFydENvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMuc3RhcnRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLnN0YXJ0Q29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuc3RhcnRDb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmRDb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IGVuZENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbmRDb2xvciA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0uZW5kQ29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5lbmRDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmVuZENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgcGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHYsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbmRDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3JbaV0gPSBwaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtaW5pbXVtU3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1TcGVlZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubWluaW11bVNwZWVkID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5taW5pbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZCAmJiB0aGlzLl9lbG1zLm1pbmltdW1TcGVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heGltdW1TcGVlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgbWF4aW11bVNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtU3BlZWQgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1TcGVlZCA9IHZcclxuICAgIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkICYmIHRoaXMuX2VsbXMubWF4aW11bVNwZWVkLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWluaW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1pbmltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1pbmltdW1QYXJ0aWNsZUxpZmUgJiYgdGhpcy5fZWxtcy5taW5pbXVtUGFydGljbGVMaWZlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbWF4aW11bVBhcnRpY2xlTGlmZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZVxyXG4gIH1cclxuXHJcbiAgc2V0IG1heGltdW1QYXJ0aWNsZUxpZmUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1QYXJ0aWNsZUxpZmUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm1heGltdW1QYXJ0aWNsZUxpZmUgJiYgdGhpcy5fZWxtcy5tYXhpbXVtUGFydGljbGVMaWZlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRTY2FsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IHN0YXJ0U2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLnN0YXJ0U2NhbGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLnN0YXJ0U2NhbGUgJiYgdGhpcy5fZWxtcy5zdGFydFNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZW5kU2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVuZFNjYWxlXHJcbiAgfVxyXG5cclxuICBzZXQgZW5kU2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmVuZFNjYWxlID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbmRTY2FsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW5kU2NhbGUgJiYgdGhpcy5fZWxtcy5lbmRTY2FsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVtaXNzaW9uUmF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlXHJcbiAgfVxyXG5cclxuICBzZXQgZW1pc3Npb25SYXRlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLmVtaXNzaW9uUmF0ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlICYmIHRoaXMuX2VsbXMuZW1pc3Npb25SYXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgcGFydGljbGVTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICB9XHJcblxyXG4gIHNldCBwYXJ0aWNsZVNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSA9IHZcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWluaW11bUltYWdlU2l6ZSA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMih2LCB2KVxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5tYXhpbXVtSW1hZ2VTaXplID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKHYsIHYpXHJcbiAgICB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZSAmJiB0aGlzLl9lbG1zLnBhcnRpY2xlU2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG5nXHJcbiAgfVxyXG5cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYXQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hbHQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0LCB0aGlzLm9wdGlvbnMuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3JpZ2luYWxPcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfng5/pm77lsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHBhcnRpY2xlLWVmZmVjdHMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBzdGFydENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzdGFydF9jb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5zdGFydENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbmRfY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuZW5kQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIEV2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5zdGFydENvbG9yID0gW3N0YXJ0Q29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3IgPSBbZW5kQ29sb3JQaWNrZXJdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5zdGFydENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3RhcnRDb2xvclxyXG4gICAgdGhpcy5lbmRDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmVuZENvbG9yXHJcbiAgICB0aGlzLm1pbmltdW1TcGVlZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1TcGVlZFxyXG4gICAgdGhpcy5tYXhpbXVtU3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5tYXhpbXVtU3BlZWRcclxuICAgIHRoaXMubWluaW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMubWF4aW11bVBhcnRpY2xlTGlmZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmVcclxuICAgIHRoaXMuc3RhcnRTY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnN0YXJ0U2NhbGVcclxuICAgIHRoaXMuZW5kU2NhbGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbmRTY2FsZVxyXG4gICAgdGhpcy5lbWlzc2lvblJhdGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5lbWlzc2lvblJhdGVcclxuICAgIHRoaXMucGFydGljbGVTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucGFydGljbGVTaXplXHJcbiAgICB0aGlzLmxuZyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxuZ1xyXG4gICAgdGhpcy5sYXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYXRcclxuICAgIHRoaXMuYWx0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYWx0XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICBzdXBlci5yZW1vdmUoKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KTtcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgKlxyXG4gICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAqXHJcbiAgKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uczogeyAuLi50aGlzLmVudGl0eS5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1vdlBvc1xyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBtb3ZQb3MgPSBtb3ZlbWVudC5lbmRQb3NpdGlvblxyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gcG9zaXRpb25zLmFsdFxyXG4gICAgICAgIGxldCBjYXJ0b2dyYXBoaWMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMub3B0aW9ucy5hbHQpO1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgICAgICB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKVxyXG5cclxuICAgICAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuYWx0ICYmIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYoIW1vdlBvcyB8fCBtb3ZQb3MueCAhPT0gbW92ZW1lbnQucG9zaXRpb24ueCB8fCBtb3ZQb3MueSAhPT0gbW92ZW1lbnQucG9zaXRpb24ueS0yKSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24uYWx0XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG5nID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSBwb3NpdGlvbnMuYWx0XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICB0aGlzLm9wdGlvbnMubGF0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hbHQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLmFsdCk7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgICAgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZ1xyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNtb2tlXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFwRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWhFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1FQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFwQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBckdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFzSUE7QUFDQTtBQUFBO0FBaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Smoke/index.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Spout/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Spout/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u989C\\u8272\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n \\u53D1\\u5C04\\u901F\\u7387\\uFF08\\u4E2A/\\u79D2\\uFF09\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6700\\u5C0F\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n \\u6700\\u5927\\u5B58\\u5728\\u65F6\\u95F4\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u8D77\\u59CB\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n \\u7ED3\\u675F\\u6BD4\\u4F8B\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u671D\\u5411\\n \\n
\\n
\\n
\\n
\\n \\u4FEF\\u4EF0\\u89D2\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u5C3A\\u5BF8\\uFF08\\u50CF\\u7D20\\uFF09\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL1Nwb3V0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9TcG91dC9fZWxlbWVudC5qcz9lZGZhIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAxNzVweDtcIiBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwibG5nXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57qs5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTBcIiBtYXg9XCI5MFwiIEBtb2RlbD1cImxhdFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCIgQG1vZGVsPVwiYWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6LW35aeL6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhcnRfY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW46IDA7anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue7k+adn+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuZF9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+6YCf5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzMFwiIG1pbj1cIjBcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwic3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPuWPkeWwhOmAn+eOh++8iOS4qi/np5LvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImVtaXNzaW9uUmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPuacgOWwj+WtmOWcqOaXtumXtDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWF4PVwiMTAwXCIgbWluPVwiMC4wMVwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJtaW5pbXVtUGFydGljbGVMaWZlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7mnIDlpKflrZjlnKjml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjAuMDFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwibWF4aW11bVBhcnRpY2xlTGlmZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPui1t+Wni+avlOS+izwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWF4PVwiMTBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cInN0YXJ0U2NhbGVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPue7k+adn+avlOS+izwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWF4PVwiMTBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMVwiIEBtb2RlbD1cImVuZFNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5pyd5ZCRPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzNjBcIiBtaW49XCIwLjFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwiaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+5L+v5Luw6KeS5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIzNjBcIiBtaW49XCIwLjFcIiBzdGVwPVwiMC4xXCIgQG1vZGVsPVwicGl0Y2hcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj7lsLrlr7jvvIjlg4/ntKDvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cInBhcnRpY2xlU2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBc0hBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Spout/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/ParticleEffects/Spout/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/ParticleEffects/Spout/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"./node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/ParticleEffects/Spout/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\n/**\r\n * 水柱特效\r\n */\n\n\n\n\n\n\n\n\nvar Spout = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 水柱\r\n * @param sdk \r\n * @param options {object} 粒子属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.url {string} 贴图地址\r\n * @param options.startColor=\"#c1f7f2\" {string} 起始颜色\r\n * @param options.endColor=\"#ffffff00\" {string} 结束颜色\r\n * @param options.startScale=0.2 {number} 初始比例\r\n * @param options.endScale=2 {number} 结束比例\r\n * @param options.speed {number} 速度\r\n * @param options.minimumParticleLife=12 {number} 最小存在时间(秒)\r\n * @param options.maximumParticleLife=12 {number} 最大存在时间(秒)\r\n * @param options.emissionRate=100 {number} 发射速率(个/每秒)\r\n * @param options.particleSize=1 {number} 粒子尺大小\r\n * @param options.heading 航向角\r\n * @param options.pitch 俯仰角\r\n * @param options.start {object} 开始位置\r\n * @param options.start.lng 经度\r\n * @param options.start.lat 纬度\r\n * @param options.start.alt 高度\r\n * @param options.end {object} 结束位置\r\n * @param options.end.lng 经度\r\n * @param options.end.lat 纬度\r\n * @param options.end.alt 高度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function Spout(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Spout);\n _this2 = _callSuper(this, Spout, [sdk, options]);\n _this2.options.url = options.url;\n _this2.options.startColor = options.startColor || \"#c1f7f2\";\n _this2.options.endColor = options.endColor || \"#ffffff00\";\n _this2.options.startScale = options.startScale || 0.2;\n _this2.options.endScale = options.endScale || 2;\n _this2.options.minimumParticleLife = options.minimumParticleLife || 12;\n _this2.options.maximumParticleLife = options.maximumParticleLife || 12;\n _this2.options.emissionRate = options.emissionRate || 100;\n _this2.options.particleSize = options.particleSize || 1;\n _this2.options.show = options.show === false ? false : true;\n _this2._elms = {};\n _this2.positionCallBack = null;\n _this2.rotationCallback = null;\n _this2.onClickCallback = null;\n _this2._DialogObject = null;\n _this2._element = null;\n _this2.particleSystem;\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.add();\n _this2.operate = {};\n _this2.previous = {\n positions: {\n lng: _this2.options.start.lng,\n lat: _this2.options.start.lat,\n alt: _this2.options.start.alt\n }\n };\n _this2.Dialog = _Dialog;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"](_this2.sdk);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(Spout, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Spout, [{\n key: \"type\",\n get: function get() {\n return \"ParticleEffects\";\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = this.options.show;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = this.options.show;\n }\n } else {\n if (this.entity && this.sdk.viewer.camera.positionCartographic.height < 10000000) {\n this.entity.show = false;\n }\n if (this.options.label && this.options.label.show) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"add\",\n value: function () {\n var _add = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee() {\n var _this3 = this;\n var _this, scene, cartographic, position, matrix, gravityVector, gravity, start, end, y0, x0, tanA, a, t, speed, cameraHeight, applyGravity, computeEmitterModelMatrix, getHeading;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n getHeading = function _getHeading(fromPosition, toPosition) {\n var finalPosition = new Cesium.Cartesian3();\n var matrix4 = Cesium.Transforms.eastNorthUpToFixedFrame(fromPosition);\n Cesium.Matrix4.inverse(matrix4, matrix4);\n Cesium.Matrix4.multiplyByPoint(matrix4, toPosition, finalPosition);\n Cesium.Cartesian3.normalize(finalPosition, finalPosition);\n return Cesium.Math.toDegrees(Math.atan2(finalPosition.x, finalPosition.y));\n };\n computeEmitterModelMatrix = function _computeEmitterModelM() {\n var hpr = Cesium.HeadingPitchRoll.fromDegrees(_this.options.heading + 90, _this.options.pitch, 0); //!!!发射粒子的方向\n var trs = new Cesium.TranslationRotationScale();\n trs.translation = Cesium.Cartesian3.fromElements(0, 0, 1);\n trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr);\n var Matrix4 = Cesium.Matrix4.fromTranslationRotationScale(trs);\n return Matrix4;\n };\n applyGravity = function _applyGravity(p, dt) {\n p._billboard.id = _this.options.id;\n var position = p.position;\n Cesium.Cartesian3.normalize(position, gravityVector);\n // Cesium.Cartesian3.multiplyByScalar(gravityVector, -4.8 * dt, gravityVector);\n Cesium.Cartesian3.multiplyByScalar(gravityVector, gravity * dt, gravityVector);\n p.velocity = Cesium.Cartesian3.add(p.velocity, gravityVector, p.velocity);\n };\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n scene = this.sdk.viewer.scene;\n cartographic = Cesium.Cartographic.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(1, 1, 1), matrix);\n gravityVector = new Cesium.Cartesian3();\n gravity = -3.8; // 重力方向\n start = Cesium.Cartesian3.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n end = Cesium.Cartesian3.fromDegrees(this.options.end.lng, this.options.end.lat, this.options.end.alt);\n if (!this.options.heading && this.options.heading !== 0) {\n this.options.heading = getHeading(start, end);\n }\n y0 = this.options.end.alt - this.options.start.alt;\n x0 = Cesium.Cartesian3.distance(start, Cesium.Cartesian3.fromDegrees(this.options.end.lng, this.options.end.lat, this.options.start.alt));\n if (!y0) {\n tanA = 0;\n } else {\n tanA = 2 * y0 / x0;\n }\n a = Math.atan(tanA) * (180 / Math.PI);\n t = Math.sqrt(Math.abs(tanA) * x0 / -gravity);\n speed = -gravity * t / Math.abs(Math.cos(a));\n if (!this.options.pitch && this.options.pitch !== 0) {\n this.options.pitch = 90 - a;\n }\n if (!this.options.speed && this.options.speed !== 0) {\n this.options.speed = speed;\n }\n cameraHeight = this.sdk.viewer.camera.positionCartographic.height; // // 计算发射参数\n // function calculateLaunchParameters(height, distance, gravity) {\n // // 解决斜抛运动问题:y = h + x·tan(θ) - (g·x²)/(2·v₀²·cos²(θ))\n // // 当 y = 0, x = distance 时,求解 v₀ 和 θ\n // // 简化计算,使用最优角度 θ = 45°\n // const angle = Cesium.Math.toRadians(45);\n // // 计算初始速度\n // const velocity = Math.sqrt((gravity * distance * distance) /\n // (2 * (height + distance * Math.tan(angle)) * Math.pow(Math.cos(angle), 2)));\n // // 计算飞行时间\n // const vy0 = velocity * Math.sin(angle);\n // const flightTime = (vy0 + Math.sqrt(vy0 * vy0 + 2 * gravity * height)) / gravity;\n // // 计算最大高度\n // const maxHeight = height + (vy0 * vy0) / (2 * gravity);\n // return { velocity, angle, flightTime, maxHeight };\n // }\n // let params = {\n // launchHeight: this.options.start.alt, // 发射高度\n // targetDistance: Cesium.Cartesian3.distance(start, end), // 目标距离\n // gravity: 9.8, // 重力\n // }\n // // 计算初始速度和发射角度\n // const { velocity, angle, flightTime, maxHeight } = calculateLaunchParameters(\n // params.launchHeight,\n // params.targetDistance,\n // params.gravity\n // );\n // if (!this.options.speed && this.options.speed !== 0) {\n // this.options.speed = velocity*10\n // }\n this.particleSystem = scene.primitives.add(new Cesium.ParticleSystem({\n show: cameraHeight >= 10000000 ? false : this.options.show,\n image: this.options.url || this.getSourceRootPath() + '/img/particlesystem/smoke.png',\n // 从绿色到白色淡出\n startColor: Cesium.Color.fromCssColorString(this.options.startColor),\n //粒子出生时的颜色\n endColor: Cesium.Color.fromCssColorString(this.options.endColor),\n //当粒子死亡时的颜色\n startScale: this.options.startScale,\n //粒子出生时的比例\n endScale: this.options.endScale,\n //粒子在死亡时的比例\n minimumParticleLife: this.options.minimumParticleLife,\n //设置粒子寿命的可能持续时间的最小界限(以秒为单位)\n maximumParticleLife: this.options.maximumParticleLife,\n //设置粒子寿命的可能持续时间的最大界限(以秒为单位)\n minimumSpeed: this.options.speed,\n //设置以米/秒为单位的最小界限,超过该最小界限,随机选择粒子的实际速度。\n maximumSpeed: this.options.speed,\n //设置以米/秒为单位的最大界限,超过该最大界限,随机选择粒子的实际速度。\n // imageSize: new Cesium.Cartesian2( //如果设置该属性,将会覆盖 minimumImageSize和maximumImageSize属性,以像素为单位缩放image的大小\n // this.options.imageSize || 10,\n // this.options.imageSize || 10\n // ),\n lifetime: 0.5,\n imageSize: new Cesium.Cartesian2(this.options.particleSize, this.options.particleSize * 2),\n sizeInMeters: true,\n emissionRate: this.options.emissionRate,\n //每秒发射的粒子数。\n loop: true,\n emitter: new Cesium.CircleEmitter(0.2),\n modelMatrix: matrix,\n emitterModelMatrix: computeEmitterModelMatrix(),\n // 发射器转换为世界坐标\n\n // 增加重力场影像,\n updateCallback: applyGravity\n }));\n\n // 计算粒子发射器的位置姿态\n\n // 根据两个坐标点,获取Heading(朝向)\n\n // this.entity.modelMatrix\n this.particleSystem.id = this.options.id;\n this.entity = this.particleSystem;\n // this.entity.modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(100.0, 20.0)), new Cesium.Cartesian3(0.0, 0.0, 10000.0), new Cesium.Matrix4())\n this.entity.position = {\n lng: this.options.start.lng,\n lat: this.options.start.lat,\n alt: this.options.start.alt\n };\n // this.editObj = new EditParticle(this.sdk, this.entity)\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(this.sdk, this.options.id);\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"setSplitDirection\"])(0, this.options.id);\n }\n\n // 监听相机高度\n this.sdk.viewer.camera.changed.addEventListener(function () {\n if (_this3.entity && _this3.show) {\n var _cameraHeight = _this3.sdk.viewer.camera.positionCartographic.height;\n if (_cameraHeight >= 10000000) {\n _this3.entity.show = false;\n } else {\n _this3.entity.show = true;\n }\n }\n });\n\n // this.translation = new Cesium.Cartesian3();\n // this.rotation = new Cesium.Quaternion();\n // this.hpr = new Cesium.HeadingPitchRoll();\n // this.trs = new Cesium.TranslationRotationScale();\n // this.emitterModelMatrix = new Cesium.Matrix4();\n // this.hpr = Cesium.HeadingPitchRoll.fromDegrees(60, 0.0, 0.0, this.hpr);\n // this.trs.translation = Cesium.Cartesian3.fromElements(0, 0, 0, this.translation);\n // this.trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(this.hpr, this.rotation);\n // this.particleSystem.emitterModelMatrix = Cesium.Matrix4.fromTranslationRotationScale(this.trs, this.emitterModelMatrix);\n case 31:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function add() {\n return _add.apply(this, arguments);\n }\n return add;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_16__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.line && this.options.line.positions) {\n position = _objectSpread({}, this.options.line.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 16;\n break;\n }\n _context2.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context2.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 24;\n break;\n case 23:\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt + 500),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 24:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"startColor\",\n get: function get() {\n return this.options.startColor;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.startColor = v;\n this.particleSystem.startColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.startColor) {\n this._elms.startColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.startColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.startColor[i] = picker;\n });\n }\n }\n }, {\n key: \"endColor\",\n get: function get() {\n return this.options.endColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.endColor = v;\n this.particleSystem.endColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.endColor) {\n this._elms.endColor.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this5.endColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.endColor[i] = picker;\n });\n }\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = Number(v);\n this.particleSystem.minimumSpeed = Number(v);\n this.particleSystem.maximumSpeed = Number(v);\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"minimumParticleLife\",\n get: function get() {\n return this.options.minimumParticleLife;\n },\n set: function set(v) {\n this.options.minimumParticleLife = Number(v);\n this.particleSystem.minimumParticleLife = Number(v);\n this._elms.minimumParticleLife && this._elms.minimumParticleLife.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"maximumParticleLife\",\n get: function get() {\n return this.options.maximumParticleLife;\n },\n set: function set(v) {\n this.options.maximumParticleLife = Number(v);\n this.particleSystem.maximumParticleLife = Number(v);\n this._elms.maximumParticleLife && this._elms.maximumParticleLife.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"startScale\",\n get: function get() {\n return this.options.startScale;\n },\n set: function set(v) {\n this.options.startScale = Number(v);\n this.particleSystem.startScale = Number(v);\n this._elms.startScale && this._elms.startScale.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"endScale\",\n get: function get() {\n return this.options.endScale;\n },\n set: function set(v) {\n this.options.endScale = Number(v);\n this.particleSystem.endScale = Number(v);\n this._elms.endScale && this._elms.endScale.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"emissionRate\",\n get: function get() {\n return this.options.emissionRate;\n },\n set: function set(v) {\n this.options.emissionRate = Number(v);\n this.particleSystem.emissionRate = Number(v);\n this._elms.emissionRate && this._elms.emissionRate.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"particleSize\",\n get: function get() {\n return this.options.particleSize;\n },\n set: function set(v) {\n this.options.particleSize = Number(v);\n this.particleSystem.minimumImageSize = new Cesium.Cartesian2(Number(v), Number(v) * 2);\n this.particleSystem.maximumImageSize = new Cesium.Cartesian2(Number(v), Number(v) * 2);\n this._elms.particleSize && this._elms.particleSize.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.start.lng;\n },\n set: function set(v) {\n this.options.start.lng = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.start.lng,\n lat: this.options.start.lat,\n alt: this.options.start.alt\n };\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.start.lat;\n },\n set: function set(v) {\n this.options.start.lat = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.start.lng,\n lat: this.options.start.lat,\n alt: this.options.start.alt\n };\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.start.alt;\n },\n set: function set(v) {\n this.options.start.alt = v;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this.entity.position = {\n lng: this.options.start.lng,\n lat: this.options.start.lat,\n alt: this.options.start.alt\n };\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"heading\",\n get: function get() {\n return this.options.heading;\n },\n set: function set(v) {\n this.options.heading = Number(v);\n var hpr = Cesium.HeadingPitchRoll.fromDegrees(this.options.heading + 90, this.options.pitch, 0); //!!!发射粒子的方向\n var trs = new Cesium.TranslationRotationScale();\n trs.translation = Cesium.Cartesian3.fromElements(0, 0, 1);\n trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr);\n var Matrix4 = Cesium.Matrix4.fromTranslationRotationScale(trs);\n this.particleSystem.emitterModelMatrix = Matrix4;\n this._elms.heading && this._elms.heading.forEach(function (item) {\n item.value = Number(v);\n });\n }\n }, {\n key: \"pitch\",\n get: function get() {\n return this.options.pitch;\n },\n set: function set(v) {\n this.options.pitch = Number(v);\n var hpr = Cesium.HeadingPitchRoll.fromDegrees(this.options.heading + 90, this.options.pitch, 0); //!!!发射粒子的方向\n var trs = new Cesium.TranslationRotationScale();\n trs.translation = Cesium.Cartesian3.fromElements(0, 0, 1);\n trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr);\n var Matrix4 = Cesium.Matrix4.fromTranslationRotationScale(trs);\n this.particleSystem.emitterModelMatrix = Matrix4;\n this._elms.pitch && this._elms.pitch.forEach(function (item) {\n item.value = Number(v);\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n var _this6 = this;\n var state,\n _this,\n contentElm,\n startColorPicker,\n endColorPicker,\n all_elm,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n state = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context3.next = 20;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.originalOptions, {\n title: '喷射水柱属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this6.name = _this6.name.trim();\n if (!_this6.name) {\n _this6.name = '未命名对象';\n }\n _this6.originalOptions = _this6.deepCopyObj(_this6.options);\n _this6._DialogObject.close();\n _this6.Dialog.confirmCallBack && _this6.Dialog.confirmCallBack(_this6.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(_this6.sdk, _this6.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_15__[\"syncSplitData\"])(_this6.sdk, _this6.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this6.reset();\n _this6.Dialog.resetCallBack && _this6.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this6.Dialog.removeCallBack && _this6.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this6.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this6.positionEditing = false;\n _this6.Dialog.closeCallBack && _this6.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this6.show = show;\n _this6.Dialog.showCallBack && _this6.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this6.positionEditing = !_this6.positionEditing;\n }\n }, true);\n case 7:\n this._DialogObject = _context3.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' particle-effects';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n startColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"start_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.startColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.startColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.startColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n endColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"end_color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.endColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.endColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.endColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n Spout.EventBinding(this, all_elm);\n this._elms.startColor = [startColorPicker];\n this._elms.endColor = [endColorPicker];\n _context3.next = 20;\n break;\n case 20:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.name = this.originalOptions.name;\n this.startColor = this.originalOptions.startColor;\n this.endColor = this.originalOptions.endColor;\n this.speed = this.originalOptions.speed;\n this.minimumParticleLife = this.originalOptions.minimumParticleLife;\n this.maximumParticleLife = this.originalOptions.maximumParticleLife;\n this.startScale = this.originalOptions.startScale;\n this.endScale = this.originalOptions.endScale;\n this.emissionRate = this.originalOptions.emissionRate;\n this.particleSize = this.originalOptions.particleSize;\n this.lng = this.originalOptions.start.lng;\n this.lat = this.originalOptions.start.lat;\n this.alt = this.originalOptions.start.alt;\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _superPropGet(Spout, \"remove\", this, 3)([]);\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context4.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context4.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_13__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this7 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.picking = false;\n this.previous = {\n positions: _objectSpread({}, this.entity.position)\n };\n var movPos;\n this.event.mouse_move(function (movement, cartesian) {\n movPos = movement.endPosition;\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.start.lng = positions.lng;\n _this7.options.start.lat = positions.lat;\n _this7.options.start.alt = positions.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(_this7.options.start.lng, _this7.options.start.lat, _this7.options.start.alt);\n var position = _this7.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n _this7.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n _this7._elms.lng && _this7._elms.lng.forEach(function (item) {\n item.value = _this7.options.start.lng;\n });\n _this7._elms.lat && _this7._elms.lat.forEach(function (item) {\n item.value = _this7.options.start.lat;\n });\n _this7._elms.alt && _this7._elms.alt.forEach(function (item) {\n item.value = _this7.options.start.alt;\n });\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n if (!movPos || movPos.x !== movement.position.x || movPos.y !== movement.position.y - 2) {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.start.lng = positions.lng;\n _this7.options.start.lat = positions.lat;\n _this7.options.start.alt = positions.alt;\n }\n _this7.entity.position = {\n lng: _this7.options.start.lng,\n lat: _this7.options.start.lat,\n alt: _this7.options.start.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.options.start.lng = _this7.entity.position.lng;\n _this7.options.start.lat = _this7.entity.position.lat;\n _this7.options.start.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this7.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this7.options.lng = _this7.entity.position.lng;\n _this7.options.lat = _this7.entity.position.lat;\n _this7.options.alt = _this7.entity.position.alt;\n _this7.positionEditing = false;\n } else {\n var positions = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.options.lng = positions.lng;\n _this7.options.lat = positions.lat;\n _this7.options.alt = positions.alt;\n _this7.entity.position = {\n lng: _this7.options.lng,\n lat: _this7.options.lat,\n alt: _this7.options.alt\n };\n _this7.previous = {\n positions: _objectSpread({}, _this7.entity.position)\n };\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n }\n });\n });\n } else {\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.start.lng = this.entity.position.lng;\n this.options.start.lat = this.entity.position.lat;\n this.options.start.alt = this.entity.position.alt;\n var cartographic = Cesium.Cartographic.fromDegrees(this.options.start.lng, this.options.start.lat, this.options.start.alt);\n var position = this.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n this.entity.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = _this7.options.start.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = _this7.options.start.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = _this7.options.start.alt;\n });\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Spout);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGFydGljbGVFZmZlY3RzL1Nwb3V0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BhcnRpY2xlRWZmZWN0cy9TcG91dC9pbmRleC5qcz81YWFmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDmsLTmn7HnibnmlYhcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sLCBjc3MgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vaW5kZXhcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCB7IHN5bmNEYXRhLCBnZXRTZGsgYXMgZ2V0MkRTZGsgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgU3BvdXQgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAZGVzY3JpcHRpb24g5rC05p+xXHJcbiAgICogQHBhcmFtIHNkayBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDnspLlrZDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDmoIfms6hpZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMudXJsIHtzdHJpbmd9IOi0tOWbvuWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0Q29sb3I9XCIjYzFmN2YyXCIge3N0cmluZ30g6LW35aeL6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZW5kQ29sb3I9XCIjZmZmZmZmMDBcIiB7c3RyaW5nfSDnu5PmnZ/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zdGFydFNjYWxlPTAuMiB7bnVtYmVyfSDliJ3lp4vmr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5lbmRTY2FsZT0yIHtudW1iZXJ9IOe7k+adn+avlOS+i1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNwZWVkIHtudW1iZXJ9IOmAn+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmU9MTIge251bWJlcn0g5pyA5bCP5a2Y5Zyo5pe26Ze0KOenkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlPTEyIHtudW1iZXJ9IOacgOWkp+WtmOWcqOaXtumXtCjnp5IpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZW1pc3Npb25SYXRlPTEwMCB7bnVtYmVyfSDlj5HlsITpgJ/njoco5LiqL+avj+enkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWNsZVNpemU9MSB7bnVtYmVyfSDnspLlrZDlsLrlpKflsI9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFkaW5nIOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBpdGNoIOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0IHtvYmplY3R9IOW8gOWni+S9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0LmxuZyDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zdGFydC5sYXQg57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3RhcnQuYWx0IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVuZCB7b2JqZWN0fSDnu5PmnZ/kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5lbmQubG5nIOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmVuZC5sYXQg57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZW5kLmFsdCDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucywgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsXHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhcnRDb2xvciA9IG9wdGlvbnMuc3RhcnRDb2xvciB8fCBcIiNjMWY3ZjJcIlxyXG4gICAgdGhpcy5vcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBcIiNmZmZmZmYwMFwiXHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhcnRTY2FsZSA9IG9wdGlvbnMuc3RhcnRTY2FsZSB8fCAwLjJcclxuICAgIHRoaXMub3B0aW9ucy5lbmRTY2FsZSA9IG9wdGlvbnMuZW5kU2NhbGUgfHwgMlxyXG4gICAgdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSBvcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUgfHwgMTJcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlID0gb3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlIHx8IDEyXHJcbiAgICB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlID0gb3B0aW9ucy5lbWlzc2lvblJhdGUgfHwgMTAwXHJcbiAgICB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplID0gb3B0aW9ucy5wYXJ0aWNsZVNpemUgfHwgMVxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLnBvc2l0aW9uQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnJvdGF0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB0aGlzLm9uQ2xpY2tDYWxsYmFjayA9IG51bGxcclxuICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgdGhpcy5hZGQoKVxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uczoge1xyXG4gICAgICAgIGxuZzogdGhpcy5vcHRpb25zLnN0YXJ0LmxuZyxcclxuICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5zdGFydC5sYXQsXHJcbiAgICAgICAgYWx0OiB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0LFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIFwiUGFydGljbGVFZmZlY3RzXCJcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGxldCBzZGtEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmICghdGhpcy5pc1Nob3dWaWV3IHx8ICFzZGtEKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMyB8fCAhc2RrRCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodCA8IDEwMDAwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAmJiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdykge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0IDwgMTAwMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93KSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4pIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bi5jaGVja2VkID0gdlxyXG4gICAgICB9XHJcbiAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgdGhpcy5pc1Nob3dWaWV3ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmU7XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygxLCAxLCAxKSwgbWF0cml4KVxyXG5cclxuICAgIGxldCBncmF2aXR5VmVjdG9yID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICBsZXQgZ3Jhdml0eSA9IC0zLjg7Ly8g6YeN5Yqb5pa55ZCRXHJcblxyXG4gICAgbGV0IHN0YXJ0ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnN0YXJ0LmxuZywgdGhpcy5vcHRpb25zLnN0YXJ0LmxhdCwgdGhpcy5vcHRpb25zLnN0YXJ0LmFsdClcclxuICAgIGxldCBlbmQgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuZW5kLmxuZywgdGhpcy5vcHRpb25zLmVuZC5sYXQsIHRoaXMub3B0aW9ucy5lbmQuYWx0KVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaGVhZGluZyAmJiB0aGlzLm9wdGlvbnMuaGVhZGluZyAhPT0gMCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVhZGluZyA9IGdldEhlYWRpbmcoc3RhcnQsIGVuZClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeTAgPSB0aGlzLm9wdGlvbnMuZW5kLmFsdCAtIHRoaXMub3B0aW9ucy5zdGFydC5hbHRcclxuICAgIGxldCB4MCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHN0YXJ0LCBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuZW5kLmxuZywgdGhpcy5vcHRpb25zLmVuZC5sYXQsIHRoaXMub3B0aW9ucy5zdGFydC5hbHQpKVxyXG4gICAgbGV0IHRhbkFcclxuICAgIGlmICgheTApIHtcclxuICAgICAgdGFuQSA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YW5BID0gMiAqIHkwIC8geDBcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYSA9IE1hdGguYXRhbih0YW5BKSAqICgxODAgLyBNYXRoLlBJKTtcclxuXHJcbiAgICBsZXQgdCA9IE1hdGguc3FydCgoTWF0aC5hYnModGFuQSkgKiB4MCkgLyAtZ3Jhdml0eSlcclxuICAgIGxldCBzcGVlZCA9IC1ncmF2aXR5ICogdCAvIE1hdGguYWJzKE1hdGguY29zKGEpKVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucGl0Y2ggJiYgdGhpcy5vcHRpb25zLnBpdGNoICE9PSAwKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5waXRjaCA9IDkwIC0gYVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3BlZWQgJiYgdGhpcy5vcHRpb25zLnNwZWVkICE9PSAwKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IHNwZWVkXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNhbWVyYUhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0O1xyXG5cclxuXHJcblxyXG4gICAgLy8gLy8g6K6h566X5Y+R5bCE5Y+C5pWwXHJcbiAgICAvLyBmdW5jdGlvbiBjYWxjdWxhdGVMYXVuY2hQYXJhbWV0ZXJzKGhlaWdodCwgZGlzdGFuY2UsIGdyYXZpdHkpIHtcclxuICAgIC8vICAgLy8g6Kej5Yaz5pac5oqb6L+Q5Yqo6Zeu6aKY77yaeSA9IGggKyB4wrd0YW4ozrgpIC0gKGfCt3jCsikvKDLCt3bigoDCssK3Y29zwrIozrgpKVxyXG4gICAgLy8gICAvLyDlvZMgeSA9IDAsIHggPSBkaXN0YW5jZSDml7bvvIzmsYLop6MgduKCgCDlkowgzrhcclxuXHJcbiAgICAvLyAgIC8vIOeugOWMluiuoeeul++8jOS9v+eUqOacgOS8mOinkuW6piDOuCA9IDQ1wrBcclxuICAgIC8vICAgY29uc3QgYW5nbGUgPSBDZXNpdW0uTWF0aC50b1JhZGlhbnMoNDUpO1xyXG5cclxuICAgIC8vICAgLy8g6K6h566X5Yid5aeL6YCf5bqmXHJcbiAgICAvLyAgIGNvbnN0IHZlbG9jaXR5ID0gTWF0aC5zcXJ0KChncmF2aXR5ICogZGlzdGFuY2UgKiBkaXN0YW5jZSkgL1xyXG4gICAgLy8gICAgICgyICogKGhlaWdodCArIGRpc3RhbmNlICogTWF0aC50YW4oYW5nbGUpKSAqIE1hdGgucG93KE1hdGguY29zKGFuZ2xlKSwgMikpKTtcclxuXHJcbiAgICAvLyAgIC8vIOiuoeeul+mjnuihjOaXtumXtFxyXG4gICAgLy8gICBjb25zdCB2eTAgPSB2ZWxvY2l0eSAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgY29uc3QgZmxpZ2h0VGltZSA9ICh2eTAgKyBNYXRoLnNxcnQodnkwICogdnkwICsgMiAqIGdyYXZpdHkgKiBoZWlnaHQpKSAvIGdyYXZpdHk7XHJcblxyXG4gICAgLy8gICAvLyDorqHnrpfmnIDlpKfpq5jluqZcclxuICAgIC8vICAgY29uc3QgbWF4SGVpZ2h0ID0gaGVpZ2h0ICsgKHZ5MCAqIHZ5MCkgLyAoMiAqIGdyYXZpdHkpO1xyXG5cclxuICAgIC8vICAgcmV0dXJuIHsgdmVsb2NpdHksIGFuZ2xlLCBmbGlnaHRUaW1lLCBtYXhIZWlnaHQgfTtcclxuICAgIC8vIH1cclxuICAgIC8vIGxldCBwYXJhbXMgPSB7XHJcbiAgICAvLyAgIGxhdW5jaEhlaWdodDogdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCwgLy8g5Y+R5bCE6auY5bqmXHJcbiAgICAvLyAgIHRhcmdldERpc3RhbmNlOiBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShzdGFydCwgZW5kKSwgLy8g55uu5qCH6Led56a7XHJcbiAgICAvLyAgIGdyYXZpdHk6IDkuOCwgLy8g6YeN5YqbXHJcbiAgICAvLyB9XHJcbiAgICAvLyAvLyDorqHnrpfliJ3lp4vpgJ/luqblkozlj5HlsITop5LluqZcclxuICAgIC8vIGNvbnN0IHsgdmVsb2NpdHksIGFuZ2xlLCBmbGlnaHRUaW1lLCBtYXhIZWlnaHQgfSA9IGNhbGN1bGF0ZUxhdW5jaFBhcmFtZXRlcnMoXHJcbiAgICAvLyAgIHBhcmFtcy5sYXVuY2hIZWlnaHQsXHJcbiAgICAvLyAgIHBhcmFtcy50YXJnZXREaXN0YW5jZSxcclxuICAgIC8vICAgcGFyYW1zLmdyYXZpdHlcclxuICAgIC8vICk7XHJcblxyXG4gICAgLy8gaWYgKCF0aGlzLm9wdGlvbnMuc3BlZWQgJiYgdGhpcy5vcHRpb25zLnNwZWVkICE9PSAwKSB7XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IHZlbG9jaXR5KjEwXHJcbiAgICAvLyB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbSA9IHNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICBuZXcgQ2VzaXVtLlBhcnRpY2xlU3lzdGVtKHtcclxuICAgICAgICBzaG93OiAoY2FtZXJhSGVpZ2h0ID49IDEwMDAwMDAwKSA/IGZhbHNlIDogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgICAgaW1hZ2U6IHRoaXMub3B0aW9ucy51cmwgfHwgKHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BhcnRpY2xlc3lzdGVtL3Ntb2tlLnBuZycpLFxyXG4gICAgICAgIC8vIOS7jue7v+iJsuWIsOeZveiJsua3oeWHulxyXG4gICAgICAgIHN0YXJ0Q29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IpLCAvL+eykuWtkOWHuueUn+aXtueahOminOiJslxyXG4gICAgICAgIGVuZENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5lbmRDb2xvciksIC8v5b2T57KS5a2Q5q275Lqh5pe255qE6aKc6ImyXHJcbiAgICAgICAgc3RhcnRTY2FsZTogdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGUsICAvL+eykuWtkOWHuueUn+aXtueahOavlOS+i1xyXG4gICAgICAgIGVuZFNjYWxlOiB0aGlzLm9wdGlvbnMuZW5kU2NhbGUsIC8v57KS5a2Q5Zyo5q275Lqh5pe255qE5q+U5L6LXHJcbiAgICAgICAgbWluaW11bVBhcnRpY2xlTGlmZTogdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmUsICAvL+iuvue9rueykuWtkOWvv+WRveeahOWPr+iDveaMgee7reaXtumXtOeahOacgOWwj+eVjOmZkO+8iOS7peenkuS4uuWNleS9je+8iVxyXG4gICAgICAgIG1heGltdW1QYXJ0aWNsZUxpZmU6IHRoaXMub3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlLCAvL+iuvue9rueykuWtkOWvv+WRveeahOWPr+iDveaMgee7reaXtumXtOeahOacgOWkp+eVjOmZkO+8iOS7peenkuS4uuWNleS9je+8iVxyXG4gICAgICAgIG1pbmltdW1TcGVlZDogdGhpcy5vcHRpb25zLnNwZWVkLC8v6K6+572u5Lul57GzL+enkuS4uuWNleS9jeeahOacgOWwj+eVjOmZkO+8jOi2hei/h+ivpeacgOWwj+eVjOmZkO+8jOmaj+acuumAieaLqeeykuWtkOeahOWunumZhemAn+W6puOAglxyXG4gICAgICAgIG1heGltdW1TcGVlZDogdGhpcy5vcHRpb25zLnNwZWVkLC8v6K6+572u5Lul57GzL+enkuS4uuWNleS9jeeahOacgOWkp+eVjOmZkO+8jOi2hei/h+ivpeacgOWkp+eVjOmZkO+8jOmaj+acuumAieaLqeeykuWtkOeahOWunumZhemAn+W6puOAglxyXG4gICAgICAgIC8vIGltYWdlU2l6ZTogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKCAgLy/lpoLmnpzorr7nva7or6XlsZ7mgKfvvIzlsIbkvJropobnm5YgbWluaW11bUltYWdlU2l6ZeWSjG1heGltdW1JbWFnZVNpemXlsZ7mgKfvvIzku6Xlg4/ntKDkuLrljZXkvY3nvKnmlL5pbWFnZeeahOWkp+Wwj1xyXG4gICAgICAgIC8vICAgdGhpcy5vcHRpb25zLmltYWdlU2l6ZSB8fCAxMCxcclxuICAgICAgICAvLyAgIHRoaXMub3B0aW9ucy5pbWFnZVNpemUgfHwgMTBcclxuICAgICAgICAvLyApLFxyXG4gICAgICAgIGxpZmV0aW1lOiAwLjUsXHJcbiAgICAgICAgaW1hZ2VTaXplOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIodGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSwgdGhpcy5vcHRpb25zLnBhcnRpY2xlU2l6ZSAqIDIpLFxyXG4gICAgICAgIHNpemVJbk1ldGVyczogdHJ1ZSxcclxuICAgICAgICBlbWlzc2lvblJhdGU6IHRoaXMub3B0aW9ucy5lbWlzc2lvblJhdGUsIC8v5q+P56eS5Y+R5bCE55qE57KS5a2Q5pWw44CCXHJcbiAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICBlbWl0dGVyOiBuZXcgQ2VzaXVtLkNpcmNsZUVtaXR0ZXIoMC4yKSxcclxuICAgICAgICBtb2RlbE1hdHJpeDogbWF0cml4LFxyXG4gICAgICAgIGVtaXR0ZXJNb2RlbE1hdHJpeDogY29tcHV0ZUVtaXR0ZXJNb2RlbE1hdHJpeCgpLC8vIOWPkeWwhOWZqOi9rOaNouS4uuS4lueVjOWdkOagh1xyXG5cclxuICAgICAgICAvLyDlop7liqDph43lipvlnLrlvbHlg4/vvIxcclxuICAgICAgICB1cGRhdGVDYWxsYmFjazogYXBwbHlHcmF2aXR5LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseUdyYXZpdHkocCwgZHQpIHtcclxuICAgICAgcC5fYmlsbGJvYXJkLmlkID0gX3RoaXMub3B0aW9ucy5pZFxyXG4gICAgICBsZXQgcG9zaXRpb24gPSBwLnBvc2l0aW9uO1xyXG4gICAgICBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUocG9zaXRpb24sIGdyYXZpdHlWZWN0b3IpO1xyXG4gICAgICAvLyBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKGdyYXZpdHlWZWN0b3IsIC00LjggKiBkdCwgZ3Jhdml0eVZlY3Rvcik7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm11bHRpcGx5QnlTY2FsYXIoZ3Jhdml0eVZlY3RvciwgZ3Jhdml0eSAqIGR0LCBncmF2aXR5VmVjdG9yKTtcclxuICAgICAgcC52ZWxvY2l0eSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmFkZChwLnZlbG9jaXR5LCBncmF2aXR5VmVjdG9yLCBwLnZlbG9jaXR5KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8g6K6h566X57KS5a2Q5Y+R5bCE5Zmo55qE5L2N572u5ae/5oCBXHJcbiAgICBmdW5jdGlvbiBjb21wdXRlRW1pdHRlck1vZGVsTWF0cml4KCkge1xyXG4gICAgICBsZXQgaHByID0gQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXMoX3RoaXMub3B0aW9ucy5oZWFkaW5nICsgOTAsIF90aGlzLm9wdGlvbnMucGl0Y2gsIDApOy8vISEh5Y+R5bCE57KS5a2Q55qE5pa55ZCRXHJcbiAgICAgIGxldCB0cnMgPSBuZXcgQ2VzaXVtLlRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSgpO1xyXG4gICAgICB0cnMudHJhbnNsYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRWxlbWVudHMoMCwgMCwgMSk7XHJcbiAgICAgIHRycy5yb3RhdGlvbiA9IENlc2l1bS5RdWF0ZXJuaW9uLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGhwcik7XHJcbiAgICAgIGxldCBNYXRyaXg0ID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSh0cnMpO1xyXG4gICAgICByZXR1cm4gTWF0cml4NFxyXG4gICAgfVxyXG5cclxuICAgIC8vIOagueaNruS4pOS4quWdkOagh+eCuSzojrflj5ZIZWFkaW5nKOacneWQkSlcclxuICAgIGZ1bmN0aW9uIGdldEhlYWRpbmcoZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKSB7XHJcbiAgICAgIGxldCBmaW5hbFBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICAgIGxldCBtYXRyaXg0ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoZnJvbVBvc2l0aW9uKTtcclxuICAgICAgQ2VzaXVtLk1hdHJpeDQuaW52ZXJzZShtYXRyaXg0LCBtYXRyaXg0KTtcclxuICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KG1hdHJpeDQsIHRvUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pO1xyXG4gICAgICBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZmluYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbik7XHJcbiAgICAgIHJldHVybiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoTWF0aC5hdGFuMihmaW5hbFBvc2l0aW9uLngsIGZpbmFsUG9zaXRpb24ueSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeFxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5pZCA9IHRoaXMub3B0aW9ucy5pZFxyXG4gICAgdGhpcy5lbnRpdHkgPSB0aGlzLnBhcnRpY2xlU3lzdGVtXHJcbiAgICAvLyB0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlUcmFuc2xhdGlvbihDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygxMDAuMCwgMjAuMCkpLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMC4wLCAwLjAsIDEwMDAwLjApLCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSlcclxuICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5zdGFydC5sbmcsIGxhdDogdGhpcy5vcHRpb25zLnN0YXJ0LmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0IH1cclxuICAgIC8vIHRoaXMuZWRpdE9iaiA9IG5ldyBFZGl0UGFydGljbGUodGhpcy5zZGssIHRoaXMuZW50aXR5KVxyXG4gICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcblxyXG4gICAgLy8g55uR5ZCs55u45py66auY5bqmXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmNoYW5nZWQuYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0aGlzLnNob3cpIHtcclxuICAgICAgICBsZXQgY2FtZXJhSGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYy5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKGNhbWVyYUhlaWdodCA+PSAxMDAwMDAwMCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkuc2hvdyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyB0aGlzLnRyYW5zbGF0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCk7XHJcbiAgICAvLyB0aGlzLnJvdGF0aW9uID0gbmV3IENlc2l1bS5RdWF0ZXJuaW9uKCk7XHJcbiAgICAvLyB0aGlzLmhwciA9IG5ldyBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbCgpO1xyXG4gICAgLy8gdGhpcy50cnMgPSBuZXcgQ2VzaXVtLlRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSgpO1xyXG4gICAgLy8gdGhpcy5lbWl0dGVyTW9kZWxNYXRyaXggPSBuZXcgQ2VzaXVtLk1hdHJpeDQoKTtcclxuICAgIC8vIHRoaXMuaHByID0gQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXMoNjAsIDAuMCwgMC4wLCB0aGlzLmhwcik7XHJcbiAgICAvLyB0aGlzLnRycy50cmFuc2xhdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21FbGVtZW50cygwLCAwLCAwLCB0aGlzLnRyYW5zbGF0aW9uKTtcclxuICAgIC8vIHRoaXMudHJzLnJvdGF0aW9uID0gQ2VzaXVtLlF1YXRlcm5pb24uZnJvbUhlYWRpbmdQaXRjaFJvbGwodGhpcy5ocHIsIHRoaXMucm90YXRpb24pO1xyXG4gICAgLy8gdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbWl0dGVyTW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKHRoaXMudHJzLCB0aGlzLmVtaXR0ZXJNb2RlbE1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5saW5lICYmIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0ICsgNTAwKSxcclxuICAgICAgICBvcmllbnRhdGlvbjogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnRDb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IHN0YXJ0Q29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0Q29sb3IgPSB2XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLnN0YXJ0Q29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5zdGFydENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuc3RhcnRDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IHBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5zdGFydENvbG9yW2ldID0gcGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZW5kQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVuZENvbG9yXHJcbiAgfVxyXG5cclxuICBzZXQgZW5kQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmVuZENvbG9yID0gdlxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbmRDb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodilcclxuICAgIGlmICh0aGlzLl9lbG1zLmVuZENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuZW5kQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVuZENvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbmRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5lbmRDb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNwZWVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zcGVlZFxyXG4gIH1cclxuXHJcbiAgc2V0IHNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5taW5pbXVtU3BlZWQgPSBOdW1iZXIodilcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWF4aW11bVNwZWVkID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLl9lbG1zLnNwZWVkICYmIHRoaXMuX2VsbXMuc3BlZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbmltdW1QYXJ0aWNsZUxpZmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbmltdW1QYXJ0aWNsZUxpZmVcclxuICB9XHJcblxyXG4gIHNldCBtaW5pbXVtUGFydGljbGVMaWZlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5taW5pbXVtUGFydGljbGVMaWZlID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1pbmltdW1QYXJ0aWNsZUxpZmUgPSBOdW1iZXIodilcclxuICAgIHRoaXMuX2VsbXMubWluaW11bVBhcnRpY2xlTGlmZSAmJiB0aGlzLl9lbG1zLm1pbmltdW1QYXJ0aWNsZUxpZmUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heGltdW1QYXJ0aWNsZUxpZmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1heGltdW1QYXJ0aWNsZUxpZmVcclxuICB9XHJcblxyXG4gIHNldCBtYXhpbXVtUGFydGljbGVMaWZlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5tYXhpbXVtUGFydGljbGVMaWZlID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1QYXJ0aWNsZUxpZmUgPSBOdW1iZXIodilcclxuICAgIHRoaXMuX2VsbXMubWF4aW11bVBhcnRpY2xlTGlmZSAmJiB0aGlzLl9lbG1zLm1heGltdW1QYXJ0aWNsZUxpZmUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXJ0U2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXJ0U2NhbGVcclxuICB9XHJcblxyXG4gIHNldCBzdGFydFNjYWxlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydFNjYWxlID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLnN0YXJ0U2NhbGUgPSBOdW1iZXIodilcclxuICAgIHRoaXMuX2VsbXMuc3RhcnRTY2FsZSAmJiB0aGlzLl9lbG1zLnN0YXJ0U2NhbGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZFNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmRTY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IGVuZFNjYWxlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5lbmRTY2FsZSA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbmRTY2FsZSA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5fZWxtcy5lbmRTY2FsZSAmJiB0aGlzLl9lbG1zLmVuZFNjYWxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IE51bWJlcih2KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBlbWlzc2lvblJhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVtaXNzaW9uUmF0ZVxyXG4gIH1cclxuXHJcbiAgc2V0IGVtaXNzaW9uUmF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZW1pc3Npb25SYXRlID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLmVtaXNzaW9uUmF0ZSA9IE51bWJlcih2KVxyXG4gICAgdGhpcy5fZWxtcy5lbWlzc2lvblJhdGUgJiYgdGhpcy5fZWxtcy5lbWlzc2lvblJhdGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcnRpY2xlU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGFydGljbGVTaXplXHJcbiAgfVxyXG5cclxuICBzZXQgcGFydGljbGVTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wYXJ0aWNsZVNpemUgPSBOdW1iZXIodilcclxuICAgIHRoaXMucGFydGljbGVTeXN0ZW0ubWluaW11bUltYWdlU2l6ZSA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMihOdW1iZXIodiksIE51bWJlcih2KSAqIDIpXHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLm1heGltdW1JbWFnZVNpemUgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoTnVtYmVyKHYpLCBOdW1iZXIodikgKiAyKVxyXG4gICAgdGhpcy5fZWxtcy5wYXJ0aWNsZVNpemUgJiYgdGhpcy5fZWxtcy5wYXJ0aWNsZVNpemUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxuZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnQubG5nXHJcbiAgfVxyXG5cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydC5sbmcgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5zdGFydC5sYXQsIGFsdDogdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnQubGF0XHJcbiAgfVxyXG5cclxuICBzZXQgbGF0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydC5sYXQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5zdGFydC5sYXQsIGFsdDogdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0XHJcbiAgfVxyXG5cclxuICBzZXQgYWx0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zdGFydC5hbHQgPSB2XHJcbiAgICBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0KTtcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICB0aGlzLmVudGl0eS5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMuc3RhcnQubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5zdGFydC5sYXQsIGFsdDogdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCB9XHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlYWRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRpbmdcclxuICB9XHJcblxyXG4gIHNldCBoZWFkaW5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkaW5nID0gTnVtYmVyKHYpXHJcbiAgICBsZXQgaHByID0gQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmhlYWRpbmcgKyA5MCwgdGhpcy5vcHRpb25zLnBpdGNoLCAwKTsvLyEhIeWPkeWwhOeykuWtkOeahOaWueWQkVxyXG4gICAgbGV0IHRycyA9IG5ldyBDZXNpdW0uVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKCk7XHJcbiAgICB0cnMudHJhbnNsYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRWxlbWVudHMoMCwgMCwgMSk7XHJcbiAgICB0cnMucm90YXRpb24gPSBDZXNpdW0uUXVhdGVybmlvbi5mcm9tSGVhZGluZ1BpdGNoUm9sbChocHIpO1xyXG4gICAgbGV0IE1hdHJpeDQgPSBDZXNpdW0uTWF0cml4NC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKHRycyk7XHJcbiAgICB0aGlzLnBhcnRpY2xlU3lzdGVtLmVtaXR0ZXJNb2RlbE1hdHJpeCA9IE1hdHJpeDRcclxuICAgIHRoaXMuX2VsbXMuaGVhZGluZyAmJiB0aGlzLl9lbG1zLmhlYWRpbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBpdGNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5waXRjaFxyXG4gIH1cclxuXHJcbiAgc2V0IHBpdGNoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5waXRjaCA9IE51bWJlcih2KVxyXG4gICAgbGV0IGhwciA9IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5oZWFkaW5nICsgOTAsIHRoaXMub3B0aW9ucy5waXRjaCwgMCk7Ly8hISHlj5HlsITnspLlrZDnmoTmlrnlkJFcclxuICAgIGxldCB0cnMgPSBuZXcgQ2VzaXVtLlRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSgpO1xyXG4gICAgdHJzLnRyYW5zbGF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbUVsZW1lbnRzKDAsIDAsIDEpO1xyXG4gICAgdHJzLnJvdGF0aW9uID0gQ2VzaXVtLlF1YXRlcm5pb24uZnJvbUhlYWRpbmdQaXRjaFJvbGwoaHByKTtcclxuICAgIGxldCBNYXRyaXg0ID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSh0cnMpO1xyXG4gICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5lbWl0dGVyTW9kZWxNYXRyaXggPSBNYXRyaXg0XHJcbiAgICB0aGlzLl9lbG1zLnBpdGNoICYmIHRoaXMuX2VsbXMucGl0Y2guZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgLy8gbGV0IGVsbXMgPSB0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdZSi1jdXN0b20tYmFzZS1kaWFsb2cnKVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IGVsbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoZWxtc1tpXSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3JpZ2luYWxPcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfllrflsITmsLTmn7HlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5zdHlsZSA9IG5ldyBDZXNpdW0uQ2VzaXVtM0RUaWxlU3R5bGUoe1xyXG4gICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgLy8gICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHBhcnRpY2xlLWVmZmVjdHMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBzdGFydENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzdGFydF9jb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5zdGFydENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbmRfY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuZW5kQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIFNwb3V0LkV2ZW50QmluZGluZyh0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zLnN0YXJ0Q29sb3IgPSBbc3RhcnRDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5lbmRDb2xvciA9IFtlbmRDb2xvclBpY2tlcl1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLl9lbGVtZW50X3N0eWxlKSB7XHJcbiAgICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50X3N0eWxlKVxyXG4gICAgICAvLyAgIHRoaXMuX2VsZW1lbnRfc3R5bGUgPSBudWxsXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLnN0YXJ0Q29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zdGFydENvbG9yXHJcbiAgICB0aGlzLmVuZENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZW5kQ29sb3JcclxuICAgIHRoaXMuc3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zcGVlZFxyXG4gICAgdGhpcy5taW5pbXVtUGFydGljbGVMaWZlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWluaW11bVBhcnRpY2xlTGlmZVxyXG4gICAgdGhpcy5tYXhpbXVtUGFydGljbGVMaWZlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWF4aW11bVBhcnRpY2xlTGlmZVxyXG4gICAgdGhpcy5zdGFydFNjYWxlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3RhcnRTY2FsZVxyXG4gICAgdGhpcy5lbmRTY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmVuZFNjYWxlXHJcbiAgICB0aGlzLmVtaXNzaW9uUmF0ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmVtaXNzaW9uUmF0ZVxyXG4gICAgdGhpcy5wYXJ0aWNsZVNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5wYXJ0aWNsZVNpemVcclxuICAgIHRoaXMubG5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3RhcnQubG5nXHJcbiAgICB0aGlzLmxhdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnN0YXJ0LmxhdFxyXG4gICAgdGhpcy5hbHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zdGFydC5hbHRcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHN1cGVyLnJlbW92ZSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5lbnRpdHkpO1xyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAqXHJcbiAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICpcclxuICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb25zOiB7IC4uLnRoaXMuZW50aXR5LnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgbW92UG9zXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIG1vdlBvcyA9IG1vdmVtZW50LmVuZFBvc2l0aW9uXHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0LmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc3RhcnQubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zdGFydC5hbHQgPSBwb3NpdGlvbnMuYWx0XHJcbiAgICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnN0YXJ0LmxuZywgdGhpcy5vcHRpb25zLnN0YXJ0LmxhdCwgdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCk7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjYXJ0b2dyYXBoaWMpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcblxyXG4gICAgICAgIHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuc3RhcnQubG5nXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnN0YXJ0LmxhdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5zdGFydC5hbHRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoIW1vdlBvcyB8fCBtb3ZQb3MueCAhPT0gbW92ZW1lbnQucG9zaXRpb24ueCB8fCBtb3ZQb3MueSAhPT0gbW92ZW1lbnQucG9zaXRpb24ueSAtIDIpIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0LmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGFydC5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0ID0gcG9zaXRpb25zLmFsdFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9zaXRpb24gPSB7IGxuZzogdGhpcy5vcHRpb25zLnN0YXJ0LmxuZywgbGF0OiB0aGlzLm9wdGlvbnMuc3RhcnQubGF0LCBhbHQ6IHRoaXMub3B0aW9ucy5zdGFydC5hbHQgfVxyXG4gICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbnM6IHsgLi4udGhpcy5lbnRpdHkucG9zaXRpb24gfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc3RhcnQubG5nID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubG5nXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0LmxhdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxhdFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zdGFydC5hbHQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5hbHRcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sbmcgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5sbmdcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxhdCA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxhdFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWx0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxuZyA9IHBvc2l0aW9ucy5sbmdcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFsdCA9IHBvc2l0aW9ucy5hbHRcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LnBvc2l0aW9uID0geyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0IH1cclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IHsgLi4udGhpcy5lbnRpdHkucG9zaXRpb24gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG4gICAgICBpZiAodGhpcy5ldmVudCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0LmxuZyA9IHRoaXMuZW50aXR5LnBvc2l0aW9uLmxuZ1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhcnQubGF0ID0gdGhpcy5lbnRpdHkucG9zaXRpb24ubGF0XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFydC5hbHQgPSB0aGlzLmVudGl0eS5wb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLnN0YXJ0LmxuZywgdGhpcy5vcHRpb25zLnN0YXJ0LmxhdCwgdGhpcy5vcHRpb25zLnN0YXJ0LmFsdCk7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oY2FydG9ncmFwaGljKTtcclxuICAgICAgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuXHJcbiAgICAgIHRoaXMuX2VsbXMubG5nICYmIHRoaXMuX2VsbXMubG5nLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnN0YXJ0LmxuZ1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5zdGFydC5sYXRcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuc3RhcnQuYWx0XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIHN0YXRpYyBFdmVudEJpbmRpbmcodGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7IHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkIH0pXHJcbiAgICAgICAgICAgICAgZWxlbWVudHNbaV0uY2hlY2tlZCA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhhdC5fZWxtc1ttLnZhbHVlXSkge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0ucHVzaChlbGVtZW50c1tpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGF0Ll9lbG1zW20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNoYW5nZSc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlLCB2YWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZW1vdmVOYW1lLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcG91dFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQXVJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBU0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxTEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQW5FQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBcENBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFwR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUF1SUE7QUFDQTtBQUFBO0FBbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXNHQTtBQUFBO0FBQUE7QUFoR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyRUE7QUFBQTtBQUFBO0FBcUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1RkE7QUFBQTtBQUtBO0FBd0ZBO0FBQUE7QUFBQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/ParticleEffects/Spout/index.js\n"); /***/ }), /***/ "./src/Obj/Base/PincerArrowObject/_element.js": /*!****************************************************!*\ !*** ./src/Obj/Base/PincerArrowObject/_element.js ***! \****************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u52A8\\u753B\\u65F6\\u957F\\n
\\n \\n ms\\n \\n
\\n
\\n
\\n
\\n
\\n \\u52A8\\u753B\\n \\n
\\n
\\n \\u52A8\\u753B\\u91CD\\u590D\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGluY2VyQXJyb3dPYmplY3QvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvUGluY2VyQXJyb3dPYmplY3QvX2VsZW1lbnQuanM/ZTVhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA2MCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCI+5oqV5b2x6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaW5wdXQtdGV4dFwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cImFyZWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlbGVjdC11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Yqo55S75pe26ZW/PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgYmx1clwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjUwMFwiIG1heD1cIjk5OTk5OTlcIiBAbW9kZWw9XCJzcHJlYWRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bXM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqjnlLs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzcHJlYWRTdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWKqOeUu+mHjeWkjTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cImxvb3BcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJwaW5jZXItYXJyb3ctb2JqZWN0LWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1tb2RlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1tb2RlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+WuWAvOe7n+S4gOWinuWKoDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maXJtIGhlaWdodC1jb25maXJtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBzcGF0aWFsLWluZm8tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nu4/luqbvvIhY77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue6rOW6pu+8iFnvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6auY5bqm77yIWu+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi6Z2i6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6Z2i6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVDb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui+uee6v+WuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJsaW5lV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBNkdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/PincerArrowObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/PincerArrowObject/index.js": /*!*************************************************!*\ !*** ./src/Obj/Base/PincerArrowObject/index.js ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/PincerArrowObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 双箭头\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n// import EditParticle from \"../../ModelController/EditParticle\";\nvar PincerArrowObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 双箭头\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color='rgba(255, 0, 0, 0.5)' {string} 颜色\r\n * @param options.height {number} 高度\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.spreadState=false {boolean} 动画\r\n * @param options.loop=false {loop} 动画重复\r\n * @param options.spreadTime=3000 {number} 动画持续时长(毫秒)\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function PincerArrowObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, PincerArrowObject);\n _this2 = _callSuper(this, PincerArrowObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"#ff000080\";\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.positions = options.positions || [];\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n _this2.options.height = options.height;\n _this2.options.loop = options.loop || false;\n _this2.options.spreadState = options.spreadState || false;\n _this2._elms = {};\n _this2.nodePoints = [];\n _this2.spreadTime = options.spreadTime;\n _this2.entity;\n _this2.event;\n _this2.operate = {};\n _this2.Dialog = _Dialog;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n if (!_this2.options.positions || _this2.options.positions.length < 5) {\n _this2._error = '双箭头最少需要五个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n if (!_this2.options.height && _this2.options.height !== 0) {\n var height = _this2.options.positions[0].alt;\n for (var i = 1; i < _this2.options.positions.length; i++) {\n if (height < _this2.options.positions[i].alt) {\n height = _this2.options.positions[i].alt;\n }\n }\n _this2.options.height = height;\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n PincerArrowObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(PincerArrowObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(PincerArrowObject, [{\n key: \"type\",\n get: function get() {\n return 'PincerArrowObject';\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n this.label.text = v;\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this4.options.heightMode = v || v == 0 ? v : 2;\n _this4.positionEditing = false;\n if (!_this4.entity) {\n return;\n }\n var heightModeName = '';\n PincerArrowObject.closeNodeEdit(_this4);\n var ground = false;\n var disabled = false;\n _this4.renewPositions();\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positionsH), [_this4.positionsH[0], _this4.positionsH[1]]);\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positionsH);\n switch (_this4.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this4.label.ground = ground;\n _this4.entity.polyline.clampToGround = ground;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4._elms.heightMode && (_this4._elms.heightMode.value = heightModeName);\n _this4._elms.heightModeObject && _this4._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this5 = this;\n if (!v || isNaN(Number(v))) {\n this.options.height = 0;\n } else {\n this.options.height = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this5.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this5.positionsH);\n _this5.entity.polygon.perPositionHeight = !ground ? true : false;\n _this5.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this5.positionsH), [_this5.positionsH[0], _this5.positionsH[1]]);\n _this5.entity.polyline.clampToGround = !ground ? false : true;\n _this5.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this5.options.height;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = _this7.options.line.width;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this12.options.attribute.link.content;\n case 2:\n _this12.attributeLink = _context3.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this12.options.attribute.link.content.splice(i, 1);\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this12.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeLink = _this12.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this13.options.attribute.vr.content;\n case 2:\n _this13.attributeVr = _context6.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this13.options.attribute.vr.content.splice(i, 1);\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this13.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeVr = _this13.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this14 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, heightBoxElm, heightElm, heightConfirmElm, heightModeData, heightModeObject, heightModeDataLegpElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!this._error) {\n _context7.next = 2;\n break;\n }\n return _context7.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 61;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var _loop9 = function _loop9(i) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(i + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.positions[i].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.positions[i].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PincerArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.positions[i].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PincerArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.positions[i].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PincerArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var i = 0; i < _this.options.positions.length; i++) {\n _loop9(i);\n }\n };\n _context7.next = 9;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '双箭头属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this14.name = _this14.name.trim();\n if (!_this14.name) {\n _this14.name = '未命名对象';\n }\n _this14.options.label.position = {\n lng: _this14.label.position[0],\n lat: _this14.label.position[1],\n alt: _this14.label.position[2]\n };\n _this14.originalOptions = _this14.deepCopyObj(_this14.options);\n _this14._DialogObject.close();\n _this14.Dialog.confirmCallBack && _this14.Dialog.confirmCallBack(_this14.originalOptions);\n },\n resetCallBack: function resetCallBack() {\n _this14.reset();\n _this14.Dialog.resetCallBack && _this14.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this14.Dialog.removeCallBack && _this14.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n var spreadState = _this14.options.spreadState;\n _this14.positionEditing = false;\n setTimeout(function () {\n _this14.options.spreadState = spreadState;\n _this14.reset();\n }, 10);\n _this14.Dialog.closeCallBack && _this14.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this14.options.show = show;\n _this14.originalOptions.show = show;\n _this14.show = show;\n _this14.Dialog.showCallBack && _this14.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this14.positionEditing = !_this14.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n PincerArrowObject.nodeEdit(_this14, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 9:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' pincerArrow';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('pincer-arrow-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n PincerArrowObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightConfirmElm = this._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (this.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 58;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = this._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n i = 0;\n case 42:\n if (!(i < heightModeData.length)) {\n _context7.next = 50;\n break;\n }\n if (!(heightModeData[i].key == this.heightMode)) {\n _context7.next = 47;\n break;\n }\n heightModeDataLegpElm.value = heightModeData[i].value;\n heightModeObject.legp_searchActive(heightModeData[i].value);\n return _context7.abrupt(\"break\", 50);\n case 47:\n i++;\n _context7.next = 42;\n break;\n case 50:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < heightModeData.length; _i5++) {\n if (heightModeData[_i5].value === heightModeDataLegpElm.value) {\n _this14.heightMode = heightModeData[_i5].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this14.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n this._elms.height = heightElm;\n this._elms.heightBox = heightBoxElm;\n this._elms.heightMode = heightModeDataLegpElm;\n this._elms.heightConfirm = heightConfirmElm;\n this._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this14.operate.positionEditing) {\n _this14.positionEditing = false;\n _this14.height = _this14.height + Number(heightElm.value);\n } else {\n PincerArrowObject.closeNodeEdit(_this14);\n _this14.heightMode = _this14.heightMode;\n setTimeout(function () {\n _this14.height = _this14.height + Number(heightElm.value);\n }, 100);\n }\n });\n case 58:\n setTimeout(function () {\n _this14.attributeLink = _this14.options.attribute.link.content;\n _this14.attributeVr = _this14.options.attribute.vr.content;\n _this14.cameraSelect && _this14.cameraSelect();\n _this14.goodsSelect && _this14.goodsSelect();\n var tagData = _this14.attributeSelect;\n var attributeElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this14.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this14.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this14.options['area-unit'];\n for (var _i8 = 0; _i8 < unitData.length; _i8++) {\n if (unitData[_i8].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i8].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < unitData.length; _i9++) {\n if (unitData[_i9].value === unitDataLegpElm.value) {\n _this14.areaUnit = unitData[_i9].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this14.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this14.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this14._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 62;\n break;\n case 61:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 62:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this15 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineColor = this.originalOptions.line.color;\n this.lineWidth = this.originalOptions.line.width;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n for (var i = 0; i < this.options.positions.length; i++) {\n if (this._elms.lng && this._elms.lng[i]) {\n this._elms.lng[i].innerHTML = this.options.positions[i].lng.toFixed(8);\n }\n if (this._elms.lat && this._elms.lat[i]) {\n this._elms.lat[i].innerHTML = this.options.positions[i].lat.toFixed(8);\n }\n if (this._elms.alt && this._elms.alt[i]) {\n this._elms.alt[i].innerHTML = Number(this.options.height.toFixed(2));\n }\n }\n this.heightMode = this.heightMode;\n for (var _i12 = 0; _i12 < this.nodePoints.length; _i12++) {\n this.sdk.viewer.entities.remove(this.nodePoints[_i12]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n var spreadState = this.options.spreadState;\n this.removeAnimate();\n setTimeout(function () {\n _this15.loop = _this15.options.loop;\n _this15.spreadState = spreadState;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this15.sdk, _this15.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this15.sdk, _this15.options.id);\n }, 200);\n setTimeout(function () {\n _this15.previous = null;\n }, 50);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.removeAnimate();\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label && this.label.remove();\n this.entity && this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 9;\n return this.sdk.removeIncetance(this.options.id);\n case 9:\n _context8.next = 11;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 11:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n ground,\n i,\n height,\n a,\n _i13,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n if (!this._error) {\n _context9.next = 3;\n break;\n }\n return _context9.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 18;\n break;\n }\n _context9.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context9.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 51;\n break;\n case 25:\n positionArray = [];\n _context9.t0 = this.heightMode;\n _context9.next = _context9.t0 === 0 ? 29 : _context9.t0 === '0' ? 29 : _context9.t0 === 1 ? 31 : _context9.t0 === '1' ? 31 : _context9.t0 === 2 ? 33 : _context9.t0 === '2' ? 33 : 35;\n break;\n case 29:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 31:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 33:\n ground = true;\n return _context9.abrupt(\"break\", 35);\n case 35:\n if (!ground) {\n _context9.next = 48;\n break;\n }\n i = 0;\n case 37:\n if (!(i < this.options.positions.length)) {\n _context9.next = 46;\n break;\n }\n _context9.next = 40;\n return this.getClampToHeight(this.options.positions[i]);\n case 40:\n height = _context9.sent;\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 43:\n i++;\n _context9.next = 37;\n break;\n case 46:\n _context9.next = 49;\n break;\n case 48:\n if (this.positionsH) {\n for (_i13 = 0; _i13 < this.positionsH.length; _i13++) {\n positionArray.push(this.positionsH[_i13].x, this.positionsH[_i13].y, this.positionsH[_i13].z);\n }\n }\n case 49:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 51:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this16 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this16.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this17 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.removeAnimate();\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n if (status === true) {\n var _Cesium$Cartesian;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var array = [];\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i14 = 0; _i14 < positions.length; _i14++) {\n center.x - positions[_i14].x;\n disparity.push({\n x: center.x - positions[_i14].x,\n y: center.y - positions[_i14].y,\n z: center.z - positions[_i14].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n newpositions = [];\n for (var _i15 = 0; _i15 < disparity.length; _i15++) {\n newpositions.push({\n x: cartesian.x - disparity[_i15].x,\n y: cartesian.y - disparity[_i15].y,\n z: cartesian.z - disparity[_i15].z\n });\n }\n _this17.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this17.event.mouse_move(function () {});\n _this17.event.mouse_left(function () {});\n _this17.event.mouse_right(function () {});\n _this17.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i16 = 0; _i16 < disparity.length; _i16++) {\n var pos3 = {\n x: cartesian.x - disparity[_i16].x,\n y: cartesian.y - disparity[_i16].y,\n z: cartesian.z - disparity[_i16].z\n };\n newpositions.push(pos3);\n _this17.options.positions[_i16] = _this17.cartesian3Towgs84(pos3, _this17.sdk.viewer);\n if (_this17._elms.lng && _this17._elms.lng[_i16]) {\n _this17._elms.lng[_i16].innerHTML = _this17.options.positions[_i16].lng.toFixed(8);\n }\n if (_this17._elms.lat && _this17._elms.lat[_i16]) {\n _this17._elms.lat[_i16].innerHTML = _this17.options.positions[_i16].lat.toFixed(8);\n }\n }\n _this17.positions = newpositions;\n _this17.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this17.positions)\n };\n _this17.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this17.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this17.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this17.positionEditing = false;\n } else {\n _this17.event.mouse_move(function () {});\n _this17.event.mouse_left(function () {});\n _this17.event.mouse_right(function () {});\n _this17.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i17 = 0; _i17 < disparity.length; _i17++) {\n var pos3 = {\n x: cartesian.x - disparity[_i17].x,\n y: cartesian.y - disparity[_i17].y,\n z: cartesian.z - disparity[_i17].z\n };\n newpositions.push(pos3);\n _this17.options.positions[_i17] = _this17.cartesian3Towgs84(pos3, _this17.sdk.viewer);\n if (_this17._elms.lng && _this17._elms.lng[_i17]) {\n _this17._elms.lng[_i17].innerHTML = _this17.options.positions[_i17].lng.toFixed(8);\n }\n if (_this17._elms.lat && _this17._elms.lat[_i17]) {\n _this17._elms.lat[_i17].innerHTML = _this17.options.positions[_i17].lat.toFixed(8);\n }\n }\n _this17.positions = newpositions;\n _this17.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this17.positions)\n };\n _this17.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var position84 = [];\n if (newpositions.length > 0) {\n for (var _i18 = 0; _i18 < newpositions.length; _i18++) {\n position84.push(_this.cartesian3Towgs84(newpositions[_i18], _this.sdk.viewer));\n }\n } else {\n for (var _i19 = 0; _i19 < positions.length; _i19++) {\n position84.push(_this.cartesian3Towgs84(positions[_i19], _this.sdk.viewer));\n }\n }\n _this.renewPositions(position84);\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n if (!this.previous) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n } else {\n this.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.previous.positions);\n }\n var position84 = [];\n for (var _i20 = 0; _i20 < this.positions.length; _i20++) {\n position84.push(this.cartesian3Towgs84(this.positions[_i20], this.sdk.viewer));\n }\n this.renewPositions(position84);\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, true);\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n var _Cesium$Cartesian2;\n var cartesian = Cesium.Cartesian3.fromDegrees(v.position.lng, v.position.lat, v.position.alt);\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var array = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i21 = 0; _i21 < positions.length; _i21++) {\n disparity.push({\n x: center.x - positions[_i21].x,\n y: center.y - positions[_i21].y,\n z: center.z - positions[_i21].z\n });\n }\n var newpositions = [];\n for (var _i22 = 0; _i22 < disparity.length; _i22++) {\n newpositions.push({\n x: cartesian.x - disparity[_i22].x,\n y: cartesian.y - disparity[_i22].y,\n z: cartesian.z - disparity[_i22].z\n });\n }\n this.label.position = [v.position.lng, v.position.lat, v.position.alt];\n var positions84 = [];\n if (newpositions.length > 0) {\n for (var _i23 = 0; _i23 < newpositions.length; _i23++) {\n positions84.push(this.cartesian3Towgs84(newpositions[_i23], this.sdk.viewer));\n }\n }\n var arr = this.computePincerArrow(positions84);\n if (arr.length == 0) {\n return;\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this18 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var positions = this.computePincerArrow(this.options.positions);\n if (positions.length == 0) {\n return;\n }\n var points = [[]];\n for (var i = 0; i < positions.length; i++) {\n var _position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n points[0].push([_position.lng, _position.lat]);\n }\n var position = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this18.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }, {\n key: \"spreadTime\",\n get: function get() {\n return this.options.spreadTime;\n },\n set: function set(v) {\n var spreadTime = Number(v);\n if (isNaN(spreadTime)) {\n spreadTime = 3000;\n } else if (spreadTime < 500) {\n spreadTime = 500;\n } else if (spreadTime > 9999999) {\n spreadTime = 9999999;\n }\n this.options.spreadTime = spreadTime;\n if (this.spreadState) {\n this.setSpreadProgressByTime();\n }\n this._elms.spreadTime && this._elms.spreadTime.forEach(function (item) {\n item.value = spreadTime;\n });\n }\n }, {\n key: \"loop\",\n get: function get() {\n return this.options.loop;\n },\n set: function set(v) {\n this.options.loop = v;\n if (this.TweenAnimate) {\n if (v) {\n this.TweenAnimate.repeat(Infinity);\n } else {\n this.TweenAnimate.repeat();\n }\n }\n this._elms.loop && this._elms.loop.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"spreadState\",\n get: function get() {\n return this.options.spreadState;\n },\n set: function set(v) {\n this.options.spreadState = v;\n if (this.TweenAnimate) {\n if (v) {\n this.lineEdit = false;\n this.setSpreadProgressByTime(this.TweenAnimate._object.distance1 / this.TweenAnimate._valuesEnd.distance1 * this.spreadTime);\n } else {\n this.TweenAnimate.pause();\n }\n } else {\n if (v) {\n this.setSpreadProgressByTime();\n }\n }\n this._elms.spreadState && this._elms.spreadState.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"setSpreadProgressByTime\",\n value: function setSpreadProgressByTime() {\n var _this19 = this;\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (!this.entity) {\n return;\n }\n var that = this;\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n var PincerArrowArr = this.computePincerArrow(this.options.positions);\n if (PincerArrowArr.length == 0) {\n return;\n }\n var arr;\n var lineArr;\n // if (arr.length >= 3) {\n // lineArr = [...arr, arr[0], arr[1]]\n // }\n // else {\n // lineArr = [...arr]\n // }\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n }\n var _getSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"getSdk\"])(),\n sdkP = _getSdk.sdkP,\n sdkD = _getSdk.sdkD;\n var thatP;\n if (sdkD && sdkP) {\n if (this.sdk === sdkD) {\n thatP = sdkP.entityMap.get(this.options.id);\n if (thatP && thatP.entity && thatP.entity.polygon && thatP.positionsH) {\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(thatP.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(thatP.positionsH), [thatP.positionsH[0], thatP.positionsH[1]]);\n }, false);\n }\n return;\n }\n }\n\n // this.entity.polygon.hierarchy = arr\n // this.entity.polyline.positions = lineArr\n\n var linePos841 = [];\n var linePos842 = [];\n var linePos843 = [];\n var turfLine = [];\n for (var _i24 = 0; _i24 <= 2; _i24++) {\n turfLine.push([this.options.positions[_i24].lng, this.options.positions[_i24].lat]);\n }\n turfLine.push([this.options.positions[0].lng, this.options.positions[0].lat]);\n var clockwiseRing = turf.lineString(turfLine);\n var isClockwise = turf.booleanClockwise(clockwiseRing);\n for (var _i25 = 0; _i25 <= 100; _i25++) {\n var pos84 = this.cartesian3Towgs84(PincerArrowArr[_i25], this.sdk.viewer);\n linePos841.push([pos84.lng, pos84.lat, pos84.alt]);\n }\n if (isClockwise) {\n linePos841.push([this.options.positions[3].lng, this.options.positions[3].lat, this.options.positions[3].alt]);\n } else {\n linePos841.push([this.options.positions[2].lng, this.options.positions[2].lat, this.options.positions[2].alt]);\n }\n for (var _i26 = 312; _i26 >= 212; _i26--) {\n var _pos = this.cartesian3Towgs84(PincerArrowArr[_i26], this.sdk.viewer);\n linePos842.push([_pos.lng, _pos.lat, _pos.alt]);\n }\n if (isClockwise) {\n linePos842.push([this.options.positions[2].lng, this.options.positions[2].lat, this.options.positions[2].alt]);\n } else {\n linePos842.push([this.options.positions[3].lng, this.options.positions[3].lat, this.options.positions[3].alt]);\n }\n linePos843.push([(this.options.positions[0].lng + this.options.positions[1].lng) / 2, (this.options.positions[0].lat + this.options.positions[1].lat) / 2], [this.options.positions[4].lng, this.options.positions[4].lat]);\n var positions = this.deepCopyObj(this.options.positions);\n var line1 = turf.lineString(linePos841);\n var distance1 = turf.length(line1, {\n units: 'kilometers'\n });\n var line2 = turf.lineString(linePos842);\n var distance2 = turf.length(line2, {\n units: 'kilometers'\n });\n var line3 = turf.lineString(linePos843);\n var distance3 = turf.length(line3, {\n units: 'kilometers'\n });\n var timeRatio = time / this.spreadTime;\n var m = 0;\n this.TweenAnimate = new TWEEN.Tween({\n distance1: distance1 * timeRatio,\n distance2: distance2 * timeRatio,\n distance3: distance3 * timeRatio\n }).to({\n distance1: distance1,\n distance2: distance2,\n distance3: distance3\n }, this.spreadTime - time).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(function () {\n if (time) {\n _this19.setSpreadProgressByTime();\n }\n }).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!(_this19.TweenAnimate._duration == Infinity)) {\n _context10.next = 2;\n break;\n }\n return _context10.abrupt(\"return\");\n case 2:\n m++;\n if (_this19.sdk.viewer) {\n _context10.next = 6;\n break;\n }\n _this19.removeAnimate();\n return _context10.abrupt(\"return\");\n case 6:\n setSpread(r);\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n return function (_x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }()).onStart(function () {\n _this19.options.spreadState = true;\n _this19._elms.spreadState && _this19._elms.spreadState.forEach(function (item) {\n item.checked = true;\n });\n }).onComplete(function (d) {\n _this19.removeAnimate();\n });\n if (this.spreadState) {\n this.TweenAnimate.start();\n } else {\n setSpread({\n distance1: distance1 * timeRatio,\n distance2: distance2 * timeRatio,\n distance3: distance3 * timeRatio\n });\n }\n function setSpread(_x6) {\n return _setSpread.apply(this, arguments);\n }\n function _setSpread() {\n _setSpread = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(v) {\n var index2, index3, sliced1, coordinates1, sliced2, coordinates2, sliced3, coordinates3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (that.show) {\n _context11.next = 2;\n break;\n }\n return _context11.abrupt(\"return\");\n case 2:\n index2 = 2;\n index3 = 3;\n if (isClockwise) {\n index2 = 3;\n index3 = 2;\n }\n if (v.distance1) {\n _context11.next = 10;\n break;\n }\n positions[index2].lng = positions[1].lng;\n positions[index2].lat = positions[1].lat;\n _context11.next = 16;\n break;\n case 10:\n _context11.next = 12;\n return turf.lineSliceAlong(line1, 0, v.distance1, {\n units: 'kilometers'\n });\n case 12:\n sliced1 = _context11.sent;\n coordinates1 = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced1.geometry.coordinates[sliced1.geometry.coordinates.length - 1]);\n positions[index2].lng = coordinates1[0];\n positions[index2].lat = coordinates1[1];\n case 16:\n if (v.distance2) {\n _context11.next = 21;\n break;\n }\n positions[index3].lng = positions[0].lng;\n positions[3].lat = positions[0].lat;\n _context11.next = 27;\n break;\n case 21:\n _context11.next = 23;\n return turf.lineSliceAlong(line2, 0, v.distance2, {\n units: 'kilometers'\n });\n case 23:\n sliced2 = _context11.sent;\n coordinates2 = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced2.geometry.coordinates[sliced2.geometry.coordinates.length - 1]);\n positions[index3].lng = coordinates2[0];\n positions[index3].lat = coordinates2[1];\n case 27:\n if (v.distance3) {\n _context11.next = 32;\n break;\n }\n positions[4].lng = linePos843[0][0];\n positions[4].lat = linePos843[0][1];\n _context11.next = 38;\n break;\n case 32:\n _context11.next = 34;\n return turf.lineSliceAlong(line3, 0, v.distance3, {\n units: 'kilometers'\n });\n case 34:\n sliced3 = _context11.sent;\n coordinates3 = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced3.geometry.coordinates[sliced3.geometry.coordinates.length - 1]);\n positions[4].lng = coordinates3[0];\n positions[4].lat = coordinates3[1];\n case 38:\n that.renewPositions(positions);\n case 39:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return _setSpread.apply(this, arguments);\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(that.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]);\n }, false);\n }\n\n // 移除动画\n }, {\n key: \"removeAnimate\",\n value: function removeAnimate() {\n this.spreadState = false;\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positionsH);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positionsH), [this.positionsH[0], this.positionsH[1]]);\n }\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(position84) {\n var _this20 = this;\n if (this._error || !this.sdk.viewer) {\n return;\n }\n var ground = false;\n var array = [];\n var positions = this.options.positions;\n if (position84) {\n positions = position84;\n }\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = this.computePincerArrow(positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n var pos84 = [];\n for (var _i27 = 0; _i27 < positionsA.length; _i27++) {\n var _position2 = this.cartesian3Towgs84(positionsA[_i27], this.sdk.viewer);\n pos84.push(_position2);\n points[0].push([_position2.lng, _position2.lat]);\n }\n var position = this.cartesian3Towgs84(positionsA[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var height = 0;\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray2 = [];\n if (!ground && this.nodePoints.length == 0) {\n for (var _i28 = 0; _i28 < points[0].length; _i28++) {\n fromDegreesArray2.push(points[0][_i28][0], points[0][_i28][1], this.height + height);\n }\n this.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.height + height]);\n } else {\n this.positionsH = positionsA;\n setTimeout(function () {\n if (!_this20.sdk.viewer) {\n return;\n }\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this20.sdk.viewer.entities.values);\n _this20.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n _this20.label && (_this20.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n if (!this.spreadState) {\n this.options.areaByMeter = this.computeArea(pos84);\n this.areaUnit = this.areaUnit;\n }\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = that.computePincerArrow(that.options.positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n for (var _i29 = 0; _i29 < positionsA.length; _i29++) {\n var _position3 = that.cartesian3Towgs84(positionsA[_i29], that.sdk.viewer);\n points[0].push([_position3.lng, _position3.lat]);\n }\n var position = that.cartesian3Towgs84(positionsA[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: that.height + height\n };\n }\n var fromDegreesArray2 = [];\n for (var _i30 = 0; _i30 < points[0].length; _i30++) {\n fromDegreesArray2.push(points[0][_i30][0], points[0][_i30][1], that.height + height);\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.options.label.ground = ground;\n that.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: !ground ? new Cesium.PolygonHierarchy(that.positionsH) : new Cesium.PolygonHierarchy(positionsA),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n PincerArrowObject.createLabel(that);\n var pos84 = [];\n for (var _i31 = 0; _i31 < positionsA.length; _i31++) {\n pos84.push(that.cartesian3Towgs84(positionsA[_i31], that.sdk.viewer));\n }\n that.options.areaByMeter = that.computeArea(pos84);\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n that.spreadState = that.options.spreadState;\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee8(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee8$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context12.stop();\n }\n }, _callee8);\n }));\n function createLabel(_x7) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop10 = function _loop10() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop11 = function _loop11() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop11();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n if (elements[i].className.indexOf('blur') !== -1) {\n ventType = 'blur';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop10()) continue;\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n setTimeout(function () {\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee9() {\n var objectsToExclude, i, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee9$(_context13) {\n while (1) switch (_context13.prev = _context13.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n i = 0;\n case 2:\n if (!(i < optionsPositions.length)) {\n _context13.next = 11;\n break;\n }\n _context13.next = 5;\n return that.getClampToHeight(that.options.positions[i], objectsToExclude);\n case 5:\n height = _context13.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n position: Cesium.Cartesian3.fromDegrees(optionsPositions[i].lng, optionsPositions[i].lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 8:\n i++;\n _context13.next = 2;\n break;\n case 11:\n case \"end\":\n return _context13.stop();\n }\n }, _callee9);\n }));\n return function createNodePoints() {\n return _ref2.apply(this, arguments);\n };\n }();\n that.removeAnimate();\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var optionsPositions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.options.positions);\n var leftEvent = function leftEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n optionsPositions[selectPoint.index] = that.options.positions[selectPoint.index];\n var index = selectPoint.index;\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: index,\n position: Cesium.Cartesian3.fromDegrees(optionsPositions[selectPoint.index].lng, optionsPositions[selectPoint.index].lat, optionsPositions[selectPoint.index].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n selectPoint = null;\n that.tip.set_text('请选择一个顶点,右键取消');\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n originalPosition = that.cartesian3Towgs84(pick.id.position.getValue(), that.sdk.viewer);\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键确定,右键取消');\n }\n }\n that.renewPositions();\n that.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n };\n var rightEvent = function rightEvent() {\n that.event.mouse_move(function () {});\n that.event.mouse_left(function () {});\n that.event.mouse_right(function () {});\n that.event.gesture_pinck_start(function () {});\n if (selectPoint) {\n optionsPositions[selectPoint.index] = originalPosition;\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n cb(null, optionsPositions);\n }\n that.options.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(optionsPositions);\n that.heightMode = that.heightMode;\n that.previous = null;\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(that.positionsH);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]);\n }, false);\n setTimeout(function () {\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n that.renewPositions();\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n var points = [[]];\n var pos84 = [];\n for (var i = 0; i < that.positionsH.length; i++) {\n var _position4 = that.cartesian3Towgs84(that.positionsH[i], that.sdk.viewer);\n pos84.push(_position4);\n points[0].push([_position4.lng, _position4.lat]);\n }\n var position = that.cartesian3Towgs84(that.positionsH[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n createNodePoints();\n }, 200);\n }\n }, 0);\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PincerArrowObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUGluY2VyQXJyb3dPYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvUGluY2VyQXJyb3dPYmplY3QvaW5kZXguanM/MTYxMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog5Y+M566t5aS0XHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgZ2V0U2RrLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuLy8gaW1wb3J0IEVkaXRQYXJ0aWNsZSBmcm9tIFwiLi4vLi4vTW9kZWxDb250cm9sbGVyL0VkaXRQYXJ0aWNsZVwiO1xyXG5cclxuY2xhc3MgUGluY2VyQXJyb3dPYmplY3QgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDlj4znrq3lpLRcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPSdyZ2JhKDI1NSwgMCwgMCwgMC41KScge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodE1vZGU9MntudW1iZXJ9IOmrmOW6puaooeW8j++8iDDvvJrmtbfmi5Tpq5jluqbvvJsx77ya55u45a+55Zyw6KGo77ybMu+8muS+nemZhOaooeW8j++8iVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFyZWFVbml0PSflubPmlrnnsbMnIHtzdHJpbmd9IOmdouenr+WNleS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUge29iamVjdH0g6L655qGGXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS53aWR0aD0yIHtzdHJpbmd9IOi+ueahhuWuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUuY29sb3I9XCJyZ2JhKDE1NSwgMTU1LCAxMjQsIDAuODkpXCIge3N0cmluZ30g6L655qGG6aKc6ImyXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcHJlYWRTdGF0ZT1mYWxzZSB7Ym9vbGVhbn0g5Yqo55S7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG9vcD1mYWxzZSB7bG9vcH0g5Yqo55S76YeN5aSNXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3ByZWFkVGltZT0zMDAwIHtudW1iZXJ9IOWKqOeUu+aMgee7reaXtumVvyjmr6vnp5IpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwudGV4dCB7c3RyaW5nfSDmoIfnrb7mlofmnKxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IHtvYmplY3R9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgXCIjZmYwMDAwODBcIlxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUgPSBvcHRpb25zLmxpbmUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gKCh0aGlzLm9wdGlvbnMubGluZS53aWR0aCB8fCB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9PT0gMCkgPyB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA6IDMpXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHRoaXMub3B0aW9ucy5saW5lLmNvbG9yIHx8ICdyZ2JhKDI1NSwgMCwgMCwgMSknXHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gb3B0aW9uc1snYXJlYS11bml0J10gfHwgJ+W5s+aWueexsydcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodFxyXG4gICAgdGhpcy5vcHRpb25zLmxvb3AgPSBvcHRpb25zLmxvb3AgfHwgZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZSA9IG9wdGlvbnMuc3ByZWFkU3RhdGUgfHwgZmFsc2VcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLnNwcmVhZFRpbWUgPSBvcHRpb25zLnNwcmVhZFRpbWVcclxuICAgIHRoaXMuZW50aXR5XHJcbiAgICB0aGlzLmV2ZW50XHJcbiAgICB0aGlzLm9wZXJhdGUgPSB7fVxyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICBvcHRpb25zLmxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsID0ge1xyXG4gICAgICB0ZXh0OiB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgc2hvdzogb3B0aW9ucy5sYWJlbC5zaG93IHx8IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogb3B0aW9ucy5sYWJlbC5wb3NpdGlvbixcclxuICAgICAgZm9udFNpemU6IChvcHRpb25zLmxhYmVsLmZvbnRTaXplIHx8IG9wdGlvbnMubGFiZWwuZm9udFNpemUgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA6IDIwLFxyXG4gICAgICBmb250RmFtaWx5OiBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPyBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgOiAwLFxyXG4gICAgICBjb2xvcjogb3B0aW9ucy5sYWJlbC5jb2xvciB8fCAnI2ZmZmZmZicsXHJcbiAgICAgIGxpbmVXaWR0aDogKG9wdGlvbnMubGFiZWwubGluZVdpZHRoIHx8IG9wdGlvbnMubGFiZWwubGluZVdpZHRoID09PSAwKSA/IG9wdGlvbnMubGFiZWwubGluZVdpZHRoIDogNCxcclxuICAgICAgcGl4ZWxPZmZzZXQ6IChvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IHx8IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPT09IDApID8gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA6IDIwLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yIHx8IFsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddLFxyXG4gICAgICBsaW5lQ29sb3I6IG9wdGlvbnMubGFiZWwubGluZUNvbG9yIHx8ICcjMDBmZmZmODAnLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHx8IGZhbHNlLFxyXG4gICAgICBuZWFyOiAob3B0aW9ucy5sYWJlbC5uZWFyIHx8IG9wdGlvbnMubGFiZWwubmVhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLm5lYXIgOiAyMDAwLFxyXG4gICAgICBmYXI6IChvcHRpb25zLmxhYmVsLmZhciB8fCBvcHRpb25zLmxhYmVsLmZhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZhciA6IDEwMDAwMCxcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSBvcHRpb25zLmF0dHJpYnV0ZVR5cGUgfHwgJ3JpY2hUZXh0J1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDUpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn5Y+M566t5aS05pyA5bCR6ZyA6KaB5LqU5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5oZWlnaHQgJiYgdGhpcy5vcHRpb25zLmhlaWdodCAhPT0gMCkge1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlaWdodCA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0KSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBoZWlnaHRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICBQaW5jZXJBcnJvd09iamVjdC5jcmVhdGUodGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuICdQaW5jZXJBcnJvd09iamVjdCdcclxuICB9XHJcblxyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5uYW1lXHJcbiAgfVxyXG4gIHNldCBuYW1lKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdlxyXG4gICAgdGhpcy5sYWJlbC50ZXh0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5uYW1lICYmIHRoaXMuX2VsbXMubmFtZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdiB8fCAncmdiYSgyNTUsIDAsIDAsIDAuNSknXHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5Z29uKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gICAgaWYgKHRoaXMuX2VsbXMuY29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwwLDAsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPyB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA6IDBcclxuICB9XHJcbiAgc2V0IGhlaWdodE1vZGUodikge1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBbXVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKHYgfHwgdiA9PSAwKSA/IHYgOiAyXHJcbiAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHRNb2RlTmFtZSA9ICcnXHJcbiAgICAgIFBpbmNlckFycm93T2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wb3NpdGlvbnNILFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFswXSxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc0hbMV1cclxuICAgICAgXVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc0hcclxuICAgICAgKVxyXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5rW35ouU6auY5bqmJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfnm7jlr7nlnLDooagnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5L6d6ZmE5qih5Z6LJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlID0gaGVpZ2h0TW9kZU5hbWUpXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lXHJcbiAgICAgICkpXHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDIpKVxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9uc0gsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFsxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDXHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS5jb2xvclxyXG4gIH1cclxuICBzZXQgbGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdiB8fCAncmdiYSgyNTUsIDAsIDAsIDAuNSknXHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5bGluZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMubGluZS5jb2xvcilcclxuICAgIGlmICh0aGlzLl9lbG1zLmxpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMubGluZS5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICB9XHJcbiAgc2V0IGxpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9ICgodiB8fCB2ID09PSAwKSA/IHYgOiAzKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUud2lkdGggPSB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5fZWxtcy5saW5lV2lkdGggJiYgdGhpcy5fZWxtcy5saW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXJlYVxyXG4gIH1cclxuXHJcbiAgc2V0IGFyZWEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWEgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWEgJiYgdGhpcy5fZWxtcy5hcmVhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYVVuaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gIH1cclxuICBzZXQgYXJlYVVuaXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYVVuaXQgJiYgdGhpcy5fZWxtcy5hcmVhVW5pdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlcikge1xyXG4gICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAhdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJiB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250RmFtaWx5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gdiB8fCAwXHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmZvbnRGYW1pbHkgPSB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSlcclxuXHJcbiAgICBsZXQgbmFtZSA9IGdldEZvbnRGYW1pbHlOYW1lKHRoaXMubGFiZWxGb250RmFtaWx5KSB8fCAnJ1xyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmFtZVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwuY29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3JbaV0gPSBsYWJlbENvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICB9XHJcbiAgc2V0IGxhYmVsRm9udFNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZSAmJiB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlICYmIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxMaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aCAmJiB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxQaXhlbE9mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICB9XHJcbiAgc2V0IGxhYmVsUGl4ZWxPZmZzZXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldCAmJiB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhYmVsTGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMCwyNTUsMjU1LDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt2LCB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXV1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSwgdl1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVnIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlVnIodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICB2ckVkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgfVxyXG4gICAgdGhhdC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICBsZXQgcG9zaXRpb25zQSA9IHRoYXQuY29tcHV0ZVBpbmNlckFycm93KHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICBpZiAocG9zaXRpb25zQS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnNBLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVtpXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNBWzBdLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9pbnRzKTtcclxuICAgIC8vIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pO1xyXG5cclxuXHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG5cclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSkpIHx8IDBcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLCBhbHQ6IHRoYXQuaGVpZ2h0ICsgaGVpZ2h0IH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHNbMF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChcclxuICAgICAgICBwb2ludHNbMF1baV1bMF0sXHJcbiAgICAgICAgcG9pbnRzWzBdW2ldWzFdLFxyXG4gICAgICAgIHRoYXQuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG5cclxuICAgIHRoYXQucG9zaXRpb25zSCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkyKVxyXG5cclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiAhZ3JvdW5kID8gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zSCkgOiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkocG9zaXRpb25zQSksXHJcbiAgICAgICAgcGVyUG9zaXRpb25IZWlnaHQ6ICFncm91bmQgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogWy4uLnRoYXQucG9zaXRpb25zSCwgdGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnBvc2l0aW9uc0hbMV1dLFxyXG4gICAgICAgIHdpZHRoOiB0aGF0Lm9wdGlvbnMubGluZS53aWR0aCxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMubGluZS5jb2xvciksXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogIWdyb3VuZCA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICBhcmNUeXBlOiAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgUGluY2VyQXJyb3dPYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIGxldCBwb3M4NCA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uc0EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zODQucHVzaCh0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbaV0sIHRoYXQuc2RrLnZpZXdlcikpXHJcbiAgICB9XHJcbiAgICB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSB0aGF0LmNvbXB1dGVBcmVhKHBvczg0KTtcclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+S6qSc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgfVxyXG4gICAgc3luY0RhdGEodGhhdC5zZGssIHRoYXQub3B0aW9ucy5pZClcclxuICAgIGlmICh0aGF0Lm9wdGlvbnMuc2hvdykge1xyXG5cclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG5cclxuICAgIHRoYXQuc3ByZWFkU3RhdGUgPSB0aGF0Lm9wdGlvbnMuc3ByZWFkU3RhdGVcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVMYWJlbCh0aGF0KSB7XHJcbiAgICAvLyDmoIfnrb5cclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogW3RoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhcixcclxuICAgICAgZ3JvdW5kOiB0aGF0Lm9wdGlvbnMubGFiZWwuZ3JvdW5kLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KCkge1xyXG4gICAgICAgIGxldCB0YWJsZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3BhdGlhbC1pbmZvLXRhYmxlJylbMF1cclxuICAgICAgICBsZXQgdEJvZHlFbG0gPSB0YWJsZUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICB0Qm9keUVsbS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZyA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgICB0ci5jbGFzc05hbWUgPSAndHInXHJcbiAgICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2kgKyAxfTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxuZyBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsYXQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWx0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgIGBcclxuICAgICAgICAgIGxldCBsbmdCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmcnKVswXVxyXG4gICAgICAgICAgbGV0IGxuZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgbG5nLmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgICBsZXQgbG5nSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsbmdJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxuZ0lucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxuZ0lucHV0Lm1pbiA9IC0xODBcclxuICAgICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGxhdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhdCcpWzBdXHJcbiAgICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KVxyXG4gICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICAgIGxldCBsYXRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGxhdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGxhdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgbGF0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgbGF0SW5wdXQubWluID0gLTkwXHJcbiAgICAgICAgICBsYXRJbnB1dC5tYXggPSA5MFxyXG4gICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGFsdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsdCcpWzBdXHJcbiAgICAgICAgICBsZXQgYWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIGxldCBhbHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGFsdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICAgIGFsdElucHV0Lm1heCA9IDk5OTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSAoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpXHJcblxyXG4gICAgICAgICAgbG5nQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZ0lucHV0KVxyXG4gICAgICAgICAgICBsbmdJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgUGluY2VyQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nID0gTnVtYmVyKE51bWJlcihsbmdJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nLmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodCA9IF90aGlzLmhlaWdodFxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBsYXRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0SW5wdXQpXHJcbiAgICAgICAgICAgIGxhdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBQaW5jZXJBcnJvd09iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQgPSBOdW1iZXIoTnVtYmVyKGxhdElucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGFsdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdElucHV0KVxyXG4gICAgICAgICAgICBhbHRJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgUGluY2VyQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcihhbHRJbnB1dC52YWx1ZSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0LmlubmVySFRNTCA9IE51bWJlcihfdGhpcy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZy5wdXNoKGxuZylcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXQucHVzaChsYXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXRJbnB1dC5wdXNoKGxhdElucHV0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQucHVzaChhbHRJbnB1dClcclxuICAgICAgICAgIHRCb2R5RWxtLmFwcGVuZENoaWxkKHRyKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+WPjOeureWktOWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSwgYWx0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzJdIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgc3ByZWFkU3RhdGUgPSB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGVcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGUgPSBzcHJlYWRTdGF0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIH0sIDEwKTtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOS6jOasoee8lui+keWbnuiwg1xyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgUGluY2VyQXJyb3dPYmplY3Qubm9kZUVkaXQodGhpcywgKCkgPT4ge1xyXG4gICAgICAgICAgICBjcmVhdGVTcGF0aWFsSW5mb1RhYmxlQ29udGVudCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBwaW5jZXJBcnJvdydcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicygncGluY2VyLWFycm93LW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxMaW5lQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0XCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yRW5kXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIFBpbmNlckFycm93T2JqZWN0LkV2ZW50QmluZGluZyh0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvciA9IFtsaW5lY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcblxyXG4gICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgIGxldCBoZWlnaHRFbG0gPSBoZWlnaHRCb3hFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0JylbMF1cclxuICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgIGhlaWdodEVsbS52YWx1ZSA9IDEwXHJcbiAgICAgIGlmICh0aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIGhlaWdodENvbmZpcm1FbG0gJiYgaGVpZ2h0Q29uZmlybUVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhlaWdodE1vZGVEYXRhID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgdmFsdWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAga2V5OiAnMCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIGtleTogJzEnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnaGVpZ2h0LW1vZGUtYm94J1xyXG4gICAgICAgIClbMF0sXHJcbiAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgKVxyXG4gICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodCA9IGhlaWdodEVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtID0gaGVpZ2h0Q29uZmlybUVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgUGluY2VyQXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdCh0aGlzKVxyXG4gICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbe1xyXG4gICAgICAgICAgbmFtZTogJ+W5s+aWueexsycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+W5s+aWueexsydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnljYPnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnljYPnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5LqpJyxcclxuICAgICAgICAgIHZhbHVlOiAn5LqpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+WFrOmhtycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+WFrOmhtydcclxuICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncCh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnKVswXSwgXCIuaW5wdXQtc2VsZWN0LXVuaXRcIilcclxuICAgICAgICBpZiAodW5pdERhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2godW5pdERhdGEpXHJcbiAgICAgICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh1bml0RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhVW5pdCA9IHVuaXREYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuICAgICAgfSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUpIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMubGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5jb2xvclxyXG4gICAgdGhpcy5saW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLndpZHRoXHJcbiAgICB0aGlzLmFyZWEgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hcmVhXHJcbiAgICB0aGlzLmFyZWFVbml0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMubGFiZWxDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgICB0aGlzLmxhYmVsRm9udFNpemUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgICB0aGlzLmxhYmVsU2NhbGVCeURpc3RhbmNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgICB0aGlzLmxhYmVsTmVhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLm5lYXJcclxuICAgIHRoaXMubGFiZWxGYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5mYXJcclxuICAgIHRoaXMubGFiZWxMaW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgIHRoaXMubGFiZWxQaXhlbE9mZnNldCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZ1tpXSkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXRbaV0pIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2VsbXMuYWx0ICYmIHRoaXMuX2VsbXMuYWx0W2ldKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5hbHRbaV0uaW5uZXJIVE1MID0gTnVtYmVyKHRoaXMub3B0aW9ucy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMuaGVpZ2h0TW9kZVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuXHJcbiAgICBsZXQgc3ByZWFkU3RhdGUgPSB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGVcclxuICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5sb29wID0gdGhpcy5vcHRpb25zLmxvb3BcclxuICAgICAgdGhpcy5zcHJlYWRTdGF0ZSA9IHNwcmVhZFN0YXRlXHJcbiAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH0sIDIwMCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSBudWxsXHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuZW50aXR5ICYmIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWVcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGdyb3VuZFxyXG4gICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyb3VuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldKVxyXG4gICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnNIKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zaXRpb25zSC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2godGhpcy5wb3NpdGlvbnNIW2ldLngsIHRoaXMucG9zaXRpb25zSFtpXS55LCB0aGlzLnBvc2l0aW9uc0hbaV0ueilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfngrnlh7vpvKDmoIflt6bplK7noa7orqTvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgyNTUsMjU1LDI1NSwwLjkpYCkpXHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBmaXJzdHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgICAgdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSk7XHJcbiAgICAgIHZhciBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54XHJcbiAgICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgICAgeDogY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueCxcclxuICAgICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb3MzID0ge1xyXG4gICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2gocG9zMylcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvczMsIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZ1tpXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXRbaV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5sYXRbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IG5ld3Bvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGlzLnBvc2l0aW9uc11cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvczMgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgICAgIHo6IGNhcnRlc2lhbi56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHBvczMpXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zMywgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9lbG1zLmxuZyAmJiB0aGlzLl9lbG1zLmxuZ1tpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZWxtcy5sbmdbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXRbaV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VsbXMubGF0W2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBuZXdwb3NpdGlvbnNcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGlzLnBvc2l0aW9uc11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgcG9zaXRpb244NCA9IFtdXHJcbiAgICAgICAgaWYgKG5ld3Bvc2l0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld3Bvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjg0LnB1c2goX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQobmV3cG9zaXRpb25zW2ldLCBfdGhpcy5zZGsudmlld2VyKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjg0LnB1c2goX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCBfdGhpcy5zZGsudmlld2VyKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMucmVuZXdQb3NpdGlvbnMocG9zaXRpb244NClcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbLi4uX3RoaXMucG9zaXRpb25zSCwgX3RoaXMucG9zaXRpb25zSFswXSwgX3RoaXMucG9zaXRpb25zSFsxXV1cclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5lbnRpdHkgJiYgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgyNTUsMjU1LDI1NSwxKWApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG4gICAgICBpZiAodGhpcy5ldmVudCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcblxyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gWy4uLnRoaXMucHJldmlvdXMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpdGlvbjg0ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uODQucHVzaCh0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHRoaXMucG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMocG9zaXRpb244NClcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnNILCBfdGhpcy5wb3NpdGlvbnNIWzBdLCBfdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRXZlbnRCaW5kaW5nKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgPT0gJ0lNRycpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXNbbS52YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGF0Ll9lbG1zW20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjaGFuZ2UnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInICYmIHZhbHVlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlc1ttXSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVtb3ZlTmFtZS5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS5jbGFzc05hbWUuaW5kZXhPZignYmx1cicpICE9PSAtMSkge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnYmx1cidcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5vZGVFZGl0KHRoYXQsIGNiID0gKCkgPT4geyB9KSB7XHJcbiAgICB0aGF0LnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgICAgY2IoJ+S4iuS4gOasoea1i+mHj+acque7k+adnycpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhhdC5yZW1vdmVBbmltYXRlKClcclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgICAgbGV0IG9yaWdpbmFsUG9zaXRpb25cclxuICAgICAgICBsZXQgb3B0aW9uc1Bvc2l0aW9ucyA9IFsuLi50aGF0Lm9wdGlvbnMucG9zaXRpb25zXVxyXG5cclxuICAgICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIG9wdGlvbnNQb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gc2VsZWN0UG9pbnQuaW5kZXhcclxuICAgICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKG9wdGlvbnNQb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZywgb3B0aW9uc1Bvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LCBvcHRpb25zUG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5hbHQpLFxyXG4gICAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIGVudGl0eSlcclxuICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSBudWxsXHJcbiAgICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBwaWNrID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pO1xyXG4gICAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBpY2suaWQucG9zaXRpb24uZ2V0VmFsdWUoKSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2UocGljay5pZC5pbmRleCwgMSlcclxuICAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgICAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+W3pumUruehruWumu+8jOWPs+mUruWPlua2iCcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmlnaHRFdmVudCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNQb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gb3JpZ2luYWxQb3NpdGlvblxyXG4gICAgICAgICAgICBpZiAodGhhdC5fZWxtcy5sbmcgJiYgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXMubGF0ICYmIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XSkge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNiKG51bGwsIG9wdGlvbnNQb3NpdGlvbnMpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zID0gWy4uLm9wdGlvbnNQb3NpdGlvbnNdXHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICAgIHRoYXQucHJldmlvdXMgPSBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhhdC5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IHRydWVcclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5hcmNUeXBlID0gQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gZmFsc2VcclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zSClcclxuICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi50aGF0LnBvc2l0aW9uc0gsIHRoYXQucG9zaXRpb25zSFswXSwgdGhhdC5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodChyaWdodEV2ZW50KVxyXG5cclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgICAgdGhhdC5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICAgICAgcmlnaHRFdmVudCgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIGxldCBwb2ludHMgPSBbW11dXHJcbiAgICAgICAgICBsZXQgcG9zODQgPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LnBvc2l0aW9uc0gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGF0LnBvc2l0aW9uc0hbaV0sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgcG9zODQucHVzaChwb3NpdGlvbilcclxuICAgICAgICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQodGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9pbnRzKVxyXG4gICAgICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKVxyXG4gICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICAgIHRoYXRcclxuICAgICAgICAgICAgLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgbGF0OiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXVxyXG4gICAgICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKVxyXG4gICAgICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgY3JlYXRlTm9kZVBvaW50cygpXHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKCkge1xyXG4gICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9uc1Bvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKG9wdGlvbnNQb3NpdGlvbnNbaV0ubG5nLCBvcHRpb25zUG9zaXRpb25zW2ldLmxhdCwgaGVpZ2h0KSxcclxuICAgICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24odikge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHYucG9zaXRpb24ubG5nLCB2LnBvc2l0aW9uLmxhdCwgdi5wb3NpdGlvbi5hbHQpXHJcbiAgICBsZXQgcG9zaXRpb25zID0gWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0cG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFthcnJheV0pO1xyXG4gICAgdmFyIGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRpc3Bhcml0eS5wdXNoKHtcclxuICAgICAgICB4OiBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54LFxyXG4gICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgejogY2VudGVyLnogLSBwb3NpdGlvbnNbaV0ueixcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbmV3cG9zaXRpb25zLnB1c2goe1xyXG4gICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFt2LnBvc2l0aW9uLmxuZywgdi5wb3NpdGlvbi5sYXQsIHYucG9zaXRpb24uYWx0XVxyXG5cclxuICAgIGxldCBwb3NpdGlvbnM4NCA9IFtdXHJcbiAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwb3NpdGlvbnM4NC5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQobmV3cG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgYXJyID0gdGhpcy5jb21wdXRlUGluY2VyQXJyb3cocG9zaXRpb25zODQpXHJcbiAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGFycilcclxuICAgIH0sIGZhbHNlKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKGFyci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgIHJldHVybiBbLi4uYXJyLCBhcnJbMF0sIGFyclsxXV1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gWy4uLmFycl1cclxuICAgICAgfVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgfVxyXG5cclxuICBzZXRESVYob3B0aW9ucyA9IHsgZG9taWQ6IFwiXCIsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSAob3B0aW9ucy54IHx8IG9wdGlvbnMueCA9PT0gMCkgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gKG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDApID8gb3B0aW9ucy55IDogMTBcclxuXHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jb21wdXRlUGluY2VyQXJyb3codGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9pbnRzKTtcclxuICAgIC8vIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pO1xyXG4gICAgbGV0IHNpdGVJbmZvRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5kb21pZClcclxuICAgIGxldCBzaXRlSW5mb1Bvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKVxyXG5cclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoKHBlcmNlbnRhZ2UpID0+IHtcclxuICAgICAgLy/ovazmjaLliLDlsY/luZXlnZDmoIdcclxuICAgICAgaWYgKHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycgfHwgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJycpIHtcclxuICAgICAgICBsZXQgd2lucG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNhcnRlc2lhblRvQ2FudmFzQ29vcmRpbmF0ZXMoc2l0ZUluZm9Qb3NpdGlvbik7XHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS50b3AgPSAod2lucG9zLnkgKyBvcHRpb25zLnkpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc3ByZWFkVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3ByZWFkVGltZVxyXG4gIH1cclxuXHJcbiAgc2V0IHNwcmVhZFRpbWUodikge1xyXG4gICAgbGV0IHNwcmVhZFRpbWUgPSBOdW1iZXIodilcclxuICAgIGlmIChpc05hTihzcHJlYWRUaW1lKSkge1xyXG4gICAgICBzcHJlYWRUaW1lID0gMzAwMFxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc3ByZWFkVGltZSA8IDUwMCkge1xyXG4gICAgICBzcHJlYWRUaW1lID0gNTAwXHJcbiAgICB9IGVsc2UgaWYgKHNwcmVhZFRpbWUgPiA5OTk5OTk5KSB7XHJcbiAgICAgIHNwcmVhZFRpbWUgPSA5OTk5OTk5XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuc3ByZWFkVGltZSA9IHNwcmVhZFRpbWVcclxuICAgIGlmICh0aGlzLnNwcmVhZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUoKVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5zcHJlYWRUaW1lICYmIHRoaXMuX2VsbXMuc3ByZWFkVGltZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBzcHJlYWRUaW1lXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxvb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxvb3BcclxuICB9XHJcbiAgc2V0IGxvb3Aodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxvb3AgPSB2XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5yZXBlYXQoSW5maW5pdHkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucmVwZWF0KClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sb29wICYmIHRoaXMuX2VsbXMubG9vcC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3ByZWFkU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlXHJcbiAgfVxyXG4gIHNldCBzcHJlYWRTdGF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGUgPSB2XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLmxpbmVFZGl0ID0gZmFsc2VcclxuICAgICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRoaXMuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UxIC8gdGhpcy5Ud2VlbkFuaW1hdGUuX3ZhbHVlc0VuZC5kaXN0YW5jZTEgKiB0aGlzLnNwcmVhZFRpbWUpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucGF1c2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5zcHJlYWRTdGF0ZSAmJiB0aGlzLl9lbG1zLnNwcmVhZFN0YXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldFNwcmVhZFByb2dyZXNzQnlUaW1lKHRpbWUgPSAwKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuXHJcbiAgICBsZXQgUGluY2VyQXJyb3dBcnIgPSB0aGlzLmNvbXB1dGVQaW5jZXJBcnJvdyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgaWYgKFBpbmNlckFycm93QXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGFyclxyXG4gICAgbGV0IGxpbmVBcnJcclxuICAgIC8vIGlmIChhcnIubGVuZ3RoID49IDMpIHtcclxuICAgIC8vICAgbGluZUFyciA9IFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIGxpbmVBcnIgPSBbLi4uYXJyXVxyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlKSB7XHJcbiAgICAgIFRXRUVOLnJlbW92ZSh0aGlzLlR3ZWVuQW5pbWF0ZSlcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHsgc2RrUCwgc2RrRCB9ID0gZ2V0U2RrKClcclxuICAgIGxldCB0aGF0UFxyXG4gICAgaWYgKHNka0QgJiYgc2RrUCkge1xyXG4gICAgICBpZiAodGhpcy5zZGsgPT09IHNka0QpIHtcclxuICAgICAgICB0aGF0UCA9IHNka1AuZW50aXR5TWFwLmdldCh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgaWYgKHRoYXRQICYmIHRoYXRQLmVudGl0eSAmJiB0aGF0UC5lbnRpdHkucG9seWdvbiAmJiB0aGF0UC5wb3NpdGlvbnNIKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdFAucG9zaXRpb25zSClcclxuICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGF0UC5wb3NpdGlvbnNILCB0aGF0UC5wb3NpdGlvbnNIWzBdLCB0aGF0UC5wb3NpdGlvbnNIWzFdXVxyXG4gICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBhcnJcclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IGxpbmVBcnJcclxuXHJcbiAgICBsZXQgbGluZVBvczg0MSA9IFtdXHJcbiAgICBsZXQgbGluZVBvczg0MiA9IFtdXHJcbiAgICBsZXQgbGluZVBvczg0MyA9IFtdXHJcblxyXG4gICAgbGV0IHR1cmZMaW5lID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDI7IGkrKykge1xyXG4gICAgICB0dXJmTGluZS5wdXNoKFt0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRdKVxyXG4gICAgfVxyXG4gICAgdHVyZkxpbmUucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XSlcclxuICAgIGxldCBjbG9ja3dpc2VSaW5nID0gdHVyZi5saW5lU3RyaW5nKHR1cmZMaW5lKTtcclxuICAgIGxldCBpc0Nsb2Nrd2lzZSA9IHR1cmYuYm9vbGVhbkNsb2Nrd2lzZShjbG9ja3dpc2VSaW5nKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwMDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3M4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoUGluY2VyQXJyb3dBcnJbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgbGluZVBvczg0MS5wdXNoKFtwb3M4NC5sbmcsIHBvczg0LmxhdCwgcG9zODQuYWx0XSlcclxuICAgIH1cclxuICAgIGlmIChpc0Nsb2Nrd2lzZSkge1xyXG4gICAgICBsaW5lUG9zODQxLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbM10ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzNdLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1szXS5hbHRdKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxpbmVQb3M4NDEucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1syXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMl0ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzJdLmFsdF0pXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMzEyOyBpID49IDIxMjsgaS0tKSB7XHJcbiAgICAgIGxldCBwb3M4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoUGluY2VyQXJyb3dBcnJbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgbGluZVBvczg0Mi5wdXNoKFtwb3M4NC5sbmcsIHBvczg0LmxhdCwgcG9zODQuYWx0XSlcclxuICAgIH1cclxuICAgIGlmIChpc0Nsb2Nrd2lzZSkge1xyXG4gICAgICBsaW5lUG9zODQyLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMl0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzJdLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1syXS5hbHRdKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxpbmVQb3M4NDIucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1szXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbM10ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzNdLmFsdF0pXHJcbiAgICB9XHJcblxyXG4gICAgbGluZVBvczg0My5wdXNoKFsodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxuZykgLyAyLCAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxhdCkgLyAyXSwgW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbNF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzRdLmxhdF0pXHJcblxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcblxyXG4gICAgbGV0IGxpbmUxID0gdHVyZi5saW5lU3RyaW5nKGxpbmVQb3M4NDEpO1xyXG4gICAgbGV0IGRpc3RhbmNlMSA9IHR1cmYubGVuZ3RoKGxpbmUxLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICBsZXQgbGluZTIgPSB0dXJmLmxpbmVTdHJpbmcobGluZVBvczg0Mik7XHJcbiAgICBsZXQgZGlzdGFuY2UyID0gdHVyZi5sZW5ndGgobGluZTIsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgIGxldCBsaW5lMyA9IHR1cmYubGluZVN0cmluZyhsaW5lUG9zODQzKTtcclxuICAgIGxldCBkaXN0YW5jZTMgPSB0dXJmLmxlbmd0aChsaW5lMywgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgbGV0IHRpbWVSYXRpbyA9IHRpbWUgLyB0aGlzLnNwcmVhZFRpbWVcclxuICAgIGxldCBtID0gMFxyXG4gICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBuZXcgVFdFRU4uVHdlZW4oeyBkaXN0YW5jZTE6IGRpc3RhbmNlMSAqIHRpbWVSYXRpbywgZGlzdGFuY2UyOiBkaXN0YW5jZTIgKiB0aW1lUmF0aW8sIGRpc3RhbmNlMzogZGlzdGFuY2UzICogdGltZVJhdGlvIH0pLnRvKHsgZGlzdGFuY2UxOiBkaXN0YW5jZTEsIGRpc3RhbmNlMjogZGlzdGFuY2UyLCBkaXN0YW5jZTM6IGRpc3RhbmNlMyB9LCB0aGlzLnNwcmVhZFRpbWUgLSB0aW1lKS5lYXNpbmcoVFdFRU4uRWFzaW5nLkxpbmVhci5Ob25lKS5yZXBlYXQodGhpcy5vcHRpb25zLmxvb3AgPyBJbmZpbml0eSA6IDApLm9uUmVwZWF0KCgpID0+IHtcclxuICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKClcclxuICAgICAgfVxyXG4gICAgfSkub25VcGRhdGUoYXN5bmMgKHIsIGEpID0+IHtcclxuICAgICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlLl9kdXJhdGlvbiA9PSBJbmZpbml0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIG0rK1xyXG4gICAgICBpZiAoIXRoaXMuc2RrLnZpZXdlcikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgc2V0U3ByZWFkKHIpXHJcbiAgICB9KS5vblN0YXJ0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlID0gdHJ1ZVxyXG4gICAgICB0aGlzLl9lbG1zLnNwcmVhZFN0YXRlICYmIHRoaXMuX2VsbXMuc3ByZWFkU3RhdGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWVcclxuICAgICAgfSlcclxuICAgIH0pLm9uQ29tcGxldGUoKGQpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVBbmltYXRlKClcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5zcHJlYWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5zdGFydCgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2V0U3ByZWFkKHsgZGlzdGFuY2UxOiBkaXN0YW5jZTEgKiB0aW1lUmF0aW8sIGRpc3RhbmNlMjogZGlzdGFuY2UyICogdGltZVJhdGlvLCBkaXN0YW5jZTM6IGRpc3RhbmNlMyAqIHRpbWVSYXRpbyB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNldFNwcmVhZCh2KSB7XHJcbiAgICAgIGlmICghdGhhdC5zaG93KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluZGV4MiA9IDJcclxuICAgICAgbGV0IGluZGV4MyA9IDNcclxuICAgICAgaWYgKGlzQ2xvY2t3aXNlKSB7XHJcbiAgICAgICAgaW5kZXgyID0gM1xyXG4gICAgICAgIGluZGV4MyA9IDJcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXYuZGlzdGFuY2UxKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW2luZGV4Ml0ubG5nID0gcG9zaXRpb25zWzFdLmxuZ1xyXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleDJdLmxhdCA9IHBvc2l0aW9uc1sxXS5sYXRcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc2xpY2VkMSA9IGF3YWl0IHR1cmYubGluZVNsaWNlQWxvbmcobGluZTEsIDAsIHYuZGlzdGFuY2UxLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgbGV0IGNvb3JkaW5hdGVzMSA9IFsuLi5zbGljZWQxLmdlb21ldHJ5LmNvb3JkaW5hdGVzW3NsaWNlZDEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1dXHJcbiAgICAgICAgcG9zaXRpb25zW2luZGV4Ml0ubG5nID0gY29vcmRpbmF0ZXMxWzBdXHJcbiAgICAgICAgcG9zaXRpb25zW2luZGV4Ml0ubGF0ID0gY29vcmRpbmF0ZXMxWzFdXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2LmRpc3RhbmNlMikge1xyXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleDNdLmxuZyA9IHBvc2l0aW9uc1swXS5sbmdcclxuICAgICAgICBwb3NpdGlvbnNbM10ubGF0ID0gcG9zaXRpb25zWzBdLmxhdFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzbGljZWQyID0gYXdhaXQgdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lMiwgMCwgdi5kaXN0YW5jZTIsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZXMyID0gWy4uLnNsaWNlZDIuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkMi5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXV1cclxuICAgICAgICBwb3NpdGlvbnNbaW5kZXgzXS5sbmcgPSBjb29yZGluYXRlczJbMF1cclxuICAgICAgICBwb3NpdGlvbnNbaW5kZXgzXS5sYXQgPSBjb29yZGluYXRlczJbMV1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXYuZGlzdGFuY2UzKSB7XHJcbiAgICAgICAgcG9zaXRpb25zWzRdLmxuZyA9IGxpbmVQb3M4NDNbMF1bMF1cclxuICAgICAgICBwb3NpdGlvbnNbNF0ubGF0ID0gbGluZVBvczg0M1swXVsxXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzbGljZWQzID0gYXdhaXQgdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lMywgMCwgdi5kaXN0YW5jZTMsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZXMzID0gWy4uLnNsaWNlZDMuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkMy5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXV1cclxuICAgICAgICBwb3NpdGlvbnNbNF0ubG5nID0gY29vcmRpbmF0ZXMzWzBdXHJcbiAgICAgICAgcG9zaXRpb25zWzRdLmxhdCA9IGNvb3JkaW5hdGVzM1sxXVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LnJlbmV3UG9zaXRpb25zKHBvc2l0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnNIKVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gWy4uLnRoYXQucG9zaXRpb25zSCwgdGhhdC5wb3NpdGlvbnNIWzBdLCB0aGF0LnBvc2l0aW9uc0hbMV1dXHJcbiAgICB9LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIC8vIOenu+mZpOWKqOeUu1xyXG4gIHJlbW92ZUFuaW1hdGUoKSB7XHJcbiAgICB0aGlzLnNwcmVhZFN0YXRlID0gZmFsc2VcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBUV0VFTi5yZW1vdmUodGhpcy5Ud2VlbkFuaW1hdGUpXHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlID0gbnVsbFxyXG5cclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoaXMucG9zaXRpb25zSClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gWy4uLnRoaXMucG9zaXRpb25zSCwgdGhpcy5wb3NpdGlvbnNIWzBdLCB0aGlzLnBvc2l0aW9uc0hbMV1dXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMocG9zaXRpb244NCkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGlmIChwb3NpdGlvbjg0KSB7XHJcbiAgICAgIHBvc2l0aW9ucyA9IHBvc2l0aW9uODRcclxuICAgIH1cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgfVxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgbGV0IHBvc2l0aW9uc0EgPSB0aGlzLmNvbXB1dGVQaW5jZXJBcnJvdyhwb3NpdGlvbnMpXHJcbiAgICBpZiAocG9zaXRpb25zQS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBwb2ludHMgPSBbW11dXHJcbiAgICBsZXQgcG9zODQgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnNBLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVtpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBwb3M4NC5wdXNoKHBvc2l0aW9uKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNBWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cylcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbilcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSkpIHx8IDBcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgIGlmICghZ3JvdW5kICYmIHRoaXMubm9kZVBvaW50cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50c1swXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2goXHJcbiAgICAgICAgICBwb2ludHNbMF1baV1bMF0sXHJcbiAgICAgICAgICBwb2ludHNbMF1baV1bMV0sXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCArIGhlaWdodFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvc2l0aW9uc0ggPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5MilcclxuXHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgKyBoZWlnaHRcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucG9zaXRpb25zSCA9IHBvc2l0aW9uc0FcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9KVxyXG4gICAgICB9LCAxMDApXHJcbiAgICB9XHJcblxyXG4gICAgLy8g6K6h566X5oqV5b2x6Z2i56evXHJcbiAgICBpZiAoIXRoaXMuc3ByZWFkU3RhdGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyID0gdGhpcy5jb21wdXRlQXJlYShwb3M4NClcclxuICAgICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMuYXJlYVVuaXRcclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tRGVncmVlc0FycmF5XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaW5jZXJBcnJvd09iamVjdFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUF1QkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTRJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekhBO0FBQUE7QUFBQTtBQTBIQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBM0NBO0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBeGVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFiQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUVBO0FBVUE7QUFBQTtBQVBBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXBHQTtBQUFBO0FBQUE7QUFBQTtBQXNHQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUFBO0FBeUxBO0FBQ0E7QUFBQTtBQXBMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWlTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBcHZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQW5CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTg2QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyRUE7QUFBQTtBQUFBO0FBcUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvRkE7QUFBQTtBQUtBO0FBMkZBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUErSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBO0FBbEJBO0FBQUE7QUFBQTtBQTlJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBNGJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PincerArrowObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/PolygonObject/_element.js": /*!************************************************!*\ !*** ./src/Obj/Base/PolygonObject/_element.js ***! \************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u63CF\\u8FB9\\u989C\\u8272\\n
\\n
\\n
\\n \\u63CF\\u8FB9\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWdvbk9iamVjdC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Qb2x5Z29uT2JqZWN0L19lbGVtZW50LmpzPzVmODAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGlucHV0LXNlbGVjdC11bml0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIj7mipXlvbHpnaLnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC10ZXh0XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwiYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VsZWN0LXVuaXRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJwb2x5Z29uLW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLlsZ7mgKfkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuepuumXtOS/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBoZWlnaHQtbW9kZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPumrmOW6puaooeW8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWlnaHQtbW9kZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlrlgLznu5/kuIDlop7liqA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGhlaWdodFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmlybSBoZWlnaHQtY29uZmlybVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUgc3BhdGlhbC1pbmZvLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57uP5bqm77yIWO+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nuqzluqbvvIhZ77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumrmOW6pu+8iFrvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIumdoumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumdouminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaPj+i+ueminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mj4/ovrnlrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OVwiIEBtb2RlbD1cImxpbmVXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0yKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFicz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBdUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolygonObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/PolygonObject/index.js": /*!*********************************************!*\ !*** ./src/Obj/Base/PolygonObject/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/PolygonObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 多边形\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n// import EditParticle from \"../../ModelController/EditParticle\";\nvar PolygonObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 多边形\r\n * @param sdk\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color='rgba(255, 0, 0, 0.5)' {string} 颜色\r\n * @param options.height {number} 高度\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * \r\n \r\n * \r\n * @param _Dialog {object} 弹框事件\r\n * @param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function PolygonObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, PolygonObject);\n _this2 = _callSuper(this, PolygonObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || 'rgba(255, 0, 0, 0.5)';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.positions = options.positions || [];\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n _this2.entity;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.operate = {};\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n _this2.nodePoints = [];\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n if (!_this2.options.positions || _this2.options.positions.length < 3) {\n _this2._error = '多边形最少需要三个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n if (!_this2.options.height && _this2.options.height !== 0) {\n var height = _this2.options.positions[0].alt;\n for (var i = 1; i < _this2.options.positions.length; i++) {\n if (height < _this2.options.positions[i].alt) {\n height = _this2.options.positions[i].alt;\n }\n }\n _this2.options.height = height;\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2._zIndex = _this2.sdk.entityMap.size;\n PolygonObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(PolygonObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(PolygonObject, [{\n key: \"type\",\n get: function get() {\n return 'PolygonObject';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n this.heightMode = 0;\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this4.options.heightMode = v || v == 0 ? v : 2;\n _this4.positionEditing = false;\n if (!_this4.entity) {\n return;\n }\n var positions = _this4.options.positions;\n var heightModeName = '';\n PolygonObject.closeNodeEdit(_this4);\n var ground = false;\n var disabled = false;\n _this4.renewPositions();\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positions), [_this4.positions[0], _this4.positions[1]]);\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positions);\n switch (_this4.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this4.label.ground = ground;\n _this4.entity.polyline.clampToGround = ground;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4._elms.heightMode && (_this4._elms.heightMode.value = heightModeName);\n _this4._elms.heightModeObject && _this4._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this5 = this;\n if (!v || isNaN(Number(v))) {\n this.options.height = 0;\n } else {\n this.options.height = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this5.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this5.positions);\n _this5.entity.polygon.perPositionHeight = !ground ? true : false;\n _this5.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this5.positions), [_this5.positions[0], _this5.positions[1]]);\n _this5.entity.polyline.clampToGround = !ground ? false : true;\n _this5.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this5.options.height;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this11 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this11.options.attribute.link.content;\n case 2:\n _this11.attributeLink = _context3.sent;\n table = _this11._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this11.options.attribute.link.content.splice(i, 1);\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this11.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this12.options.attribute.vr.content;\n case 2:\n _this12.attributeVr = _context6.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this12.options.attribute.vr.content.splice(i, 1);\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this12.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this13 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 32;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var _loop9 = function _loop9(i) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(i + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.positions[i].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.positions[i].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PolygonObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.positions[i].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PolygonObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.positions[i].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n PolygonObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var i = 0; i < _this.options.positions.length; i++) {\n _loop9(i);\n }\n };\n _context7.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '面属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this13.name = _this13.name.trim();\n if (!_this13.name) {\n _this13.name = '未命名对象';\n }\n _this13.options.label.position = {\n lng: _this13.label.position[0],\n lat: _this13.label.position[1],\n alt: _this13.label.position[2]\n };\n _this13.originalOptions = _this13.deepCopyObj(_this13.options);\n _this13._DialogObject.close();\n _this13.Dialog.confirmCallBack && _this13.Dialog.confirmCallBack(_this13.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this13.sdk, _this13.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this13.sdk, _this13.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this13.reset();\n _this13.Dialog.resetCallBack && _this13.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this13.Dialog.removeCallBack && _this13.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this13.previous = null;\n _this13.reset();\n _this13.positionEditing = false;\n _this13.Dialog.closeCallBack && _this13.Dialog.closeCallBack();\n for (var i = 0; i < _this13.nodePoints.length; i++) {\n _this13.sdk.viewer.entities.remove(_this13.nodePoints[i]);\n }\n _this13.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n _this13.event && _this13.event.destroy();\n _this13.tip && _this13.tip.destroy();\n },\n showCallBack: function showCallBack(show) {\n _this13.options.show = show;\n _this13.originalOptions.show = show;\n _this13.show = show;\n _this13.Dialog.showCallBack && _this13.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this13.positionEditing = !_this13.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n PolygonObject.nodeEdit(_this13, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 7:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' polygon';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('polygon-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('lineColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelLineColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorStart')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorEnd')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n }); // let heightElm = this._DialogObject._element.body.getElementsByClassName(\n // 'height'\n // )[0]\n // heightElm.value = this.height\n // heightElm.addEventListener('input', e => {\n // let value = e.target.value\n // if (\n // (e.data === '.' && value.indexOf('.') === -1) ||\n // (e.data === '-' && value.indexOf('-') === -1)\n // ) {\n // } else {\n // if (value) {\n // value = Number(value)\n // if (e.target.max && value > Number(e.target.max)) {\n // value = Number(e.target.max)\n // }\n // if (e.target.min && value < Number(e.target.min)) {\n // value = Number(e.target.min)\n // }\n // }\n // this.height = value\n // }\n // })\n all_elm = contentElm.getElementsByTagName('*');\n PolygonObject.EventBinding(this, all_elm);\n // this._elms.height = [heightElm]\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this13.attributeLink = _this13.options.attribute.link.content;\n _this13.attributeVr = _this13.options.attribute.vr.content;\n _this13.cameraSelect && _this13.cameraSelect();\n _this13.goodsSelect && _this13.goodsSelect();\n var tagData = _this13.attributeSelect;\n var attributeElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, '.attribute-select');\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this13.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this13.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], '.input-select-unit');\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this13.options['area-unit'];\n for (var _i6 = 0; _i6 < unitData.length; _i6++) {\n if (unitData[_i6].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i6].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < unitData.length; _i7++) {\n if (unitData[_i7].value === unitDataLegpElm.value) {\n _this13.areaUnit = unitData[_i7].value;\n break;\n }\n }\n });\n }\n var heightBoxElm = _this13._DialogObject._element.content.getElementsByClassName('height-box')[0];\n var heightElm = heightBoxElm.getElementsByClassName('height')[0];\n var heightConfirmElm = _this13._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (_this13.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n var heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n var heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (heightModeObject) {\n heightModeObject.legp_search(heightModeData);\n var heightModeDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n for (var _i8 = 0; _i8 < heightModeData.length; _i8++) {\n if (heightModeData[_i8].key == _this13.heightMode) {\n heightModeDataLegpElm.value = heightModeData[_i8].value;\n heightModeObject.legp_searchActive(heightModeData[_i8].value);\n break;\n }\n }\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < heightModeData.length; _i9++) {\n if (heightModeData[_i9].value === heightModeDataLegpElm.value) {\n _this13.heightMode = heightModeData[_i9].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this13.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n _this13._elms.height = heightElm;\n _this13._elms.heightBox = heightBoxElm;\n _this13._elms.heightMode = heightModeDataLegpElm;\n _this13._elms.heightConfirm = heightConfirmElm;\n _this13._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this13.operate.positionEditing) {\n _this13.positionEditing = false;\n _this13.height = _this13.height + Number(heightElm.value);\n } else {\n PolygonObject.closeNodeEdit(_this13);\n _this13.heightMode = _this13.heightMode;\n setTimeout(function () {\n _this13.height = _this13.height + Number(heightElm.value);\n }, 100);\n }\n // this.positionEditing = false\n // for (let i = 0; i < this.options.positions.length; i++) {\n // this.options.positions[i].alt = Number((this.options.positions[i].alt + Number(heightElm.value)).toFixed(2))\n // this._elms.alt[i].innerHTML = this.options.positions[i].alt\n // }\n // this.renewPositions(this.options.positions)\n // this.entity.polyline.positions = [\n // ...this.positions,\n // this.positions[0],\n // this.positions[1]\n // ]\n\n // this.positionEditing = false\n // PolygonObject.closeNodeEdit(this)\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this13.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this13.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this13._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity && !this._DialogObject) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineColor = this.originalOptions.line.color;\n this.lineWidth = this.originalOptions.line.width;\n this.area = this.originalOptions.area;\n this.height = this.originalOptions.height;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n this.heightMode = this.options.heightMode;\n var positions = this.options.positions;\n var positions2 = [[]];\n var fromDegreesArray = [];\n if (this.options.height || this.options.height === 0) {\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, this.options.height);\n positions2[0].push([positions[i].lng, positions[i].lat]);\n }\n positions2[0].push([positions[0].lng, positions[0].lat]);\n this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n } else {\n for (var _i12 = 0; _i12 < positions.length; _i12++) {\n fromDegreesArray.push(positions[_i12].lng, positions[_i12].lat);\n positions2[0].push([positions[_i12].lng, positions[_i12].lat]);\n }\n positions2[0].push([positions[0].lng, positions[0].lat]);\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positions);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions), [this.positions[0], this.positions[1]]);\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n _ground,\n i,\n height,\n a,\n _i13,\n BoundingSphere,\n _args8 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};\n if (!this._error) {\n _context8.next = 3;\n break;\n }\n return _context8.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context8.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context8.next = 18;\n break;\n }\n _context8.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context8.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context8.next = 51;\n break;\n case 25:\n positionArray = [];\n _context8.t0 = this.heightMode;\n _context8.next = _context8.t0 === 0 ? 29 : _context8.t0 === '0' ? 29 : _context8.t0 === 1 ? 31 : _context8.t0 === '1' ? 31 : _context8.t0 === 2 ? 33 : _context8.t0 === '2' ? 33 : 35;\n break;\n case 29:\n _ground = false;\n return _context8.abrupt(\"break\", 35);\n case 31:\n _ground = false;\n return _context8.abrupt(\"break\", 35);\n case 33:\n _ground = true;\n return _context8.abrupt(\"break\", 35);\n case 35:\n if (!_ground) {\n _context8.next = 48;\n break;\n }\n i = 0;\n case 37:\n if (!(i < this.options.positions.length)) {\n _context8.next = 46;\n break;\n }\n _context8.next = 40;\n return this.getClampToHeight(this.options.positions[i]);\n case 40:\n height = _context8.sent;\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 43:\n i++;\n _context8.next = 37;\n break;\n case 46:\n _context8.next = 49;\n break;\n case 48:\n if (this.positions) {\n for (_i13 = 0; _i13 < this.positions.length; _i13++) {\n positionArray.push(this.positions[_i13].x, this.positions[_i13].y, this.positions[_i13].z);\n }\n }\n case 49:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 51:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 删除\r\n */\n )\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.entities.remove(this.entity);\n this.label && this.label.remove();\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context9.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context9.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this14 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this14.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this15 = this;\n PolygonObject.closeNodeEdit(this);\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n if (status === true) {\n var _Cesium$Cartesian;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var array = [];\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var positions84 = this.deepCopyObj(this.options.positions);\n var fromDegreesArray = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i14 = 0; _i14 < positions.length; _i14++) {\n disparity.push({\n x: center.x - positions[_i14].x,\n y: center.y - positions[_i14].y,\n z: center.z - positions[_i14].z\n });\n }\n var newpositions = [];\n var leftEvent = function leftEvent(movement, cartesian) {\n var position84 = _this15.cartesian3Towgs84(cartesian, _this15.sdk.viewer);\n _this15.event.mouse_move(function () {});\n _this15.event.mouse_left(function () {});\n _this15.event.mouse_right(function () {});\n newpositions = [];\n for (var _i15 = 0; _i15 < disparity.length; _i15++) {\n var pos3 = {\n x: cartesian.x - disparity[_i15].x,\n y: cartesian.y - disparity[_i15].y,\n z: cartesian.z - disparity[_i15].z\n };\n newpositions.push(pos3);\n _this15.options.positions[_i15] = _this15.cartesian3Towgs84(pos3, _this15.sdk.viewer);\n if (_this._elms.lng && _this._elms.lng[_i15]) {\n _this._elms.lng[_i15].innerHTML = _this15.options.positions[_i15].lng.toFixed(8);\n }\n if (_this._elms.lat && _this._elms.lat[_i15]) {\n _this._elms.lat[_i15].innerHTML = _this15.options.positions[_i15].lat.toFixed(8);\n }\n }\n _this15.previous = null;\n fromDegreesArray = [];\n _this15.heightMode = _this15.heightMode;\n };\n this.event.mouse_move(function (movement, cartesian) {\n var position84 = _this15.cartesian3Towgs84(cartesian, _this15.sdk.viewer);\n newpositions = [];\n for (var _i16 = 0; _i16 < disparity.length; _i16++) {\n var pos3 = {\n x: cartesian.x - disparity[_i16].x,\n y: cartesian.y - disparity[_i16].y,\n z: cartesian.z - disparity[_i16].z\n };\n newpositions.push(pos3);\n positions84[_i16] = _this15.cartesian3Towgs84(pos3, _this15.sdk.viewer);\n }\n var ground = false;\n var array = [];\n for (var _i17 = 0; _i17 < positions84.length; _i17++) {\n array.push([positions84[_i17].lng, positions84[_i17].lat]);\n }\n array.push([positions84[0].lng, positions84[0].lat]);\n var height = 0;\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n switch (_this15.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = _this15.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]));\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n fromDegreesArray = [];\n if (!ground) {\n for (var _i18 = 0; _i18 < positions84.length; _i18++) {\n fromDegreesArray.push(positions84[_i18].lng, positions84[_i18].lat, _this15.height + height);\n }\n _this15.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this15.label.position = [position84.lng, position84.lat, _this15.height + height];\n } else {\n for (var _i19 = 0; _i19 < positions84.length; _i19++) {\n fromDegreesArray.push(positions84[_i19].lng, positions84[_i19].lat);\n }\n _this15.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this15.sdk.viewer.entities.values);\n _this15.getClampToHeight({\n lng: position84.lng,\n lat: position84.lat\n }, objectsToExclude).then(function (height) {\n _this15.label.position = [position84.lng, position84.lat, height];\n });\n }\n _this15.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(leftEvent);\n this.event.mouse_right(function (movement, cartesian) {\n _this15.heightMode = _this15.heightMode;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this15.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this15.positionEditing = false;\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, false);\n } else {\n if (!this.previous) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n } else {\n this.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.previous.positions);\n }\n if (!this.sdk || !this.sdk.viewer || !this.label || !this.label.entity) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n var _positions = [[]];\n for (var _i20 = 0; _i20 < this.previous.positions.length; _i20++) {\n var _positions2 = this.cartesian3Towgs84(this.previous.positions[_i20], this.sdk.viewer);\n _positions[0].push([_positions2.lng, _positions2.lat]);\n }\n var _positions3 = this.cartesian3Towgs84(this.previous.positions[0], this.sdk.viewer);\n _positions[0].push([_positions3.lng, _positions3.lat]);\n var _polygon = turf.polygon(_positions);\n var _centroid = turf.centroid(_polygon);\n var _ground2 = false;\n var height = 0;\n switch (this.options.heightMode) {\n case '0':\n case 0:\n _ground2 = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(_centroid.geometry.coordinates[0], _centroid.geometry.coordinates[1]));\n _ground2 = false;\n break;\n case '2':\n case 2:\n _ground2 = true;\n break;\n }\n if (!_ground2) {\n this.label.position = [_centroid.geometry.coordinates[0], _centroid.geometry.coordinates[1], this.height + height];\n } else {\n this.label.position = [_centroid.geometry.coordinates[0], _centroid.geometry.coordinates[1]];\n }\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this.previous.positions);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.previous.positions), [_this.previous.positions[0], _this.previous.positions[1]]);\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n var _Cesium$Cartesian2,\n _this16 = this;\n var cartesian = Cesium.Cartesian3.fromDegrees(v.position.lng, v.position.lat, v.position.alt);\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var array = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian2 = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian2, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i21 = 0; _i21 < positions.length; _i21++) {\n disparity.push({\n x: center.x - positions[_i21].x,\n y: center.y - positions[_i21].y,\n z: center.z - positions[_i21].z\n });\n }\n var newpositions = [];\n for (var _i22 = 0; _i22 < disparity.length; _i22++) {\n newpositions.push({\n x: cartesian.x - disparity[_i22].x,\n y: cartesian.y - disparity[_i22].y,\n z: cartesian.z - disparity[_i22].z\n });\n }\n var ground = false;\n var height = 0;\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]));\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!ground) {\n this.label.position = [v.position.lng, v.position.lat, v.position.alt + height];\n } else {\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.sdk.viewer.entities.values);\n this.getClampToHeight({\n lng: v.position.lng,\n lat: v.position.lat\n }, objectsToExclude).then(function (height) {\n _this16.label.position = [v.position.lng, v.position.lat, height];\n });\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n if (newpositions.length > 0) {\n return new Cesium.PolygonHierarchy(newpositions);\n } else {\n return new Cesium.PolygonHierarchy(positions);\n }\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (newpositions.length > 0) {\n return [].concat(newpositions, [newpositions[0], newpositions[1]]);\n } else {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(positions), [positions[0], positions[1]]);\n }\n }, false);\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions() {\n var _this17 = this;\n if (this._error) {\n return;\n }\n var ground = false;\n var array = [];\n var positions = this.options.positions;\n for (var i = 0; i < positions.length; i++) {\n array.push([positions[i].lng, positions[i].lat]);\n }\n array.push([positions[0].lng, positions[0].lat]);\n var height = 0;\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray = [];\n if (!ground && this.nodePoints.length == 0) {\n for (var _i23 = 0; _i23 < positions.length; _i23++) {\n fromDegreesArray.push(positions[_i23].lng, positions[_i23].lat, this.height + height);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.label && (this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.height + height]);\n } else {\n for (var _i24 = 0; _i24 < positions.length; _i24++) {\n fromDegreesArray.push(positions[_i24].lng, positions[_i24].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n setTimeout(function () {\n if (!_this17.sdk.viewer) {\n return;\n }\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this17.sdk.viewer.entities.values);\n _this17.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n _this17.label && (_this17.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n this.options.areaByMeter = this.computeArea(positions);\n this.areaUnit = this.areaUnit;\n return fromDegreesArray;\n }\n }, {\n key: \"setDIV\",\n value: function () {\n var _setDIV = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6() {\n var _this18 = this;\n var options,\n positions,\n i,\n polygon,\n centroid,\n height,\n objectsToExclude,\n siteInfoDom,\n siteInfoPosition,\n _args10 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n options = _args10.length > 0 && _args10[0] !== undefined ? _args10[0] : {\n domid: '',\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n positions = [[]];\n for (i = 0; i < this.options.positions.length; i++) {\n positions[0].push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n positions[0].push([this.options.positions[0].lng, this.options.positions[0].lat]);\n polygon = turf.polygon(positions);\n centroid = turf.pointOnFeature(polygon);\n if (ground) {\n _context10.next = 12;\n break;\n }\n height = this.options.height;\n _context10.next = 16;\n break;\n case 12:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.sdk.viewer.entities.values);\n _context10.next = 15;\n return this.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude);\n case 15:\n height = _context10.sent;\n case 16:\n siteInfoDom = document.getElementById(options.domid);\n siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this18.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n case 19:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6, this);\n }));\n function setDIV() {\n return _setDIV.apply(this, arguments);\n }\n return setDIV;\n }()\n }], [{\n key: \"create\",\n value: function create(that) {\n var ground;\n if (that.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n that.renewPositions();\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n that.options.heightMode = 0;\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n id: that.options.id,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(that.positions),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positions), [that.positions[0], that.positions[1]]),\n width: that.options.line.width,\n arcType: Cesium.ArcType.NONE,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true\n }, \"arcType\", !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC), \"zIndex\", that.sdk._entityZIndex)\n });\n that.sdk._entityZIndex++;\n PolygonObject.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(that) {\n var positions, i, polygon, centroid, height, ground, _i25, objectsToExclude;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n positions = [[]];\n for (i = 0; i < that.options.positions.length; i++) {\n positions[0].push([that.options.positions[i].lng, that.options.positions[i].lat]);\n }\n positions[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n polygon = turf.polygon(positions); // let centroid = turf.centroid(polygon);\n centroid = turf.pointOnFeature(polygon);\n height = 0;\n _context11.t0 = that.heightMode;\n _context11.next = _context11.t0 === 0 ? 9 : _context11.t0 === '0' ? 9 : _context11.t0 === 1 ? 11 : _context11.t0 === '1' ? 11 : _context11.t0 === 2 ? 14 : _context11.t0 === '2' ? 14 : 16;\n break;\n case 9:\n ground = false;\n return _context11.abrupt(\"break\", 16);\n case 11:\n for (_i25 = 0; _i25 < positions.length; _i25++) {\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions[_i25].lng, positions[_i25].lat));\n }\n ground = false;\n return _context11.abrupt(\"break\", 16);\n case 14:\n ground = true;\n return _context11.abrupt(\"break\", 16);\n case 16:\n if (ground) {\n _context11.next = 20;\n break;\n }\n height = that.options.height + height;\n _context11.next = 24;\n break;\n case 20:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _context11.next = 23;\n return that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude);\n case 23:\n height = _context11.sent;\n case 24:\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: height\n };\n }\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: ground\n });\n case 26:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop10 = function _loop10() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop11 = function _loop11() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop11();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop10()) continue;\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n setTimeout(function () {\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee9() {\n var objectsToExclude, _i31, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee9$(_context13) {\n while (1) switch (_context13.prev = _context13.next) {\n case 0:\n // sdk.viewer.scene.primitives\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _i31 = 0;\n case 2:\n if (!(_i31 < that.options.positions.length)) {\n _context13.next = 11;\n break;\n }\n _context13.next = 5;\n return that.getClampToHeight(that.options.positions[_i31], objectsToExclude);\n case 5:\n height = _context13.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i31,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i31].lng, that.options.positions[_i31].lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 8:\n _i31++;\n _context13.next = 2;\n break;\n case 11:\n case \"end\":\n return _context13.stop();\n }\n }, _callee9);\n }));\n return function createNodePoints() {\n return _ref2.apply(this, arguments);\n };\n }();\n YJ.Measure.SetMeasureStatus(true);\n that.picking = false;\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var newpositions = [];\n var fromDegreesArray = [];\n for (var i = 0; i < that.options.positions.length; i++) {\n fromDegreesArray.push(that.options.positions[i].lng, that.options.positions[i].lat);\n }\n newpositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var added = false;\n var leftEvent = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee8(movement, cartesian) {\n var potHeight, entity, positions, _fromDegreesArray, _i26, _objectsToExclude, _positions4, _i27, polygon, centroid, pick;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee8$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n if (!selectPoint) {\n _context12.next = 32;\n break;\n }\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n originalPosition = that.options.positions[selectPoint.index];\n added = true;\n _context12.next = 6;\n return that.getClampToHeight(that.options.positions[selectPoint.index]);\n case 6:\n potHeight = _context12.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, potHeight),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n positions = that.options.positions;\n _fromDegreesArray = [];\n for (_i26 = 0; _i26 < positions.length; _i26++) {\n _fromDegreesArray.push(positions[_i26].lng, positions[_i26].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(_fromDegreesArray);\n newpositions = Cesium.Cartesian3.fromDegreesArray(_fromDegreesArray);\n _objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n if (that.options.positions.length < 3) {\n that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n }, _objectsToExclude).then(function (height) {\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, height];\n });\n } else {\n _positions4 = [[]];\n for (_i27 = 0; _i27 < that.options.positions.length; _i27++) {\n _positions4[0].push([that.options.positions[_i27].lng, that.options.positions[_i27].lat]);\n }\n _positions4[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n polygon = turf.polygon(_positions4);\n centroid = turf.centroid(polygon);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, _objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n }\n that.options.areaByMeter = that.computeArea(that.options.positions);\n _context12.t0 = that.options['area-unit'];\n _context12.next = _context12.t0 === '平方米' ? 21 : _context12.t0 === '平方千米' ? 23 : _context12.t0 === '亩' ? 25 : _context12.t0 === '公顷' ? 27 : 29;\n break;\n case 21:\n that.area = that.options.areaByMeter;\n return _context12.abrupt(\"break\", 30);\n case 23:\n that.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n return _context12.abrupt(\"break\", 30);\n case 25:\n that.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n return _context12.abrupt(\"break\", 30);\n case 27:\n that.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n return _context12.abrupt(\"break\", 30);\n case 29:\n that.area = that.options.areaByMeter;\n case 30:\n _context12.next = 34;\n break;\n case 32:\n pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键开始,右键结束,CTRL+右键撤销');\n originalPosition = that.cartesian3Towgs84(selectPoint.position.getValue(), that.sdk.viewer);\n }\n case 34:\n case \"end\":\n return _context12.stop();\n }\n }, _callee8);\n }));\n return function leftEvent(_x5, _x6) {\n return _ref.apply(this, arguments);\n };\n }();\n var rightEvent = function rightEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = originalPosition;\n // that.options.positions.splice(selectPoint.index, 1)\n if (added) {\n that.options.positions.splice(selectPoint.index, 1);\n }\n cb(null, that.options.positions);\n }\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n that.heightMode = that.heightMode;\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(newpositions);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (newpositions.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(newpositions), [newpositions[0], newpositions[1], newpositions[2]]);\n } else {\n return newpositions;\n }\n }, false);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n if (that.options.positions.length < 3) {\n that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n }, objectsToExclude).then(function (height) {\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, height];\n });\n } else {\n var positions = [[]];\n for (var _i28 = 0; _i28 < that.options.positions.length; _i28++) {\n positions[0].push([that.options.positions[_i28].lng, that.options.positions[_i28].lat]);\n }\n positions[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n var polygon = turf.polygon(positions);\n var centroid = turf.centroid(polygon);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n }\n setTimeout(function () {\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n var _positions5 = that.options.positions;\n var _fromDegreesArray2 = [];\n for (var _i29 = 0; _i29 < _positions5.length; _i29++) {\n _fromDegreesArray2.push(_positions5[_i29].lng, _positions5[_i29].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(_fromDegreesArray2);\n newpositions = Cesium.Cartesian3.fromDegreesArray(_fromDegreesArray2);\n var _objectsToExclude2 = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n if (that.options.positions.length < 3) {\n that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n }, _objectsToExclude2).then(function (height) {\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, height];\n });\n } else {\n var _positions6 = [[]];\n for (var _i30 = 0; _i30 < that.options.positions.length; _i30++) {\n _positions6[0].push([that.options.positions[_i30].lng, that.options.positions[_i30].lat]);\n }\n _positions6[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n var _polygon2 = turf.polygon(_positions6);\n var _centroid2 = turf.centroid(_polygon2);\n that.getClampToHeight({\n lng: _centroid2.geometry.coordinates[0],\n lat: _centroid2.geometry.coordinates[1]\n }, _objectsToExclude2).then(function (height) {\n that.label.position = [_centroid2.geometry.coordinates[0], _centroid2.geometry.coordinates[1], height];\n });\n }\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions.pop();\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = 0;\n }\n }\n that.nodePoints.pop();\n }\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n createNodePoints();\n }, 200);\n }\n }, 50);\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n if (!that.sdk || !that.sdk.viewer) {\n return;\n }\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PolygonObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWdvbk9iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Qb2x5Z29uT2JqZWN0L2luZGV4LmpzP2M0ZDMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOWkmui+ueW9olxyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZydcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSAnLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnMnXHJcbmltcG9ydCByaWNoVGV4dCBmcm9tICcuLi8uLi9FbGVtZW50L3JpY2hUZXh0J1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnLi9fZWxlbWVudCdcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vaW5kZXgnXHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0J1xyXG5pbXBvcnQgeyBnZXRGb250TGlzdCwgZ2V0Rm9udEZhbWlseU5hbWUgfSBmcm9tICcuLi8uLi9FbGVtZW50L2ZvbnRTZWxlY3QnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuLy8gaW1wb3J0IEVkaXRQYXJ0aWNsZSBmcm9tIFwiLi4vLi4vTW9kZWxDb250cm9sbGVyL0VkaXRQYXJ0aWNsZVwiO1xyXG5cclxuY2xhc3MgUG9seWdvbk9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjcmlwdGlvbiDlpJrovrnlvaJcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5ZSv5LiA5qCH6K+GXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufSDmmL7npLov6ZqQ6JePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubmFtZSB7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb2xvcj0ncmdiYSgyNTUsIDAsIDAsIDAuNSknIHtzdHJpbmd9IOminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHRNb2RlPTJ7bnVtYmVyfSDpq5jluqbmqKHlvI/vvIgw77ya5rW35ouU6auY5bqm77ybMe+8muebuOWvueWcsOihqO+8mzLvvJrkvp3pmYTmqKHlvI/vvIlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hcmVhVW5pdD0n5bmz5pa557GzJyB7c3RyaW5nfSDpnaLnp6/ljZXkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lIHtvYmplY3R9IOi+ueahhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUud2lkdGg9MiB7c3RyaW5nfSDovrnmoYblrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lLmNvbG9yPVwicmdiYSgxNTUsIDE1NSwgMTI0LCAwLjg5KVwiIHtzdHJpbmd9IOi+ueahhuminOiJslxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMucG9zaXRpb25zIOW/heWhq++8jOe7j+e6rOW6puWSjOmrmOW6pueahOWIl+ihqO+8jOWAvOS6pOabvyBbe2xvbixsYXQsYWx0fSwuLi5dXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwudGV4dCB7c3RyaW5nfSDmoIfnrb7mlofmnKxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogXHJcblxyXG5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gX0RpYWxvZyB7b2JqZWN0fSDlvLnmoYbkuovku7ZcclxuICAgKiBAcGFyYW0gX0RpYWxvZy5jb25maXJtQ2FsbEJhY2sge2Z1bmN0aW9ufSDlvLnmoYbnoa7orqTml7bnmoTlm57osINcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID1cclxuICAgICAgb3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZSA9IG9wdGlvbnMubGluZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHRoaXMub3B0aW9ucy5saW5lLndpZHRoIHx8IHRoaXMub3B0aW9ucy5saW5lLndpZHRoID09PSAwKSA/IHRoaXMub3B0aW9ucy5saW5lLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID1cclxuICAgICAgdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgfHwgJ3JnYmEoMjU1LCAwLCAwLCAxKSdcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSBvcHRpb25zWydhcmVhLXVuaXQnXSB8fCAn5bmz5pa557GzJ1xyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLl9lbG1zID0ge31cclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTpcclxuICAgICAgICBvcHRpb25zLmxhYmVsLmZvbnRTaXplIHx8IG9wdGlvbnMubGFiZWwuZm9udFNpemUgPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gICAgICAgICAgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgICAgICAgIDogNCxcclxuICAgICAgcGl4ZWxPZmZzZXQ6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwXHJcbiAgICAgICAgICA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgICAgICAgIDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5uZWFyIHx8IG9wdGlvbnMubGFiZWwubmVhciA9PT0gMFxyXG4gICAgICAgICAgPyBvcHRpb25zLmxhYmVsLm5lYXJcclxuICAgICAgICAgIDogMjAwMCxcclxuICAgICAgZmFyOlxyXG4gICAgICAgIG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwXHJcbiAgICAgICAgICA/IG9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICAgICAgICA6IDEwMDAwMFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPVxyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wb3NpdGlvbnMgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgIHRoaXMuX2Vycm9yID0gJ+Wkmui+ueW9ouacgOWwkemcgOimgeS4ieS4quWdkOagh++8gSdcclxuICAgICAgY29uc29sZS53YXJuKHRoaXMuX2Vycm9yKVxyXG4gICAgICB3aW5kb3cuRUxFTUVOVCAmJlxyXG4gICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5fZXJyb3IsXHJcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5oZWlnaHQgJiYgdGhpcy5vcHRpb25zLmhlaWdodCAhPT0gMCkge1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlaWdodCA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0KSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBoZWlnaHRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICB0aGlzLl96SW5kZXggPSB0aGlzLnNkay5lbnRpdHlNYXAuc2l6ZVxyXG4gICAgICBQb2x5Z29uT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ1BvbHlnb25PYmplY3QnXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMuZW50aXR5LnBvbHlnb24pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5Z29uKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgdGhpcy5oZWlnaHRNb2RlID0gMFxyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDAsMCwwLjUpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IFtdXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSAodiB8fCB2ID09IDApID8gdiA6IDJcclxuICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgICAgUG9seWdvbk9iamVjdC5jbG9zZU5vZGVFZGl0KHRoaXMpXHJcbiAgICAgIGxldCBncm91bmQgPSBmYWxzZVxyXG4gICAgICBsZXQgZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucG9zaXRpb25zLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICAgIF1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNcclxuICAgICAgKVxyXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5rW35ouU6auY5bqmJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfnm7jlr7nlnLDooagnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5L6d6ZmE5qih5Z6LJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSAhZ3JvdW5kID8gQ2VzaXVtLkFyY1R5cGUuTk9ORSA6IENlc2l1bS5BcmNUeXBlLkdFT0RFU0lDLFxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSAhZ3JvdW5kID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZSAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlLnZhbHVlID0gaGVpZ2h0TW9kZU5hbWUpXHJcbiAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCAmJiAodGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKFxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lXHJcbiAgICAgICkpXHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSAmJiB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcih2KS50b0ZpeGVkKDIpKVxyXG4gICAgfVxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmV3UG9zaXRpb25zKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucG9zaXRpb25zLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICAgIF1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9ICFncm91bmQgPyBmYWxzZSA6IHRydWVcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgIH0sIDApO1xyXG5cclxuICAgIHRoaXMuX2VsbXMuYWx0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgPSB2IHx8ICdyZ2JhKDI1NSwgMCwgMCwgMC41KSdcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMuZW50aXR5LnBvbHlsaW5lKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5saW5lLmNvbG9yKVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmxpbmUuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBjXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSAncmdiYSgyNTUsMCwwLDAuNSknXHJcbiAgICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS53aWR0aFxyXG4gIH1cclxuICBzZXQgbGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLndpZHRoID0gKCh2IHx8IHYgPT09IDApID8gdiA6IDMpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS53aWR0aCA9IHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgICB0aGlzLl9lbG1zLmxpbmVXaWR0aCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVXaWR0aC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXJlYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXJlYVxyXG4gIH1cclxuXHJcbiAgc2V0IGFyZWEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmFyZWEgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWEgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hcmVhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhVW5pdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgfVxyXG4gIHNldCBhcmVhVW5pdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhVW5pdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFyZWFVbml0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIpIHtcclxuICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMDAwKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKFxyXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAhdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mb250RmFtaWx5ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkpXHJcblxyXG4gICAgbGV0IG5hbWUgPSBnZXRGb250RmFtaWx5TmFtZSh0aGlzLmxhYmVsRm9udEZhbWlseSkgfHwgJydcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IG5hbWVcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsUGl4ZWxPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBsYWJlbFBpeGVsT2Zmc2V0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhYmVsTGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMCwyNTUsMjU1LDAuNSknXHJcbiAgICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt2LCB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXV1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFtcclxuICAgICAgICAgIGlcclxuICAgICAgICBdID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICAgIGxldCBhdHRyaWJ1dGVDb250ZW50ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgJ2F0dHJpYnV0ZS1jb250ZW50J1xyXG4gICAgKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdikgPiAtMVxyXG4gICAgICApIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8XHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdhdHRyaWJ1dGUtY29udGVudC1saW5rJ1xyXG4gICAgICApLmxlbmd0aCA9PSAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdXHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9XHJcbiAgICAgICAgYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBjZW50ZXJcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICtcclxuICAgICAgICBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgY2VudGVyXCI+YCArXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICtcclxuICAgICAgICBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIGluZGV4ID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdXHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0IC0gMTAgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICdpbnB1dCdcclxuICAgICAgICAgICAgKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogaSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgJycpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJlxyXG4gICAgICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSBldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKVxyXG4gICAgICAgIF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QgfHxcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHxcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnYXR0cmlidXRlLWNvbnRlbnQtdnInXHJcbiAgICAgICkubGVuZ3RoID09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdXHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID1cclxuICAgICAgICBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgK1xyXG4gICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgK1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXS51cmwgK1xyXG4gICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgaW5kZXggPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgLSAxMCArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1blttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiBpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgJycpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJlxyXG4gICAgICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtcclxuICAgICAgICAgIGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JylcclxuICAgICAgICBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1blttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoYXQuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGF0LnJlbmV3UG9zaXRpb25zKClcclxuXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMuaGVpZ2h0TW9kZSA9IDBcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGF0LmVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogIWdyb3VuZCA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhhdC5wb3NpdGlvbnMsIHRoYXQucG9zaXRpb25zWzBdLCB0aGF0LnBvc2l0aW9uc1sxXV0sXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5saW5lLndpZHRoLFxyXG4gICAgICAgIGFyY1R5cGU6IENlc2l1bS5BcmNUeXBlLk5PTkUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhhdC5vcHRpb25zLmxpbmUuY29sb3IpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6ICFncm91bmQgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgYXJjVHlwZTogIWdyb3VuZCA/IENlc2l1bS5BcmNUeXBlLk5PTkUgOiBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQyxcclxuICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgUG9seWdvbk9iamVjdC5jcmVhdGVMYWJlbCh0aGF0KVxyXG5cclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUxhYmVsKHRoYXQpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbW11dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zaXRpb25zWzBdLnB1c2goW1xyXG4gICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XHJcbiAgICAgIF0pXHJcbiAgICB9XHJcbiAgICBwb3NpdGlvbnNbMF0ucHVzaChbXHJcbiAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdFxyXG4gICAgXSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9ucylcclxuICAgIC8vIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pXHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuICAgIGxldCBncm91bmRcclxuICAgIHN3aXRjaCAodGhhdC5oZWlnaHRNb2RlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBoZWlnaHQgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGlmICghZ3JvdW5kKSB7XHJcbiAgICAgIGhlaWdodCA9IHRoYXQub3B0aW9ucy5oZWlnaHQgKyBoZWlnaHRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgIGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbikge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgIGFsdDogaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIOagh+etvlxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbXHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LFxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRcclxuICAgICAgXSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgIGdyb3VuZDogZ3JvdW5kXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g57yW6L6R5qGGXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KCkge1xyXG4gICAgICAgIGxldCB0YWJsZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3BhdGlhbC1pbmZvLXRhYmxlJylbMF1cclxuICAgICAgICBsZXQgdEJvZHlFbG0gPSB0YWJsZUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICB0Qm9keUVsbS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZyA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgICB0ci5jbGFzc05hbWUgPSAndHInXHJcbiAgICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2kgKyAxfTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGxuZyBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsYXQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgYWx0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgIGBcclxuICAgICAgICAgIGxldCBsbmdCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsbmcnKVswXVxyXG4gICAgICAgICAgbGV0IGxuZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgbG5nLmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgICBsZXQgbG5nSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsbmdJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxuZ0lucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxuZ0lucHV0Lm1pbiA9IC0xODBcclxuICAgICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGxhdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhdCcpWzBdXHJcbiAgICAgICAgICBsZXQgbGF0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBsYXQuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KVxyXG4gICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICAgIGxldCBsYXRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGxhdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGxhdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgbGF0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgbGF0SW5wdXQubWluID0gLTkwXHJcbiAgICAgICAgICBsYXRJbnB1dC5tYXggPSA5MFxyXG4gICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGFsdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsdCcpWzBdXHJcbiAgICAgICAgICBsZXQgYWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG4gICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIGxldCBhbHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuICAgICAgICAgIGFsdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICAgIGFsdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudGl0bGUgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQubWluID0gLTk5OTk5OTlcclxuICAgICAgICAgIGFsdElucHV0Lm1heCA9IDk5OTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSAoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpXHJcblxyXG4gICAgICAgICAgbG5nQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZ0lucHV0KVxyXG4gICAgICAgICAgICBsbmdJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIF90aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgUG9seWdvbk9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZ0JveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcgPSBOdW1iZXIoTnVtYmVyKGxuZ0lucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmcuaW5uZXJIVE1MID0gX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gX3RoaXMuaGVpZ2h0XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGxhdEJveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXRJbnB1dClcclxuICAgICAgICAgICAgbGF0SW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFBvbHlnb25PYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbGF0Qm94LmFwcGVuZENoaWxkKGxhdClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0ID0gTnVtYmVyKE51bWJlcihsYXRJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbGF0LmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodCA9IF90aGlzLmhlaWdodFxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBhbHRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHRJbnB1dClcclxuICAgICAgICAgICAgYWx0SW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFBvbHlnb25PYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0ID0gTnVtYmVyKE51bWJlcihhbHRJbnB1dC52YWx1ZSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0LmlubmVySFRNTCA9IE51bWJlcihfdGhpcy5oZWlnaHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZy5wdXNoKGxuZylcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0LnB1c2gobG5nSW5wdXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXQucHVzaChsYXQpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sYXRJbnB1dC5wdXNoKGxhdElucHV0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0LnB1c2goYWx0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQucHVzaChhbHRJbnB1dClcclxuICAgICAgICAgIHRCb2R5RWxtLmFwcGVuZENoaWxkKHRyKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfpnaLlsZ7mgKcnLFxyXG4gICAgICAgIGxlZnQ6ICcxODBweCcsXHJcbiAgICAgICAgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sXHJcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSxcclxuICAgICAgICAgICAgYWx0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzJdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJlxyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucHJldmlvdXMgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogc2hvdyA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOS6jOasoee8lui+keWbnuiwg1xyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgUG9seWdvbk9iamVjdC5ub2RlRWRpdCh0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgcG9seWdvbidcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdwb2x5Z29uLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZUNvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5saW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsQ29sb3InKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbExpbmVDb2xvcicpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0JylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbEJhY2tncm91bmRDb2xvckVuZCcpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAvLyBsZXQgaGVpZ2h0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgLy8gICAnaGVpZ2h0J1xyXG4gICAgICAvLyApWzBdXHJcbiAgICAgIC8vIGhlaWdodEVsbS52YWx1ZSA9IHRoaXMuaGVpZ2h0XHJcbiAgICAgIC8vIGhlaWdodEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4ge1xyXG4gICAgICAvLyAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgIC8vICAgaWYgKFxyXG4gICAgICAvLyAgICAgKGUuZGF0YSA9PT0gJy4nICYmIHZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEpIHx8XHJcbiAgICAgIC8vICAgICAoZS5kYXRhID09PSAnLScgJiYgdmFsdWUuaW5kZXhPZignLScpID09PSAtMSlcclxuICAgICAgLy8gICApIHtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIC8vICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAvLyAgICAgICBpZiAoZS50YXJnZXQubWF4ICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgLy8gICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgaWYgKGUudGFyZ2V0Lm1pbiAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgIC8vICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICB0aGlzLmhlaWdodCA9IHZhbHVlXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KVxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKVxyXG4gICAgICBQb2x5Z29uT2JqZWN0LkV2ZW50QmluZGluZyh0aGlzLCBhbGxfZWxtKVxyXG4gICAgICAvLyB0aGlzLl9lbG1zLmhlaWdodCA9IFtoZWlnaHRFbG1dXHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yID0gW2xpbmVjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2xhYmVsQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IgPSBbbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdhdHRyaWJ1dGUtc2VsZWN0LWJveCdcclxuICAgICAgICApWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgJy5hdHRyaWJ1dGUtc2VsZWN0JylcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5bmz5pa557GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICflubPmlrnnsbMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5bmz5pa55Y2D57GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICflubPmlrnljYPnsbMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5LqpJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkuqknXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5YWs6aG3JyxcclxuICAgICAgICAgICAgdmFsdWU6ICflhazpobcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5pbnB1dC1zZWxlY3QtdW5pdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh1bml0RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhVW5pdCA9IHVuaXREYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWlnaHRCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtYm94JylbMF1cclxuICAgICAgICBsZXQgaGVpZ2h0RWxtID0gaGVpZ2h0Qm94RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gMTBcclxuICAgICAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICAgIGtleTogJzAnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgICAga2V5OiAnMScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkvp3pmYTmqKHlnosnLFxyXG4gICAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2hlaWdodC1tb2RlLWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmhlaWdodC1tb2RlJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaChoZWlnaHRNb2RlRGF0YSlcclxuICAgICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaGVpZ2h0TW9kZURhdGFbaV0udmFsdWUgPT09IGhlaWdodE1vZGVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBoZWlnaHRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHQgPSBoZWlnaHRFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSA9IGhlaWdodENvbmZpcm1FbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBQb2x5Z29uT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCA9IE51bWJlcigodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgLy8gICB0aGlzLl9lbG1zLmFsdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgLy8gdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAgICAgICAvLyAgIC4uLnRoaXMucG9zaXRpb25zLFxyXG4gICAgICAgICAgICAvLyAgIHRoaXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgICAgICAvLyAgIHRoaXMucG9zaXRpb25zWzFdXHJcbiAgICAgICAgICAgIC8vIF1cclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgLy8gUG9seWdvbk9iamVjdC5jbG9zZU5vZGVFZGl0KHRoaXMpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvbnREYXRhID0gZ2V0Rm9udExpc3QoKVxyXG4gICAgICAgIGxldCBmb250T2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdmb250LXNlbGVjdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5mb250LXNlbGVjdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGZvbnRPYmplY3QpIHtcclxuICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2goZm9udERhdGEpXHJcbiAgICAgICAgICBsZXQgZm9udERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZvbnQtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0udmFsdWUgPSBmb250RGF0YVt0aGlzLmxhYmVsRm9udEZhbWlseV0udmFsdWVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoZm9udERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gZm9udERhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ID0gW2ZvbnREYXRhTGVncEVsbV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuXHJcblxyXG5cclxuICAgICAgfSwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5ICYmICF0aGlzLl9EaWFsb2dPYmplY3QpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5hcmVhID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYXJlYVxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5oZWlnaHRcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9uc1snYXJlYS11bml0J11cclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBwb3NpdGlvbnMyID0gW1tdXVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5vcHRpb25zLmhlaWdodCA9PT0gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICBwb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgICAgIClcclxuICAgICAgICBwb3NpdGlvbnMyWzBdLnB1c2goW3Bvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIHBvc2l0aW9uczJbMF0ucHVzaChbcG9zaXRpb25zWzBdLmxuZywgcG9zaXRpb25zWzBdLmxhdF0pXHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgICAgIHBvc2l0aW9uczJbMF0ucHVzaChbcG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICAgIH1cclxuICAgICAgcG9zaXRpb25zMlswXS5wdXNoKFtwb3NpdGlvbnNbMF0ubG5nLCBwb3NpdGlvbnNbMF0ubGF0XSlcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgLi4udGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgIHRoaXMucG9zaXRpb25zWzBdLFxyXG4gICAgICB0aGlzLnBvc2l0aW9uc1sxXVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgICovXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcG9zaXRpb25BcnJheSA9IFtdXHJcbiAgICAgIGxldCBncm91bmRcclxuICAgICAgc3dpdGNoICh0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChncm91bmQpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSlcclxuICAgICAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2goYS54LCBhLnksIGEueilcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaCh0aGlzLnBvc2l0aW9uc1tpXS54LCB0aGlzLnBvc2l0aW9uc1tpXS55LCB0aGlzLnBvc2l0aW9uc1tpXS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9uQXJyYXkpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliKDpmaRcclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdXHJcbiAgICAgICAgLnZhbHVlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICAgIClbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnbGlua19hZGQnXHJcbiAgICAgIClbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluaygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rKGxpbmspIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgdXJsOiBsaW5rXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIF9hZGRScigpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAndnJfYWRkJ1xyXG4gICAgICApWzBdLnZhbHVlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAndnJfYWRkJ1xyXG4gICAgICAgIClbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAndnJfYWRkJ1xyXG4gICAgICApWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgdXJsOiB2clxyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJk+W8gOWvjOaWh+acrOahhlxyXG4gICAqL1xyXG4gIG9wZW5SaWNoVGV4dEVkaXRvcihlKSB7XHJcbiAgICByaWNoVGV4dC5vcGVuKFxyXG4gICAgICB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50XHJcbiAgICApXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSBjb250ZW50ID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+WKn+iDvVxyXG4gICAqXHJcbiAgICogQG1lbWJlck9mIFNvdXJjZVxyXG4gICAqIEBwYXJhbSBzdGF0dXMge2Jvb2xlYW59XHJcbiAgICpcclxuICAgKiAqL1xyXG4gIHNldCBwb3NpdGlvbkVkaXRpbmcoc3RhdHVzKSB7XHJcbiAgICBQb2x5Z29uT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nID0gc3RhdHVzXHJcblxyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMubGFiZWwgJiZcclxuICAgICAgICAodGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICAgIGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgXHJcbiAgICAgICAgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFsuLi50aGlzLnBvc2l0aW9uc11cclxuICAgICAgbGV0IHBvc2l0aW9uczg0ID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcblxyXG4gICAgICBsZXQgZGlzcGFyaXR5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlyc3Rwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzBdLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgIGFycmF5LnB1c2goW2ZpcnN0cG9zaXRpb24ubG5nLCBmaXJzdHBvc2l0aW9uLmxhdF0pXHJcbiAgICAgIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFthcnJheV0pXHJcbiAgICAgIHZhciBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbilcclxuICAgICAgbGV0IGNlbnRlciA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgIC4uLmNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIClcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBkaXNwYXJpdHkucHVzaCh7XHJcbiAgICAgICAgICB4OiBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54LFxyXG4gICAgICAgICAgeTogY2VudGVyLnkgLSBwb3NpdGlvbnNbaV0ueSxcclxuICAgICAgICAgIHo6IGNlbnRlci56IC0gcG9zaXRpb25zW2ldLnpcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb244NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb3MzID0ge1xyXG4gICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaChwb3MzKVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoXHJcbiAgICAgICAgICAgIHBvczMsXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlclxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKF90aGlzLl9lbG1zLmxuZyAmJiBfdGhpcy5fZWxtcy5sbmdbaV0pIHtcclxuICAgICAgICAgICAgX3RoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChfdGhpcy5fZWxtcy5sYXQgJiYgX3RoaXMuX2VsbXMubGF0W2ldKSB7XHJcbiAgICAgICAgICAgIF90aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgcG9zMyA9IHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0uelxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2gocG9zMylcclxuICAgICAgICAgIHBvc2l0aW9uczg0W2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAgICAgICAgICAgcG9zMyxcclxuICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zODQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uczg0W2ldLmxuZywgcG9zaXRpb25zODRbaV0ubGF0XSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkucHVzaChbcG9zaXRpb25zODRbMF0ubG5nLCBwb3NpdGlvbnM4NFswXS5sYXRdKVxyXG4gICAgICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSlcclxuICAgICAgICBsZXQgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSkpXHJcbiAgICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICBpZiAoIWdyb3VuZCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnM4NC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zODRbaV0ubG5nLFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uczg0W2ldLmxhdCxcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodCArIGhlaWdodFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3Bvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdCwgdGhpcy5oZWlnaHQgKyBoZWlnaHRdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zODQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uczg0W2ldLmxuZywgcG9zaXRpb25zODRbaV0ubGF0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgIGxuZzogcG9zaXRpb244NC5sbmcsXHJcbiAgICAgICAgICAgIGxhdDogcG9zaXRpb244NC5sYXRcclxuICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtwb3NpdGlvbjg0LmxuZywgcG9zaXRpb244NC5sYXQsIGhlaWdodF1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQobGVmdEV2ZW50KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zKVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gWy4uLl90aGlzLnBvc2l0aW9ucywgX3RoaXMucG9zaXRpb25zWzBdLCBfdGhpcy5wb3NpdGlvbnNbMV1dXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnByZXZpb3VzKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFsuLi50aGlzLnByZXZpb3VzLnBvc2l0aW9uc11cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMubGFiZWwgfHwgIXRoaXMubGFiZWwuZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICAgIGByZ2JhKDI1NSwyNTUsMjU1LDEpYFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBbW11dXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcmV2aW91cy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgICAgdGhpcy5wcmV2aW91cy5wb3NpdGlvbnNbaV0sXHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgICApXHJcbiAgICAgICAgcG9zaXRpb25zWzBdLnB1c2goW3Bvc2l0aW9uczg0LmxuZywgcG9zaXRpb25zODQubGF0XSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9zaXRpb25zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgIHRoaXMucHJldmlvdXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlclxyXG4gICAgICApXHJcbiAgICAgIHBvc2l0aW9uc1swXS5wdXNoKFtwb3NpdGlvbnM4NC5sbmcsIHBvc2l0aW9uczg0LmxhdF0pXHJcbiAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9ucylcclxuICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKVxyXG5cclxuICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKSlcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFncm91bmQpIHtcclxuICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgICAgXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShfdGhpcy5wcmV2aW91cy5wb3NpdGlvbnMpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi5fdGhpcy5wcmV2aW91cy5wb3NpdGlvbnMsXHJcbiAgICAgICAgX3RoaXMucHJldmlvdXMucG9zaXRpb25zWzBdLFxyXG4gICAgICAgIF90aGlzLnByZXZpb3VzLnBvc2l0aW9uc1sxXVxyXG4gICAgICBdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIHN0YXRpYyBFdmVudEJpbmRpbmcodGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWRcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQubWF4ICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1pbiAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXNbbS52YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGF0Ll9lbG1zW20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhhdFttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNoYW5nZSc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgRXZlbnQucHVzaChlID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInICYmIHZhbHVlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGF0W20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlc1ttXSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVtb3ZlTmFtZS5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIGUgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICBFdmVudFt0XShlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBub2RlRWRpdCh0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICAgIHRoYXQucGlja2luZyA9IGZhbHNlXHJcbiAgICAgICAgdGhhdC50aXAgPSBuZXcgTW91c2VUaXAoJ+ivt+mAieaLqeS4gOS4qumhtueCue+8jOWPs+mUruWPlua2iCcsIHRoYXQuc2RrKVxyXG4gICAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICAgIGxldCBzZWxlY3RQb2ludFxyXG4gICAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3cG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG5cclxuICAgICAgICBsZXQgYWRkZWQgPSBmYWxzZVxyXG4gICAgICAgIGxldCBsZWZ0RXZlbnQgPSBhc3luYyAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdXHJcbiAgICAgICAgICAgIGFkZGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICBsZXQgcG90SGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KFxyXG4gICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sbmcsXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQsXHJcbiAgICAgICAgICAgICAgICBwb3RIZWlnaHRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLnNwbGljZShcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludC5pbmRleCxcclxuICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdXHJcbiAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0LnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoXHJcbiAgICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIG5ld3Bvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuXHJcbiAgICAgICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDMpIHtcclxuICAgICAgICAgICAgICB0aGF0XHJcbiAgICAgICAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgICAgICAgIGxuZzogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgICAgICAgIGxhdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRcclxuICAgICAgICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbW11dXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbMF0ucHVzaChbXHJcbiAgICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zWzBdLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdFxyXG4gICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKVxyXG4gICAgICAgICAgICAgIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbilcclxuICAgICAgICAgICAgICB0aGF0XHJcbiAgICAgICAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSB0aGF0LmNvbXB1dGVBcmVhKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgICAgICAgICB0aGF0LmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAn5bmz5pa55Y2D57GzJzpcclxuICAgICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcihcclxuICAgICAgICAgICAgICAgICAgKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcihcclxuICAgICAgICAgICAgICAgICAgKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgICAgICAgICB0aGF0LmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhhdC5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBwaWNrID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBwaWNrICYmXHJcbiAgICAgICAgICAgICAgcGljay5pZCAmJlxyXG4gICAgICAgICAgICAgIHBpY2suaWQubmFtZSAmJlxyXG4gICAgICAgICAgICAgIHBpY2suaWQubmFtZSA9PT0gJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2UocGljay5pZC5pbmRleCwgMSlcclxuICAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgICAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+W3pumUruW8gOWni++8jOWPs+mUrue7k+adn++8jENUUkwr5Y+z6ZSu5pKk6ZSAJylcclxuICAgICAgICAgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAgICAgICAgICAgICAgIHNlbGVjdFBvaW50LnBvc2l0aW9uLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJpZ2h0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gb3JpZ2luYWxQb3NpdGlvblxyXG4gICAgICAgICAgICAvLyB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMSlcclxuICAgICAgICAgICAgaWYgKGFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2IobnVsbCwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24ucGVyUG9zaXRpb25IZWlnaHQgPSBmYWxzZVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkobmV3cG9zaXRpb25zKVxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgLi4ubmV3cG9zaXRpb25zLFxyXG4gICAgICAgICAgICAgIG5ld3Bvc2l0aW9uc1swXSxcclxuICAgICAgICAgICAgICBuZXdwb3NpdGlvbnNbMV0sXHJcbiAgICAgICAgICAgICAgbmV3cG9zaXRpb25zWzJdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdwb3NpdGlvbnNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBmYWxzZSlcclxuXHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICB0aGF0XHJcbiAgICAgICAgICAgIC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgICAgICBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgIGxhdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRcclxuICAgICAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAgICAgLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnNbMF0ucHVzaChbXHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBvc2l0aW9uc1swXS5wdXNoKFtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKVxyXG4gICAgICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKVxyXG4gICAgICAgICAgdGhhdFxyXG4gICAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgIC50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodChyaWdodEV2ZW50KVxyXG5cclxuICAgICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoXHJcbiAgICAgICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgICAgICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcblxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhhdC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KFxyXG4gICAgICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBuZXdwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICAgICAgICBpZiAodGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0XHJcbiAgICAgICAgICAgICAgICAgIC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgICAgICAgICAgICBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRcclxuICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAgICAgICAgICAgLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbMF0ucHVzaChbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRcclxuICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uc1swXS5wdXNoKFtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKVxyXG4gICAgICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKVxyXG4gICAgICAgICAgICAgICAgdGhhdFxyXG4gICAgICAgICAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgICAgICAgICBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAgICAgICAgIC50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHNbdGhhdC5ub2RlUG9pbnRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGlmIChzZWxlY3RQb2ludC5pbmRleCA9PT0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RQb2ludC5pbmRleCA9IDBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnBvcCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgICAgICByaWdodEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBjcmVhdGVOb2RlUG9pbnRzKClcclxuICAgICAgICB9LCAyMDApO1xyXG5cclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKCkge1xyXG4gICAgICAgICAgLy8gc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzXHJcbiAgICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGF0LnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQodGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIGlmICghdGhhdC5zZGsgfHwgIXRoYXQuc2RrLnZpZXdlcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24odikge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICB2LnBvc2l0aW9uLmxuZyxcclxuICAgICAgdi5wb3NpdGlvbi5sYXQsXHJcbiAgICAgIHYucG9zaXRpb24uYWx0XHJcbiAgICApXHJcbiAgICBsZXQgcG9zaXRpb25zID0gWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0cG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFthcnJheV0pXHJcbiAgICB2YXIgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pXHJcbiAgICBsZXQgY2VudGVyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoLi4uY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkaXNwYXJpdHkucHVzaCh7XHJcbiAgICAgICAgeDogY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueCxcclxuICAgICAgICB5OiBjZW50ZXIueSAtIHBvc2l0aW9uc1tpXS55LFxyXG4gICAgICAgIHo6IGNlbnRlci56IC0gcG9zaXRpb25zW2ldLnpcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbmV3cG9zaXRpb25zLnB1c2goe1xyXG4gICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlICcwJzpcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKSlcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICBpZiAoIWdyb3VuZCkge1xyXG4gICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YucG9zaXRpb24ubG5nLCB2LnBvc2l0aW9uLmxhdCwgdi5wb3NpdGlvbi5hbHQgKyBoZWlnaHRdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGlzLnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHYucG9zaXRpb24ubG5nLCBsYXQ6IHYucG9zaXRpb24ubGF0IH0sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oXHJcbiAgICAgICAgaGVpZ2h0ID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdi5wb3NpdGlvbi5sbmcsIHYucG9zaXRpb24ubGF0LCBoZWlnaHRdXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkobmV3cG9zaXRpb25zKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkocG9zaXRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSlcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiBbLi4ubmV3cG9zaXRpb25zLCBuZXdwb3NpdGlvbnNbMF0sIG5ld3Bvc2l0aW9uc1sxXV1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gWy4uLnBvc2l0aW9ucywgcG9zaXRpb25zWzBdLCBwb3NpdGlvbnNbMV1dXHJcbiAgICAgIH1cclxuICAgIH0sIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGFycmF5LnB1c2goW3Bvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXRdKVxyXG4gICAgfVxyXG4gICAgYXJyYXkucHVzaChbcG9zaXRpb25zWzBdLmxuZywgcG9zaXRpb25zWzBdLmxhdF0pXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSlcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbilcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSkpIHx8IDBcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgaWYgKCFncm91bmQgJiYgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgcG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCArIGhlaWdodFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICB0aGlzLmhlaWdodCArIGhlaWdodFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgbG5nOiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICB9LCBvYmplY3RzVG9FeGNsdWRlKS50aGVuKGhlaWdodCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sXHJcbiAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9KVxyXG4gICAgICB9LCAxMDApXHJcbiAgICB9XHJcblxyXG4gICAgLy8g6K6h566X5oqV5b2x6Z2i56evXHJcbiAgICB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSB0aGlzLmNvbXB1dGVBcmVhKHBvc2l0aW9ucylcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLmFyZWFVbml0XHJcbiAgICByZXR1cm4gZnJvbURlZ3JlZXNBcnJheVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0RElWKG9wdGlvbnMgPSB7IGRvbWlkOiAnJywgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IG9wdGlvbnMueCB8fCBvcHRpb25zLnggPT09IDAgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gb3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCA/IG9wdGlvbnMueSA6IDEwXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3NpdGlvbnNbMF0ucHVzaChbXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXRcclxuICAgICAgXSlcclxuICAgIH1cclxuICAgIHBvc2l0aW9uc1swXS5wdXNoKFtcclxuICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICBdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKVxyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKVxyXG4gICAgbGV0IGhlaWdodFxyXG4gICAgaWYgKCFncm91bmQpIHtcclxuICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgfSwgb2JqZWN0c1RvRXhjbHVkZSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICBoZWlnaHRcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKHBlcmNlbnRhZ2UgPT4ge1xyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fFxyXG4gICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhcclxuICAgICAgICAgIHNpdGVJbmZvUG9zaXRpb25cclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQb2x5Z29uT2JqZWN0XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFqQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0RBO0FBekRBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBekJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrREE7QUF6REE7QUFBQTtBQUFBO0FBQUE7QUEwREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUEySEE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpIQTtBQUFBO0FBQUE7QUEwSEE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhEQTtBQXlEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUE1aUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK2lCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFVQTtBQUFBO0FBUEE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBcEdBO0FBQUE7QUFBQTtBQUFBO0FBc0dBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFaQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUFBO0FBdVFBO0FBQ0E7QUFBQTtBQWxRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWdlQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFBQTtBQU1BO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbERBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMXlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBRUE7QUFFQTtBQUFBO0FBRUE7QUFhQTtBQUFBO0FBVkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF6RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzb0NBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkVBO0FBQUE7QUFBQTtBQW1FQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUZBO0FBQUE7QUFLQTtBQXNGQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBMlVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQTtBQXZCQTtBQUFBO0FBQUE7QUExVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQWNBO0FBQUE7QUFaQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBQUE7QUFHQTtBQUVBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBNUhBO0FBQUE7QUFBQTtBQTZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBb05BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolygonObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/PolyhedronObject/_element.js": /*!***************************************************!*\ !*** ./src/Obj/Base/PolyhedronObject/_element.js ***! \***************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u591A\\u9762\\u4F53\\u989C\\u8272\\n
\\n
\\n
\\n \\u591A\\u9762\\u4F53\\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWhlZHJvbk9iamVjdC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Qb2x5aGVkcm9uT2JqZWN0L19lbGVtZW50LmpzP2VkZTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA2MCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtdW5pdC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCI+5oqV5b2x6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaW5wdXQtdGV4dFwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cImFyZWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlbGVjdC11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5aSa6Z2i5L2T6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWkmumdouS9k+mrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5OTk5OVwiIGRhdGEtbnVsbCBkYXRhLW1pbj1cIjAuMDFcIiBAbW9kZWw9XCJoZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaLieS8uOmrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OTlcIiBAbW9kZWw9XCJleHRydWRlZEhlaWdodFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWJzIGlkPVwicG9seWdvbi1vYmplY3QtZWRpdC10YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0xKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsU3R5bGVFbG0yKCl9XHJcbiAgICAgICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFicz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIGBcclxufVxyXG5cclxuZXhwb3J0IHsgaHRtbCB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBc0RBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolyhedronObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/PolyhedronObject/eventBinding.js": /*!*******************************************************!*\ !*** ./src/Obj/Base/PolyhedronObject/eventBinding.js ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n var blurEvent = function blurEvent() {};\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n var str = e.target.value + '';\n if (e.data != '.' && (e.data != '-' || e.target.value) && !(str.charAt(str.length - 1) == '0' && e.target.value.toString().includes('.')) && e.target.value != '0') {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min !== 'undefined' && e.target.dataset.min !== '') {\n var min = Number(e.target.dataset.min);\n if (value < min) {\n value = min;\n }\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n blurEvent = function blurEvent(e) {\n var value = e.target.value;\n if (e.target.type == 'number' && (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n that[m.value] = value;\n };\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n elements[i].addEventListener('blur', blurEvent);\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWhlZHJvbk9iamVjdC9ldmVudEJpbmRpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvUG9seWhlZHJvbk9iamVjdC9ldmVudEJpbmRpbmcuanM/YWY2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBldmVudEJpbmRpbmcge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5lbGVtZW50ID0ge31cclxuICB9XHJcbiAgc3RhdGljIGV2ZW50ID0ge31cclxuXHJcbiAgZ2V0RXZlbnQobmFtZSkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXVxyXG4gIH1cclxuXHJcbiAgZ2V0RXZlbnRBbGwoKSB7XHJcbiAgICByZXR1cm4gZXZlbnRCaW5kaW5nLmV2ZW50XHJcbiAgfVxyXG5cclxuICBzZXRFdmVudChuYW1lLCBldmVudCkge1xyXG4gICAgZXZlbnRCaW5kaW5nLmV2ZW50W25hbWVdID0gZXZlbnRcclxuICB9XHJcblxyXG4gIG9uKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBsZXQgYmx1ckV2ZW50ID0gKCkgPT4geyB9XHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZSBcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSBlLnRhcmdldC52YWx1ZSArICcnXHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSAmJiAhKHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09ICcwJyAmJiBlLnRhcmdldC52YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCcuJykpICYmIGUudGFyZ2V0LnZhbHVlICE9ICcwJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKChlLnRhcmdldC5tYXgpICYmIHZhbHVlPk51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKChlLnRhcmdldC5taW4pICYmIHZhbHVlPE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5kYXRhc2V0Lm1pbiAhPT0gJ3VuZGVmaW5lZCcgJiYgZS50YXJnZXQuZGF0YXNldC5taW4gIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbWluID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU8bWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWluXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBibHVyRXZlbnQgPSAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykgJiYgKGUudGFyZ2V0LnZhbHVlIHx8IChlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICd1bmRlZmluZWQnICYmIGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJycgJiYgIUJvb2xlYW4oZS50YXJnZXQuZGF0YXNldC5udWxsKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0LmRhdGFzZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKGVsZW1lbnRzW2ldLm5vZGVOYW1lPT0nSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmVsZW1lbnRbbS52YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRbbS52YWx1ZV0ucHVzaChlbGVtZW50c1tpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZihlLnRhcmdldC50eXBlID09ICdudW1iZXInICYmIHZhbHVlIT0nJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IG49MDtuPHJlbW92ZU5hbWUubGVuZ3RoO24rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50Lmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgIEV2ZW50W3RdKGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGJsdXJFdmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgRXZlbnRCaW5kaW5nID0gbmV3IGV2ZW50QmluZGluZygpO1xyXG5leHBvcnQgZGVmYXVsdCBFdmVudEJpbmRpbmc7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1RkE7QUFBQTtBQUFBO0FBNEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJIQTtBQUFBO0FBTUE7QUFnSEE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolyhedronObject/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/PolyhedronObject/index.js": /*!************************************************!*\ !*** ./src/Obj/Base/PolyhedronObject/index.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/PolyhedronObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/PolyhedronObject/eventBinding.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 多面体\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PolyhedronObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 多面体\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color=\"#ff0000\" {string} 颜色\r\n * @param options.height=10 {number} 高\r\n * @param options.areaUnit='平方米' {string} 投影面积单位\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function PolyhedronObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, PolyhedronObject);\n _this2 = _callSuper(this, PolyhedronObject, [sdk, options]);\n _this2.options.color = options.color || \"#ff0000\";\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.height = options.height || options.height === 0 ? options.height : 10;\n if (_this2.options.height <= 0.01) {\n _this2.options.height = 0.01;\n }\n // this.options.extrudedHeight = (options.extrudedHeight || options.extrudedHeight === 0) ? options.extrudedHeight : this.options.height + 5\n _this2.options.extrudedHeight = options.extrudedHeight || options.extrudedHeight === 0 ? options.extrudedHeight : 0;\n _this2.entity;\n _this2.nodePoints = [];\n _this2.operate = {};\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n if (!_this2.options.positions || _this2.options.positions.length < 3) {\n _this2._error = '多面体最少需要三个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n PolyhedronObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(PolyhedronObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(PolyhedronObject, [{\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set:\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n function set(status) {\n var _this3 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(this.positions)\n };\n if (status === true) {\n var _Cesium$Cartesian;\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n var material = Cesium.Color.fromCssColorString(this.options.color).withAlpha(0.99);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n this.picking = false;\n var array = [];\n var positions = this.positions;\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(centroid.geometry.coordinates));\n for (var _i = 0; _i < positions.length; _i++) {\n center.x - positions[_i].x;\n disparity.push({\n x: center.x - positions[_i].x,\n y: center.y - positions[_i].y,\n z: center.z - positions[_i].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n var position84 = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n var cartesian3 = Cesium.Cartesian3.fromDegrees(position84.lng, position84.lat);\n newpositions = [];\n for (var _i2 = 0; _i2 < disparity.length; _i2++) {\n newpositions.push({\n x: cartesian3.x - disparity[_i2].x,\n y: cartesian3.y - disparity[_i2].y,\n z: cartesian3.z - disparity[_i2].z\n });\n }\n _this3.label.position = [position84.lng, position84.lat, _this3.options.height + _this3.options.extrudedHeight];\n _this3.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.event.destroy();\n // let ray = this.sdk.viewer.camera.getPickRay(movement.position);//获取一条射线\n // let cartesian2 = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n var position84 = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n var cartesian3 = Cesium.Cartesian3.fromDegrees(position84.lng, position84.lat);\n newpositions = [];\n _this3.options.positions = [];\n for (var _i3 = 0; _i3 < disparity.length; _i3++) {\n newpositions.push({\n x: cartesian3.x - disparity[_i3].x,\n y: cartesian3.y - disparity[_i3].y,\n z: cartesian3.z - disparity[_i3].z\n });\n var _position = _this3.cartesian3Towgs84({\n x: cartesian3.x - disparity[_i3].x,\n y: cartesian3.y - disparity[_i3].y,\n z: cartesian3.z - disparity[_i3].z\n }, _this3.sdk.viewer);\n _position.alt = _position.alt - _this3.options.height;\n _this3.options.positions.push(_position);\n }\n _this3.positions = newpositions;\n _this3.previous.positions = newpositions;\n _this3.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this3.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.positionEditing = false;\n } else {\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.event.destroy();\n var position84 = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n var cartesian3 = Cesium.Cartesian3.fromDegrees(position84.lng, position84.lat);\n newpositions = [];\n _this3.options.positions = [];\n for (var _i4 = 0; _i4 < disparity.length; _i4++) {\n newpositions.push({\n x: cartesian3.x - disparity[_i4].x,\n y: cartesian3.y - disparity[_i4].y,\n z: cartesian3.z - disparity[_i4].z\n });\n var _position2 = _this3.cartesian3Towgs84({\n x: cartesian3.x - disparity[_i4].x,\n y: cartesian3.y - disparity[_i4].y,\n z: cartesian3.z - disparity[_i4].z\n }, _this3.sdk.viewer);\n _position2.alt = _position2.alt - _this3.options.height;\n _this3.options.positions.push(_position2);\n }\n _this3.positions = newpositions;\n _this3.previous.positions = newpositions;\n _this3.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n if (newpositions.length > 0) {\n return new Cesium.PolygonHierarchy(newpositions);\n } else {\n return new Cesium.PolygonHierarchy(positions);\n }\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n var _material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n _material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = _material;\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n var _positions = [[]];\n for (var _i5 = 0; _i5 < this.previous.positions.length; _i5++) {\n var _positions2 = this.cartesian3Towgs84(this.previous.positions[_i5], this.sdk.viewer);\n _positions[0].push([_positions2.lng, _positions2.lat]);\n }\n var positions84 = this.cartesian3Towgs84(this.previous.positions[0], this.sdk.viewer);\n _positions[0].push([positions84.lng, positions84.lat]);\n var _polygon = turf.polygon(_positions);\n var _centroid = turf.centroid(_polygon);\n this.label.position = [_centroid.geometry.coordinates[0], _centroid.geometry.coordinates[1], this.options.height + this.options.extrudedHeight];\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.previous.positions);\n }, true);\n }\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.color = v || '#ff0000';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this4.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.options.height = v;\n if (this.options.height <= 0.01) {\n this.options.height = 0.01;\n }\n var positions = [[]];\n for (var i = 0; i < this.options.positions.length; i++) {\n positions[0].push([this.options.positions[i].lng, this.options.positions[i].lat, this.options.height + this.options.extrudedHeight]);\n }\n positions[0].push([this.options.positions[0].lng, this.options.positions[0].lat, this.options.height + this.options.extrudedHeight]);\n var polygon = turf.polygon(positions);\n var centroid = turf.centroid(polygon);\n this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.options.extrudedHeight + this.options.height];\n var position;\n if (this.entity.polygon.hierarchy._value) {\n position = this.entity.polygon.hierarchy._value.positions;\n } else {\n position = this.entity.polygon.hierarchy._callback().positions;\n }\n var newPosition = [];\n this.entity.polygon.perPositionHeight = true;\n for (var _i6 = 0; _i6 < position.length; _i6++) {\n var cartographic = Cesium.Cartographic.fromCartesian(position[_i6]);\n var longitude = Cesium.Math.toDegrees(cartographic.longitude);\n var latitude = Cesium.Math.toDegrees(cartographic.latitude);\n var cartesian = new Cesium.Cartesian3.fromDegrees(longitude, latitude, this.options.extrudedHeight + v);\n newPosition.push(cartesian);\n }\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(newPosition);\n this.positions = newPosition;\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(this.positions)\n };\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"extrudedHeight\",\n get: function get() {\n return this.options.extrudedHeight;\n },\n set: function set(v) {\n this.options.extrudedHeight = v;\n var positions = [[]];\n for (var i = 0; i < this.options.positions.length; i++) {\n positions[0].push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n positions[0].push([this.options.positions[0].lng, this.options.positions[0].lat]);\n var polygon = turf.polygon(positions);\n var centroid = turf.centroid(polygon);\n this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.options.extrudedHeight + this.options.height];\n this._elms.extrudedHeight && this._elms.extrudedHeight.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i7;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this9.options.attribute.link.content;\n case 2:\n _this9.attributeLink = _context3.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i7) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i7)) {\n _context2.next = 36;\n break;\n }\n height = item[_i7].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i7].innerHTML = _html;\n textareaElm = item[_i7].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i7].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].url;\n btn = item[_i7].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i7);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i7 = 0;\n case 8:\n if (!(_i7 < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i7), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i7++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this9.options.attribute.link.content.splice(i, 1);\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i8) {\n var btn = item[_i8].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i8);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i8 = 0; _i8 < item.length; _i8++) {\n _loop3(_i8);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i9;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this10.options.attribute.vr.content;\n case 2:\n _this10.attributeVr = _context6.sent;\n table = _this10._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i9) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i9)) {\n _context5.next = 36;\n break;\n }\n height = item[_i9].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i9].innerHTML = _html2;\n textareaElm = item[_i9].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i9].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].url;\n btn = item[_i9].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i9);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i9 = 0;\n case 8:\n if (!(_i9 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i9), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i9++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this10.options.attribute.vr.content.splice(i, 1);\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this10.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i10) {\n var btn = item[_i10].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i10);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i10 = 0; _i10 < item.length; _i10++) {\n _loop7(_i10);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n\n // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this11 = this;\n var _this, contentElm, tabsElm, colorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!this._error) {\n _context7.next = 2;\n break;\n }\n return _context7.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 32;\n break;\n }\n _context7.next = 8;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '多面体属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this11.name = _this11.name.trim();\n if (!_this11.name) {\n _this11.name = '未命名对象';\n }\n _this11.options.label.position = {\n lng: _this11.label.position[0],\n lat: _this11.label.position[1],\n alt: _this11.label.position[2]\n };\n _this11.originalOptions = _this11.deepCopyObj(_this11.options);\n _this11._DialogObject.close();\n _this11.Dialog.confirmCallBack && _this11.Dialog.confirmCallBack(_this11.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(_this11.sdk, _this11.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"syncSplitData\"])(_this11.sdk, _this11.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this11.reset();\n _this11.Dialog.resetCallBack && _this11.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this11.Dialog.removeCallBack && _this11.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this11.reset();\n _this11.Dialog.closeCallBack && _this11.Dialog.closeCallBack();\n for (var i = 0; i < _this11.nodePoints.length; i++) {\n _this11.sdk.viewer.entities.remove(_this11.nodePoints[i]);\n }\n _this11.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n _this11.positionEditing = false;\n },\n showCallBack: function showCallBack(show) {\n _this11.options.show = show;\n _this11.originalOptions.show = show;\n _this11.show = show;\n _this11.Dialog.showCallBack && _this11.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this11.positionEditing = !_this11.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n PolyhedronObject.nodeEdit(_this11);\n }\n });\n case 8:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' polyhedron';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('polygon-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_16__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_16__[\"default\"].element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this11.attributeLink = _this11.options.attribute.link.content;\n _this11.attributeVr = _this11.options.attribute.vr.content;\n _this11.cameraSelect && _this11.cameraSelect();\n _this11.goodsSelect && _this11.goodsSelect();\n var tagData = _this11.attributeSelect;\n var attributeElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this11.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < tagData.length; _i11++) {\n if (tagData[_i11].value === attributeSelectElm.value) {\n _this11.attributeType = tagData[_i11].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this11._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this11.options['area-unit'];\n for (var _i12 = 0; _i12 < unitData.length; _i12++) {\n if (unitData[_i12].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i12].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i13 = 0; _i13 < unitData.length; _i13++) {\n if (unitData[_i13].value === unitDataLegpElm.value) {\n _this11.areaUnit = unitData[_i13].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this11._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this11.labelFontFamily].value;\n for (var _i14 = 0; _i14 < fontData.length; _i14++) {\n if (fontData[_i14].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i14].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i15 = 0; _i15 < fontData.length; _i15++) {\n if (fontData[_i15].value === fontDataLegpElm.value) {\n _this11.labelFontFamily = fontData[_i15].key;\n break;\n }\n }\n });\n _this11._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context7.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function () {\n var _reset = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n var positions, fromDegreesArray, i, _i16, positions2, _i17, polygon, centroid, height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n if (this.entity) {\n _context8.next = 2;\n break;\n }\n return _context8.abrupt(\"return\");\n case 2:\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.height = this.originalOptions.height;\n this.extrudedHeight = this.originalOptions.extrudedHeight;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n positions = this.options.positions;\n fromDegreesArray = [];\n if (this.options.height || this.options.height === 0) {\n for (i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, this.options.height + this.options.extrudedHeight);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n } else {\n for (_i16 = 0; _i16 < positions.length; _i16++) {\n fromDegreesArray.push(positions[_i16].lng, positions[_i16].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positions);\n positions2 = [[]];\n for (_i17 = 0; _i17 < this.options.positions.length; _i17++) {\n positions2[0].push([this.options.positions[_i17].lng, this.options.positions[_i17].lat]);\n }\n positions2[0].push([this.options.positions[0].lng, this.options.positions[0].lat]);\n polygon = turf.polygon(positions2);\n centroid = turf.pointOnFeature(polygon);\n _context8.next = 38;\n return this.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n });\n case 38:\n height = _context8.sent;\n this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.extrudedHeight + this.height];\n case 40:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }()\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label && this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context9.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context9.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this12 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this12.options.richTextContent = content;\n };\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this13 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var positions = [[]];\n for (var i = 0; i < this.options.positions.length; i++) {\n positions[0].push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n positions[0].push([this.options.positions[0].lng, this.options.positions[0].lat]);\n var polygon = turf.polygon(positions);\n var centroid = turf.pointOnFeature(polygon);\n var siteInfoDom = document.getElementById(options.domid);\n // let siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.options.extrudedHeight + this.options.height)\n\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], _this13.options.extrudedHeight + _this13.options.height);\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this13.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n var positions, i, polygon, centroid;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n positions = [[]];\n for (i = 0; i < that.options.positions.length; i++) {\n positions[0].push([that.options.positions[i].lng, that.options.positions[i].lat]);\n }\n positions[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n polygon = turf.polygon(positions);\n centroid = turf.pointOnFeature(polygon);\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: that.options.extrudedHeight + that.options.height\n };\n }\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n ground: false,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n });\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n /**\r\n * 创建多面体\r\n */\n }, {\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n var extrudedHeight = positions[0].alt;\n for (var i = 0; i < positions.length; i++) {\n if (extrudedHeight > positions[i].alt) {\n extrudedHeight = positions[i].alt;\n }\n }\n that.options.extrudedHeight = extrudedHeight;\n for (var _i18 = 0; _i18 < positions.length; _i18++) {\n fromDegreesArray.push(positions[_i18].lng, positions[_i18].lat, that.options.height + extrudedHeight);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(that.positions),\n extrudedHeight: that.options.extrudedHeight,\n perPositionHeight: true,\n material: material\n }\n });\n PolyhedronObject.createLabel(that);\n that.options.areaByMeter = that.computeArea(positions);\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n // that.positionEditing = false\n // that.event && that.event.destroy()\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var added = false;\n var leftEvent = function leftEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n originalPosition = that.options.positions[selectPoint.index];\n added = true;\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, that.options.extrudedHeight),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n that.options.areaByMeter = that.computeArea(that.options.positions);\n var labelPositions = [[]];\n for (var i = 0; i < that.options.positions.length; i++) {\n labelPositions[0].push([that.options.positions[i].lng, that.options.positions[i].lat]);\n }\n labelPositions[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n if (labelPositions[0].length >= 4) {\n var polygon = turf.polygon(labelPositions);\n var centroid = turf.centroid(polygon);\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], that.options.height + that.options.extrudedHeight];\n }\n switch (that.options['area-unit']) {\n case '平方米':\n that.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.area = that.options.areaByMeter;\n }\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键确认,右键结束,CTRL+右键撤销');\n originalPosition = that.cartesian3Towgs84(selectPoint.position._value, that.sdk.viewer);\n }\n }\n };\n var rightEvent = function rightEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = originalPosition;\n if (added) {\n that.options.positions.splice(selectPoint.index, 1);\n }\n that.options.areaByMeter = that.computeArea(that.options.positions);\n switch (that.options['area-unit']) {\n case '平方米':\n that.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.area = that.options.areaByMeter;\n }\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, that.options.height + that.options.extrudedHeight);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n that.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(that.positions);\n // let positions = []\n // cache_positions.forEach((item) => {\n // positions.push(this.cartesian3Towgs84(item, this.viewer))\n // })\n cb(null, that.options.positions);\n }\n for (var _i19 = 0; _i19 < that.nodePoints.length; _i19++) {\n that.sdk.viewer.entities.remove(that.nodePoints[_i19]);\n }\n that.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n };\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, that.options.height + that.options.extrudedHeight);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n that.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(that.positions);\n var labelPositions = [[]];\n for (var _i20 = 0; _i20 < that.options.positions.length; _i20++) {\n labelPositions[0].push([that.options.positions[_i20].lng, that.options.positions[_i20].lat]);\n }\n labelPositions[0].push([that.options.positions[0].lng, that.options.positions[0].lat]);\n if (labelPositions[0].length >= 4) {\n var polygon = turf.polygon(labelPositions);\n var centroid = turf.centroid(polygon);\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], that.options.height + that.options.extrudedHeight];\n }\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions.pop();\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n // that.nodePoints.pop()\n if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = 0;\n }\n }\n that.nodePoints.pop();\n }\n });\n for (var i = 0; i < that.options.positions.length; i++) {\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[i].lng, that.options.positions[i].lat, that.options.extrudedHeight),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n }\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(PolyhedronObject, \"elms\", {});\n/* harmony default export */ __webpack_exports__[\"default\"] = (PolyhedronObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWhlZHJvbk9iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Qb2x5aGVkcm9uT2JqZWN0L2luZGV4LmpzPzQzYmQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOWkmumdouS9k1xyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSBcIi4uLy4uL0VsZW1lbnQvcmljaFRleHRcIjtcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4vZXZlbnRCaW5kaW5nJ1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5cclxuY2xhc3MgUG9seWhlZHJvbk9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAZGVzY3JpcHRpb24g5aSa6Z2i5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5ZSv5LiA5qCH6K+GXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufSDmmL7npLov6ZqQ6JePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubmFtZSB7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb2xvcj1cIiNmZjAwMDBcIiB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHQ9MTAge251bWJlcn0g6auYXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXJlYVVuaXQ9J+W5s+aWueexsycge3N0cmluZ30g5oqV5b2x6Z2i56ev5Y2V5L2NXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge3N0cmluZ30g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8IFwiI2ZmMDAwMFwiXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gKG9wdGlvbnMuaGVpZ2h0IHx8IG9wdGlvbnMuaGVpZ2h0ID09PSAwKSA/IG9wdGlvbnMuaGVpZ2h0IDogMTBcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVpZ2h0IDw9IDAuMDEpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IDAuMDFcclxuICAgIH1cclxuICAgIC8vIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCA9IChvcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IHx8IG9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgPT09IDApID8gb3B0aW9ucy5leHRydWRlZEhlaWdodCA6IHRoaXMub3B0aW9ucy5oZWlnaHQgKyA1XHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgPSAob3B0aW9ucy5leHRydWRlZEhlaWdodCB8fCBvcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ID09PSAwKSA/IG9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgOiAwXHJcbiAgICB0aGlzLmVudGl0eVxyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gb3B0aW9uc1snYXJlYS11bml0J10gfHwgJ+W5s+aWueexsydcclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDMpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn5aSa6Z2i5L2T5pyA5bCR6ZyA6KaB5LiJ5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICBQb2x5aGVkcm9uT2JqZWN0LmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVsbXMgPSB7fVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3NpdGlvbnNbMF0ucHVzaChbdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgIH1cclxuICAgIHBvc2l0aW9uc1swXS5wdXNoKFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKTtcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYucG9pbnRPbkZlYXR1cmUocG9seWdvbik7XHJcbiAgICBpZiAoIXRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbikge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sIGFsdDogdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ICsgdGhhdC5vcHRpb25zLmhlaWdodCB9XHJcbiAgICB9XHJcbiAgICAvLyDmoIfnrb5cclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogW3RoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZ3JvdW5kOiBmYWxzZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuWkmumdouS9k1xyXG4gICAqL1xyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGxldCBleHRydWRlZEhlaWdodCA9IHBvc2l0aW9uc1swXS5hbHRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChleHRydWRlZEhlaWdodCA+IHBvc2l0aW9uc1tpXS5hbHQpIHtcclxuICAgICAgICBleHRydWRlZEhlaWdodCA9IHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ID0gZXh0cnVkZWRIZWlnaHRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCB0aGF0Lm9wdGlvbnMuaGVpZ2h0ICsgZXh0cnVkZWRIZWlnaHQpXHJcbiAgICB9XHJcbiAgICB0aGF0LnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZih0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgaGllcmFyY2h5OiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnMpLFxyXG4gICAgICAgIGV4dHJ1ZGVkSGVpZ2h0OiB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQsXHJcbiAgICAgICAgcGVyUG9zaXRpb25IZWlnaHQ6IHRydWUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICAgIFBvbHloZWRyb25PYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciA9IHRoYXQuY29tcHV0ZUFyZWEocG9zaXRpb25zKTtcclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+S6qSc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgfVxyXG4gICAgc3luY0RhdGEodGhhdC5zZGssIHRoYXQub3B0aW9ucy5pZClcclxuICAgIGlmKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcbiAgICAgICBcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uczogWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgKSlcclxuICAgICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICBpZih0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSBmYWxzZVxyXG4gICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnNcclxuXHJcbiAgICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBmaXJzdHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgICAgdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW2FycmF5XSk7XHJcbiAgICAgIHZhciBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54XHJcbiAgICAgICAgZGlzcGFyaXR5LnB1c2goe1xyXG4gICAgICAgICAgeDogY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueCxcclxuICAgICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgICB6OiBjZW50ZXIueiAtIHBvc2l0aW9uc1tpXS56LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICBsZXQgY2FydGVzaWFuMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdClcclxuICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHg6IGNhcnRlc2lhbjMueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4zLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuMy56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3Bvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodF1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIC8vIGxldCByYXkgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkobW92ZW1lbnQucG9zaXRpb24pOy8v6I635Y+W5LiA5p2h5bCE57q/XHJcbiAgICAgICAgLy8gbGV0IGNhcnRlc2lhbjIgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXksIHRoaXMuc2RrLnZpZXdlci5zY2VuZSk7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIGxldCBjYXJ0ZXNpYW4zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zaXRpb244NC5sbmcsIHBvc2l0aW9uODQubGF0KVxyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuMy54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbjMueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4zLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuMy54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgIHk6IGNhcnRlc2lhbjMueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4zLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgIH0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHBvc2l0aW9uLmFsdCAtIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMucHVzaChwb3NpdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBuZXdwb3NpdGlvbnNcclxuICAgICAgICB0aGlzLnByZXZpb3VzLnBvc2l0aW9ucyA9IG5ld3Bvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICBsZXQgY2FydGVzaWFuMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uODQubG5nLCBwb3NpdGlvbjg0LmxhdClcclxuICAgICAgICAgICAgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgeDogY2FydGVzaWFuMy54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgICAgICAgICB5OiBjYXJ0ZXNpYW4zLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgICAgIHo6IGNhcnRlc2lhbjMueiAtIGRpc3Bhcml0eVtpXS56LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh7XHJcbiAgICAgICAgICAgICAgICB4OiBjYXJ0ZXNpYW4zLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgICAgIHk6IGNhcnRlc2lhbjMueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICAgICAgejogY2FydGVzaWFuMy56IC0gZGlzcGFyaXR5W2ldLnosXHJcbiAgICAgICAgICAgICAgfSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHBvc2l0aW9uLmFsdCAtIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zLnB1c2gocG9zaXRpb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBuZXdwb3NpdGlvbnNcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cy5wb3NpdGlvbnMgPSBuZXdwb3NpdGlvbnNcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG5cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShuZXdwb3NpdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShwb3NpdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZih0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuZW50aXR5ICYmIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZClcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMSlgKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBtYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgICBpZih0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByZXZpb3VzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbnM4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5wcmV2aW91cy5wb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICBwb3NpdGlvbnNbMF0ucHVzaChbcG9zaXRpb25zODQubG5nLCBwb3NpdGlvbnM4NC5sYXRdKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpdGlvbnM4NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5wcmV2aW91cy5wb3NpdGlvbnNbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgcG9zaXRpb25zWzBdLnB1c2goW3Bvc2l0aW9uczg0LmxuZywgcG9zaXRpb25zODQubGF0XSlcclxuICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKTtcclxuICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sIHRoaXMub3B0aW9ucy5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnByZXZpb3VzLnBvc2l0aW9ucylcclxuICAgICAgfSwgdHJ1ZSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICcjZmYwMDAwJ1xyXG4gICAgaWYoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5Z29uKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZih0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSB2XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhlaWdodCA8PSAwLjAxKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSAwLjAxXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb25zID0gW1tdXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvc2l0aW9uc1swXS5wdXNoKFt0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdKVxyXG4gICAgfVxyXG4gICAgcG9zaXRpb25zWzBdLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhpcy5vcHRpb25zLmhlaWdodCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodF0pXHJcbiAgICBsZXQgcG9seWdvbiA9IHR1cmYucG9seWdvbihwb3NpdGlvbnMpO1xyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLCB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgKyB0aGlzLm9wdGlvbnMuaGVpZ2h0XVxyXG4gICAgbGV0IHBvc2l0aW9uXHJcbiAgICBpZiAodGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkuX3ZhbHVlKSB7XHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkuX3ZhbHVlLnBvc2l0aW9uc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkuX2NhbGxiYWNrKCkucG9zaXRpb25zXHJcbiAgICB9XHJcbiAgICBsZXQgbmV3UG9zaXRpb24gPSBbXVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IHRydWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNhcnRvZ3JhcGhpYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb3NpdGlvbltpXSk7XHJcbiAgICAgIGxldCBsb25naXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICAgIGxldCBsYXRpdHVkZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpO1xyXG4gICAgICBsZXQgY2FydGVzaWFuID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxvbmdpdHVkZSwgbGF0aXR1ZGUsIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCArIHYpO1xyXG4gICAgICBuZXdQb3NpdGlvbi5wdXNoKGNhcnRlc2lhbilcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KG5ld1Bvc2l0aW9uKVxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXdQb3NpdGlvblxyXG4gICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmhlaWdodCAmJiB0aGlzLl9lbG1zLmhlaWdodC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGV4dHJ1ZGVkSGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodFxyXG4gIH1cclxuICBzZXQgZXh0cnVkZWRIZWlnaHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ID0gdlxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3NpdGlvbnNbMF0ucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgIH1cclxuICAgIHBvc2l0aW9uc1swXS5wdXNoKFt0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9zaXRpb25zKTtcclxuICAgIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW2NlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ICsgdGhpcy5vcHRpb25zLmhlaWdodF1cclxuICAgIHRoaXMuX2VsbXMuZXh0cnVkZWRIZWlnaHQgJiYgdGhpcy5fZWxtcy5leHRydWRlZEhlaWdodC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFyZWEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFyZWFcclxuICB9XHJcblxyXG4gIHNldCBhcmVhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hcmVhID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhICYmIHRoaXMuX2VsbXMuYXJlYS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFyZWFVbml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICB9XHJcbiAgc2V0IGFyZWFVbml0KHYpIHtcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWFVbml0ICYmIHRoaXMuX2VsbXMuYXJlYVVuaXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIpIHtcclxuICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5bmz5pa55Y2D57GzJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+S6qSc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiYgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mb250RmFtaWx5ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkpXHJcblxyXG4gICAgbGV0IG5hbWUgPSBnZXRGb250RmFtaWx5TmFtZSh0aGlzLmxhYmVsRm9udEZhbWlseSkgfHwgJydcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IG5hbWVcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUgJiYgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbE5lYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLm5lYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsTmVhcih2KSB7XHJcbiAgICBsZXQgbmVhciA9IHZcclxuICAgIGlmIChuZWFyID4gdGhpcy5sYWJlbEZhcikge1xyXG4gICAgICBuZWFyID0gdGhpcy5sYWJlbEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTmVhciAmJiB0aGlzLl9lbG1zLmxhYmVsTmVhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBuZWFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsRmFyKHYpIHtcclxuICAgIGxldCBmYXIgPSB2XHJcbiAgICBpZiAoZmFyIDwgdGhpcy5sYWJlbE5lYXIpIHtcclxuICAgICAgZmFyID0gdGhpcy5sYWJlbE5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRmFyICYmIHRoaXMuX2VsbXMubGFiZWxGYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gZmFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGggJiYgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsUGl4ZWxPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBsYWJlbFBpeGVsT2Zmc2V0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQgJiYgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldCBsYWJlbExpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0sIHZdXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kW2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlVHlwZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZSAmJiB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIGxldCBhdHRyaWJ1dGVDb250ZW50ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQnKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdikgPiAtMSkge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUxpbmsodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICBsaW5rRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8IWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVDYW1lcmEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB2ckRlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8IWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn5aSa6Z2i5L2T5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhpcy5sYWJlbC5wb3NpdGlvblswXSwgbGF0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzFdLCBhbHQ6IHRoaXMubGFiZWwucG9zaXRpb25bMl0gfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOS6jOasoee8lui+keWbnuiwg1xyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgUG9seWhlZHJvbk9iamVjdC5ub2RlRWRpdCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBwb2x5aGVkcm9uJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdwb2x5Z29uLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSBFdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCB1bml0RGF0YSA9IFt7XHJcbiAgICAgICAgICBuYW1lOiAn5bmz5pa557GzJyxcclxuICAgICAgICAgIHZhbHVlOiAn5bmz5pa557GzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+W5s+aWueWNg+exsycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+W5s+aWueWNg+exsydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfkuqknLFxyXG4gICAgICAgICAgdmFsdWU6ICfkuqknXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5YWs6aG3JyxcclxuICAgICAgICAgIHZhbHVlOiAn5YWs6aG3J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGxldCB1bml0RGF0YUxlZ3BPYmplY3QgPSBsZWdwKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0LWJveCcpWzBdLCBcIi5pbnB1dC1zZWxlY3QtdW5pdFwiKVxyXG4gICAgICAgIGlmICh1bml0RGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaCh1bml0RGF0YSlcclxuICAgICAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh1bml0RGF0YVtpXS52YWx1ZSA9PT0gdW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHVuaXREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh1bml0RGF0YVtpXS52YWx1ZSA9PT0gdW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFyZWFVbml0ID0gdW5pdERhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvbnREYXRhID0gZ2V0Rm9udExpc3QoKVxyXG4gICAgICAgIGxldCBmb250T2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdmb250LXNlbGVjdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5mb250LXNlbGVjdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGZvbnRPYmplY3QpIHtcclxuICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2goZm9udERhdGEpXHJcbiAgICAgICAgICBsZXQgZm9udERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZvbnQtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0udmFsdWUgPSBmb250RGF0YVt0aGlzLmxhYmVsRm9udEZhbWlseV0udmFsdWVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoZm9udERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gZm9udERhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ID0gW2ZvbnREYXRhTGVncEVsbV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCAwKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUpIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaGVpZ2h0XHJcbiAgICB0aGlzLmV4dHJ1ZGVkSGVpZ2h0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZXh0cnVkZWRIZWlnaHRcclxuICAgIHRoaXMuYXJlYSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmFyZWFcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9uc1snYXJlYS11bml0J11cclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuXHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5vcHRpb25zLmhlaWdodCA9PT0gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCB0aGlzLm9wdGlvbnMuaGVpZ2h0ICsgdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhpcy5wb3NpdGlvbnMpXHJcblxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMyID0gW1tdXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvc2l0aW9uczJbMF0ucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgIH1cclxuICAgIHBvc2l0aW9uczJbMF0ucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9uczIpO1xyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKTtcclxuICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdIH0pXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW2NlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgdGhpcy5leHRydWRlZEhlaWdodCArIHRoaXMuaGVpZ2h0XVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9kZUVkaXQodGhhdCwgY2IgPSAoKSA9PiB7IH0pIHtcclxuICAgIC8vIHRoYXQucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIC8vIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcblxyXG4gICAgICBsZXQgYWRkZWQgPSBmYWxzZVxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gICAgICAgICAgYWRkZWQgPSB0cnVlXHJcbiAgICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LCB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQpLFxyXG4gICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIGVudGl0eSlcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMuc3BsaWNlKHNlbGVjdFBvaW50LmluZGV4LCAwLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSlcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciA9IHRoYXQuY29tcHV0ZUFyZWEodGhhdC5vcHRpb25zLnBvc2l0aW9ucyk7XHJcbiAgICAgICAgICBsZXQgbGFiZWxQb3NpdGlvbnMgPSBbW11dXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGFiZWxQb3NpdGlvbnNbMF0ucHVzaChbdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxhYmVsUG9zaXRpb25zWzBdLnB1c2goW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdF0pXHJcbiAgICAgICAgICBpZiAobGFiZWxQb3NpdGlvbnNbMF0ubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24obGFiZWxQb3NpdGlvbnMpO1xyXG4gICAgICAgICAgICBsZXQgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW2NlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgdGhhdC5vcHRpb25zLmhlaWdodCArIHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodF1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICAgICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgICAgICB0aGF0LmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgdGhhdC5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShwaWNrLmlkLmluZGV4LCAxKVxyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCflt6bplK7noa7orqTvvIzlj7PplK7nu5PmnZ/vvIxDVFJMK+WPs+mUruaSpOmUgCcpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHNlbGVjdFBvaW50LnBvc2l0aW9uLl92YWx1ZSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmlnaHRFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IG9yaWdpbmFsUG9zaXRpb25cclxuICAgICAgICAgIGlmKGFkZGVkKSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMuc3BsaWNlKHNlbGVjdFBvaW50LmluZGV4LCAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyID0gdGhhdC5jb21wdXRlQXJlYSh0aGF0Lm9wdGlvbnMucG9zaXRpb25zKTtcclxuICAgICAgICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICAgICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICflubPmlrnljYPnsbMnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICAgICAgICB0aGF0LmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgICAgICAgIHRoYXQuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgdGhhdC5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5oZWlnaHQgKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0LnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0LnBvc2l0aW9ucylcclxuICAgICAgICAgIC8vIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgLy8gY2FjaGVfcG9zaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIC8vICAgcG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChpdGVtLCB0aGlzLnZpZXdlcikpXHJcbiAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgY2IobnVsbCwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9sZWZ0KGxlZnRFdmVudClcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQocmlnaHRFdmVudClcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCB0aGF0Lm9wdGlvbnMuaGVpZ2h0ICsgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnMpXHJcblxyXG4gICAgICAgICAgbGV0IGxhYmVsUG9zaXRpb25zID0gW1tdXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxhYmVsUG9zaXRpb25zWzBdLnB1c2goW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsYWJlbFBvc2l0aW9uc1swXS5wdXNoKFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRdKVxyXG4gICAgICAgICAgaWYgKGxhYmVsUG9zaXRpb25zWzBdLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKGxhYmVsUG9zaXRpb25zKTtcclxuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgICAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFtjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV0sIHRoYXQub3B0aW9ucy5oZWlnaHQgKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHJpZ2h0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC5ub2RlUG9pbnRzW3RoYXQubm9kZVBvaW50cy5sZW5ndGggLSAxXSlcclxuICAgICAgICAgIC8vIHRoYXQubm9kZVBvaW50cy5wb3AoKVxyXG4gICAgICAgICAgaWYgKHNlbGVjdFBvaW50LmluZGV4ID09PSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAodGhhdC5ub2RlUG9pbnRzW3NlbGVjdFBvaW50LmluZGV4IC0gMV0pIHtcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0UG9pbnQuaW5kZXggPSAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5wb3AoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCwgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0KSxcclxuICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSBbW11dXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zaXRpb25zWzBdLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICB9XHJcbiAgICBwb3NpdGlvbnNbMF0ucHVzaChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvc2l0aW9ucyk7XHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pO1xyXG5cclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICAvLyBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSwgdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ICsgdGhpcy5vcHRpb25zLmhlaWdodClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIGxldCBzaXRlSW5mb1Bvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLCB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgKyB0aGlzLm9wdGlvbnMuaGVpZ2h0KVxyXG4gICAgICAvL+i9rOaNouWIsOWxj+W5leWdkOagh1xyXG4gICAgICBpZiAoc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG4gICAgICAgIGxldCB3aW5wb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FydGVzaWFuVG9DYW52YXNDb29yZGluYXRlcyhzaXRlSW5mb1Bvc2l0aW9uKTtcclxuICAgICAgICBpZiAod2lucG9zKSB7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5sZWZ0ID0gKHdpbnBvcy54ICsgb3B0aW9ucy54KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLnRvcCA9ICh3aW5wb3MueSArIG9wdGlvbnMueSkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvbHloZWRyb25PYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpU0E7QUFDQTtBQUFBO0FBak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBNUNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBNVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE4UEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXhEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWdOQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpoREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE3QkE7QUFBQTtBQUFBO0FBQUE7QUErQkE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF3dENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUExbURBO0FBeW9EQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolyhedronObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/PolylineObject/_element.js": /*!*************************************************!*\ !*** ./src/Obj/Base/PolylineObject/_element.js ***! \*************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u7EBF\\u6761\\u989C\\u8272\\n
\\n
\\n
\\n \\u7EBF\\u6761\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n \\u7EBF\\u6761\\u5F62\\u5F0F\\n
\\n
\\n
\\n
\\n
\\n \\u9996\\u5C3E\\u76F8\\u8FDE\\n \\n
\\n
\\n \\u7EBF\\u6BB5\\u5706\\u6ED1\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7EBF\\u6BB5\\u7F13\\u51B2\\n \\n
\\n
\\n \\u7F13\\u51B2\\u5BBD\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n \\u7F13\\u51B2\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n \\u9996\\u5C3E\\u53CD\\u5411\\n \\n
\\n
\\n \\u6D41\\u52A8\\u901F\\u7387\\n
\\n \\n \\n
\\n
\\n
\\n \\u7EBF\\u6761\\u95F4\\u8DDD\\n
\\n \\n \\u500D\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWxpbmVPYmplY3QvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvUG9seWxpbmVPYmplY3QvX2VsZW1lbnQuanM/OWMyMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2JTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGlucHV0LXNlbGVjdC11bml0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlbGVjdC11bml0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC10ZXh0XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJmbGV4OiAwIDAgMTMwcHg7XCIgQG1vZGVsPVwibGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VsZWN0LXVuaXRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWJzIGlkPVwicG9seWxpbmUtb2JqZWN0LWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1tb2RlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1tb2RlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+WuWAvOe7n+S4gOWinuWKoDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maXJtIGhlaWdodC1jb25maXJtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPuW6lOeUqDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBzcGF0aWFsLWluZm8tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nu4/luqbvvIhY77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue6rOW6pu+8iFnvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6auY5bqm77yIWu+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi57q/5p2h6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57q/5p2h6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMzMlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6v+adoeWuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5XCIgQG1vZGVsPVwibGluZVdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBpbnB1dC1zZWxlY3QtbGluZS10eXBlLWJveFwiIHN0eWxlPVwiZmxleDogMCAwIDM3JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nur/mnaHlvaLlvI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VsZWN0LWxpbmUtdHlwZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pppblsL7nm7jov548L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibm9zZVRvVGFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDMzJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nur/mrrXlnIbmu5E8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwic21vb3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMzclO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nur/mrrXnvJPlhrI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwiZXh0ZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMzMlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue8k+WGsuWuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgZGF0YS1taW49XCIwLjAxXCIgbWF4PVwiOTk5OTk5XCIgQG1vZGVsPVwiZXh0ZW5kV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzNyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57yT5Yay6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4dGVuZENvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImRhc2hUZXh0dXJlRG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pppblsL7lj43lkJE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwicm90YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMzMlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPua1geWKqOmAn+eOhzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTk5OTk5XCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAzNyU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGluZVNwYWNlXCI+57q/5p2h6Ze06LedPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgbGluZVNwYWNlXCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjQuNVwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJzcGFjZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+5YCNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICA8IS0tICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIueBr+WFieaOp+WItlwiPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICA8ZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaMh+S7pDwvc3Bhbj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cImluc3RydWN0XCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5XCIgQGNsaWNrPVwiaW5zdHJ1Y3RTdWJtaXRcIj7mj5DkuqQ8L2J1dHRvbj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi6K6+572u5pON5L2c54K5XCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6K6+572u5pON5L2c54K5PC9zcGFuPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwib3BlcmF0aW5nUG9pbnRcIj4tLT5cclxuICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnlcIiBAY2xpY2s9XCJvcGVyYXRpbmdQb2ludFN1Ym1pdFwiPuaPkOS6pDwvYnV0dG9uPi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPCEtLSAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPi0tPlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFrS0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolylineObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/PolylineObject/eventBinding.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/PolylineObject/eventBinding.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n e.target.value = value;\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n e.target.value = value;\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWxpbmVPYmplY3QvZXZlbnRCaW5kaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1BvbHlsaW5lT2JqZWN0L2V2ZW50QmluZGluZy5qcz9jMmE1Il0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIGV2ZW50QmluZGluZyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB7fVxyXG4gIH1cclxuICBzdGF0aWMgZXZlbnQgPSB7fVxyXG5cclxuICBnZXRFdmVudChuYW1lKSB7XHJcbiAgICByZXR1cm4gZXZlbnRCaW5kaW5nLmV2ZW50W25hbWVdXHJcbiAgfVxyXG5cclxuICBnZXRFdmVudEFsbCgpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRcclxuICB9XHJcblxyXG4gIHNldEV2ZW50KG5hbWUsIGV2ZW50KSB7XHJcbiAgICBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV0gPSBldmVudFxyXG4gIH1cclxuXHJcbiAgb24odGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7IHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkIH0pXHJcbiAgICAgICAgICAgICAgZWxlbWVudHNbaV0uY2hlY2tlZCA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5kYXRhc2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50W20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNoYW5nZSc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlLCB2YWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZW1vdmVOYW1lLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgRXZlbnRCaW5kaW5nID0gbmV3IGV2ZW50QmluZGluZygpO1xyXG5leHBvcnQgZGVmYXVsdCBFdmVudEJpbmRpbmc7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFFQTtBQUFBO0FBQUE7QUEwRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpHQTtBQUFBO0FBS0E7QUE2RkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolylineObject/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/PolylineObject/index.js": /*!**********************************************!*\ !*** ./src/Obj/Base/PolylineObject/index.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/PolylineObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/PolylineObject/eventBinding.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 线\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PolylineObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 折线\r\n * @param options {object} 线属性\r\n * @param options.name{string} 名称\r\n * @param options.width=3{number} 线宽\r\n * @param options.color=#ff0000 {string} 颜色\r\n * @param options.type=0 {number} 材质类型 0-实线 1-虚线 2-泛光...\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对高度;2:依附模式)\r\n * @param options.noseToTail=false {boolean} 首尾相连\r\n * @param options.smooth=false {boolean} 线段圆滑\r\n * @param options.extend=false {boolean} 线缓冲\r\n * @param options.extendWidth=10 {number} 线缓冲宽度\r\n * @param options.extendColor=rgba(255,255,80,0.3) {number} 线缓冲颜色\r\n * @param options.show=true {boolean} 显隐\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * \r\n * \r\n * @param options.noseToTail=false {boolean} 是否首尾相连\r\n * \r\n * \r\n * \r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {string} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * \r\n * \r\n * @param _Dialog {object} 弹框事件\r\n * @param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function PolylineObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, PolylineObject);\n _this2 = _callSuper(this, PolylineObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.width = options.width || options.width === 0 ? options.width : 3;\n _this2.options.color = options.color || '#ff0000';\n _this2.options.type = options.type ? Number(options.type) : 0;\n _this2.options.noseToTail = options.noseToTail || false;\n _this2.options.smooth = options.smooth || false;\n _this2.options.extend = options.extend || false;\n _this2.options.rotate = options.rotate || options.rotate === false ? options.rotate : true;\n _this2.options.space = options.space || 1;\n _this2.options.speed = options.speed || 10;\n // this.options.dashSize = options.dashSize || 0.03\n _this2.options.wordsName = options.wordsName || '空间长度';\n _this2.options.extendWidth = options.extendWidth || options.extendWidth === 0 ? options.extendWidth : 10;\n _this2.options.extendColor = options.extendColor || 'rgba(255,255,80,0.3)';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2._elms = [];\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n // this.options.attribute.camera = this.options.attribute.camera || {}\n // this.options.attribute.camera.content =\n // this.options.attribute.camera.content || []\n // this.options.attribute.vr = this.options.attribute.vr || {}\n // this.options.attribute.vr.content =\n // this.options.attribute.vr.content || []\n // this.options.attribute.goods = this.options.attribute.goods || {}\n // this.options.attribute.goods.content =\n // this.options.attribute.goods.content || []\n\n delete _this2.options.attribute.camera;\n delete _this2.options.attribute.vr;\n delete _this2.options.attribute.goods;\n _this2.operate = {};\n _this2.nodePoints = [];\n _this2.unitNum = 0;\n _this2.inputSpeed = options.speed && Math.pow(options.speed, -1) * 100 || 10;\n _this2.Dialog = _Dialog;\n if (!_this2.options.positions || _this2.options.positions.length < 2) {\n _this2._error = '线段最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n for (var i = 0; i < _this2.options.positions.length; i++) {\n _this2.options.positions[i].lng = Number(Number(_this2.options.positions[i].lng).toFixed(8));\n _this2.options.positions[i].lat = Number(Number(_this2.options.positions[i].lat).toFixed(8));\n _this2.options.positions[i].alt = Number(Number(_this2.options.positions[i].alt).toFixed(2));\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n PolylineObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(PolylineObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(PolylineObject, [{\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || '#ff0000';\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,0,0,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n this.inputSpeed = v !== 0 ? Math.pow(v, -1) * 100 : 0;\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.options.speed = v !== 0 ? Math.pow(v, -1) * 100 : 0\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n }\n // get dashSize() {\n // return this.options.dashSize\n // }\n\n // set dashSize(v) {\n // this.options.dashSize = v\n // let params = { ...this.options }\n // params.speed = this.inputSpeed\n // // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params)\n // }\n }, {\n key: \"rotate\",\n get: function get() {\n return this.options.rotate;\n },\n set: function set(v) {\n this.options.rotate = v;\n this.closeNodeEdit();\n this._elms.rotate && this._elms.rotate.forEach(function (item) {\n item.checked = v;\n });\n this.options.rotate = v;\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n }\n }, {\n key: \"space\",\n get: function get() {\n return this.options.space;\n },\n set: function set(v) {\n this.options.space = v;\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n // this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)\n this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params);\n }\n }, {\n key: \"wordsName\",\n get: function get() {\n return this.options.wordsName;\n },\n set: function set(v) {\n this.options.wordsName = v;\n this._elms.wordsName && this._elms.wordsName.forEach(function (item) {\n item.value = v;\n });\n var _this = this;\n if (!this.noseToTail) {\n this.computeDistance(this.options.positions, 2, v).then(function (res) {\n // _this.options.lengthByMeter = res\n // if (res > 1000 || res == 1000) {\n // _this.length = (res / 1000).toFixed(5)\n // _this.lengthUnit = '千米'\n // } else {\n // _this.length = res\n // _this.lengthUnit = '米'\n // }\n _this.lengthByMeter = res;\n });\n } else {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n }\n }\n\n // get fitLengthUnit() {\n // return this.options.fitLengthUnit\n // }\n // set fitLengthUnit(v) {\n // this.options.fitLengthUnit = v\n // this._elms.fitLengthUnit &&\n // this._elms.fitLengthUnit.forEach(item => {\n // item.value = v\n // })\n // if (this.fitLengthByMeter) {\n // switch (v) {\n // case '米':\n // this.fitLength = this.fitLengthByMeter\n // break\n // case '千米':\n // this.fitLength = Number(\n // (this.fitLengthByMeter / 1000).toFixed(5)\n // )\n // break\n // default:\n // this.fitLength = this.fitLengthByMeter\n // }\n // }\n // }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.width;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.width = v || v == 0 ? v : 3;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = _this4.options.width;\n });\n if (this.entity && this.entity.polyline) {\n this.entity.polyline.width = this.entity.polyline.width + v - this.entity.polyline.oriWidth;\n this.entity.polyline.oriWidth = this.options.width;\n }\n // this.entity &&\n // this.entity.polyline &&\n // (this.entity.polyline.width = this.options.width) && (this.entity.polyline.oriWidth = this.options.width)\n }\n }, {\n key: \"lineType\",\n get: function get() {\n return this.options.type;\n },\n set: function set(v) {\n var _this5 = this;\n var lineTypeData = [{\n name: '实线',\n value: '实线',\n key: 0,\n icon: 'line'\n }, {\n name: '虚线',\n value: '虚线',\n key: 1,\n icon: 'dash-line'\n }, {\n name: '泛光',\n value: '泛光',\n key: 2,\n icon: 'light-line'\n }, {\n name: '尾迹光线',\n value: '尾迹光线',\n key: 3,\n icon: 'tail-line'\n }, {\n name: '多尾迹光线',\n value: '多尾迹光线',\n key: 4,\n icon: 'mult-tail-line'\n }, {\n name: '流动虚线1',\n value: '流动虚线1',\n key: 5,\n icon: 'flow-dash-line1'\n }, {\n name: '流动虚线2',\n value: '流动虚线2',\n key: 6,\n icon: 'flow-dash-line2'\n }, {\n name: '流动箭头1',\n value: '流动箭头1',\n key: 7,\n icon: 'pic-line1'\n }, {\n name: '流动箭头2',\n value: '流动箭头2',\n key: 8,\n icon: 'pic-line2'\n }, {\n name: '流动箭头3',\n value: '流动箭头3',\n key: 9,\n icon: 'pic-line3'\n }, {\n name: '流动箭头4',\n value: '流动箭头4',\n key: 10,\n icon: 'pic-line4'\n }, {\n name: '流动箭头5',\n value: '流动箭头5',\n key: 11,\n icon: 'pic-line5'\n }, {\n name: '流动箭头6',\n value: '流动箭头6',\n key: 12,\n icon: 'pic-line6'\n }];\n this.options.type = Number(v);\n var _loop = function _loop(i) {\n if (lineTypeData[i].key === Number(v)) {\n _this5._elms.lineType && _this5._elms.lineType.forEach(function (item) {\n item.value = lineTypeData[i].value;\n if (2 < item.value && item.value < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n if (2 < item.value && item.value < 5) {\n //尾迹参数\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'none');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'none');\n } else {\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'flex');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'flex');\n }\n });\n return 1; // break\n }\n };\n for (var i = 0; i < lineTypeData.length; i++) {\n if (_loop(i)) break;\n }\n var params = _objectSpread({}, this.options);\n params.speed = this.inputSpeed;\n this.entity && this.entity.polyline && (this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params));\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options.noseToTail;\n },\n set: function set(v) {\n this.options.noseToTail = v;\n this.closeNodeEdit();\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n if (this.entity) {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n }\n // if (v) {\n // if (this.options.fitLengthByMeter > 1000 || this.options.fitLengthByMeter == 1000) {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()\n // } else {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()\n // }\n\n // } else {\n // if (this.options.lengthByMeter > 1000 || this.options.lengthByMeter == 1000) {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[1] && dom.querySelectorAll('dd')[1].click()\n // } else {\n // let dom = document.getElementsByClassName('input-select-unit')[1]\n // dom && dom.querySelectorAll('dd')[0] && dom.querySelectorAll('dd')[0].click()\n // }\n // }\n }\n }, {\n key: \"smooth\",\n get: function get() {\n return this.options.smooth;\n },\n set: function set(v) {\n this.options.smooth = v;\n this.closeNodeEdit();\n this._elms.smooth && this._elms.smooth.forEach(function (item) {\n item.checked = v;\n });\n if (this.entity) {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this6 = this;\n this.positionEditing = false;\n this.options.heightMode = v || v == 0 ? v : 2;\n var heightModeName = '';\n this.closeNodeEdit();\n var ground = false;\n var disabled = false;\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n this.entity.polyline.clampToGround = ground;\n this.extend = false;\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n this.entity.polyline.clampToGround = ground;\n this.extend = false;\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n this.entity.polyline.clampToGround = ground;\n heightModeName = '依附模型';\n break;\n }\n setTimeout(function () {\n if (ground) {\n _this6.label.ground = ground;\n _this6._elms.heightMode && (_this6._elms.heightMode.value = '依附模型');\n _this6.label.position = [_this6.options.positions[0].lng, _this6.options.positions[0].lat];\n } else {\n _this6.label.ground = ground;\n _this6.label.position = [_this6.options.positions[0].lng, _this6.options.positions[0].lat, fromDegreesArray[2]];\n _this6.options.label.position = {\n lng: _this6.options.positions[0].lng,\n lat: _this6.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n }\n }, 0);\n }\n }, {\n key: \"extend\",\n get: function get() {\n return this.options.extend;\n },\n set: function set(v) {\n this.options.extend = v;\n this.closeNodeEdit();\n if (v) {\n this.heightMode = 2;\n }\n this._elms.extend && this._elms.extend.forEach(function (item) {\n item.checked = v;\n });\n if (this.entity) {\n if (this.options.extend) {\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.renewPolygon(fromDegreesArray);\n } else {\n this.entity.polygon = undefined;\n }\n }\n }\n }, {\n key: \"extendWidth\",\n get: function get() {\n return this.options.extendWidth;\n },\n set: function set(v) {\n this.options.extendWidth = v;\n this.heightMode = this.heightMode;\n this._elms.extendWidth && this._elms.extendWidth.forEach(function (item) {\n item.value = v;\n });\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.renewPolygon(fromDegreesArray);\n }\n }, {\n key: \"extendColor\",\n get: function get() {\n return this.options.extendColor;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.extendColor = v;\n if (this._elms.extendColor) {\n this._elms.extendColor.forEach(function (item, i) {\n var extendColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.extendColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.extendColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.extendColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.extendColor[i] = extendColorPicker;\n });\n }\n this.entity && this.entity.polygon && (this.entity.polygon.material = Cesium.Color.fromCssColorString(this.options.extendColor));\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n setTimeout(function () {\n _this8.label.position = [_this8.options.positions[0].lng, _this8.options.positions[0].lat, _this8.options.positions[0].alt];\n }, 0);\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this12 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this12.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this12._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop2, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this13.options.attribute.link.content;\n case 2:\n _this13.attributeLink = _context3.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop3 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop3() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop3$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop3);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop3(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop2, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop2(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this13.options.attribute.link.content.splice(i, 1);\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, '');\n var url = value.url && value.url.replace(/\\s/g, '');\n if (name && url) {\n _this13.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop4 = function _loop4(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop5 = function _loop5() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop5()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop4(_i2);\n }\n }\n\n // get attributeCamera() {\n // return this.options.attribute.camera.content\n // }\n\n // set attributeCamera(v) {\n // this.options.attribute.camera.content = v\n // }\n\n // get attributeVr() {\n // return this.options.attribute.vr.content\n // }\n\n // set attributeVr(v) {\n // this.options.attribute.vr.content = v\n // if (\n // !this._DialogObject ||\n // !this._DialogObject._element ||\n // !this._DialogObject._element.content ||\n // this._DialogObject._element.content.getElementsByClassName(\n // 'attribute-content-vr'\n // ).length == 0\n // ) {\n // return\n // }\n // let table = this._DialogObject._element.content\n // .getElementsByClassName('attribute-content-vr')[1]\n // .getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // tableContent.innerHTML = ''\n // if (this.options.attribute.vr.content.length > 0) {\n // table.getElementsByClassName('table-empty')[0].style.display = 'none'\n // } else {\n // table.getElementsByClassName('table-empty')[0].style.display = 'flex'\n // }\n // for (let i = 0; i < this.options.attribute.vr.content.length; i++) {\n // let tr =\n // `\n //
\n //
` +\n // this.options.attribute.vr.content[i].name +\n // `
\n //
` +\n // this.options.attribute.vr.content[i].url +\n // `
\n //
\n // \n // \n //
\n //
`\n // let trElm = document.createRange().createContextualFragment(tr)\n // tableContent.appendChild(trElm)\n // }\n // let item = tableContent.getElementsByClassName('tr')\n // let fun = {\n // vrEdit: async index => {\n // this.attributeVr = await this.options.attribute.vr.content\n // let table = this._DialogObject._element.content\n // .getElementsByClassName('attribute-content-vr')[1]\n // .getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // let item = tableContent.getElementsByClassName('tr')\n // for (let i = 0; i < item.length; i++) {\n // if (index === i) {\n // let height = item[i].offsetHeight\n // let html = `\n //
\n // \n //
\n //
\n // \n //
\n //
\n // \n // \n //
`\n // item[i].innerHTML = html\n // let textareaElm = item[i].getElementsByClassName('link-edit')[0]\n // textareaElm.style.height = height - 10 + 'px'\n // let td = item[i].getElementsByClassName('td')\n // td[0].getElementsByClassName(\n // 'input'\n // )[0].value = this.options.attribute.vr.content[index].name\n // td[1].getElementsByClassName(\n // 'input'\n // )[0].value = this.options.attribute.vr.content[index].url\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // if (!btn[n] || !btn[n].attributes) {\n // continue\n // }\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', e => {\n // if (typeof fun[m.value] === 'function') {\n // fun[m.value](\n // {\n // name: td[0].getElementsByClassName('input')[0].value,\n // url: td[1].getElementsByClassName('input')[0].value\n // },\n // i\n // )\n // }\n // })\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // break\n // }\n // }\n // },\n // vrDelete: i => {\n // this.options.attribute.vr.content.splice(i, 1)\n // this.attributeVr = this.options.attribute.vr.content\n // },\n\n // confirmEdit: (value, i) => {\n // let name = value.name && value.name.replace(/\\s/g, '')\n // let url = value.url && value.url.replace(/\\s/g, '')\n // if (name && url) {\n // this.options.attribute.vr.content[i] = value\n // } else {\n // window.ELEMENT &&\n // window.ELEMENT.Message({\n // message: '名称或链接不能为空!',\n // type: 'warning',\n // duration: 1500\n // })\n // }\n // this.attributeVr = this.options.attribute.vr.content\n // },\n // cancelEdit: () => {\n // this.attributeVr = this.options.attribute.vr.content\n // },\n // fileSelect: (value, i) => {\n // let fileElm = item[i].getElementsByClassName('file-select')[0]\n // fileElm.click()\n // fileElm.removeEventListener('change', fileSelect)\n // fileElm.addEventListener('change', fileSelect)\n // }\n // }\n // let fileSelect = event => {\n // if (event.target.value) {\n // let td = item[\n // event.target.getAttribute('index')\n // ].getElementsByClassName('td')\n // td[1].getElementsByClassName('input')[0].value = event.target.value\n // event.target.value = null\n // }\n // }\n // for (let i = 0; i < item.length; i++) {\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // if (!btn[n] || !btn[n].attributes) {\n // continue\n // }\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', e => {\n // if (typeof fun[m.value] === 'function') {\n // fun[m.value](i)\n // }\n // })\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // }\n // }\n\n // get attributeGoods() {\n // return this.options.attribute.goods.content\n // }\n\n // set attributeGoods(v) {\n // this.options.attribute.goods.content = v\n // }\n }, {\n key: \"positions\",\n get: function get() {\n return this.options.positions;\n }\n }, {\n key: \"judgeLine\",\n value: function judgeLine(entity, newParam) {\n if (!entity.polyline.oriRepeat) {\n var param = {\n color: newParam.color,\n image: this.getSourceRootPath() + \"/img/arrow/1.png\",\n space: newParam.space,\n speed: newParam.speed\n };\n param.speed = newParam.rotate ? param.speed : 0 - param.speed;\n var canvasEle = document.createElement('canvas');\n var ctx = canvasEle.getContext('2d');\n var myImg = new Image();\n // myImg.src = that.getSourceRootPath() + '/img/arrow/1.png'\n myImg.src = param.image;\n var _that = this;\n myImg.onload = function () {\n canvasEle.width = myImg.width * (param.space + 1);\n canvasEle.height = myImg.height;\n var oriRepeat = _that.getSceenLine(entity, param, canvasEle);\n oriRepeat && (entity.polyline.oriRepeat = oriRepeat);\n var positionProperty = entity.polyline.positions;\n var positions = positionProperty.getValue(_that.sdk.viewer.clock.currentTime);\n if (!Cesium.defined(positions)) {\n return new Cesium.Cartesian2(1.0, 1.0);\n // return 1.0;\n }\n var distance = 0;\n for (var i = 0; i < positions.length - 1; ++i) {\n distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n }\n var repeatX = distance / entity.polyline.width.getValue();\n // 根据地图缩放程度调整repeatX\n var cameraHeight = _that.sdk.viewer.camera.positionCartographic.height;\n var boundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(-1000000, 0, 0),\n // 中心点坐标\n 500000 // 半径(距离)\n );\n\n // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)\n var drawingBufferWidth = _that.sdk.viewer.canvas.clientWidth;\n var drawingBufferHeight = _that.sdk.viewer.canvas.clientHeight;\n\n // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小\n var groundResolution = _that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight);\n repeatX *= groundResolution / cameraHeight / (param.space * (canvasEle.width / canvasEle.height * 5) + 1);\n // if (entity.polyline.material.oriRepeat) {\n\n if (_that.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE3D) {\n var speed = repeatX / entity.polyline.oriRepeat;\n entity.polyline.oriSpeed = speed;\n entity.polyline.oriRepeatX = repeatX;\n } else {\n var sdk3d = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"get3DView\"])();\n var sdk3dEntity = sdk3d.viewer.entities.getById(_that.options.id);\n entity.polyline.oriSpeed = sdk3dEntity.polyline.oriSpeed;\n entity.polyline.oriRepeatX = sdk3dEntity.polyline.oriRepeatX;\n }\n };\n }\n }\n /**获取当前满屏横线速度 */\n }, {\n key: \"getSceenLine\",\n value: function getSceenLine(entity, options, canvasEle) {\n var point1 = new Cesium.Cartesian2(0, this.sdk.viewer.canvas.clientHeight);\n var point2 = new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight);\n // var cartesian1 = this.sdk.viewer.scene.pickPosition(point1)\n // var cartesian2 = this.sdk.viewer.scene.pickPosition(point2)\n\n var ray = this.sdk.viewer.camera.getPickRay(point1);\n var cartesian1 = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n var ray2 = this.sdk.viewer.camera.getPickRay(point2);\n var cartesian2 = this.sdk.viewer.scene.globe.pick(ray2, this.sdk.viewer.scene);\n // if (!cartesian1 || !cartesian2) {\n // let ray = this.sdk.viewer.camera.getPickRay(point1);\n // cartesian1 = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n\n // let ray2 = this.sdk.viewer.camera.getPickRay(point2);\n // cartesian2 = this.sdk.viewer.scene.globe.pick(ray2, this.sdk.viewer.scene);\n // }\n if (cartesian1 && cartesian2) {\n var distance = Cesium.Cartesian3.distance(cartesian1, cartesian2);\n var repeatX = distance / entity.polyline.width.getValue();\n // 根据地图缩放程度调整repeatX\n var cameraHeight = this.sdk.viewer.camera.positionCartographic.height;\n var boundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(-1000000, 0, 0),\n // 中心点坐标\n 500000 // 半径(距离)\n );\n\n // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)\n var drawingBufferWidth = this.sdk.viewer.canvas.clientWidth;\n var drawingBufferHeight = this.sdk.viewer.canvas.clientHeight;\n\n // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小\n var groundResolution = this.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight);\n // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);\n if (groundResolution > 700) {\n repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);\n } else {\n repeatX = undefined;\n }\n if (this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE3D) {\n return repeatX;\n } else {\n var sdk3d = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"get3DView\"])();\n var sdk3dEntity = sdk3d.viewer.entities.getById(this.options.id);\n return sdk3dEntity.polyline.oriRepeatX;\n }\n }\n }\n /**\r\n * 编辑框\r\n * @param {boolean} state true打开,false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(state) {\n var _this14 = this;\n var _this, tabClick, contentElm, tabsElm, colorPicker, labelColorPicker, extendColorPicker, lineColorPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context4.next = 32;\n break;\n }\n // this.attributeCamera = this.options.attribute.camera.content\n // this.attributeGoods = this.options.attribute.goods.content\n tabClick = function tabClick(e) {\n if (e === '2' || e === 2) {\n //点击线条样式\n if (2 < _this.options.type && _this.options.type < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n }\n }; // 创建标签页\n _context4.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '线属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this14.name = _this14.name.trim();\n if (!_this14.name) {\n _this14.name = '未命名对象';\n }\n _this14.options.label.position = {\n lng: _this14.label.position[0],\n lat: _this14.label.position[1],\n alt: _this14.label.position[2]\n };\n _this14.originalOptions = _this14.deepCopyObj(_this14.options);\n _this14._DialogObject.close();\n _this14.Dialog.confirmCallBack && _this14.Dialog.confirmCallBack(_this14.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this14.reset();\n _this14.Dialog.resetCallBack && _this14.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this14.Dialog.removeCallBack && _this14.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this14.reset();\n _this14.Dialog.closeCallBack && _this14.Dialog.closeCallBack();\n for (var i = 0; i < _this14.nodePoints.length; i++) {\n _this14.sdk.viewer.entities.remove(_this14.nodePoints[i]);\n }\n _this14.nodePoints = [];\n _this14.positionEditing = false;\n YJ.Measure.SetMeasureStatus(false);\n _this14.event && _this14.event.destroy();\n _this14.tip && _this14.tip.destroy();\n },\n showCallBack: function showCallBack(show) {\n _this14.options.show = show;\n _this14.originalOptions.show = show;\n _this14.show = show;\n _this14.Dialog.showCallBack && _this14.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this14.positionEditing = !_this14.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n _this14.nodeEdit();\n }\n });\n case 7:\n this._DialogObject = _context4.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' polyline';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('polyline-object-edit-tabs', tabClick, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n extendColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('extendColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.extendColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.extendColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.extendColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelLineColor')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this14.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this14.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this.labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorStart')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('labelBackgroundColorEnd')[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this14.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this14.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName('*');\n _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.extendColor = [extendColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [_this.labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this14.attributeLink = _this14.options.attribute.link.content;\n // this.attributeVr = this.options.attribute.vr.content\n // this.cameraSelect && this.cameraSelect()\n // this.goodsSelect && this.goodsSelect()\n var tagData = _this14.attributeSelect;\n var attributeElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(attributeElm, '.attribute-select');\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this14._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this14.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i3 = 0; _i3 < tagData.length; _i3++) {\n if (tagData[_i3].value === attributeSelectElm.value) {\n _this14.attributeType = tagData[_i3].key;\n break;\n }\n }\n });\n }\n var nameData = [{\n name: '空间长度',\n value: '空间长度'\n }, {\n name: '投影长度',\n value: '投影长度'\n }, {\n name: '地表长度',\n value: '地表长度'\n }];\n var nameDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], '.input-select-unit');\n if (nameDataLegpObject) {\n nameDataLegpObject.legp_search(nameData);\n var nameDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n _this14._elms.wordsName = [nameDataLegpElm];\n nameDataLegpElm.value = _this14.options.wordsName;\n for (var _i4 = 0; _i4 < nameData.length; _i4++) {\n if (nameData[_i4].value === nameDataLegpElm.value) {\n nameDataLegpObject.legp_searchActive(nameData[_i4].value);\n break;\n }\n }\n nameDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < nameData.length; _i5++) {\n if (nameData[_i5].value === nameDataLegpElm.value) {\n _this14.wordsName = nameData[_i5].value;\n break;\n }\n }\n });\n }\n\n // 原始长度单位\n var unitData = [{\n name: '米',\n value: '米'\n }, {\n name: '千米',\n value: '千米'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], '.input-select-unit', 1);\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-unit')[1].getElementsByTagName('input')[0];\n _this14._elms.lengthUnit = [unitDataLegpElm];\n unitDataLegpElm.value = _this14.options.lengthUnit;\n for (var _i6 = 0; _i6 < unitData.length; _i6++) {\n if (unitData[_i6].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i6].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < unitData.length; _i7++) {\n if (unitData[_i7].value === unitDataLegpElm.value) {\n _this14.lengthUnit = unitData[_i7].value;\n break;\n }\n }\n });\n }\n //\n\n // 拟合长度单位\n // let fitUnitData = [\n // {\n // name: '米',\n // value: '米'\n // },\n // {\n // name: '千米',\n // value: '千米'\n // }\n // ]\n\n // let fitUnitDataLegpObject = legp(\n // this._DialogObject._element.content.getElementsByClassName(\n // 'input-select-fit-unit-box'\n // )[0],\n // '.input-select-fit-unit'\n // )\n // if (fitUnitDataLegpObject) {\n // fitUnitDataLegpObject.legp_search(fitUnitData)\n // let fitUnitDataLegpElm = this._DialogObject._element.content\n // .getElementsByClassName('input-select-fit-unit')[0]\n // .getElementsByTagName('input')[0]\n // this._elms.fitLengthUnit = [fitUnitDataLegpElm]\n // fitUnitDataLegpElm.value = this.options.fitLengthUnit\n // for (let i = 0; i < fitUnitData.length; i++) {\n // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {\n // fitUnitDataLegpObject.legp_searchActive(fitUnitData[i].value)\n // break\n // }\n // }\n // fitUnitDataLegpElm.addEventListener('input', () => {\n // for (let i = 0; i < fitUnitData.length; i++) {\n // if (fitUnitData[i].value === fitUnitDataLegpElm.value) {\n // this.fitLengthUnit = fitUnitData[i].value\n // break\n // }\n // }\n // })\n // }\n\n var lineTypeData = [{\n name: '实线',\n value: '实线',\n key: 0,\n icon: 'line'\n }, {\n name: '虚线',\n value: '虚线',\n key: 1,\n icon: 'dash-line'\n }, {\n name: '泛光',\n value: '泛光',\n key: 2,\n icon: 'light-line'\n }, {\n name: '尾迹光线',\n value: '尾迹光线',\n key: 3,\n icon: 'tail-line'\n }, {\n name: '多尾迹光线',\n value: '多尾迹光线',\n key: 4,\n icon: 'mult-tail-line'\n }, {\n name: '流动虚线1',\n value: '流动虚线1',\n key: 5,\n icon: 'flow-dash-line1'\n }, {\n name: '流动虚线2',\n value: '流动虚线2',\n key: 6,\n icon: 'flow-dash-line2'\n }, {\n name: '流动箭头1',\n value: '流动箭头1',\n key: 7,\n icon: 'pic-line1'\n }, {\n name: '流动箭头2',\n value: '流动箭头2',\n key: 8,\n icon: 'pic-line2'\n }, {\n name: '流动箭头3',\n value: '流动箭头3',\n key: 9,\n icon: 'pic-line3'\n }, {\n name: '流动箭头4',\n value: '流动箭头4',\n key: 10,\n icon: 'pic-line4'\n }, {\n name: '流动箭头5',\n value: '流动箭头5',\n key: 11,\n icon: 'pic-line5'\n }, {\n name: '流动箭头6',\n value: '流动箭头6',\n key: 12,\n icon: 'pic-line6'\n }];\n var lineTypeDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('input-select-line-type-box')[0], '.input-select-line-type');\n if (lineTypeDataLegpObject) {\n lineTypeDataLegpObject.legp_search(lineTypeData);\n var iActiveElm2 = document.createElement('i');\n iActiveElm2.className = 'icon icon-active';\n _this14._DialogObject._element.content.getElementsByClassName('input-select-line-type')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm2);\n var lineTypeDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('input-select-line-type')[0].getElementsByTagName('input')[0];\n _this14._elms.lineType = [lineTypeDataLegpElm];\n for (var _i8 = 0; _i8 < lineTypeData.length; _i8++) {\n if (lineTypeData[_i8].key === _this14.options.type) {\n lineTypeDataLegpObject.legp_searchActive(lineTypeData[_i8].value);\n lineTypeDataLegpElm.value = lineTypeData[_i8].value;\n iActiveElm2.className = \"icon icon-active \".concat(lineTypeData[_i8].icon);\n break;\n }\n }\n lineTypeDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < lineTypeData.length; _i9++) {\n if (lineTypeData[_i9].value === lineTypeDataLegpElm.value) {\n _this14.lineType = lineTypeData[_i9].key;\n iActiveElm2.className = \"icon icon-active \".concat(lineTypeData[_i9].icon);\n\n //控制参数显隐\n if (2 < _this14.lineType && _this14.lineType < 13) {\n //贴图参数\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'flex');\n } else {\n document.getElementById('dashTextureDom') && (document.getElementById('dashTextureDom').style.display = 'none');\n }\n if (2 < _this14.lineType && _this14.lineType < 5) {\n //尾迹参数\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'none');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'none');\n } else {\n document.getElementsByClassName('lineSpace')[0] && (document.getElementsByClassName('lineSpace')[0].style.display = 'flex');\n document.getElementsByClassName('lineSpace')[1] && (document.getElementsByClassName('lineSpace')[1].style.display = 'flex');\n }\n break;\n }\n }\n });\n }\n var heightBoxElm = _this14._DialogObject._element.content.getElementsByClassName('height-box')[0];\n var heightElm = heightBoxElm.getElementsByClassName('height')[0];\n var heightConfirmElm = _this14._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (_this14.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n var heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n var heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (heightModeObject) {\n heightModeObject.legp_search(heightModeData);\n var heightModeDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n for (var _i10 = 0; _i10 < heightModeData.length; _i10++) {\n if (heightModeData[_i10].key == _this14.heightMode) {\n heightModeDataLegpElm.value = heightModeData[_i10].value;\n heightModeObject.legp_searchActive(heightModeData[_i10].value);\n break;\n }\n }\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < heightModeData.length; _i11++) {\n if (heightModeData[_i11].value === heightModeDataLegpElm.value) {\n _this14.heightMode = heightModeData[_i11].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this14.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n _this14._elms.height = heightElm;\n _this14._elms.heightBox = heightBoxElm;\n _this14._elms.heightMode = heightModeDataLegpElm;\n _this14._elms.heightConfirm = heightConfirmElm;\n _this14._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n _this14.positionEditing = false;\n for (var _i12 = 0; _i12 < _this14.options.positions.length; _i12++) {\n _this14.options.positions[_i12].alt = Number((_this14.options.positions[_i12].alt + Number(heightElm.value)).toFixed(2));\n _this14._elms.alt[_i12].innerHTML = _this14.options.positions[_i12].alt;\n }\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n }\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n _this14._elms.lng = [];\n _this14._elms.lngInput = [];\n _this14._elms.lat = [];\n _this14._elms.latInput = [];\n _this14._elms.alt = [];\n _this14._elms.altInput = [];\n var _loop6 = function _loop6(_i13) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\".concat(_i13 + 1, \"
\\n
\\n
\\n
\\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this14.options.positions[_i13].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this14.options.positions[_i13].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this14.options.positions[_i13].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this14.options.positions[_i13].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this14.options.positions[_i13].alt.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this14.options.positions[_i13].alt.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this14.options.positions[_i13].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this14.options.positions[_i13].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this14.options.positions[_i13].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this14.options.positions[_i13].lng.toFixed(8);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this14.options.positions[_i13].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this14.options.positions[_i13].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this14.options.positions[_i13].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this14.options.positions[_i13].lat.toFixed(8);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n altBox.addEventListener('dblclick', function () {\n if (_this14.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this14.options.positions[_i13].alt.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n _this14.positionEditing = false;\n _this14.closeNodeEdit();\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this14.options.positions[_i13].alt.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this14.options.positions[_i13].alt = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = _this14.options.positions[_i13].alt.toFixed(2);\n var fromDegreesArray = _this14.renewPositions(_this14.options.positions);\n _this14.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this14.label.position = [_this14.options.positions[0].lng, _this14.options.positions[0].lat, fromDegreesArray[2]];\n });\n _this14._elms.lng.push(lng);\n _this14._elms.lngInput.push(lngInput);\n _this14._elms.lat.push(lat);\n _this14._elms.latInput.push(latInput);\n _this14._elms.alt.push(alt);\n _this14._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var _i13 = 0; _i13 < _this14.options.positions.length; _i13++) {\n _loop6(_i13);\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_21__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_20__[\"legp\"])(_this14._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this14._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this14.labelFontFamily].value;\n for (var _i14 = 0; _i14 < fontData.length; _i14++) {\n if (fontData[_i14].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i14].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i15 = 0; _i15 < fontData.length; _i15++) {\n if (fontData[_i15].value === fontDataLegpElm.value) {\n _this14.labelFontFamily = fontData[_i15].key;\n break;\n }\n }\n });\n _this14._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context4.next = 33;\n break;\n case 32:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 33:\n case \"end\":\n return _context4.stop();\n }\n }, _callee2, this);\n }));\n function edit(_x2) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }() // 平滑处理\n )\n }, {\n key: \"smoothHandle\",\n value: function smoothHandle(positions) {\n var newPositions = [];\n var time = [];\n var fromDegreesArrayHeights = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n time.push(i / (positions.length - 1));\n }\n var spline = new Cesium.CatmullRomSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n var length = positions.length * 20;\n for (var _i16 = 0; _i16 <= length; _i16++) {\n var cartesian3 = spline.evaluate(_i16 / length);\n newPositions.push(this.cartesian3Towgs84(cartesian3, this.sdk.viewer));\n }\n return newPositions;\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(positionsArray, cd) {\n if (this._error) {\n return;\n }\n var positions = JSON.parse(JSON.stringify(positionsArray));\n var ground;\n switch (this.heightMode) {\n case 0:\n case '0':\n ground = false;\n break;\n case 1:\n case '1':\n for (var i = 0; i < positions.length; i++) {\n var height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions[i].lng, positions[i].lat));\n positions[i].alt = height ? Number((positions[i].alt + Number(height)).toFixed(2)) : Number(positions[i].alt.toFixed(2));\n }\n ground = false;\n break;\n case 2:\n case '2':\n ground = true;\n break;\n }\n var newPositions;\n var fromDegreesArray = [];\n if (this.options.noseToTail && this.options.noseToTail !== 'false') {\n newPositions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(positions), [positions[0]]);\n } else {\n newPositions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(positions);\n }\n if (this.options.smooth && this.options.smooth !== 'false') {\n newPositions = this.smoothHandle(newPositions);\n for (var _i17 = 0; _i17 < newPositions.length; _i17++) {\n fromDegreesArray.push(newPositions[_i17].lng, newPositions[_i17].lat, newPositions[_i17].alt);\n }\n } else {\n for (var _i18 = 0; _i18 < newPositions.length; _i18++) {\n fromDegreesArray.push(newPositions[_i18].lng, newPositions[_i18].lat, newPositions[_i18].alt);\n }\n }\n\n // 计算长度\n if (this.options.noseToTail && this.options.noseToTail !== 'false' || this.options.smooth && this.options.smooth !== 'false') {\n var array = [];\n for (var _i19 = 0; _i19 < fromDegreesArray.length; _i19 += 3) {\n array.push({\n lng: fromDegreesArray[_i19],\n lat: fromDegreesArray[_i19 + 1],\n alt: fromDegreesArray[_i19 + 2]\n });\n }\n var _this15 = this;\n this.computeDistance(array, 2, this.options.wordsName).then(function (res) {\n _this15.lengthByMeter = res;\n cd && cd();\n });\n } else {\n var _this16 = this;\n this.computeDistance(positions, 2, this.options.wordsName).then(function (res) {\n _this16.lengthByMeter = res;\n cd && cd();\n });\n }\n return fromDegreesArray;\n }\n\n // 更新多边形(线扩展)\n }, {\n key: \"renewPolygon\",\n value: function renewPolygon(fromDegreesArray) {\n var linePositions = [];\n if (this.options.extend && this.options.extend !== 'false') {\n var outerHole = [];\n for (var i = 0; i < fromDegreesArray.length; i += 3) {\n linePositions.push([fromDegreesArray[i], fromDegreesArray[i + 1]]);\n }\n var linestring = turf.lineString(linePositions);\n var buffered = turf.buffer(linestring, this.options.extendWidth / 1000, {\n units: 'kilometers'\n });\n for (var _i20 = 0; _i20 < buffered.geometry.coordinates[0].length; _i20++) {\n outerHole.push(buffered.geometry.coordinates[0][_i20][0], buffered.geometry.coordinates[0][_i20][1]);\n }\n var holes = []; // 孔\n for (var _i21 = 1; _i21 < buffered.geometry.coordinates.length; _i21++) {\n var array = [];\n for (var m = 0; m < buffered.geometry.coordinates[_i21].length; m++) {\n array.push(buffered.geometry.coordinates[_i21][m][0], buffered.geometry.coordinates[_i21][m][1]);\n }\n holes.push({\n positions: Cesium.Cartesian3.fromDegreesArray(array)\n });\n }\n this.entity.polygon = new Cesium.PolygonGraphics({\n hierarchy: {\n positions: Cesium.Cartesian3.fromDegreesArray(outerHole),\n holes: holes\n },\n material: Cesium.Color.fromCssColorString(this.options.extendColor)\n });\n } else {\n this.entity.polygon = undefined;\n }\n }\n }, {\n key: \"reset\",\n value: function () {\n var _reset = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (this.entity) {\n _context5.next = 2;\n break;\n }\n return _context5.abrupt(\"return\");\n case 2:\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineWidth = this.originalOptions.width;\n this.lineType = this.originalOptions.type;\n this.noseToTail = this.originalOptions.noseToTail;\n this.smooth = this.originalOptions.smooth;\n this.extend = this.originalOptions.extend;\n this.extendWidth = this.originalOptions.extendWidth;\n this.extendColor = this.originalOptions.extendColor;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n // this.attributeVr = this.options.attribute.vr.content\n // this.attributeCamera = this.options.attribute.camera.content\n // this.attributeGoods = this.options.attribute.goods.content\n this.rotate = this.originalOptions.rotate;\n this.speed = this.originalOptions.speed;\n // this.dashSize = this.originalOptions.dashSize\n this.space = this.originalOptions.space;\n // this.cameraSelect && this.cameraSelect()\n // this.goodsSelect && this.goodsSelect()\n\n this.heightMode = this.options.heightMode;\n\n // let height\n // if (this.ground) {\n // height = await that.getClampToHeight({\n // lng: this.options.positions[0].lng,\n // lat: this.options.positions[0].lat\n // })\n // } else {\n // height = this.options.positions[0].alt\n // }\n // this.options.label.position = {\n // lng: this.options.positions[0].lng,\n // lat: this.options.positions[0].lat,\n // alt: height\n // }\n // this.label.position = [\n // this.options.label.position.lng,\n // this.options.label.position.lat,\n // this.options.label.position.alt\n // ]\n case 26:\n case \"end\":\n return _context5.stop();\n }\n }, _callee3, this);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接' + (this.options.attribute.link.content.length + 1),\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n // let input = document.createElement('input');\n // input.type = \"file\";\n // input.accept = \".mp4, .pdf\"\n // input.click()\n // input.addEventListener('change', (event) => {\n // if (input.value) {\n // this.options.attribute.link.content.push({\n // name: '链接' + (this.options.attribute.link.content.length + 1),\n // url: input.value\n // })\n // this.attributeLink = this.options.attribute.link.content\n // }\n // })\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接' + (this.options.attribute.link.content.length + 1),\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n\n // _addRr() {\n // if (\n // this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value\n // ) {\n // this.options.attribute.vr.content.push({\n // name: '全景图' + (this.options.attribute.vr.content.length + 1),\n // url: this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value\n // })\n // this._DialogObject._element.content.getElementsByClassName(\n // 'vr_add'\n // )[0].value = ''\n // this.attributeVr = this.options.attribute.vr.content\n // } else {\n // this.Dialog.clickAddVr && this.Dialog.clickAddVr()\n // }\n // }\n\n // addAttributeRr(vr) {\n // this.options.attribute.vr.content.push({\n // name: '全景图' + (this.options.attribute.vr.content.length + 1),\n // url: vr\n // })\n // this.attributeVr = this.options.attribute.vr.content\n // }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n height,\n i,\n a,\n _i22,\n _a,\n _i23,\n _a2,\n BoundingSphere,\n _args6 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n options = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};\n if (!this._error) {\n _context6.next = 3;\n break;\n }\n return _context6.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_23__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context6.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context6.next = 18;\n break;\n }\n _context6.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context6.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context6.next = 43;\n break;\n case 25:\n positionArray = [];\n _context6.t0 = this.options.heightMode;\n _context6.next = _context6.t0 === '0' ? 29 : _context6.t0 === 0 ? 29 : _context6.t0 === '1' ? 31 : _context6.t0 === 1 ? 31 : _context6.t0 === '2' ? 36 : _context6.t0 === 2 ? 36 : 41;\n break;\n case 29:\n for (i = 0; i < this.options.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt);\n positionArray.push(a.x, a.y, a.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 31:\n _context6.next = 33;\n return this.getClampToHeight(this.options.positions[0]);\n case 33:\n height = _context6.sent;\n for (_i22 = 0; _i22 < this.options.positions.length; _i22++) {\n _a = Cesium.Cartesian3.fromDegrees(this.options.positions[_i22].lng, this.options.positions[_i22].lat, height + this.options.positions[_i22].alt);\n positionArray.push(_a.x, _a.y, _a.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 36:\n _context6.next = 38;\n return this.getClampToHeight(this.options.positions[0]);\n case 38:\n height = _context6.sent;\n for (_i23 = 0; _i23 < this.options.positions.length; _i23++) {\n _a2 = Cesium.Cartesian3.fromDegrees(this.options.positions[_i23].lng, this.options.positions[_i23].lat, height);\n positionArray.push(_a2.x, _a2.y, _a2.z);\n }\n return _context6.abrupt(\"break\", 41);\n case 41:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 43:\n case \"end\":\n return _context6.stop();\n }\n }, _callee4, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this17 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].primaryCallBack = function (content) {\n _this17.options.richTextContent = content;\n };\n }\n\n // static nodeEdit2(that, cb = () => { }) {\n // that.positionEditing = false\n // if (YJ.Measure.GetMeasureStatus()) {\n // cb('上一次测量未结束')\n // } else {\n // YJ.Measure.SetMeasureStatus(true)\n // that.tip = new MouseTip('请选择一个顶点,右键取消', that.sdk)\n // that.event = new MouseEvent(that.sdk)\n // that.nodePoints = []\n // let selectPoint\n // let originalPosition\n // let newpositions = []\n // let fromDegreesArray = []\n // for (let i = 0; i < that.options.positions.length; i++) {\n // fromDegreesArray.push(\n // that.options.positions[i].lng,\n // that.options.positions[i].lat,\n // that.options.positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n\n // that.event.mouse_left((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // originalPosition = that.options.positions[selectPoint.index]\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // position: Cesium.Cartesian3.fromDegrees(\n // that.options.positions[selectPoint.index].lng,\n // that.options.positions[selectPoint.index].lat,\n // that.options.positions[selectPoint.index].alt\n // ),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY\n // }\n // })\n // that.nodePoints.splice(selectPoint.index, 0, entity)\n // that.options.positions.splice(\n // selectPoint.index,\n // 0,\n // that.options.positions[selectPoint.index]\n // )\n // let fromDegreesArray = that.renewPositions(that.options.positions)\n // that.renewPolygon(fromDegreesArray)\n // that.options.lengthByMeter = that.computeDistance(\n // that.options.positions,\n // 2,\n // that.ground\n // )\n // that.lengthUnit = that.options.lengthUnit\n // } else {\n // var pick = that.sdk.viewer.scene.pick(movement.position)\n // if (\n // pick &&\n // pick.id &&\n // pick.id.name &&\n // pick.id.name === 'node-secondary-edit-point'\n // ) {\n // selectPoint = pick.id\n // that.nodePoints.splice(pick.id.index, 1)\n // that.sdk.viewer.entities.remove(pick.id)\n // that.tip.set_text('左键开始,右键结束,CTRL+右键撤销')\n // originalPosition = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // }\n // }\n // })\n\n // that.event.mouse_right((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = originalPosition\n // cb(null, that.options.positions)\n // }\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(\n // positions[i].lng,\n // positions[i].lat,\n // positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(\n // fromDegreesArray\n // )\n // for (let i = 0; i < that.nodePoints.length; i++) {\n // that.sdk.viewer.entities.remove(that.nodePoints[i])\n // }\n // that.nodePoints = []\n // that.event.destroy()\n // that.tip.destroy()\n // })\n\n // that.event.mouse_move((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions[selectPoint.index] = that.cartesian3Towgs84(\n // cartesian,\n // that.sdk.viewer\n // )\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(\n // positions[i].lng,\n // positions[i].lat,\n // positions[i].alt\n // )\n // }\n // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(\n // fromDegreesArray\n // )\n // if (that.options.positions.length === 1) {\n // that.label.position = [\n // that.options.positions[0].lng,\n // that.options.positions[0].lat,\n // that.options.positions[0].alt\n // ]\n // that.options.label.position = {\n // lng: that.options.positions[0].lng,\n // lat: that.options.positions[0].lat,\n // alt: that.options.positions[0].alt\n // }\n // }\n // }\n // that.tip.setPosition(\n // cartesian,\n // movement.endPosition.x,\n // movement.endPosition.y\n // )\n // })\n\n // that.event.mouse_right_keyboard_ctrl((movement, cartesian) => {\n // if (selectPoint) {\n // that.options.positions.pop()\n // that.sdk.viewer.entities.remove(\n // that.nodePoints[that.nodePoints.length - 1]\n // )\n // that.nodePoints.pop()\n // if (selectPoint.index === that.options.positions.length) {\n // if (that.nodePoints[selectPoint.index - 1]) {\n // selectPoint = that.nodePoints[selectPoint.index - 1]\n // } else {\n // selectPoint.index = 0\n // }\n // }\n // }\n // })\n\n // that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n // return newpositions\n // }, false)\n\n // for (let i = 0; i < that.options.positions.length; i++) {\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: Cesium.Cartesian3.fromDegrees(\n // that.options.positions[i].lng,\n // that.options.positions[i].lat,\n // that.options.positions[i].alt\n // ),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY\n // }\n // })\n // that.nodePoints.push(entity)\n // }\n // }\n // }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(cd) {\n var _this18 = this;\n this.positionEditing = false;\n this.noseToTail = false;\n // this.smooth = false\n this.heightMode = 0;\n if (YJ.Measure.GetMeasureStatus()) {} else {\n this.closeNodeEdit();\n YJ.Measure.SetMeasureStatus(true);\n this._nodeEditCallback = cd;\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('请选择一个顶点,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk);\n this.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_18__[\"default\"](this.sdk);\n var selectPoint;\n this.event.mouse_left(function (movement, cartesian) {\n var pick = _this18.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n _this18.ControllerObject.position = _this18.options.positions[selectPoint.index];\n _this18.ControllerObject.editTranslational();\n _this18.tip && _this18.tip.destroy();\n _this18.ControllerObject.controllerCallBack = function (params) {\n if (selectPoint.index === 0) {\n _this18.label.position = [params.position.lng, params.position.lat, params.position.alt];\n _this18.options.label.position = {\n lng: params.position.lng,\n lat: params.position.lat,\n alt: params.position.alt\n };\n }\n _this18.options.positions[selectPoint.index] = params.position;\n _this18._elms.lng && (_this18._elms.lng[selectPoint.index].innerHTML = params.position.lng.toFixed(8));\n _this18._elms.lngInput && (_this18._elms.lngInput[selectPoint.index].value = params.position.lng.toFixed(8));\n _this18._elms.lat && (_this18._elms.lat[selectPoint.index].innerHTML = params.position.lat.toFixed(8));\n _this18._elms.latInput && (_this18._elms.latInput[selectPoint.index].value = params.position.lat.toFixed(8));\n _this18._elms.alt && (_this18._elms.alt[selectPoint.index].innerHTML = params.position.alt.toFixed(2));\n _this18._elms.altInput && (_this18._elms.altInput[selectPoint.index].value = params.position.alt.toFixed(2));\n selectPoint.position = Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt);\n };\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n for (var i = 0; i < _this18.nodePoints.length; i++) {\n _this18.sdk.viewer.entities.remove(_this18.nodePoints[i]);\n }\n _this18.nodePoints = [];\n _this18.event.destroy();\n _this18.tip && _this18.tip.destroy();\n _this18.tip = null;\n _this18.ControllerObject.destroy();\n var fromDegreesArray = _this18.renewPositions(_this18.options.positions);\n _this18.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n YJ.Measure.SetMeasureStatus(false);\n _this18._nodeEditCallback = null;\n });\n this.event.mouse_move(function (movement, cartesian) {\n _this18.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n var fromDegreesArray = _this18.renewPositions(_this18.options.positions);\n _this18._nodeEditCallback(_this18.options.positions, _this18.lengthByMeter);\n return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n }, false);\n for (var i = 0; i < this.options.positions.length; i++) {\n var entity = this.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n position: Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, this.options.positions[i].alt),\n billboard: {\n image: this.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n this.nodePoints.push(entity);\n }\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit() {\n YJ.Measure.SetMeasureStatus(false);\n this.ControllerObject && this.ControllerObject.destroy();\n this.event && that.event.destroy();\n this.tip && that.tip.destroy();\n this.tip = null;\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n this._nodeEditCallback = null;\n }\n\n /**\r\n * 删除\r\n */\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label && this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context7.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context7.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context7.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n )\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this19 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.operate.positionEditing = status;\n if (status === true) {\n this.closeNodeEdit();\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk);\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var positions = JSON.parse(JSON.stringify(this.options.positions));\n // let positions2 = JSON.parse(JSON.stringify(positions))\n // for (let i = 0; i < positions2.length; i++) {\n // let height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions2[i].lng, positions2[i].lat))\n // positions2[i] = Cesium.Cartesian3.fromDegrees(\n // positions2[i].lng,\n // positions2[i].lat,\n // Number((positions2[i].alt + Number(height)).toFixed(2))\n // )\n // }\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.options.positions)\n };\n for (var i = 0; i < positions.length; i++) {\n positions[i] = Cesium.Cartesian3.fromDegrees(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n var center = positions[Math.floor(positions.length / 2)];\n var disparity = [];\n for (var _i24 = 0; _i24 < positions.length; _i24++) {\n center.x - positions[_i24].x;\n disparity.push({\n x: center.x - positions[_i24].x,\n y: center.y - positions[_i24].y,\n z: center.z - positions[_i24].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n newpositions = [];\n for (var _i25 = 0; _i25 < disparity.length; _i25++) {\n var newP = {\n x: cartesian.x - disparity[_i25].x,\n y: cartesian.y - disparity[_i25].y,\n z: cartesian.z - disparity[_i25].z\n };\n // let pos84 = this.cartesian3Towgs84(\n // newP,\n // this.sdk.viewer\n // )\n // let height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat))\n // pos84.alt = Number((pos84.alt + Number(height)).toFixed(2))\n // newP = Cesium.Cartesian3.fromDegrees(\n // pos84.lng,\n // pos84.lat,\n // pos84.alt\n // )\n newpositions.push(newP);\n }\n var position84 = _this19.cartesian3Towgs84(newpositions[0], _this19.sdk.viewer);\n _this19.label.position = [position84.lng, position84.lat, position84.alt];\n _this19.options.label.position = {\n lng: position84.lng,\n lat: position84.lat,\n alt: position84.alt\n };\n _this19.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n newpositions = [];\n for (var _i26 = 0; _i26 < disparity.length; _i26++) {\n newpositions.push({\n x: cartesian.x - disparity[_i26].x,\n y: cartesian.y - disparity[_i26].y,\n z: cartesian.z - disparity[_i26].z\n });\n }\n var positionsLngLat = [];\n for (var _i27 = 0; _i27 < newpositions.length; _i27++) {\n var position = _this19.cartesian3Towgs84(newpositions[_i27], _this19.sdk.viewer);\n position.alt = _this19.options.positions[_i27].alt;\n positionsLngLat.push(position);\n _this19._elms.lng && (_this19._elms.lng[_i27].innerHTML = position.lng.toFixed(8));\n _this19._elms.lngInput && (_this19._elms.lngInput[_i27].value = position.lng.toFixed(8));\n _this19._elms.lat && (_this19._elms.lat[_i27].innerHTML = position.lat.toFixed(8));\n _this19._elms.latInput && (_this19._elms.latInput[_i27].value = position.lat.toFixed(8));\n _this19._elms.alt && (_this19._elms.alt[_i27].innerHTML = position.alt.toFixed(2));\n _this19._elms.altInput && (_this19._elms.altInput[_i27].value = position.alt.toFixed(2));\n }\n _this19.options.positions = positionsLngLat;\n _this19.previous.positions = positionsLngLat;\n\n // this.entity.polyline.positionsLngLat = positionsLngLat\n var fromDegreesArray = _this19.renewPositions(_this19.options.positions, function () {\n if (_this19._positionEditingCallback) {\n _this19._positionEditingCallback();\n _this19._positionEditingCallback = null;\n }\n });\n _this19.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n _this19.renewPolygon(fromDegreesArray);\n _this19.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n _this19.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this19.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n // 长按取消\n _this19.event.mouse_move(function () {});\n _this19.event.mouse_left(function () {});\n _this19.event.mouse_right(function () {});\n _this19.positionEditing = false;\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (newpositions.length > 0) {\n return newpositions;\n } else {\n return positions;\n }\n }, false);\n } else {\n if (!this.sdk || !this.sdk.viewer || !this.label || !this.label.entity) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n var fromDegreesArray = this.renewPositions(this.options.positions);\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.renewPolygon(fromDegreesArray);\n switch (this.heightMode) {\n case 0:\n case '0':\n case 1:\n case '1':\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat, fromDegreesArray[2]];\n this.options.label.position = {\n lng: this.options.positions[0].lng,\n lat: this.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n break;\n case 2:\n case '2':\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat];\n this.options.label.position = {\n lng: this.options.positions[0].lng,\n lat: this.options.positions[0].lat,\n alt: fromDegreesArray[2]\n };\n break;\n }\n }\n }\n }, {\n key: \"openPositionEditing\",\n value: function openPositionEditing(cd) {\n this.positionEditing = true;\n this._positionEditingCallback = cd;\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _Cesium$Cartesian,\n _this20 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: '',\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var points = [];\n for (var i = 0; i < this.options.positions.length; i++) {\n points.push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n var line = turf.lineString(points);\n var length = turf.length(line, {\n units: 'kilometers'\n });\n var sliced = turf.lineSliceAlong(line, 0, length / 2, {\n units: 'kilometers'\n });\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]));\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this20.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n var height, ground;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n _context8.t0 = that.options.heightMode;\n _context8.next = _context8.t0 === '0' ? 3 : _context8.t0 === 0 ? 3 : _context8.t0 === '1' ? 6 : _context8.t0 === 1 ? 6 : _context8.t0 === '2' ? 13 : _context8.t0 === 2 ? 13 : 18;\n break;\n case 3:\n ground = false;\n height = that.options.positions[0].alt;\n return _context8.abrupt(\"break\", 18);\n case 6:\n ground = false;\n _context8.next = 9;\n return that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n });\n case 9:\n _context8.t1 = _context8.sent;\n _context8.t2 = that.options.positions[0].alt;\n height = _context8.t1 + _context8.t2;\n return _context8.abrupt(\"break\", 18);\n case 13:\n ground = true;\n _context8.next = 16;\n return that.getClampToHeight({\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat\n });\n case 16:\n height = _context8.sent;\n return _context8.abrupt(\"break\", 18);\n case 18:\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.positions[0].lng,\n lat: that.options.positions[0].lat,\n alt: height\n };\n }\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: ground\n });\n case 20:\n case \"end\":\n return _context8.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x3) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"create\",\n value: function create(that) {\n var ground;\n if (that.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n var positions = that.options.positions;\n var fromDegreesArray = that.renewPositions(positions);\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polyline: {\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n width: that.options.width,\n clampToGround: ground,\n // material: that.getMaterial(that.options.color, that.options.type, that.entity, that.options),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.entity.polyline.oriWidth = that.options.width;\n that.judgeLine(that.entity, that.options);\n var params = _objectSpread({}, that.options);\n params.speed = that.inputSpeed;\n that.entity.polyline.material = that.getMaterial(that.options.color, that.options.type, that.entity, params);\n that.sdk._entityZIndex++;\n PolylineObject.createLabel(that);\n // that.entity.polyline.positionsLngLat = positions\n that.renewPolygon(fromDegreesArray);\n that.computeDistance(positions, 2, that.options.wordsName).then(function (res) {\n that.lengthByMeter = res;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(that.sdk, that.options.id);\n });\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_22__[\"setSplitDirection\"])(0, that.options.id);\n }\n\n // if (this.options.noseToTail) {\n // let array = []\n // for (let i = 0; i < fromDegreesArray.length; i += 2) {\n // array.push({ lng: fromDegreesArray[i], lat: fromDegreesArray[i + 1] })\n // }\n // this.options.fit_length = tool.computeDistance(array)\n // }\n // else {\n // this.options.fit_length = tool.computeDistance(positions)\n // }\n // if (this.options.fit_length_unit === 'km') {\n // this.options.fit_length = this.options.fit_length / 1000\n // }\n\n var scene = that.sdk.viewer.scene;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PolylineObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUG9seWxpbmVPYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvUG9seWxpbmVPYmplY3QvaW5kZXguanM/YmM3OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGRlc2NyaXB0aW9uIOe6v1xyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZydcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gJy4vX2VsZW1lbnQnXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2luZGV4J1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tICcuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFicydcclxuaW1wb3J0IHJpY2hUZXh0IGZyb20gJy4uLy4uL0VsZW1lbnQvcmljaFRleHQnXHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi9ldmVudEJpbmRpbmcnXHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi4vLi4vLi4vQ29udHJvbGxlci9pbmRleCdcclxuaW1wb3J0IHsgc3luY0RhdGEsIGdldDNEVmlldyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZGF0YWxpc3QnXHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3cgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5cclxuY2xhc3MgUG9seWxpbmVPYmplY3QgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOaKmOe6v1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOe6v+WxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWV7c3RyaW5nfSDlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy53aWR0aD0ze251bWJlcn0g57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9I2ZmMDAwMCB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy50eXBlPTAge251bWJlcn0g5p2Q6LSo57G75Z6LIDAt5a6e57q/IDEt6Jma57q/IDIt5rOb5YWJLi4uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0TW9kZT0ye251bWJlcn0g6auY5bqm5qih5byP77yIMO+8mua1t+aLlOmrmOW6pu+8mzHvvJrnm7jlr7npq5jluqbvvJsy77ya5L6d6ZmE5qih5byP77yJXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubm9zZVRvVGFpbD1mYWxzZSB7Ym9vbGVhbn0g6aaW5bC+55u46L+eXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc21vb3RoPWZhbHNlIHtib29sZWFufSDnur/mrrXlnIbmu5FcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5leHRlbmQ9ZmFsc2Uge2Jvb2xlYW59IOe6v+e8k+WGslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmV4dGVuZFdpZHRoPTEwIHtudW1iZXJ9IOe6v+e8k+WGsuWuveW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmV4dGVuZENvbG9yPXJnYmEoMjU1LDI1NSw4MCwwLjMpIHtudW1iZXJ9IOe6v+e8k+WGsuminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+6ZqQXHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5ub3NlVG9UYWlsPWZhbHNlIHtib29sZWFufSDmmK/lkKbpppblsL7nm7jov55cclxuICAgKiBcclxuICAgKiBcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge3N0cmluZ30g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30ge3N0cmluZ30g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBcclxuICAgKiBcclxuICAgKiBAcGFyYW0gX0RpYWxvZyB7b2JqZWN0fSDlvLnmoYbkuovku7ZcclxuICAgKiBAcGFyYW0gX0RpYWxvZy5jb25maXJtQ2FsbEJhY2sge2Z1bmN0aW9ufSDlvLnmoYbnoa7orqTml7bnmoTlm57osINcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucylcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMud2lkdGggPSAoKG9wdGlvbnMud2lkdGggfHwgb3B0aW9ucy53aWR0aCA9PT0gMCkgPyBvcHRpb25zLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgJyNmZjAwMDAnXHJcbiAgICB0aGlzLm9wdGlvbnMudHlwZSA9IG9wdGlvbnMudHlwZSA/IE51bWJlcihvcHRpb25zLnR5cGUpIDogMFxyXG4gICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgPSBvcHRpb25zLm5vc2VUb1RhaWwgfHwgZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5zbW9vdGggPSBvcHRpb25zLnNtb290aCB8fCBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZCA9IG9wdGlvbnMuZXh0ZW5kIHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlID0gKG9wdGlvbnMucm90YXRlIHx8IG9wdGlvbnMucm90YXRlID09PSBmYWxzZSkgPyBvcHRpb25zLnJvdGF0ZSA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5zcGFjZSA9IG9wdGlvbnMuc3BhY2UgfHwgMVxyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gb3B0aW9ucy5zcGVlZCB8fCAxMFxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmRhc2hTaXplID0gb3B0aW9ucy5kYXNoU2l6ZSB8fCAwLjAzXHJcbiAgICB0aGlzLm9wdGlvbnMud29yZHNOYW1lID0gb3B0aW9ucy53b3Jkc05hbWUgfHwgJ+epuumXtOmVv+W6pidcclxuICAgIHRoaXMub3B0aW9ucy5leHRlbmRXaWR0aCA9XHJcbiAgICAgIG9wdGlvbnMuZXh0ZW5kV2lkdGggfHwgb3B0aW9ucy5leHRlbmRXaWR0aCA9PT0gMFxyXG4gICAgICAgID8gb3B0aW9ucy5leHRlbmRXaWR0aFxyXG4gICAgICAgIDogMTBcclxuICAgIHRoaXMub3B0aW9ucy5leHRlbmRDb2xvciA9IG9wdGlvbnMuZXh0ZW5kQ29sb3IgfHwgJ3JnYmEoMjU1LDI1NSw4MCwwLjMpJ1xyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPVxyXG4gICAgICBvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKG9wdGlvbnMuaGVpZ2h0TW9kZSB8fCBvcHRpb25zLmhlaWdodE1vZGUgPT0gMCkgPyBvcHRpb25zLmhlaWdodE1vZGUgOiAyXHJcbiAgICB0aGlzLl9lbG1zID0gW11cclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTpcclxuICAgICAgICBvcHRpb25zLmxhYmVsLmZvbnRTaXplIHx8IG9wdGlvbnMubGFiZWwuZm9udFNpemUgPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gICAgICAgICAgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDBcclxuICAgICAgICAgID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICAgICAgICAgIDogNCxcclxuICAgICAgcGl4ZWxPZmZzZXQ6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwXHJcbiAgICAgICAgICA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgICAgICAgIDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6XHJcbiAgICAgICAgb3B0aW9ucy5sYWJlbC5uZWFyIHx8IG9wdGlvbnMubGFiZWwubmVhciA9PT0gMFxyXG4gICAgICAgICAgPyBvcHRpb25zLmxhYmVsLm5lYXJcclxuICAgICAgICAgIDogMjAwMCxcclxuICAgICAgZmFyOlxyXG4gICAgICAgIG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwXHJcbiAgICAgICAgICA/IG9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICAgICAgICA6IDEwMDAwMFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID1cclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIC8vIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIC8vIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPVxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID1cclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID1cclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcblxyXG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmFcclxuICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnJcclxuICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHNcclxuXHJcblxyXG4gICAgdGhpcy5vcGVyYXRlID0ge31cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLnVuaXROdW0gPSAwXHJcbiAgICB0aGlzLmlucHV0U3BlZWQgPSAob3B0aW9ucy5zcGVlZCAmJiBNYXRoLnBvdyhvcHRpb25zLnNwZWVkLCAtMSkgKiAxMDApIHx8IDEwXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn57q/5q615pyA5bCR6ZyA6KaB5Lik5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLl9lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyA9IE51bWJlcihOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQgPSBOdW1iZXIoTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ID0gTnVtYmVyKE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkudG9GaXhlZCgyKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgICAgUG9seWxpbmVPYmplY3QuY3JlYXRlKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICcjZmYwMDAwJ1xyXG4gICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5vcHRpb25zIH1cclxuICAgIHBhcmFtcy5zcGVlZCA9IHRoaXMuaW5wdXRTcGVlZFxyXG4gICAgLy8gdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgdGhpcy5vcHRpb25zLnR5cGUsIHRoaXMuZW50aXR5LCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHBhcmFtcylcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMCwwLDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdlxyXG4gICAgdGhpcy5pbnB1dFNwZWVkID0gdiAhPT0gMCA/IE1hdGgucG93KHYsIC0xKSAqIDEwMCA6IDBcclxuICAgIGxldCBwYXJhbXMgPSB7IC4uLnRoaXMub3B0aW9ucyB9XHJcbiAgICBwYXJhbXMuc3BlZWQgPSB0aGlzLmlucHV0U3BlZWRcclxuICAgIC8vIHRoaXMub3B0aW9ucy5zcGVlZCA9IHYgIT09IDAgPyBNYXRoLnBvdyh2LCAtMSkgKiAxMDAgOiAwXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgcGFyYW1zKVxyXG4gIH1cclxuICAvLyBnZXQgZGFzaFNpemUoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmRhc2hTaXplXHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgZGFzaFNpemUodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmRhc2hTaXplID0gdlxyXG4gIC8vICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5vcHRpb25zIH1cclxuICAvLyAgIHBhcmFtcy5zcGVlZCA9IHRoaXMuaW5wdXRTcGVlZFxyXG4gIC8vICAgLy8gdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgdGhpcy5vcHRpb25zLnR5cGUsIHRoaXMuZW50aXR5LCB0aGlzLm9wdGlvbnMpXHJcbiAgLy8gICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHBhcmFtcylcclxuICAvLyB9XHJcblxyXG4gIGdldCByb3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJvdGF0ZVxyXG4gIH1cclxuXHJcbiAgc2V0IHJvdGF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucm90YXRlID0gdlxyXG4gICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgIHRoaXMuX2VsbXMucm90YXRlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMucm90YXRlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5yb3RhdGUgPSB2XHJcbiAgICBsZXQgcGFyYW1zID0geyAuLi50aGlzLm9wdGlvbnMgfVxyXG4gICAgcGFyYW1zLnNwZWVkID0gdGhpcy5pbnB1dFNwZWVkXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwodGhpcy5vcHRpb25zLmNvbG9yLCB0aGlzLm9wdGlvbnMudHlwZSwgdGhpcy5lbnRpdHksIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgcGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNwYWNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zcGFjZVxyXG4gIH1cclxuXHJcbiAgc2V0IHNwYWNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zcGFjZSA9IHZcclxuICAgIGxldCBwYXJhbXMgPSB7IC4uLnRoaXMub3B0aW9ucyB9XHJcbiAgICBwYXJhbXMuc3BlZWQgPSB0aGlzLmlucHV0U3BlZWRcclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIHRoaXMub3B0aW9ucy50eXBlLCB0aGlzLmVudGl0eSwgdGhpcy5vcHRpb25zKVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgdGhpcy5vcHRpb25zLnR5cGUsIHRoaXMuZW50aXR5LCBwYXJhbXMpXHJcbiAgfVxyXG5cclxuICBnZXQgd29yZHNOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy53b3Jkc05hbWVcclxuICB9XHJcbiAgc2V0IHdvcmRzTmFtZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMud29yZHNOYW1lID0gdlxyXG4gICAgdGhpcy5fZWxtcy53b3Jkc05hbWUgJiZcclxuICAgICAgdGhpcy5fZWxtcy53b3Jkc05hbWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG5cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGlmICghdGhpcy5ub3NlVG9UYWlsKSB7XHJcbiAgICAgIHRoaXMuY29tcHV0ZURpc3RhbmNlKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMsXHJcbiAgICAgICAgMixcclxuICAgICAgICB2XHJcbiAgICAgICkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIC8vIF90aGlzLm9wdGlvbnMubGVuZ3RoQnlNZXRlciA9IHJlc1xyXG4gICAgICAgIC8vIGlmIChyZXMgPiAxMDAwIHx8IHJlcyA9PSAxMDAwKSB7XHJcbiAgICAgICAgLy8gICBfdGhpcy5sZW5ndGggPSAocmVzIC8gMTAwMCkudG9GaXhlZCg1KVxyXG4gICAgICAgIC8vICAgX3RoaXMubGVuZ3RoVW5pdCA9ICfljYPnsbMnXHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIF90aGlzLmxlbmd0aCA9IHJlc1xyXG4gICAgICAgIC8vICAgX3RoaXMubGVuZ3RoVW5pdCA9ICfnsbMnXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIF90aGlzLmxlbmd0aEJ5TWV0ZXIgPSByZXNcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGZpdExlbmd0aFVuaXQoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmZpdExlbmd0aFVuaXRcclxuICAvLyB9XHJcbiAgLy8gc2V0IGZpdExlbmd0aFVuaXQodikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmZpdExlbmd0aFVuaXQgPSB2XHJcbiAgLy8gICB0aGlzLl9lbG1zLmZpdExlbmd0aFVuaXQgJiZcclxuICAvLyAgICAgdGhpcy5fZWxtcy5maXRMZW5ndGhVbml0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgLy8gICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAvLyAgICAgfSlcclxuICAvLyAgIGlmICh0aGlzLmZpdExlbmd0aEJ5TWV0ZXIpIHtcclxuICAvLyAgICAgc3dpdGNoICh2KSB7XHJcbiAgLy8gICAgICAgY2FzZSAn57GzJzpcclxuICAvLyAgICAgICAgIHRoaXMuZml0TGVuZ3RoID0gdGhpcy5maXRMZW5ndGhCeU1ldGVyXHJcbiAgLy8gICAgICAgICBicmVha1xyXG4gIC8vICAgICAgIGNhc2UgJ+WNg+exsyc6XHJcbiAgLy8gICAgICAgICB0aGlzLmZpdExlbmd0aCA9IE51bWJlcihcclxuICAvLyAgICAgICAgICAgKHRoaXMuZml0TGVuZ3RoQnlNZXRlciAvIDEwMDApLnRvRml4ZWQoNSlcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIGJyZWFrXHJcbiAgLy8gICAgICAgZGVmYXVsdDpcclxuICAvLyAgICAgICAgIHRoaXMuZml0TGVuZ3RoID0gdGhpcy5maXRMZW5ndGhCeU1ldGVyXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBsaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLndpZHRoXHJcbiAgfVxyXG5cclxuICBzZXQgbGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy53aWR0aCA9ICh2IHx8IHYgPT0gMCkgPyB2IDogM1xyXG4gICAgdGhpcy5fZWxtcy5saW5lV2lkdGggJiZcclxuICAgICAgdGhpcy5fZWxtcy5saW5lV2lkdGguZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLndpZHRoXHJcbiAgICAgIH0pXHJcbiAgICBpZiAodGhpcy5lbnRpdHkgJiYgdGhpcy5lbnRpdHkucG9seWxpbmUpIHtcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUud2lkdGggPSB0aGlzLmVudGl0eS5wb2x5bGluZS53aWR0aCArIHYgLSB0aGlzLmVudGl0eS5wb2x5bGluZS5vcmlXaWR0aFxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5vcmlXaWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aFxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5lbnRpdHkgJiZcclxuICAgIC8vICAgdGhpcy5lbnRpdHkucG9seWxpbmUgJiZcclxuICAgIC8vICAgKHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoKSAmJiAodGhpcy5lbnRpdHkucG9seWxpbmUub3JpV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGgpXHJcbiAgfVxyXG5cclxuICBnZXQgbGluZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGVcclxuICB9XHJcblxyXG4gIHNldCBsaW5lVHlwZSh2KSB7XHJcbiAgICBsZXQgbGluZVR5cGVEYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBsaW5lXCI+PC9pPuWunue6vycsXHJcbiAgICAgICAgdmFsdWU6ICflrp7nur8nLFxyXG4gICAgICAgIGtleTogMCxcclxuICAgICAgICBpY29uOiAnbGluZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gZGFzaC1saW5lXCI+PC9pPuiZmue6vycsXHJcbiAgICAgICAgdmFsdWU6ICfomZrnur8nLFxyXG4gICAgICAgIGtleTogMSxcclxuICAgICAgICBpY29uOiAnZGFzaC1saW5lJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBsaWdodC1saW5lXCI+PC9pPuazm+WFiScsXHJcbiAgICAgICAgdmFsdWU6ICfms5vlhYknLFxyXG4gICAgICAgIGtleTogMixcclxuICAgICAgICBpY29uOiAnbGlnaHQtbGluZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gdGFpbC1saW5lXCI+PC9pPuWwvui/ueWFiee6vycsXHJcbiAgICAgICAgdmFsdWU6ICflsL7ov7nlhYnnur8nLFxyXG4gICAgICAgIGtleTogMyxcclxuICAgICAgICBpY29uOiAndGFpbC1saW5lJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBtdWx0LXRhaWwtbGluZVwiPjwvaT7lpJrlsL7ov7nlhYnnur8nLFxyXG4gICAgICAgIHZhbHVlOiAn5aSa5bC+6L+55YWJ57q/JyxcclxuICAgICAgICBrZXk6IDQsXHJcbiAgICAgICAgaWNvbjogJ211bHQtdGFpbC1saW5lJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBmbG93LWRhc2gtbGluZTFcIj48L2k+5rWB5Yqo6Jma57q/MScsXHJcbiAgICAgICAgdmFsdWU6ICfmtYHliqjomZrnur8xJyxcclxuICAgICAgICBrZXk6IDUsXHJcbiAgICAgICAgaWNvbjogJ2Zsb3ctZGFzaC1saW5lMSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gZmxvdy1kYXNoLWxpbmUyXCI+PC9pPua1geWKqOiZmue6vzInLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo6Jma57q/MicsXHJcbiAgICAgICAga2V5OiA2LFxyXG4gICAgICAgIGljb246ICdmbG93LWRhc2gtbGluZTInXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lMVwiPjwvaT7mtYHliqjnrq3lpLQxJyxcclxuICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDEnLFxyXG4gICAgICAgIGtleTogNyxcclxuICAgICAgICBpY29uOiAncGljLWxpbmUxJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTJcIj48L2k+5rWB5Yqo566t5aS0MicsXHJcbiAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQyJyxcclxuICAgICAgICBrZXk6IDgsXHJcbiAgICAgICAgaWNvbjogJ3BpYy1saW5lMidcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmUzXCI+PC9pPua1geWKqOeureWktDMnLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0MycsXHJcbiAgICAgICAga2V5OiA5LFxyXG4gICAgICAgIGljb246ICdwaWMtbGluZTMnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lNFwiPjwvaT7mtYHliqjnrq3lpLQ0JyxcclxuICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDQnLFxyXG4gICAgICAgIGtleTogMTAsXHJcbiAgICAgICAgaWNvbjogJ3BpYy1saW5lNCdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmU1XCI+PC9pPua1geWKqOeureWktDUnLFxyXG4gICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0NScsXHJcbiAgICAgICAga2V5OiAxMSxcclxuICAgICAgICBpY29uOiAncGljLWxpbmU1J1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTZcIj48L2k+5rWB5Yqo566t5aS0NicsXHJcbiAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQ2JyxcclxuICAgICAgICBrZXk6IDEyLFxyXG4gICAgICAgIGljb246ICdwaWMtbGluZTYnXHJcbiAgICAgIH1cclxuICAgIF1cclxuICAgIHRoaXMub3B0aW9ucy50eXBlID0gTnVtYmVyKHYpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVUeXBlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGluZVR5cGVEYXRhW2ldLmtleSA9PT0gTnVtYmVyKHYpKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lVHlwZSAmJlxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5saW5lVHlwZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gbGluZVR5cGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgIGlmICgyIDwgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlIDwgMTMpIHsvL+i0tOWbvuWPguaVsFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgyIDwgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlIDwgNSkgey8v5bC+6L+55Y+C5pWwXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMV0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCcpXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMV0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5vcHRpb25zIH1cclxuICAgIHBhcmFtcy5zcGVlZCA9IHRoaXMuaW5wdXRTcGVlZFxyXG4gICAgdGhpcy5lbnRpdHkgJiZcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUgJiZcclxuICAgICAgKHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbChcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnR5cGUsXHJcbiAgICAgICAgdGhpcy5lbnRpdHksXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICAgICkpXHJcbiAgfVxyXG4gIGdldCBub3NlVG9UYWlsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ub3NlVG9UYWlsXHJcbiAgfVxyXG5cclxuICBzZXQgbm9zZVRvVGFpbCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubm9zZVRvVGFpbCA9IHZcclxuICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICB0aGlzLl9lbG1zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgdGhpcy5fZWxtcy5ub3NlVG9UYWlsLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5XHJcbiAgICAgIClcclxuICAgICAgdGhpcy5yZW5ld1BvbHlnb24oZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIH1cclxuICAgIC8vIGlmICh2KSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLm9wdGlvbnMuZml0TGVuZ3RoQnlNZXRlciA+IDEwMDAgfHwgdGhpcy5vcHRpb25zLmZpdExlbmd0aEJ5TWV0ZXIgPT0gMTAwMCkge1xyXG4gICAgLy8gICAgIGxldCBkb20gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtdW5pdCcpWzFdXHJcbiAgICAvLyAgICAgZG9tICYmIGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdkZCcpWzFdICYmIGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdkZCcpWzFdLmNsaWNrKClcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICBsZXQgZG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVsxXVxyXG4gICAgLy8gICAgIGRvbSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVswXSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVswXS5jbGljaygpXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aEJ5TWV0ZXIgPiAxMDAwIHx8IHRoaXMub3B0aW9ucy5sZW5ndGhCeU1ldGVyID09IDEwMDApIHtcclxuICAgIC8vICAgICBsZXQgZG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVsxXVxyXG4gICAgLy8gICAgIGRvbSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVsxXSAmJiBkb20ucXVlcnlTZWxlY3RvckFsbCgnZGQnKVsxXS5jbGljaygpXHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgbGV0IGRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMV1cclxuICAgIC8vICAgICBkb20gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMF0gJiYgZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RkJylbMF0uY2xpY2soKVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBnZXQgc21vb3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zbW9vdGhcclxuICB9XHJcblxyXG4gIHNldCBzbW9vdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNtb290aCA9IHZcclxuICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICB0aGlzLl9lbG1zLnNtb290aCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLnNtb290aC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9ICh2IHx8IHYgPT0gMCkgPyB2IDogMlxyXG4gICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gICAgICBmcm9tRGVncmVlc0FycmF5XHJcbiAgICApXHJcbiAgICB0aGlzLnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlICcwJzpcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBncm91bmRcclxuICAgICAgICB0aGlzLmV4dGVuZCA9IGZhbHNlXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWUgPSAn5rW35ouU6auY5bqmJ1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IGdyb3VuZFxyXG4gICAgICAgIHRoaXMuZXh0ZW5kID0gZmFsc2VcclxuICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfnm7jlr7nlnLDooagnXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IGdyb3VuZFxyXG4gICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+S+nemZhOaooeWeiydcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKGdyb3VuZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUgPSAn5L6d6ZmE5qih5Z6LJylcclxuICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdFxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVsyXVxyXG4gICAgICAgIF1cclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgbGF0OiB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICAgIGFsdDogZnJvbURlZ3JlZXNBcnJheVsyXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXh0ZW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHRlbmRcclxuICB9XHJcblxyXG4gIHNldCBleHRlbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZCA9IHZcclxuICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICBpZiAodikge1xyXG4gICAgICB0aGlzLmhlaWdodE1vZGUgPSAyXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmV4dGVuZCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmV4dGVuZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuZCkge1xyXG4gICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgIHRoaXMucmVuZXdQb2x5Z29uKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWdvbiA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZXh0ZW5kV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4dGVuZFdpZHRoXHJcbiAgfVxyXG5cclxuICBzZXQgZXh0ZW5kV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZFdpZHRoID0gdlxyXG4gICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcbiAgICB0aGlzLl9lbG1zLmV4dGVuZFdpZHRoICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuZXh0ZW5kV2lkdGguZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGV4dGVuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHRlbmRDb2xvclxyXG4gIH1cclxuICBzZXQgZXh0ZW5kQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmV4dGVuZENvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMuZXh0ZW5kQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5leHRlbmRDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGV4dGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5leHRlbmRDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbmRDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbmRDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5leHRlbmRDb2xvcltpXSA9IGV4dGVuZENvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eSAmJlxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uICYmXHJcbiAgICAgICh0aGlzLmVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5kQ29sb3JcclxuICAgICAgKSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIF1cclxuICAgICAgfSwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxMaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGdldCBsYWJlbExpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwgLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRbXHJcbiAgICAgICAgICBpXHJcbiAgICAgICAgXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSwgdl1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICdhdHRyaWJ1dGUtY29udGVudCdcclxuICAgIClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUxpbmsodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QgfHxcclxuICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fFxyXG4gICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHxcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnYXR0cmlidXRlLWNvbnRlbnQtbGluaydcclxuICAgICAgKS5sZW5ndGggPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXVxyXG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPVxyXG4gICAgICAgIGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICtcclxuICAgICAgICBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgK1xyXG4gICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICBsaW5rRWRpdDogYXN5bmMgaW5kZXggPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgLSAxMCArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5bbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiBpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgJycpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgICAgICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bXHJcbiAgICAgICAgICBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXHJcbiAgICAgICAgXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5bbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBhdHRyaWJ1dGVDYW1lcmEoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgLy8gICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gIC8vICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8XHJcbiAgLy8gICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fFxyXG4gIC8vICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gIC8vICAgICAgICdhdHRyaWJ1dGUtY29udGVudC12cidcclxuICAvLyAgICAgKS5sZW5ndGggPT0gMFxyXG4gIC8vICAgKSB7XHJcbiAgLy8gICAgIHJldHVyblxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV1cclxuICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAvLyAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAvLyAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gIC8vICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgLy8gICB9XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICBsZXQgdHIgPVxyXG4gIC8vICAgICAgIGBcclxuICAvLyAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgLy8gICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICtcclxuICAvLyAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArXHJcbiAgLy8gICAgICAgYDwvZGl2PlxyXG4gIC8vICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgLy8gICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArXHJcbiAgLy8gICAgICAgYDwvZGl2PlxyXG4gIC8vICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgLy8gICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgLy8gICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgPC9kaXY+YFxyXG4gIC8vICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAvLyAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gIC8vICAgbGV0IGZ1biA9IHtcclxuICAvLyAgICAgdnJFZGl0OiBhc3luYyBpbmRleCA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIC8vICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgLy8gICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXVxyXG4gIC8vICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAvLyAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgLy8gICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgLy8gICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gIC8vICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5cclxuICAvLyAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAvLyAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gIC8vICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgLy8gICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gIC8vICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgLy8gICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IGhlaWdodCAtIDEwICsgJ3B4J1xyXG4gIC8vICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAvLyAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAvLyAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgLy8gICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAvLyAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAvLyAgICAgICAgICAgICAnaW5wdXQnXHJcbiAgLy8gICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gIC8vICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAvLyAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAvLyAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICBpXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gIC8vICAgICAgICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgdnJEZWxldGU6IGkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcblxyXG4gIC8vICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgLy8gICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csICcnKVxyXG4gIC8vICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCAnJylcclxuICAvLyAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAvLyAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmXHJcbiAgLy8gICAgICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAvLyAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gIC8vICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gIC8vICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgLy8gICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgLy8gICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gIC8vICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IGZpbGVTZWxlY3QgPSBldmVudCA9PiB7XHJcbiAgLy8gICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAvLyAgICAgICBsZXQgdGQgPSBpdGVtW1xyXG4gIC8vICAgICAgICAgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKVxyXG4gIC8vICAgICAgIF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gIC8vICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAvLyAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAvLyAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAvLyAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgIGNvbnRpbnVlXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgLy8gICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pXHJcbiAgLy8gICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgLy8gICAgICAgICAgIGJyZWFrXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb25zXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgbGV0IGhlaWdodFxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgc3dpdGNoICh0aGF0Lm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlICcwJzpcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgaGVpZ2h0ID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHRcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgIGxuZzogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAgICAgICBsYXQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgICAgfSkgKyB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgbGF0OiB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGlmICghdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICBsbmc6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgIGxhdDogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAgICAgYWx0OiBoZWlnaHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbXHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LFxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRcclxuICAgICAgXSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgIGdyb3VuZDogZ3JvdW5kXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcblxyXG4gICAgbGV0IGdyb3VuZFxyXG4gICAgaWYgKHRoYXQuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LnJlbmV3UG9zaXRpb25zKHBvc2l0aW9ucylcclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy53aWR0aCxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiBncm91bmQsXHJcbiAgICAgICAgLy8gbWF0ZXJpYWw6IHRoYXQuZ2V0TWF0ZXJpYWwodGhhdC5vcHRpb25zLmNvbG9yLCB0aGF0Lm9wdGlvbnMudHlwZSwgdGhhdC5lbnRpdHksIHRoYXQub3B0aW9ucyksXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgdGhhdC5lbnRpdHkucG9seWxpbmUub3JpV2lkdGggPSB0aGF0Lm9wdGlvbnMud2lkdGhcclxuICAgIHRoYXQuanVkZ2VMaW5lKHRoYXQuZW50aXR5LCB0aGF0Lm9wdGlvbnMpXHJcbiAgICBsZXQgcGFyYW1zID0geyAuLi50aGF0Lm9wdGlvbnMgfVxyXG4gICAgcGFyYW1zLnNwZWVkID0gdGhhdC5pbnB1dFNwZWVkXHJcbiAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IHRoYXQuZ2V0TWF0ZXJpYWwoXHJcbiAgICAgIHRoYXQub3B0aW9ucy5jb2xvcixcclxuICAgICAgdGhhdC5vcHRpb25zLnR5cGUsXHJcbiAgICAgIHRoYXQuZW50aXR5LFxyXG4gICAgICBwYXJhbXNcclxuICAgIClcclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgUG9seWxpbmVPYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIC8vIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9uc0xuZ0xhdCA9IHBvc2l0aW9uc1xyXG4gICAgdGhhdC5yZW5ld1BvbHlnb24oZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIHRoYXQuY29tcHV0ZURpc3RhbmNlKFxyXG4gICAgICBwb3NpdGlvbnMsXHJcbiAgICAgIDIsXHJcbiAgICAgIHRoYXQub3B0aW9ucy53b3Jkc05hbWVcclxuICAgICkudGhlbihyZXMgPT4ge1xyXG4gICAgICB0aGF0Lmxlbmd0aEJ5TWV0ZXIgPSByZXNcclxuICAgICAgc3luY0RhdGEodGhhdC5zZGssIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH0pXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLm5vc2VUb1RhaWwpIHtcclxuICAgIC8vICAgbGV0IGFycmF5ID0gW11cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAvLyAgICAgYXJyYXkucHVzaCh7IGxuZzogZnJvbURlZ3JlZXNBcnJheVtpXSwgbGF0OiBmcm9tRGVncmVlc0FycmF5W2kgKyAxXSB9KVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5maXRfbGVuZ3RoID0gdG9vbC5jb21wdXRlRGlzdGFuY2UoYXJyYXkpXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLmZpdF9sZW5ndGggPSB0b29sLmNvbXB1dGVEaXN0YW5jZShwb3NpdGlvbnMpXHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLmZpdF9sZW5ndGhfdW5pdCA9PT0gJ2ttJykge1xyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMuZml0X2xlbmd0aCA9IHRoaXMub3B0aW9ucy5maXRfbGVuZ3RoIC8gMTAwMFxyXG4gICAgLy8gfVxyXG5cclxuICAgIGxldCBzY2VuZSA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZVxyXG4gIH1cclxuICBqdWRnZUxpbmUoZW50aXR5LCBuZXdQYXJhbSkge1xyXG4gICAgaWYgKCFlbnRpdHkucG9seWxpbmUub3JpUmVwZWF0KSB7XHJcbiAgICAgIGxldCBwYXJhbSA9IHtcclxuICAgICAgICBjb2xvcjogbmV3UGFyYW0uY29sb3IsXHJcbiAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArIGAvaW1nL2Fycm93LzEucG5nYCxcclxuICAgICAgICBzcGFjZTogbmV3UGFyYW0uc3BhY2UsXHJcbiAgICAgICAgc3BlZWQ6IG5ld1BhcmFtLnNwZWVkXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhcmFtLnNwZWVkID0gbmV3UGFyYW0ucm90YXRlID8gcGFyYW0uc3BlZWQgOiAwIC0gcGFyYW0uc3BlZWRcclxuXHJcbiAgICAgIGNvbnN0IGNhbnZhc0VsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjdHggPSBjYW52YXNFbGUuZ2V0Q29udGV4dCgnMmQnKVxyXG4gICAgICBjb25zdCBteUltZyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgIC8vIG15SW1nLnNyYyA9IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2Fycm93LzEucG5nJ1xyXG4gICAgICBteUltZy5zcmMgPSBwYXJhbS5pbWFnZVxyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgbXlJbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNhbnZhc0VsZS53aWR0aCA9IG15SW1nLndpZHRoICogKHBhcmFtLnNwYWNlICsgMSlcclxuICAgICAgICBjYW52YXNFbGUuaGVpZ2h0ID0gbXlJbWcuaGVpZ2h0XHJcblxyXG4gICAgICAgIGxldCBvcmlSZXBlYXQgPSB0aGF0LmdldFNjZWVuTGluZShlbnRpdHksIHBhcmFtLCBjYW52YXNFbGUpXHJcbiAgICAgICAgb3JpUmVwZWF0ICYmIChlbnRpdHkucG9seWxpbmUub3JpUmVwZWF0ID0gb3JpUmVwZWF0KVxyXG5cclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uUHJvcGVydHkgPSBlbnRpdHkucG9seWxpbmUucG9zaXRpb25zO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBwb3NpdGlvblByb3BlcnR5LmdldFZhbHVlKHRoYXQuc2RrLnZpZXdlci5jbG9jay5jdXJyZW50VGltZSk7XHJcblxyXG4gICAgICAgIGlmICghQ2VzaXVtLmRlZmluZWQocG9zaXRpb25zKSkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxLjAsIDEuMCk7XHJcbiAgICAgICAgICAvLyByZXR1cm4gMS4wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgICAgICAgIGRpc3RhbmNlICs9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zW2kgKyAxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVwZWF0WCA9IGRpc3RhbmNlIC8gZW50aXR5LnBvbHlsaW5lLndpZHRoLmdldFZhbHVlKCk7XHJcbiAgICAgICAgLy8g5qC55o2u5Zyw5Zu+57yp5pS+56iL5bqm6LCD5pW0cmVwZWF0WFxyXG4gICAgICAgIHZhciBjYW1lcmFIZWlnaHQgPSB0aGF0LnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSBuZXcgQ2VzaXVtLkJvdW5kaW5nU3BoZXJlKFxyXG4gICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKC0xMDAwMDAwLCAwLCAwKSwgLy8g5Lit5b+D54K55Z2Q5qCHXHJcbiAgICAgICAgICA1MDAwMDAgLy8g5Y2K5b6E77yI6Led56a777yJXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W57uY5Zu+57yT5Yay5Yy655qE5a695bqm5ZKM6auY5bqm77yI6YCa5bi45piv5bGP5bmV55qE5YiG6L6o546H77yJXHJcbiAgICAgICAgdmFyIGRyYXdpbmdCdWZmZXJXaWR0aCA9IHRoYXQuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgdmFyIGRyYXdpbmdCdWZmZXJIZWlnaHQgPSB0aGF0LnNkay52aWV3ZXIuY2FudmFzLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICAgICAgLy8g5L2/55SoIGdldFBpeGVsU2l6ZSDmlrnms5Xojrflj5bljIXlm7TnkIPlnKjlsY/luZXkuIrnmoTlg4/ntKDlpKflsI9cclxuICAgICAgICB2YXIgZ3JvdW5kUmVzb2x1dGlvbiA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5jYW1lcmEuZ2V0UGl4ZWxTaXplKGJvdW5kaW5nU3BoZXJlLCBkcmF3aW5nQnVmZmVyV2lkdGgsIGRyYXdpbmdCdWZmZXJIZWlnaHQpXHJcbiAgICAgICAgcmVwZWF0WCAqPSBncm91bmRSZXNvbHV0aW9uIC8gY2FtZXJhSGVpZ2h0IC8gKHBhcmFtLnNwYWNlICogKGNhbnZhc0VsZS53aWR0aCAvIGNhbnZhc0VsZS5oZWlnaHQgKiA1KSArIDEpO1xyXG4gICAgICAgIC8vIGlmIChlbnRpdHkucG9seWxpbmUubWF0ZXJpYWwub3JpUmVwZWF0KSB7XHJcblxyXG4gICAgICAgIGlmICh0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gQ2VzaXVtLlNjZW5lTW9kZS5TQ0VORTNEKSB7XHJcbiAgICAgICAgICBsZXQgc3BlZWQgPSByZXBlYXRYIC8gZW50aXR5LnBvbHlsaW5lLm9yaVJlcGVhdFxyXG4gICAgICAgICAgZW50aXR5LnBvbHlsaW5lLm9yaVNwZWVkID0gc3BlZWRcclxuICAgICAgICAgIGVudGl0eS5wb2x5bGluZS5vcmlSZXBlYXRYID0gcmVwZWF0WFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgc2RrM2QgPSBnZXQzRFZpZXcoKVxyXG4gICAgICAgICAgbGV0IHNkazNkRW50aXR5ID0gc2RrM2Qudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhhdC5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgZW50aXR5LnBvbHlsaW5lLm9yaVNwZWVkID0gc2RrM2RFbnRpdHkucG9seWxpbmUub3JpU3BlZWRcclxuICAgICAgICAgIGVudGl0eS5wb2x5bGluZS5vcmlSZXBlYXRYID0gc2RrM2RFbnRpdHkucG9seWxpbmUub3JpUmVwZWF0WFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgLyoq6I635Y+W5b2T5YmN5ruh5bGP5qiq57q/6YCf5bqmICovXHJcbiAgZ2V0U2NlZW5MaW5lKGVudGl0eSwgb3B0aW9ucywgY2FudmFzRWxlKSB7XHJcbiAgICBsZXQgcG9pbnQxID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIHRoaXMuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50SGVpZ2h0KVxyXG4gICAgbGV0IHBvaW50MiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMih0aGlzLnNkay52aWV3ZXIuY2FudmFzLmNsaWVudFdpZHRoIC8gMiwgdGhpcy5zZGsudmlld2VyLmNhbnZhcy5jbGllbnRIZWlnaHQpXHJcbiAgICAvLyB2YXIgY2FydGVzaWFuMSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrUG9zaXRpb24ocG9pbnQxKVxyXG4gICAgLy8gdmFyIGNhcnRlc2lhbjIgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKHBvaW50MilcclxuXHJcbiAgICBsZXQgcmF5ID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5nZXRQaWNrUmF5KHBvaW50MSk7XHJcbiAgICBsZXQgY2FydGVzaWFuMSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheSwgdGhpcy5zZGsudmlld2VyLnNjZW5lKTtcclxuXHJcbiAgICBsZXQgcmF5MiA9IHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZ2V0UGlja1JheShwb2ludDIpO1xyXG4gICAgbGV0IGNhcnRlc2lhbjIgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXkyLCB0aGlzLnNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgLy8gaWYgKCFjYXJ0ZXNpYW4xIHx8ICFjYXJ0ZXNpYW4yKSB7XHJcbiAgICAvLyAgIGxldCByYXkgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkocG9pbnQxKTtcclxuICAgIC8vICAgY2FydGVzaWFuMSA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheSwgdGhpcy5zZGsudmlld2VyLnNjZW5lKTtcclxuXHJcbiAgICAvLyAgIGxldCByYXkyID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5nZXRQaWNrUmF5KHBvaW50Mik7XHJcbiAgICAvLyAgIGNhcnRlc2lhbjIgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUucGljayhyYXkyLCB0aGlzLnNkay52aWV3ZXIuc2NlbmUpO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKGNhcnRlc2lhbjEgJiYgY2FydGVzaWFuMikge1xyXG5cclxuXHJcbiAgICAgIHZhciBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKGNhcnRlc2lhbjEsIGNhcnRlc2lhbjIpO1xyXG5cclxuICAgICAgdmFyIHJlcGVhdFggPSBkaXN0YW5jZSAvIGVudGl0eS5wb2x5bGluZS53aWR0aC5nZXRWYWx1ZSgpO1xyXG4gICAgICAvLyDmoLnmja7lnLDlm77nvKnmlL7nqIvluqbosIPmlbRyZXBlYXRYXHJcbiAgICAgIHZhciBjYW1lcmFIZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljLmhlaWdodDtcclxuICAgICAgdmFyIGJvdW5kaW5nU3BoZXJlID0gbmV3IENlc2l1bS5Cb3VuZGluZ1NwaGVyZShcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoLTEwMDAwMDAsIDAsIDApLCAvLyDkuK3lv4PngrnlnZDmoIdcclxuICAgICAgICA1MDAwMDAgLy8g5Y2K5b6E77yI6Led56a777yJXHJcbiAgICAgICk7XHJcblxyXG5cclxuICAgICAgLy8g6I635Y+W57uY5Zu+57yT5Yay5Yy655qE5a695bqm5ZKM6auY5bqm77yI6YCa5bi45piv5bGP5bmV55qE5YiG6L6o546H77yJXHJcbiAgICAgIHZhciBkcmF3aW5nQnVmZmVyV2lkdGggPSB0aGlzLnNkay52aWV3ZXIuY2FudmFzLmNsaWVudFdpZHRoO1xyXG4gICAgICB2YXIgZHJhd2luZ0J1ZmZlckhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5jYW52YXMuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgLy8g5L2/55SoIGdldFBpeGVsU2l6ZSDmlrnms5Xojrflj5bljIXlm7TnkIPlnKjlsY/luZXkuIrnmoTlg4/ntKDlpKflsI9cclxuICAgICAgdmFyIGdyb3VuZFJlc29sdXRpb24gPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2FtZXJhLmdldFBpeGVsU2l6ZShib3VuZGluZ1NwaGVyZSwgZHJhd2luZ0J1ZmZlcldpZHRoLCBkcmF3aW5nQnVmZmVySGVpZ2h0KVxyXG4gICAgICAvLyByZXBlYXRYICo9IGdyb3VuZFJlc29sdXRpb24gLyBjYW1lcmFIZWlnaHQgLyAoKG15SW1nLndpZHRoIC8gbXlJbWcuaGVpZ2h0ICogNSkgKyAxKTtcclxuICAgICAgaWYgKGdyb3VuZFJlc29sdXRpb24gPiA3MDApIHtcclxuICAgICAgICByZXBlYXRYICo9IGdyb3VuZFJlc29sdXRpb24gLyBjYW1lcmFIZWlnaHQgLyAob3B0aW9ucy5zcGFjZSAqIChjYW52YXNFbGUud2lkdGggLyBjYW52YXNFbGUuaGVpZ2h0ICogNSkgKyAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXBlYXRYID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IENlc2l1bS5TY2VuZU1vZGUuU0NFTkUzRCkge1xyXG4gICAgICAgIHJldHVybiByZXBlYXRYXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHNkazNkID0gZ2V0M0RWaWV3KClcclxuICAgICAgICBsZXQgc2RrM2RFbnRpdHkgPSBzZGszZC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgcmV0dXJuIHNkazNkRW50aXR5LnBvbHlsaW5lLm9yaVJlcGVhdFhcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlIHRydWXmiZPlvIDvvIxmYWxzZeWFs+mXrVxyXG4gICAqL1xyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfnur/lsZ7mgKcnLFxyXG4gICAgICAgIGxlZnQ6ICcxODBweCcsXHJcbiAgICAgICAgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sXHJcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSxcclxuICAgICAgICAgICAgYWx0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzJdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJlxyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiBzaG93ID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5LqM5qyh57yW6L6R5Zue6LCDXHJcbiAgICAgICAgc2Vjb25kYXJ5RWRpdENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vZGVFZGl0KClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBwb2x5bGluZSdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICAvLyB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgICAgLy8gdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG5cclxuICAgICAgZnVuY3Rpb24gdGFiQ2xpY2soZSkge1xyXG4gICAgICAgIGlmIChlID09PSAnMicgfHwgZSA9PT0gMikgey8v54K55Ye757q/5p2h5qC35byPXHJcbiAgICAgICAgICBpZiAoMiA8IF90aGlzLm9wdGlvbnMudHlwZSAmJiBfdGhpcy5vcHRpb25zLnR5cGUgPCAxMykgey8v6LS05Zu+5Y+C5pWwXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicyhcclxuICAgICAgICAncG9seWxpbmUtb2JqZWN0LWVkaXQtdGFicycsXHJcbiAgICAgICAgdGFiQ2xpY2ssXHJcbiAgICAgICAgdGhpcy5zZGtcclxuICAgICAgKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xhYmVsQ29sb3InKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywgLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGV4dGVuZENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2V4dGVuZENvbG9yJylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLCAvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5leHRlbmRDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsIC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IGNvbG9yID0+IHtcclxuICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sIC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9IC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGFiZWxMaW5lQ29sb3InKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgX3RoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0JylbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYWJlbEJhY2tncm91bmRDb2xvckVuZCcpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiBjb2xvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKVxyXG4gICAgICBFdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IEV2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmV4dGVuZENvbG9yID0gW2V4dGVuZENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW190aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIC8vIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICAvLyB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgLy8gdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgICAgICBsZXQgdGFnRGF0YSA9IHRoaXMuYXR0cmlidXRlU2VsZWN0XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnYXR0cmlidXRlLXNlbGVjdC1ib3gnXHJcbiAgICAgICAgKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sICcuYXR0cmlidXRlLXNlbGVjdCcpXHJcbiAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lRGF0YSA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+epuumXtOmVv+W6picsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn56m66Ze06ZW/5bqmJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+aKleW9semVv+W6picsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5oqV5b2x6ZW/5bqmJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+WcsOihqOmVv+W6picsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5Zyw6KGo6ZW/5bqmJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgbGV0IG5hbWVEYXRhTGVncE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnaW5wdXQtc2VsZWN0LXVuaXQtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuaW5wdXQtc2VsZWN0LXVuaXQnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChuYW1lRGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIG5hbWVEYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaChuYW1lRGF0YSlcclxuICAgICAgICAgIGxldCBuYW1lRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHRoaXMuX2VsbXMud29yZHNOYW1lID0gW25hbWVEYXRhTGVncEVsbV1cclxuICAgICAgICAgIG5hbWVEYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy53b3Jkc05hbWVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKG5hbWVEYXRhW2ldLnZhbHVlID09PSBuYW1lRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBuYW1lRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUobmFtZURhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbmFtZURhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWVEYXRhW2ldLnZhbHVlID09PSBuYW1lRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud29yZHNOYW1lID0gbmFtZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5Y6f5aeL6ZW/5bqm5Y2V5L2NXHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn57GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfnsbMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5Y2D57GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfljYPnsbMnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdpbnB1dC1zZWxlY3QtdW5pdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5pbnB1dC1zZWxlY3QtdW5pdCcsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmICh1bml0RGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaCh1bml0RGF0YSlcclxuICAgICAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQnKVsxXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHRoaXMuX2VsbXMubGVuZ3RoVW5pdCA9IFt1bml0RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMubGVuZ3RoVW5pdFxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh1bml0RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodW5pdERhdGFbaV0udmFsdWUgPT09IHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGhVbml0ID0gdW5pdERhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL1xyXG5cclxuXHJcbiAgICAgICAgLy8g5ouf5ZCI6ZW/5bqm5Y2V5L2NXHJcbiAgICAgICAgLy8gbGV0IGZpdFVuaXREYXRhID0gW1xyXG4gICAgICAgIC8vICAge1xyXG4gICAgICAgIC8vICAgICBuYW1lOiAn57GzJyxcclxuICAgICAgICAvLyAgICAgdmFsdWU6ICfnsbMnXHJcbiAgICAgICAgLy8gICB9LFxyXG4gICAgICAgIC8vICAge1xyXG4gICAgICAgIC8vICAgICBuYW1lOiAn5Y2D57GzJyxcclxuICAgICAgICAvLyAgICAgdmFsdWU6ICfljYPnsbMnXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gXVxyXG5cclxuICAgICAgICAvLyBsZXQgZml0VW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncChcclxuICAgICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgLy8gICAgICdpbnB1dC1zZWxlY3QtZml0LXVuaXQtYm94J1xyXG4gICAgICAgIC8vICAgKVswXSxcclxuICAgICAgICAvLyAgICcuaW5wdXQtc2VsZWN0LWZpdC11bml0J1xyXG4gICAgICAgIC8vIClcclxuICAgICAgICAvLyBpZiAoZml0VW5pdERhdGFMZWdwT2JqZWN0KSB7XHJcbiAgICAgICAgLy8gICBmaXRVbml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2goZml0VW5pdERhdGEpXHJcbiAgICAgICAgLy8gICBsZXQgZml0VW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAvLyAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC1maXQtdW5pdCcpWzBdXHJcbiAgICAgICAgLy8gICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgIC8vICAgdGhpcy5fZWxtcy5maXRMZW5ndGhVbml0ID0gW2ZpdFVuaXREYXRhTGVncEVsbV1cclxuICAgICAgICAvLyAgIGZpdFVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5maXRMZW5ndGhVbml0XHJcbiAgICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGZpdFVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gICAgIGlmIChmaXRVbml0RGF0YVtpXS52YWx1ZSA9PT0gZml0VW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgLy8gICAgICAgZml0VW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZpdFVuaXREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgIC8vICAgICAgIGJyZWFrXHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGZpdFVuaXREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXRVbml0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vICAgICAgIGlmIChmaXRVbml0RGF0YVtpXS52YWx1ZSA9PT0gZml0VW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmZpdExlbmd0aFVuaXQgPSBmaXRVbml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgIC8vICAgICAgICAgYnJlYWtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH0pXHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBsZXQgbGluZVR5cGVEYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGxpbmVcIj48L2k+5a6e57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICflrp7nur8nLFxyXG4gICAgICAgICAgICBrZXk6IDAsXHJcbiAgICAgICAgICAgIGljb246ICdsaW5lJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBkYXNoLWxpbmVcIj48L2k+6Jma57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICfomZrnur8nLFxyXG4gICAgICAgICAgICBrZXk6IDEsXHJcbiAgICAgICAgICAgIGljb246ICdkYXNoLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGxpZ2h0LWxpbmVcIj48L2k+5rOb5YWJJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfms5vlhYknLFxyXG4gICAgICAgICAgICBrZXk6IDIsXHJcbiAgICAgICAgICAgIGljb246ICdsaWdodC1saW5lJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiB0YWlsLWxpbmVcIj48L2k+5bC+6L+55YWJ57q/JyxcclxuICAgICAgICAgICAgdmFsdWU6ICflsL7ov7nlhYnnur8nLFxyXG4gICAgICAgICAgICBrZXk6IDMsXHJcbiAgICAgICAgICAgIGljb246ICd0YWlsLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIG11bHQtdGFpbC1saW5lXCI+PC9pPuWkmuWwvui/ueWFiee6vycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5aSa5bC+6L+55YWJ57q/JyxcclxuICAgICAgICAgICAga2V5OiA0LFxyXG4gICAgICAgICAgICBpY29uOiAnbXVsdC10YWlsLWxpbmUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGZsb3ctZGFzaC1saW5lMVwiPjwvaT7mtYHliqjomZrnur8xJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjomZrnur8xJyxcclxuICAgICAgICAgICAga2V5OiA1LFxyXG4gICAgICAgICAgICBpY29uOiAnZmxvdy1kYXNoLWxpbmUxJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBmbG93LWRhc2gtbGluZTJcIj48L2k+5rWB5Yqo6Jma57q/MicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo6Jma57q/MicsXHJcbiAgICAgICAgICAgIGtleTogNixcclxuICAgICAgICAgICAgaWNvbjogJ2Zsb3ctZGFzaC1saW5lMidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmUxXCI+PC9pPua1geWKqOeureWktDEnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDEnLFxyXG4gICAgICAgICAgICBrZXk6IDcsXHJcbiAgICAgICAgICAgIGljb246ICdwaWMtbGluZTEnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lMlwiPjwvaT7mtYHliqjnrq3lpLQyJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQyJyxcclxuICAgICAgICAgICAga2V5OiA4LFxyXG4gICAgICAgICAgICBpY29uOiAncGljLWxpbmUyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTNcIj48L2k+5rWB5Yqo566t5aS0MycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0MycsXHJcbiAgICAgICAgICAgIGtleTogOSxcclxuICAgICAgICAgICAgaWNvbjogJ3BpYy1saW5lMydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gcGljLWxpbmU0XCI+PC9pPua1geWKqOeureWktDQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1geWKqOeureWktDQnLFxyXG4gICAgICAgICAgICBrZXk6IDEwLFxyXG4gICAgICAgICAgICBpY29uOiAncGljLWxpbmU0J1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBwaWMtbGluZTVcIj48L2k+5rWB5Yqo566t5aS0NScsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn5rWB5Yqo566t5aS0NScsXHJcbiAgICAgICAgICAgIGtleTogMTEsXHJcbiAgICAgICAgICAgIGljb246ICdwaWMtbGluZTUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIHBpYy1saW5lNlwiPjwvaT7mtYHliqjnrq3lpLQ2JyxcclxuICAgICAgICAgICAgdmFsdWU6ICfmtYHliqjnrq3lpLQ2JyxcclxuICAgICAgICAgICAga2V5OiAxMixcclxuICAgICAgICAgICAgaWNvbjogJ3BpYy1saW5lNidcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2lucHV0LXNlbGVjdC1saW5lLXR5cGUtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuaW5wdXQtc2VsZWN0LWxpbmUtdHlwZSdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QpIHtcclxuICAgICAgICAgIGxpbmVUeXBlRGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2gobGluZVR5cGVEYXRhKVxyXG5cclxuICAgICAgICAgIGxldCBpQWN0aXZlRWxtMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxyXG4gICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gJ2ljb24gaWNvbi1hY3RpdmUnXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtbGluZS10eXBlJylbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3lfZGF0YWxpc3QnKVswXS5hcHBlbmRDaGlsZChpQWN0aXZlRWxtMilcclxuXHJcbiAgICAgICAgICBsZXQgbGluZVR5cGVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QtbGluZS10eXBlJylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxpbmVUeXBlID0gW2xpbmVUeXBlRGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVUeXBlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGluZVR5cGVEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLnR5cGUpIHtcclxuICAgICAgICAgICAgICBsaW5lVHlwZURhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGxpbmVUeXBlRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBsaW5lVHlwZURhdGFMZWdwRWxtLnZhbHVlID0gbGluZVR5cGVEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHtsaW5lVHlwZURhdGFbaV0uaWNvbn1gXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGluZVR5cGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lVHlwZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAobGluZVR5cGVEYXRhW2ldLnZhbHVlID09PSBsaW5lVHlwZURhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlID0gbGluZVR5cGVEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHtsaW5lVHlwZURhdGFbaV0uaWNvbn1gXHJcblxyXG4gICAgICAgICAgICAgICAgLy/mjqfliLblj4LmlbDmmL7pmpBcclxuICAgICAgICAgICAgICAgIGlmICgyIDwgdGhpcy5saW5lVHlwZSAmJiB0aGlzLmxpbmVUeXBlIDwgMTMpIHsvL+i0tOWbvuWPguaVsFxyXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hUZXh0dXJlRG9tJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoVGV4dHVyZURvbScpICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaFRleHR1cmVEb20nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKDIgPCB0aGlzLmxpbmVUeXBlICYmIHRoaXMubGluZVR5cGUgPCA1KSB7Ly/lsL7ov7nlj4LmlbBcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZVNwYWNlJylbMF0gJiYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCcpXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVTcGFjZScpWzFdICYmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lU3BhY2UnKVsxXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBoZWlnaHRCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtYm94JylbMF1cclxuICAgICAgICBsZXQgaGVpZ2h0RWxtID0gaGVpZ2h0Qm94RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlaWdodCcpWzBdXHJcbiAgICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgICAgaGVpZ2h0RWxtLnZhbHVlID0gMTBcclxuICAgICAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtICYmIGhlaWdodENvbmZpcm1FbG0ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaGVpZ2h0TW9kZURhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgICAgICAgIGtleTogJzAnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogJ+ebuOWvueWcsOihqCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgICAga2V5OiAnMScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfkvp3pmYTmqKHlnosnLFxyXG4gICAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2hlaWdodC1tb2RlLWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmhlaWdodC1tb2RlJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaChoZWlnaHRNb2RlRGF0YSlcclxuICAgICAgICAgIGxldCBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUgPSBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaGVpZ2h0TW9kZURhdGFbaV0udmFsdWUgPT09IGhlaWdodE1vZGVEYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBoZWlnaHRFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHQgPSBoZWlnaHRFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybSA9IGhlaWdodENvbmZpcm1FbG1cclxuICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgICBoZWlnaHRDb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2VsbXMuYWx0W2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gICAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0YWJsZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3BhdGlhbC1pbmZvLXRhYmxlJylbMF1cclxuICAgICAgICBsZXQgdEJvZHlFbG0gPSB0YWJsZUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICB0aGlzLl9lbG1zLmxuZyA9IFtdXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sbmdJbnB1dCA9IFtdXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYXQgPSBbXVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGF0SW5wdXQgPSBbXVxyXG4gICAgICAgIHRoaXMuX2VsbXMuYWx0ID0gW11cclxuICAgICAgICB0aGlzLl9lbG1zLmFsdElucHV0ID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgICB0ci5jbGFzc05hbWUgPSAndHInXHJcbiAgICAgICAgICB0ci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7aSArIDF9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsbmcgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsYXQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhbHQgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICBgXHJcbiAgICAgICAgICBsZXQgbG5nQm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nJylbMF1cclxuICAgICAgICAgIGxldCBsbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgIGxuZy5pbm5lckhUTUwgPSAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgICBsZXQgbG5nSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsbmdJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsbmdJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxuZ0lucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxuZ0lucHV0Lm1pbiA9IC0xODBcclxuICAgICAgICAgIGxuZ0lucHV0Lm1heCA9IDE4MFxyXG4gICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOClcclxuXHJcbiAgICAgICAgICBsZXQgbGF0Qm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGF0JylbMF1cclxuICAgICAgICAgIGxldCBsYXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXQpXHJcbiAgICAgICAgICBsZXQgbGF0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsYXRJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsYXRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxhdElucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxhdElucHV0Lm1pbiA9IC05MFxyXG4gICAgICAgICAgbGF0SW5wdXQubWF4ID0gOTBcclxuICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgICAgbGV0IGFsdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsdCcpWzBdXHJcbiAgICAgICAgICBsZXQgYWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0KS50b0ZpeGVkKDIpXHJcbiAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0KVxyXG4gICAgICAgICAgbGV0IGFsdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgYWx0SW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgYWx0SW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBhbHRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBhbHRJbnB1dC5taW4gPSAtOTk5OTk5OVxyXG4gICAgICAgICAgYWx0SW5wdXQubWF4ID0gOTk5OTk5OTk5XHJcbiAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9ICh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCkudG9GaXhlZCgyKVxyXG5cclxuICAgICAgICAgIGxuZ0JveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmdJbnB1dClcclxuICAgICAgICAgICAgbG5nSW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbG5nSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgICAgbG5nSW5wdXQudmFsdWUgPSBOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmcpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbG5nSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nID0gTnVtYmVyKE51bWJlcihsbmdJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LCBmcm9tRGVncmVlc0FycmF5WzJdXVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBsYXRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0SW5wdXQpXHJcbiAgICAgICAgICAgIGxhdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCA9IE51bWJlcihOdW1iZXIobGF0SW5wdXQudmFsdWUpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgZnJvbURlZ3JlZXNBcnJheVsyXV1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgYWx0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHRJbnB1dClcclxuICAgICAgICAgICAgYWx0SW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VOb2RlRWRpdCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ID0gTnVtYmVyKE51bWJlcihhbHRJbnB1dC52YWx1ZSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0LmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0LnRvRml4ZWQoMilcclxuICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LCBmcm9tRGVncmVlc0FycmF5WzJdXVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxuZy5wdXNoKGxuZylcclxuICAgICAgICAgIHRoaXMuX2VsbXMubG5nSW5wdXQucHVzaChsbmdJbnB1dClcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGF0LnB1c2gobGF0KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYXRJbnB1dC5wdXNoKGxhdElucHV0KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5hbHQucHVzaChhbHQpXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmFsdElucHV0LnB1c2goYWx0SW5wdXQpXHJcbiAgICAgICAgICB0Qm9keUVsbS5hcHBlbmRDaGlsZCh0cilcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOW5s+a7keWkhOeQhlxyXG4gIHNtb290aEhhbmRsZShwb3NpdGlvbnMpIHtcclxuICAgIGxldCBuZXdQb3NpdGlvbnMgPSBbXVxyXG4gICAgbGV0IHRpbWUgPSBbXVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzLnB1c2goXHJcbiAgICAgICAgcG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICBwb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgIHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgKVxyXG4gICAgICB0aW1lLnB1c2goaSAvIChwb3NpdGlvbnMubGVuZ3RoIC0gMSkpXHJcbiAgICB9XHJcbiAgICBsZXQgc3BsaW5lID0gbmV3IENlc2l1bS5DYXRtdWxsUm9tU3BsaW5lKHtcclxuICAgICAgdGltZXM6IHRpbWUsXHJcbiAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICB9KVxyXG4gICAgbGV0IGxlbmd0aCA9IHBvc2l0aW9ucy5sZW5ndGggKiAyMFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNhcnRlc2lhbjMgPSBzcGxpbmUuZXZhbHVhdGUoaSAvIGxlbmd0aClcclxuICAgICAgbmV3UG9zaXRpb25zLnB1c2godGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4zLCB0aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1Bvc2l0aW9uc1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMocG9zaXRpb25zQXJyYXksIGNkKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwb3NpdGlvbnNBcnJheSkpXHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICBjYXNlICcxJzpcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5nZXRIZWlnaHQoQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KSlcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5hbHQgPSBoZWlnaHQgPyBOdW1iZXIoKHBvc2l0aW9uc1tpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0KSkudG9GaXhlZCgyKSkgOiBOdW1iZXIoKHBvc2l0aW9uc1tpXS5hbHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIGxldCBuZXdQb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgdGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgIT09ICdmYWxzZSdcclxuICAgICkge1xyXG4gICAgICBuZXdQb3NpdGlvbnMgPSBbLi4ucG9zaXRpb25zLCBwb3NpdGlvbnNbMF1dXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdQb3NpdGlvbnMgPSBbLi4ucG9zaXRpb25zXVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zbW9vdGggJiYgdGhpcy5vcHRpb25zLnNtb290aCAhPT0gJ2ZhbHNlJykge1xyXG4gICAgICBuZXdQb3NpdGlvbnMgPSB0aGlzLnNtb290aEhhbmRsZShuZXdQb3NpdGlvbnMpXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3UG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgbmV3UG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgIG5ld1Bvc2l0aW9uc1tpXS5sYXQsXHJcbiAgICAgICAgICBuZXdQb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1Bvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChcclxuICAgICAgICAgIG5ld1Bvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICBuZXdQb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgbmV3UG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+mVv+W6plxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5vcHRpb25zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgICB0aGlzLm9wdGlvbnMubm9zZVRvVGFpbCAhPT0gJ2ZhbHNlJykgfHxcclxuICAgICAgKHRoaXMub3B0aW9ucy5zbW9vdGggJiYgdGhpcy5vcHRpb25zLnNtb290aCAhPT0gJ2ZhbHNlJylcclxuICAgICkge1xyXG4gICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICBhcnJheS5wdXNoKHtcclxuICAgICAgICAgIGxuZzogZnJvbURlZ3JlZXNBcnJheVtpXSxcclxuICAgICAgICAgIGxhdDogZnJvbURlZ3JlZXNBcnJheVtpICsgMV0sXHJcbiAgICAgICAgICBhbHQ6IGZyb21EZWdyZWVzQXJyYXlbaSArIDJdXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgICB0aGlzLmNvbXB1dGVEaXN0YW5jZShcclxuICAgICAgICBhcnJheSxcclxuICAgICAgICAyLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy53b3Jkc05hbWVcclxuICAgICAgKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgX3RoaXMubGVuZ3RoQnlNZXRlciA9IHJlc1xyXG4gICAgICAgIGNkICYmIGNkKClcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgICAgdGhpcy5jb21wdXRlRGlzdGFuY2UoXHJcbiAgICAgICAgcG9zaXRpb25zLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLndvcmRzTmFtZVxyXG4gICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBfdGhpcy5sZW5ndGhCeU1ldGVyID0gcmVzXHJcbiAgICAgICAgY2QgJiYgY2QoKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyb21EZWdyZWVzQXJyYXlcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWkmui+ueW9ou+8iOe6v+aJqeWxle+8iVxyXG4gIHJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KSB7XHJcbiAgICBsZXQgbGluZVBvc2l0aW9ucyA9IFtdXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuZCAmJiB0aGlzLm9wdGlvbnMuZXh0ZW5kICE9PSAnZmFsc2UnKSB7XHJcbiAgICAgIGxldCBvdXRlckhvbGUgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICBsaW5lUG9zaXRpb25zLnB1c2goW2Zyb21EZWdyZWVzQXJyYXlbaV0sIGZyb21EZWdyZWVzQXJyYXlbaSArIDFdXSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbGluZXN0cmluZyA9IHR1cmYubGluZVN0cmluZyhsaW5lUG9zaXRpb25zKVxyXG4gICAgICBsZXQgYnVmZmVyZWQgPSB0dXJmLmJ1ZmZlcihcclxuICAgICAgICBsaW5lc3RyaW5nLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5leHRlbmRXaWR0aCAvIDEwMDAsXHJcbiAgICAgICAgeyB1bml0czogJ2tpbG9tZXRlcnMnIH1cclxuICAgICAgKVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG91dGVySG9sZS5wdXNoKFxyXG4gICAgICAgICAgYnVmZmVyZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1baV1bMF0sXHJcbiAgICAgICAgICBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXVtpXVsxXVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBsZXQgaG9sZXMgPSBbXSAvLyDlrZRcclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBidWZmZXJlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tpXS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgYXJyYXkucHVzaChcclxuICAgICAgICAgICAgYnVmZmVyZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bbV1bMF0sXHJcbiAgICAgICAgICAgIGJ1ZmZlcmVkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldW21dWzFdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhvbGVzLnB1c2goeyBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoYXJyYXkpIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbiA9IG5ldyBDZXNpdW0uUG9seWdvbkdyYXBoaWNzKHtcclxuICAgICAgICBoaWVyYXJjaHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShvdXRlckhvbGUpLFxyXG4gICAgICAgICAgaG9sZXM6IGhvbGVzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuZXh0ZW5kQ29sb3IpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLndpZHRoXHJcbiAgICB0aGlzLmxpbmVUeXBlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMudHlwZVxyXG4gICAgdGhpcy5ub3NlVG9UYWlsID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubm9zZVRvVGFpbFxyXG4gICAgdGhpcy5zbW9vdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zbW9vdGhcclxuICAgIHRoaXMuZXh0ZW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZXh0ZW5kXHJcbiAgICB0aGlzLmV4dGVuZFdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZXh0ZW5kV2lkdGhcclxuICAgIHRoaXMuZXh0ZW5kQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5leHRlbmRDb2xvclxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIC8vIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIC8vIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgLy8gdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5yb3RhdGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5yb3RhdGVcclxuICAgIHRoaXMuc3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zcGVlZFxyXG4gICAgLy8gdGhpcy5kYXNoU2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmRhc2hTaXplXHJcbiAgICB0aGlzLnNwYWNlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuc3BhY2VcclxuICAgIC8vIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgIC8vIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcblxyXG4gICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5vcHRpb25zLmhlaWdodE1vZGVcclxuXHJcbiAgICAvLyBsZXQgaGVpZ2h0XHJcbiAgICAvLyBpZiAodGhpcy5ncm91bmQpIHtcclxuICAgIC8vICAgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgIC8vICAgICBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgLy8gICAgIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRcclxuICAgIC8vICAgfSlcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAvLyAgIGxuZzogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgICAvLyAgIGxhdDogdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsXHJcbiAgICAvLyAgIGFsdDogaGVpZ2h0XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLFxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LFxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XHJcbiAgICAvLyBdXHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXVxyXG4gICAgICAgIC52YWx1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnICsgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCArIDEpLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdsaW5rX2FkZCdcclxuICAgICAgICApWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICApWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgICAvLyBsZXQgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAvLyBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgIC8vIGlucHV0LmFjY2VwdCA9IFwiLm1wNCwgLnBkZlwiXHJcbiAgICAgIC8vIGlucHV0LmNsaWNrKClcclxuICAgICAgLy8gaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKGlucHV0LnZhbHVlKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgLy8gICAgICAgbmFtZTogJ+mTvuaOpScgKyAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoICsgMSksXHJcbiAgICAgIC8vICAgICAgIHVybDogaW5wdXQudmFsdWVcclxuICAgICAgLy8gICAgIH0pXHJcbiAgICAgIC8vICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSlcclxuICAgIH1cclxuICB9XHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScgKyAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoICsgMSksXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICAvLyBfYWRkUnIoKSB7XHJcbiAgLy8gICBpZiAoXHJcbiAgLy8gICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgLy8gICAgICAgJ3ZyX2FkZCdcclxuICAvLyAgICAgKVswXS52YWx1ZVxyXG4gIC8vICAgKSB7XHJcbiAgLy8gICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAvLyAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyArICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoICsgMSksXHJcbiAgLy8gICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gIC8vICAgICAgICAgJ3ZyX2FkZCdcclxuICAvLyAgICAgICApWzBdLnZhbHVlXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgLy8gICAgICAgJ3ZyX2FkZCdcclxuICAvLyAgICAgKVswXS52YWx1ZSA9ICcnXHJcbiAgLy8gICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRWcigpXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBhZGRBdHRyaWJ1dGVScih2cikge1xyXG4gIC8vICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gIC8vICAgICBuYW1lOiAn5YWo5pmv5Zu+JyArICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoICsgMSksXHJcbiAgLy8gICAgIHVybDogdnJcclxuICAvLyAgIH0pXHJcbiAgLy8gICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiDpo57liLBcclxuICAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGhlaWdodFxyXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2goYS54LCBhLnksIGEueilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0pXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgICAgICBoZWlnaHQgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSlcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9uQXJyYXkpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgLy8gdmFyIHVlID0gVUUuZ2V0RWRpdG9yKCdhcHAnKTtcclxuICAgIHJpY2hUZXh0Lm9wZW4oXHJcbiAgICAgIHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnRcclxuICAgIClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IGNvbnRlbnQgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc3RhdGljIG5vZGVFZGl0Mih0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gIC8vICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gIC8vICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgLy8gICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgLy8gICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAvLyAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gIC8vICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gIC8vICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAvLyAgICAgbGV0IG9yaWdpbmFsUG9zaXRpb25cclxuICAvLyAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgLy8gICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKFxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgLy8gICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgLy8gICAgICAgKVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIG5ld3Bvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gIC8vICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAvLyAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAvLyAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gIC8vICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gIC8vICAgICAgICAgbGV0IGVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gIC8vICAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgLy8gICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAvLyAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sbmcsXHJcbiAgLy8gICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubGF0LFxyXG4gIC8vICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdFxyXG4gIC8vICAgICAgICAgICApLFxyXG4gIC8vICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAvLyAgICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAvLyAgICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgLy8gICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAvLyAgICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2UoXHJcbiAgLy8gICAgICAgICAgIHNlbGVjdFBvaW50LmluZGV4LFxyXG4gIC8vICAgICAgICAgICAwLFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGF0LnJlbmV3UG9zaXRpb25zKHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgLy8gICAgICAgICB0aGF0LnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLmxlbmd0aEJ5TWV0ZXIgPSB0aGF0LmNvbXB1dGVEaXN0YW5jZShcclxuICAvLyAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucyxcclxuICAvLyAgICAgICAgICAgMixcclxuICAvLyAgICAgICAgICAgdGhhdC5ncm91bmRcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIHRoYXQubGVuZ3RoVW5pdCA9IHRoYXQub3B0aW9ucy5sZW5ndGhVbml0XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHZhciBwaWNrID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnBpY2sobW92ZW1lbnQucG9zaXRpb24pXHJcbiAgLy8gICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgIHBpY2sgJiZcclxuICAvLyAgICAgICAgICAgcGljay5pZCAmJlxyXG4gIC8vICAgICAgICAgICBwaWNrLmlkLm5hbWUgJiZcclxuICAvLyAgICAgICAgICAgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCdcclxuICAvLyAgICAgICAgICkge1xyXG4gIC8vICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAvLyAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShwaWNrLmlkLmluZGV4LCAxKVxyXG4gIC8vICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgLy8gICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCflt6bplK7lvIDlp4vvvIzlj7PplK7nu5PmnZ/vvIxDVFJMK+WPs+mUruaSpOmUgCcpXHJcbiAgLy8gICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gIC8vICAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAvLyAgICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAvLyAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAvLyAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gb3JpZ2luYWxQb3NpdGlvblxyXG4gIC8vICAgICAgICAgY2IobnVsbCwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAvLyAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChcclxuICAvLyAgICAgICAgICAgcG9zaXRpb25zW2ldLmxuZyxcclxuICAvLyAgICAgICAgICAgcG9zaXRpb25zW2ldLmxhdCxcclxuICAvLyAgICAgICAgICAgcG9zaXRpb25zW2ldLmFsdFxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBuZXdwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAvLyAgICAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAvLyAgICAgICApXHJcbiAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC5ub2RlUG9pbnRzW2ldKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gIC8vICAgICAgIHRoYXQuZXZlbnQuZGVzdHJveSgpXHJcbiAgLy8gICAgICAgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgLy8gICAgIH0pXHJcblxyXG4gIC8vICAgICB0aGF0LmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAvLyAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAvLyAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChcclxuICAvLyAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gIC8vICAgICAgICAgICB0aGF0LnNkay52aWV3ZXJcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgLy8gICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2goXHJcbiAgLy8gICAgICAgICAgICAgcG9zaXRpb25zW2ldLmxuZyxcclxuICAvLyAgICAgICAgICAgICBwb3NpdGlvbnNbaV0ubGF0LFxyXG4gIC8vICAgICAgICAgICAgIHBvc2l0aW9uc1tpXS5hbHRcclxuICAvLyAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgbmV3cG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgLy8gICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXlcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gIC8vICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gIC8vICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gIC8vICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gIC8vICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgLy8gICAgICAgICAgIF1cclxuICAvLyAgICAgICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gIC8vICAgICAgICAgICAgIGxuZzogdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsXHJcbiAgLy8gICAgICAgICAgICAgbGF0OiB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAvLyAgICAgICAgICAgICBhbHQ6IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgLy8gICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgLy8gICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gIC8vICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gIC8vICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gIC8vICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5wb3AoKVxyXG4gIC8vICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZShcclxuICAvLyAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzW3RoYXQubm9kZVBvaW50cy5sZW5ndGggLSAxXVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnBvcCgpXHJcbiAgLy8gICAgICAgICBpZiAoc2VsZWN0UG9pbnQuaW5kZXggPT09IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICh0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXSkge1xyXG4gIC8vICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gdGhhdC5ub2RlUG9pbnRzW3NlbGVjdFBvaW50LmluZGV4IC0gMV1cclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICBzZWxlY3RQb2ludC5pbmRleCA9IDBcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIG5ld3Bvc2l0aW9uc1xyXG4gIC8vICAgICB9LCBmYWxzZSlcclxuXHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAvLyAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAvLyAgICAgICAgIGluZGV4OiBpLFxyXG4gIC8vICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gIC8vICAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZyxcclxuICAvLyAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsXHJcbiAgLy8gICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0XHJcbiAgLy8gICAgICAgICApLFxyXG4gIC8vICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgLy8gICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gIC8vICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgLy8gICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgLy8gICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSlcclxuICAvLyAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG5vZGVFZGl0KGNkKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLm5vc2VUb1RhaWwgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5zbW9vdGggPSBmYWxzZVxyXG4gICAgdGhpcy5oZWlnaHRNb2RlID0gMFxyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlTm9kZUVkaXQoKVxyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXModHJ1ZSlcclxuICAgICAgdGhpcy5fbm9kZUVkaXRDYWxsYmFjayA9IGNkXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgPSBuZXcgQ29udHJvbGxlcih0aGlzLnNkaylcclxuXHJcbiAgICAgIGxldCBzZWxlY3RQb2ludFxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB2YXIgcGljayA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHBpY2sgJiZcclxuICAgICAgICAgIHBpY2suaWQgJiZcclxuICAgICAgICAgIHBpY2suaWQubmFtZSAmJlxyXG4gICAgICAgICAgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID1cclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5jb250cm9sbGVyQ2FsbEJhY2sgPSBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5wb3NpdGlvbi5sYXQsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIGxuZzogcGFyYW1zLnBvc2l0aW9uLmxuZyxcclxuICAgICAgICAgICAgICAgIGxhdDogcGFyYW1zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgICAgICAgIGFsdDogcGFyYW1zLnBvc2l0aW9uLmFsdFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHBhcmFtcy5wb3NpdGlvblxyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxuZyAmJiAodGhpcy5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHBhcmFtcy5wb3NpdGlvbi5sbmcudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5sbmdJbnB1dCAmJiAodGhpcy5fZWxtcy5sbmdJbnB1dFtzZWxlY3RQb2ludC5pbmRleF0udmFsdWUgPSBwYXJhbXMucG9zaXRpb24ubG5nLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMubGF0ICYmICh0aGlzLl9lbG1zLmxhdFtzZWxlY3RQb2ludC5pbmRleF0uaW5uZXJIVE1MID0gcGFyYW1zLnBvc2l0aW9uLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICB0aGlzLl9lbG1zLmxhdElucHV0ICYmICh0aGlzLl9lbG1zLmxhdElucHV0W3NlbGVjdFBvaW50LmluZGV4XS52YWx1ZSA9IHBhcmFtcy5wb3NpdGlvbi5sYXQudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgKHRoaXMuX2VsbXMuYWx0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSBwYXJhbXMucG9zaXRpb24uYWx0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMuYWx0SW5wdXQgJiYgKHRoaXMuX2VsbXMuYWx0SW5wdXRbc2VsZWN0UG9pbnQuaW5kZXhdLnZhbHVlID0gcGFyYW1zLnBvc2l0aW9uLmFsdC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBzZWxlY3RQb2ludC5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHBhcmFtcy5wb3NpdGlvbi5sbmcsXHJcbiAgICAgICAgICAgICAgcGFyYW1zLnBvc2l0aW9uLmxhdCxcclxuICAgICAgICAgICAgICBwYXJhbXMucG9zaXRpb24uYWx0XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG5cclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMucmVuZXdQb3NpdGlvbnModGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICB0aGlzLl9ub2RlRWRpdENhbGxiYWNrID0gbnVsbFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgdGhpcy5fbm9kZUVkaXRDYWxsYmFjayh0aGlzLm9wdGlvbnMucG9zaXRpb25zLCB0aGlzLmxlbmd0aEJ5TWV0ZXIpXHJcbiAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxNSxcclxuICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlTm9kZUVkaXQoKSB7XHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgJiYgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCA9IG51bGxcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLl9ub2RlRWRpdENhbGxiYWNrID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yig6ZmkXHJcbiAgICovXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jbG9zZU5vZGVFZGl0KClcclxuICAgICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMubGFiZWwgJiZcclxuICAgICAgICAodGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICAgIGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgXHJcbiAgICAgICAgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLnBvc2l0aW9ucykpXHJcbiAgICAgIC8vIGxldCBwb3NpdGlvbnMyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwb3NpdGlvbnMpKVxyXG4gICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uczIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBsZXQgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvc2l0aW9uczJbaV0ubG5nLCBwb3NpdGlvbnMyW2ldLmxhdCkpXHJcbiAgICAgIC8vICAgcG9zaXRpb25zMltpXSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAvLyAgICAgcG9zaXRpb25zMltpXS5sbmcsXHJcbiAgICAgIC8vICAgICBwb3NpdGlvbnMyW2ldLmxhdCxcclxuICAgICAgLy8gICAgIE51bWJlcigocG9zaXRpb25zMltpXS5hbHQgKyBOdW1iZXIoaGVpZ2h0KSkudG9GaXhlZCgyKSlcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW2ldID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICBwb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgICAgcG9zaXRpb25zW2ldLmxhdCxcclxuICAgICAgICAgIHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGNlbnRlciA9IHBvc2l0aW9uc1tNYXRoLmZsb29yKHBvc2l0aW9ucy5sZW5ndGggLyAyKV1cclxuICAgICAgbGV0IGRpc3Bhcml0eSA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY2VudGVyLnggLSBwb3NpdGlvbnNbaV0ueFxyXG4gICAgICAgIGRpc3Bhcml0eS5wdXNoKHtcclxuICAgICAgICAgIHg6IGNlbnRlci54IC0gcG9zaXRpb25zW2ldLngsXHJcbiAgICAgICAgICB5OiBjZW50ZXIueSAtIHBvc2l0aW9uc1tpXS55LFxyXG4gICAgICAgICAgejogY2VudGVyLnogLSBwb3NpdGlvbnNbaV0uelxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBuZXdQID0ge1xyXG4gICAgICAgICAgICB4OiBjYXJ0ZXNpYW4ueCAtIGRpc3Bhcml0eVtpXS54LFxyXG4gICAgICAgICAgICB5OiBjYXJ0ZXNpYW4ueSAtIGRpc3Bhcml0eVtpXS55LFxyXG4gICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgICAgLy8gICBuZXdQLFxyXG4gICAgICAgICAgLy8gICB0aGlzLnNkay52aWV3ZXJcclxuICAgICAgICAgIC8vIClcclxuICAgICAgICAgIC8vIGxldCBoZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQpKVxyXG4gICAgICAgICAgLy8gcG9zODQuYWx0ID0gTnVtYmVyKChwb3M4NC5hbHQgKyBOdW1iZXIoaGVpZ2h0KSkudG9GaXhlZCgyKSlcclxuICAgICAgICAgIC8vIG5ld1AgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIC8vICAgcG9zODQubG5nLFxyXG4gICAgICAgICAgLy8gICBwb3M4NC5sYXQsXHJcbiAgICAgICAgICAvLyAgIHBvczg0LmFsdFxyXG4gICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgbmV3cG9zaXRpb25zLnB1c2gobmV3UClcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KFxyXG4gICAgICAgICAgbmV3cG9zaXRpb25zWzBdLFxyXG4gICAgICAgICAgdGhpcy5zZGsudmlld2VyXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbcG9zaXRpb244NC5sbmcsIHBvc2l0aW9uODQubGF0LCBwb3NpdGlvbjg0LmFsdF1cclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICBsbmc6IHBvc2l0aW9uODQubG5nLFxyXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbjg0LmxhdCxcclxuICAgICAgICAgIGFsdDogcG9zaXRpb244NC5hbHRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0uelxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uc0xuZ0xhdCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQobmV3cG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAgICAgcG9zaXRpb25zTG5nTGF0LnB1c2gocG9zaXRpb24pXHJcblxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sbmcgJiYgKHRoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHBvc2l0aW9uLmxuZy50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sbmdJbnB1dCAmJiAodGhpcy5fZWxtcy5sbmdJbnB1dFtpXS52YWx1ZSA9IHBvc2l0aW9uLmxuZy50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYXQgJiYgKHRoaXMuX2VsbXMubGF0W2ldLmlubmVySFRNTCA9IHBvc2l0aW9uLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYXRJbnB1dCAmJiAodGhpcy5fZWxtcy5sYXRJbnB1dFtpXS52YWx1ZSA9IHBvc2l0aW9uLmxhdC50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5hbHQgJiYgKHRoaXMuX2VsbXMuYWx0W2ldLmlubmVySFRNTCA9IHBvc2l0aW9uLmFsdC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5hbHRJbnB1dCAmJiAodGhpcy5fZWxtcy5hbHRJbnB1dFtpXS52YWx1ZSA9IHBvc2l0aW9uLmFsdC50b0ZpeGVkKDIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IHBvc2l0aW9uc0xuZ0xhdFxyXG4gICAgICAgIHRoaXMucHJldmlvdXMucG9zaXRpb25zID0gcG9zaXRpb25zTG5nTGF0XHJcblxyXG4gICAgICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9uc0xuZ0xhdCA9IHBvc2l0aW9uc0xuZ0xhdFxyXG4gICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zLCAoKT0+e1xyXG4gICAgICAgICAgaWYodGhpcy5fcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkVkaXRpbmdDYWxsYmFjayA9IG51bGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKFxyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLnJlbmV3UG9seWdvbihmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJldHVybiBuZXdwb3NpdGlvbnNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHBvc2l0aW9uc1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMubGFiZWwgfHwgIXRoaXMubGFiZWwuZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhcclxuICAgICAgICAgIGByZ2JhKDI1NSwyNTUsMjU1LDEpYFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5yZW5ld1Bvc2l0aW9ucyh0aGlzLm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5XHJcbiAgICAgIClcclxuICAgICAgdGhpcy5yZW5ld1BvbHlnb24oZnJvbURlZ3JlZXNBcnJheSlcclxuXHJcbiAgICAgIHN3aXRjaCAodGhpcy5oZWlnaHRNb2RlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCxcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheVsyXVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgICAgICAgICBhbHQ6IGZyb21EZWdyZWVzQXJyYXlbMl1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICBsbmc6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLFxyXG4gICAgICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LFxyXG4gICAgICAgICAgICBhbHQ6IGZyb21EZWdyZWVzQXJyYXlbMl1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIG9wZW5Qb3NpdGlvbkVkaXRpbmcoY2QpIHtcclxuICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy5fcG9zaXRpb25FZGl0aW5nQ2FsbGJhY2sgPSBjZFxyXG4gIH1cclxuXHJcbiAgc2V0RElWKG9wdGlvbnMgPSB7IGRvbWlkOiAnJywgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IG9wdGlvbnMueCB8fCBvcHRpb25zLnggPT09IDAgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gb3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCA/IG9wdGlvbnMueSA6IDEwXHJcblxyXG4gICAgbGV0IHBvaW50cyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9pbnRzLnB1c2goW1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0XHJcbiAgICAgIF0pXHJcbiAgICB9XHJcbiAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhwb2ludHMpXHJcbiAgICBsZXQgbGVuZ3RoID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pXHJcbiAgICBsZXQgc2xpY2VkID0gdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lLCAwLCBsZW5ndGggLyAyLCB7XHJcbiAgICAgIHVuaXRzOiAna2lsb21ldGVycydcclxuICAgIH0pXHJcblxyXG4gICAgbGV0IHNpdGVJbmZvRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5kb21pZClcclxuICAgIGxldCBzaXRlSW5mb1Bvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgIC4uLnNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1cclxuICAgIClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIocGVyY2VudGFnZSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChcclxuICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8XHJcbiAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJydcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKFxyXG4gICAgICAgICAgc2l0ZUluZm9Qb3NpdGlvblxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAod2lucG9zKSB7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS5sZWZ0ID0gKHdpbnBvcy54ICsgb3B0aW9ucy54KS50b0ZpeGVkKDApICsgJ3B4J1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgUG9seWxpbmVPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBcEJBO0FBQUE7QUFrQkE7QUFHQTtBQUNBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFqQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0RBO0FBekRBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBNkRBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQXhFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckRBO0FBc0RBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEhBO0FBQUE7QUFBQTtBQXlIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWp1QkE7QUFBQTtBQUFBO0FBQUE7QUFtdUJBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdkRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMERBO0FBSUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUVBO0FBeUJBO0FBQUE7QUF0QkE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQTFHQTtBQUFBO0FBQUE7QUFBQTtBQTRHQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQTROQTtBQUNBO0FBQUE7QUF2TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXQ4REE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBZUE7QUFBQTtBQVpBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXREQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFnMURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/PolylineObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/RadarScan/_element.js": /*!********************************************!*\ !*** ./src/Obj/Base/RadarScan/_element.js ***! \********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u626B\\u63CF\\u989C\\u8272\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u626B\\u63CF\\u534A\\u5F84\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u626B\\u63CF\\u901F\\u5EA6\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUmFkYXJTY2FuL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1JhZGFyU2Nhbi9fZWxlbWVudC5qcz9mYjY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSwgbGFiZWxTdHlsZUVsbTEsIGxhYmVsU3R5bGVFbG0yIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9lbG1faHRtbCdcclxuXHJcbmZ1bmN0aW9uIGh0bWwodGhhdCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5omr5o+P6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwibG5nXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5omr5o+P5Y2K5b6EPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yIGlucHV0LXJhZGl1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgZGF0YS1taW49XCIwLjFcIiBtYXg9XCI5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1yYWRpdXMtdW5pdC1ib3hcIiBzdHlsZT1cImZsZXg6IDAgMCA2MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1yYWRpdXMtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6rOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTkwXCIgbWF4PVwiOTBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7miavmj4/pgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIxMDBcIiBAbW9kZWw9XCJzcGVlZFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJyYWRhci1zY2FuLWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBNkRBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/RadarScan/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/RadarScan/index.js": /*!*****************************************!*\ !*** ./src/Obj/Base/RadarScan/index.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/RadarScan/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RadarScan = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 雷达扫描\r\n * @param sdk \r\n * @param options {object} 圆属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.lng {number} 经度\r\n * @param options.lat {number} 维度\r\n * @param options.color=#FFEB3B {string} 颜色\r\n * @param options.radius=10 {number} 半径\r\n * @param options.speed=20 {number} 速度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function RadarScan(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, RadarScan);\n _this2 = _callSuper(this, RadarScan, [sdk, options]);\n _this2.options.lng = options.lng;\n _this2.options.lat = options.lat;\n _this2.options.color = options.color || '#FFEB3B';\n _this2.options.radius = options.radius || 10;\n if (_this2.options.radius > 999999) {\n _this2.options.radius = 999999;\n }\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 20;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_this2.sdk);\n _this2.options.positionEditin = false;\n options.label = options.label || {};\n _this2._elms = {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.instruct = options.instruct || '';\n _this2.options.operatingPoint = options.operatingPoint || '';\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_12__[\"default\"]();\n // if(this.sdk.viewer.scene.mode === 2) {\n // RadarScan.createBy2D(this)\n // }\n // else {\n // RadarScan.create(this)\n // }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n RadarScan.create(_this2);\n // this.sdk.addIncetance(this.options.id, {\n // type: 'CircleDiffuse',\n // options: options\n // })\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(RadarScan, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(RadarScan, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n this.entity.show = this.options.show;\n if (this.options.label.show && this.label) {\n this.label.show = this.options.show;\n }\n } else {\n this.entity.show = false;\n if (this.options.label.show && this.label) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.options.positionEditing;\n },\n set: function set(status) {\n var _this3 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.options.positionEditing = status;\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_19__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n this.lastOptions = {\n lng: this.options.lng,\n lat: this.options.lat\n };\n this.event.mouse_move(function (movement, cartesian) {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.lastOptions = undefined;\n _this3.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this3.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this3.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this3.positionEditing = false;\n } else {\n var positions = _this3.cartesian3Towgs84(cartesian, _this3.sdk.viewer);\n _this3.lng = positions.lng;\n _this3.lat = positions.lat;\n _this3.event.mouse_move(function () {});\n _this3.event.mouse_left(function () {});\n _this3.event.mouse_right(function () {});\n _this3.event.gesture_pinck_start(function () {});\n _this3.event.gesture_pinck_end(function () {});\n _this3.lastOptions = undefined;\n _this3.positionEditing = false;\n }\n });\n });\n } else {\n setTimeout(function () {\n _this3.picking = true;\n }, 500);\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n if (this.lastOptions) {\n this.lng = this.lastOptions.lng;\n this.lat = this.lastOptions.lat;\n }\n this.lastOptions = undefined;\n }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = v;\n this.label.position = [v, this.lat];\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = v;\n this.label.position = [this.lng, v];\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"radius\",\n get: function get() {\n return this.options.radius;\n },\n set: function set(v) {\n var radius = Number(v.toFixed(2));\n if (radius > 999999) {\n radius = 999999;\n }\n if (radius < 0.1) {\n radius = 0.1;\n }\n this.options.radius = radius;\n\n // let pos = this.createCircle({lng: this.options.lng, lat:this.options.lat}, this.options.radius)\n // this.entity2.polygon.hierarchy = new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(pos))\n // this.sdk.viewer.scene.primitives.update(this.entity2)\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var unitDataLegpElm = this._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n if (unitDataLegpElm.value === '千米') {\n radius = Number((radius / 1000).toFixed(5));\n }\n }\n this._elms.radius && this._elms.radius.forEach(function (item) {\n item.value = radius;\n });\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n this.changeMaterial();\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.color = v;\n this.changeMaterial();\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"getSdk\"])().sdkD;\n this.options.label.show = v;\n if (this.show && (!this.showView || this.showView == 3 || !sdkD)) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"instruct\",\n get: function get() {\n return this.options.instruct;\n },\n set: function set(v) {\n this.options.instruct = v;\n this._elms.instruct && this._elms.instruct.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"operatingPoint\",\n get: function get() {\n return this.options.operatingPoint;\n },\n set: function set(v) {\n this.options.operatingPoint = v;\n this._elms.operatingPoint && this._elms.operatingPoint.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this9.options.attribute.link.content;\n case 2:\n _this9.attributeLink = _context3.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this9.options.attribute.link.content.splice(i, 1);\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this10.options.attribute.vr.content;\n case 2:\n _this10.attributeVr = _context6.sent;\n table = _this10._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this10.options.attribute.vr.content.splice(i, 1);\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this10.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n height,\n _args7 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n options = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context7.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context7.next = 16;\n break;\n }\n _context7.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context7.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context7.next = 27;\n break;\n case 23:\n _context7.next = 25;\n return this.getClampToHeight({\n lng: this.options.lng,\n lat: this.options.lat\n });\n case 25:\n height = _context7.sent;\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.radius * 6 + height),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n duration: 1\n });\n case 27:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }() // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4(state) {\n var _this11 = this;\n var _this, contentElm, tabsElm, colorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, inputRadiusElm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context8.next = 34;\n break;\n }\n _context8.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.sdk, this.options, {\n title: '雷达光波属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this11.name = _this11.name.trim();\n if (!_this11.name) {\n _this11.name = '未命名对象';\n }\n _this11.options.label.position = {\n lng: _this11.label.position[0],\n lat: _this11.label.position[1],\n alt: _this11.label.position[2]\n };\n _this11.originalOptions = _this11.deepCopyObj(_this11.options);\n _this11._DialogObject.close();\n _this11.Dialog.confirmCallBack && _this11.Dialog.confirmCallBack(_this11.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(_this11.sdk, _this11.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this11.sdk, _this11.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this11.reset();\n _this11.Dialog.resetCallBack && _this11.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this11.Dialog.removeCallBack && _this11.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this11.reset();\n _this11.positionEditing = false;\n _this11.Dialog.closeCallBack && _this11.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this11.options.show = show;\n _this11.originalOptions.show = show;\n _this11.show = show;\n _this11.Dialog.showCallBack && _this11.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this11.positionEditing = !_this11.positionEditing;\n }\n }, true);\n case 6:\n this._DialogObject = _context8.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' radar-scan';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_10__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('radar-scan-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n inputRadiusElm = this._DialogObject._element.content.getElementsByClassName('input-radius')[0].getElementsByTagName('input')[0];\n inputRadiusElm.value = this.options.radius;\n this._elms.radius = [inputRadiusElm];\n inputRadiusElm.addEventListener('input', function (e) {\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) / (unit === '米' ? 1 : 1000) && value >= Number(e.target.min)) {\n _this11.radius = value * (unit === '米' ? 1 : 1000);\n }\n }\n }\n });\n inputRadiusElm.addEventListener('blur', function (e) {\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max) / (unit === '米' ? 1 : 1000)) {\n value = Number(e.target.max) / (unit === '米' ? 1 : 1000);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n _this11.radius = Number((value * (unit === '米' ? 1 : 1000)).toFixed(2));\n }\n });\n setTimeout(function () {\n _this11.attributeLink = _this11.options.attribute.link.content;\n _this11.attributeVr = _this11.options.attribute.vr.content;\n _this11.ISCSelect && _this11.ISCSelect();\n _this11.goodsSelect && _this11.goodsSelect();\n _this11.cameraSelect && _this11.cameraSelect();\n var tagData = _this11.attributeSelect;\n var attributeElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = attributeElm.getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this11.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this11.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '米',\n value: '米'\n }, {\n name: '千米',\n value: '千米'\n }];\n var unitDataElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit-box')[0];\n if (unitDataElm) {\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(unitDataElm, \".input-radius-unit\");\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = unitData[0].value;\n unitDataLegpElm.addEventListener('input', function () {\n var radiusElmBox = _this11._DialogObject._element.content.getElementsByClassName('input-radius')[0];\n var unitElm = radiusElmBox.getElementsByClassName('unit')[0];\n var radiusElm = radiusElmBox.getElementsByClassName('input')[0];\n switch (unitDataLegpElm.value) {\n case '米':\n if (unitElm.innerHTML === 'km') {\n unitElm.innerHTML = 'm';\n radiusElm.value = Number((radiusElm.value * 1000).toFixed(2));\n }\n break;\n case '千米':\n if (unitElm.innerHTML === 'm') {\n unitElm.innerHTML = 'km';\n radiusElm.value = Number((radiusElm.value / 1000).toFixed(5));\n }\n break;\n default:\n break;\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_18__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_17__[\"legp\"])(_this11._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this11.labelFontFamily].value;\n for (var _i6 = 0; _i6 < fontData.length; _i6++) {\n if (fontData[_i6].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i6].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < fontData.length; _i7++) {\n if (fontData[_i7].value === fontDataLegpElm.value) {\n _this11.labelFontFamily = fontData[_i7].key;\n break;\n }\n }\n });\n _this11._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n case 34:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.color = this.originalOptions.color;\n this.radius = this.originalOptions.radius;\n this.duration = this.originalOptions.duration;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.instruct = this.originalOptions.instruct;\n this.operatingPoint = this.originalOptions.operatingPoint;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n this.label && this.label.remove();\n this.entity && this.sdk.viewer.entities.remove(this.entity);\n this.entity2 && this.sdk.viewer.entities.remove(this.entity2);\n this.entity = null;\n this.entity2 = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n _context9.next = 10;\n return this.sdk.removeIncetance(this.options.id);\n case 10:\n _context9.next = 12;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(this.sdk, this.options.id);\n case 12:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"instructSubmit\",\n value: function instructSubmit() {\n this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct);\n this.originalOptions.instruct = this.instruct;\n }\n }, {\n key: \"operatingPointSubmit\",\n value: function operatingPointSubmit() {\n this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint);\n this.originalOptions.operatingPoint = this.operatingPoint;\n }\n }, {\n key: \"changeMaterial\",\n value: function changeMaterial() {\n // 提取颜色透明度\n function extractRGBA(rgbaString) {\n if (/^#/.test(rgbaString)) {\n // 去除#号\n var _color = rgbaString.replace(\"#\", \"\");\n\n // 分割成红、绿、蓝三部分的16进制字符串\n var red = parseInt(_color.substring(0, 2), 16);\n var green = parseInt(_color.substring(2, 4), 16);\n var blue = parseInt(_color.substring(4, 6), 16);\n var opacity = parseInt(_color.substring(6, 8), 16);\n if (!opacity && opacity !== 0) {\n opacity = 1;\n } else {\n opacity = opacity / 255;\n }\n rgbaString = \"rgba(\".concat(red, \",\").concat(green, \",\").concat(blue, \",\").concat(opacity, \")\");\n }\n var match = rgbaString.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/);\n return match ? [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10), match[4] ? parseFloat(match[4]) : 1] : null;\n }\n var array = extractRGBA(this.options.color);\n var color = \"rgba(\".concat(array[0], \",\").concat(array[1], \",\").concat(array[2], \",1)\");\n this.entity && (this.entity.ellipse.material = new Cesium.RadarScanMaterialProperty({\n color: Cesium.Color.fromCssColorString(color),\n transparency: array[3],\n speed: this.options.speed\n }));\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this12 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_13__[\"default\"].primaryCallBack = function (content) {\n _this12.options.richTextContent = content;\n };\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this13 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this13.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n // 提取颜色透明度\n function extractRGBA(rgbaString) {\n if (/^#/.test(rgbaString)) {\n // 去除#号\n var _color2 = rgbaString.replace(\"#\", \"\");\n\n // 分割成红、绿、蓝三部分的16进制字符串\n var red = parseInt(_color2.substring(0, 2), 16);\n var green = parseInt(_color2.substring(2, 4), 16);\n var blue = parseInt(_color2.substring(4, 6), 16);\n var opacity = parseInt(_color2.substring(6, 8), 16);\n if (!opacity && opacity !== 0) {\n opacity = 1;\n } else {\n opacity = opacity / 255;\n }\n rgbaString = \"rgba(\".concat(red, \",\").concat(green, \",\").concat(blue, \",\").concat(opacity, \")\");\n }\n var match = rgbaString.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/);\n return match ? [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10), match[4] ? parseFloat(match[4]) : 1] : null;\n }\n var array = extractRGBA(that.options.color);\n var color = \"rgba(\".concat(array[0], \",\").concat(array[1], \",\").concat(array[2], \",1)\");\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n position: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegrees(that.options.lng, that.options.lat);\n }, false),\n name: \"雷达扫描\",\n ellipse: {\n semiMinorAxis: new Cesium.CallbackProperty(function () {\n return that.options.radius;\n }, false),\n semiMajorAxis: new Cesium.CallbackProperty(function () {\n return that.options.radius;\n }, false),\n material: new Cesium.RadarScanMaterialProperty({\n color: Cesium.Color.fromCssColorString(color),\n transparency: array[3],\n speed: that.options.speed\n }),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n if (that.sdk.viewer._element.className === 'cesium-viewer 2d') {\n that.entity.ellipse.height = 1;\n }\n RadarScan.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee6(that) {\n var height;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n _context10.next = 2;\n return that.getClampToHeight({\n lng: that.options.lng,\n lat: that.options.lat\n });\n case 2:\n height = _context10.sent;\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.lng,\n lat: that.options.lat,\n alt: height\n };\n }\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: true\n });\n case 5:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"createBy2D\",\n value: function createBy2D(that) {\n that.entity = new Cesium.EntityCollection();\n var heading = 0;\n var arr = calculatePane(that.options, that.options.radius, heading);\n var _time = new Date().getTime();\n\n // 每一帧刷新时调用\n that.viewer.clock.onTick.addEventListener(function () {\n var tempTime = new Date().getTime();\n var everyTime = that.options.duration ? 360 / that.options.duration : 0;\n var speed = (tempTime - _time) * everyTime;\n _time = tempTime;\n heading += speed;\n arr = calculatePane(that.options, that.options.radius, heading);\n });\n var outline = that.sdk.viewer.entities.add({\n show: that.options.show,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n var fromDegreesArray = that.createCircle({\n lng: that.options.lng,\n lat: that.options.lat\n }, that.options.radius);\n return Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }, false),\n width: 2,\n material: Cesium.Color.fromCssColorString(that.options.color),\n clampToGround: true\n }\n });\n var dynamic = that.sdk.viewer.entities.add({\n show: that.options.show,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArray(arr);\n }, false),\n width: 2,\n material: Cesium.Color.fromCssColorString(that.options.color),\n clampToGround: true\n }\n });\n that.entity.add(outline);\n that.entity.add(dynamic);\n that.sdk.viewer.entities.add(that.entity);\n RadarScan.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(that.sdk, that.options.id);\n\n // 计算平面扫描范围\n function calculatePane(position, radius, heading) {\n var x1 = position.lng,\n y1 = position.lat,\n height = 0;\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(x1, y1, height));\n var rx = radius * Math.cos(heading * Math.PI / 180.0);\n var ry = radius * Math.sin(heading * Math.PI / 180.0);\n var translation = Cesium.Cartesian3.fromElements(rx, ry, height);\n var d = Cesium.Matrix4.multiplyByPoint(m, translation, new Cesium.Cartesian3());\n var c = Cesium.Cartographic.fromCartesian(d);\n var x2 = Cesium.Math.toDegrees(c.longitude);\n var y2 = Cesium.Math.toDegrees(c.latitude);\n return [x1, y1, x2, y2];\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RadarScan);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUmFkYXJTY2FuL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1JhZGFyU2Nhbi9pbmRleC5qcz83NzZkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tIFwiLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnNcIjtcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgRXZlbnRCaW5kaW5nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nL2V2ZW50QmluZGluZyc7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSwgZ2V0U2RrIGFzIGdldDJEU2RrIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIFJhZGFyU2NhbiBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjcmlwdGlvbiDpm7fovr7miavmj49cclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWchuWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOagh+azqGlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufSDmmL7npLov6ZqQ6JePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhdCB7bnVtYmVyfSDnu7TluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb2xvcj0jRkZFQjNCIHtzdHJpbmd9IOminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJhZGl1cz0xMCB7bnVtYmVyfSDljYrlvoRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcGVlZD0yMCB7bnVtYmVyfSDpgJ/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSBvcHRpb25zLmxuZ1xyXG4gICAgdGhpcy5vcHRpb25zLmxhdCA9IG9wdGlvbnMubGF0XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICcjRkZFQjNCJ1xyXG4gICAgdGhpcy5vcHRpb25zLnJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHx8IDEwXHJcbiAgICBpZih0aGlzLm9wdGlvbnMucmFkaXVzID4gOTk5OTk5KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yYWRpdXMgPSA5OTk5OTlcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IChvcHRpb25zLnNwZWVkIHx8IG9wdGlvbnMuc3BlZWQgPT09IDApID8gb3B0aW9ucy5zcGVlZCA6IDIwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLmV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhpcy5zZGspXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25FZGl0aW4gPSBmYWxzZVxyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCBvcHRpb25zLmxhYmVsLmZvbnRTaXplID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZm9udFNpemUgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6IChvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA6IDQsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAob3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwKSA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMubGFiZWwubmVhciB8fCBvcHRpb25zLmxhYmVsLm5lYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuaW5zdHJ1Y3QgPSBvcHRpb25zLmluc3RydWN0IHx8ICcnXHJcbiAgICB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSBvcHRpb25zLm9wZXJhdGluZ1BvaW50IHx8ICcnXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSBvcHRpb25zLmF0dHJpYnV0ZVR5cGUgfHwgJ3JpY2hUZXh0J1xyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuICAgIC8vIGlmKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAvLyAgIFJhZGFyU2Nhbi5jcmVhdGVCeTJEKHRoaXMpXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgUmFkYXJTY2FuLmNyZWF0ZSh0aGlzKVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIFJhZGFyU2Nhbi5jcmVhdGUodGhpcylcclxuICAgIC8vIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHtcclxuICAgIC8vICAgdHlwZTogJ0NpcmNsZURpZmZ1c2UnLFxyXG4gICAgLy8gICBvcHRpb25zOiBvcHRpb25zXHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICAvLyDmj5Dlj5bpopzoibLpgI/mmI7luqZcclxuICAgIGZ1bmN0aW9uIGV4dHJhY3RSR0JBKHJnYmFTdHJpbmcpIHtcclxuICAgICAgaWYgKC9eIy8udGVzdChyZ2JhU3RyaW5nKSkge1xyXG4gICAgICAgIC8vIOWOu+mZpCPlj7dcclxuICAgICAgICBsZXQgY29sb3IgPSByZ2JhU3RyaW5nLnJlcGxhY2UoXCIjXCIsIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyDliIblibLmiJDnuqLjgIHnu7/jgIHok53kuInpg6jliIbnmoQxNui/m+WItuWtl+espuS4slxyXG4gICAgICAgIGxldCByZWQgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgICAgICBsZXQgZ3JlZW4gPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgICAgICBsZXQgYmx1ZSA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG4gICAgICAgIGxldCBvcGFjaXR5ID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDYsIDgpLCAxNik7XHJcbiAgICAgICAgaWYgKCFvcGFjaXR5ICYmIG9wYWNpdHkgIT09IDApIHtcclxuICAgICAgICAgIG9wYWNpdHkgPSAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgb3BhY2l0eSA9IG9wYWNpdHkgLyAyNTVcclxuICAgICAgICB9XHJcbiAgICAgICAgcmdiYVN0cmluZyA9IGByZ2JhKCR7cmVkfSwke2dyZWVufSwke2JsdWV9LCR7b3BhY2l0eX0pYFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcmdiYVN0cmluZy5tYXRjaCgvXnJnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSg/OixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pKT9cXCkkLyk7XHJcbiAgICAgIHJldHVybiBtYXRjaCA/IFtwYXJzZUludChtYXRjaFsxXSwgMTApLCBwYXJzZUludChtYXRjaFsyXSwgMTApLCBwYXJzZUludChtYXRjaFszXSwgMTApLCBtYXRjaFs0XSA/IHBhcnNlRmxvYXQobWF0Y2hbNF0pIDogMV0gOiBudWxsXHJcbiAgICB9XHJcbiAgICBsZXQgYXJyYXkgPSBleHRyYWN0UkdCQSh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICBsZXQgY29sb3IgPSBgcmdiYSgke2FycmF5WzBdfSwke2FycmF5WzFdfSwke2FycmF5WzJdfSwxKWBcclxuICAgIHRoYXQuZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLmxuZywgdGhhdC5vcHRpb25zLmxhdClcclxuICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICBuYW1lOiBcIumbt+i+vuaJq+aPj1wiLFxyXG4gICAgICBlbGxpcHNlOiB7XHJcbiAgICAgICAgc2VtaU1pbm9yQXhpczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiB0aGF0Lm9wdGlvbnMucmFkaXVzXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHNlbWlNYWpvckF4aXM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC5vcHRpb25zLnJhZGl1c1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5SYWRhclNjYW5NYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKSxcclxuICAgICAgICAgIHRyYW5zcGFyZW5jeTogYXJyYXlbM10sXHJcbiAgICAgICAgICBzcGVlZDogdGhhdC5vcHRpb25zLnNwZWVkXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGF0LnNkay5fZW50aXR5WkluZGV4KytcclxuICAgIGlmICh0aGF0LnNkay52aWV3ZXIuX2VsZW1lbnQuY2xhc3NOYW1lID09PSAnY2VzaXVtLXZpZXdlciAyZCcpIHtcclxuICAgICAgdGhhdC5lbnRpdHkuZWxsaXBzZS5oZWlnaHQgPSAxXHJcbiAgICB9XHJcbiAgICBSYWRhclNjYW4uY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZih0aGF0Lm9wdGlvbnMuc2hvdykge1xyXG4gICAgICAgXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVMYWJlbCh0aGF0KSB7XHJcbiAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiB0aGF0Lm9wdGlvbnMubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5sYXQgfSlcclxuICAgIGlmICghdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGF0Lm9wdGlvbnMubG5nLCBsYXQ6IHRoYXQub3B0aW9ucy5sYXQsIGFsdDogaGVpZ2h0IH1cclxuICAgIH1cclxuICAgIC8vIOagh+etvlxyXG4gICAgdGhhdC5sYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/IHRoYXQub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6IHRoYXQub3B0aW9ucy5uYW1lLFxyXG4gICAgICBmb250U2l6ZTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5OiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSxcclxuICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgcGl4ZWxPZmZzZXQ6IHRoYXQub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICBsaW5lQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IsXHJcbiAgICAgIGxpbmVXaWR0aDogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMubGFiZWwubmVhcixcclxuICAgICAgZmFyOiB0aGF0Lm9wdGlvbnMubGFiZWwuZmFyLFxyXG4gICAgICBncm91bmQ6IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlQnkyRCh0aGF0KSB7XHJcbiAgICB0aGF0LmVudGl0eSA9IG5ldyBDZXNpdW0uRW50aXR5Q29sbGVjdGlvbigpO1xyXG4gICAgbGV0IGhlYWRpbmcgPSAwO1xyXG4gICAgbGV0IGFyciA9IGNhbGN1bGF0ZVBhbmUodGhhdC5vcHRpb25zLCB0aGF0Lm9wdGlvbnMucmFkaXVzLCBoZWFkaW5nKTtcclxuICAgIGxldCBfdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIC8vIOavj+S4gOW4p+WIt+aWsOaXtuiwg+eUqFxyXG4gICAgdGhhdC52aWV3ZXIuY2xvY2sub25UaWNrLmFkZEV2ZW50TGlzdGVuZXIoKCkgPT4ge1xyXG4gICAgICBsZXQgdGVtcFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICBsZXQgZXZlcnlUaW1lID0gdGhhdC5vcHRpb25zLmR1cmF0aW9uID8gMzYwIC8gdGhhdC5vcHRpb25zLmR1cmF0aW9uIDogMFxyXG4gICAgICBsZXQgc3BlZWQgPSAodGVtcFRpbWUgLSBfdGltZSkgKiBldmVyeVRpbWVcclxuICAgICAgX3RpbWUgPSB0ZW1wVGltZVxyXG4gICAgICBoZWFkaW5nICs9IHNwZWVkO1xyXG4gICAgICBhcnIgPSBjYWxjdWxhdGVQYW5lKHRoYXQub3B0aW9ucywgdGhhdC5vcHRpb25zLnJhZGl1cywgaGVhZGluZyk7XHJcbiAgICB9KTtcclxuICAgIGxldCBvdXRsaW5lID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhhdC5jcmVhdGVDaXJjbGUoeyBsbmc6IHRoYXQub3B0aW9ucy5sbmcsIGxhdDogdGhhdC5vcHRpb25zLmxhdCB9LCB0aGF0Lm9wdGlvbnMucmFkaXVzKVxyXG4gICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSk7XHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvciksXHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgICBsZXQgZHluYW1pYyA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShhcnIpO1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICB3aWR0aDogMixcclxuICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5lbnRpdHkuYWRkKG91dGxpbmUpXHJcbiAgICB0aGF0LmVudGl0eS5hZGQoZHluYW1pYylcclxuICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQodGhhdC5lbnRpdHkpXHJcbiAgICBSYWRhclNjYW4uY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcblxyXG4gICAgLy8g6K6h566X5bmz6Z2i5omr5o+P6IyD5Zu0XHJcbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVQYW5lKHBvc2l0aW9uLCByYWRpdXMsIGhlYWRpbmcpIHtcclxuICAgICAgbGV0IHgxID0gcG9zaXRpb24ubG5nLFxyXG4gICAgICAgIHkxID0gcG9zaXRpb24ubGF0LFxyXG4gICAgICAgIGhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBtID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoeDEsIHkxLCBoZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCByeCA9IHJhZGl1cyAqIE1hdGguY29zKChoZWFkaW5nICogTWF0aC5QSSkgLyAxODAuMCk7XHJcbiAgICAgIGxldCByeSA9IHJhZGl1cyAqIE1hdGguc2luKChoZWFkaW5nICogTWF0aC5QSSkgLyAxODAuMCk7XHJcbiAgICAgIGxldCB0cmFuc2xhdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21FbGVtZW50cyhyeCwgcnksIGhlaWdodCk7XHJcbiAgICAgIGxldCBkID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KFxyXG4gICAgICAgIG0sXHJcbiAgICAgICAgdHJhbnNsYXRpb24sXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgKTtcclxuICAgICAgbGV0IGMgPSBDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21DYXJ0ZXNpYW4oZCk7XHJcbiAgICAgIGxldCB4MiA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjLmxvbmdpdHVkZSk7XHJcbiAgICAgIGxldCB5MiA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjLmxhdGl0dWRlKTtcclxuICAgICAgcmV0dXJuIFt4MSwgeTEsIHgyLCB5Ml07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gIH1cclxuXHJcbiAgc2V0IHNob3codikge1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICBsZXQgc2RrRCA9IGdldDJEU2RrKCkuc2RrRFxyXG4gICAgICBpZiAoIXRoaXMuaXNTaG93VmlldyB8fCAhc2RrRCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsLnNob3cgJiYgdGhpcy5sYWJlbCkge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ICYmIHRoaXMubGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4pIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bi5jaGVja2VkID0gdlxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHRoaXMuaXNTaG93VmlldyA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAqXHJcbiAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICpcclxuICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbmV3IE1vdXNlVGlwKCfngrnlh7vpvKDmoIflt6bplK7noa7orqTvvIzlj7PplK7lj5bmtognLCB0aGlzLnNkaylcclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5lbnRpdHkuYmlsbGJvYXJkLmNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhgcmdiYSgyNTUsMjU1LDI1NSwwLjkpYCkpXHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMubGFzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgbG5nOiB0aGlzLm9wdGlvbnMubG5nLFxyXG4gICAgICAgIGxhdDogdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMubG5nID0gcG9zaXRpb25zLmxuZ1xyXG4gICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHRoaXMubG5nID0gcG9zaXRpb25zLmxuZ1xyXG4gICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMubGFzdE9wdGlvbnMgPSB1bmRlZmluZWRcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAgICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMubGFzdE9wdGlvbnMgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgICBpZih0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuZW50aXR5ICYmIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZClcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMSlgKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7IH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIGlmICh0aGlzLmxhc3RPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLmxhc3RPcHRpb25zLmxuZ1xyXG4gICAgICAgIHRoaXMubGF0ID0gdGhpcy5sYXN0T3B0aW9ucy5sYXRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RPcHRpb25zID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIGdldCBsbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxuZ1xyXG4gIH1cclxuICBzZXQgbG5nKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sbmcgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YsIHRoaXMubGF0XVxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGF0XHJcbiAgfVxyXG4gIHNldCBsYXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhdCA9IHZcclxuICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5sbmcsIHZdXHJcbiAgICB0aGlzLl9lbG1zLmxhdCAmJiB0aGlzLl9lbG1zLmxhdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJhZGl1cygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmFkaXVzXHJcbiAgfVxyXG4gIHNldCByYWRpdXModikge1xyXG4gICAgbGV0IHJhZGl1cyA9IE51bWJlcih2LnRvRml4ZWQoMikpXHJcbiAgICBpZihyYWRpdXMgPiA5OTk5OTkpIHtcclxuICAgICAgcmFkaXVzID0gOTk5OTk5XHJcbiAgICB9XHJcbiAgICBpZihyYWRpdXMgPCAwLjEpIHtcclxuICAgICAgcmFkaXVzID0gMC4xXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMucmFkaXVzID0gcmFkaXVzXHJcbiAgICBcclxuICAgIC8vIGxldCBwb3MgPSB0aGlzLmNyZWF0ZUNpcmNsZSh7bG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6dGhpcy5vcHRpb25zLmxhdH0sIHRoaXMub3B0aW9ucy5yYWRpdXMpXHJcbiAgICAvLyB0aGlzLmVudGl0eTIucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShwb3MpKVxyXG4gICAgLy8gdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMudXBkYXRlKHRoaXMuZW50aXR5MilcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50KSB7XHJcbiAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGlmICh1bml0RGF0YUxlZ3BFbG0udmFsdWUgPT09ICfljYPnsbMnKSB7XHJcbiAgICAgICAgcmFkaXVzID0gTnVtYmVyKChyYWRpdXMgLyAxMDAwKS50b0ZpeGVkKDUpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnJhZGl1cyAmJiB0aGlzLl9lbG1zLnJhZGl1cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSByYWRpdXNcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG4gIHNldCBzcGVlZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSB2XHJcbiAgICB0aGlzLmNoYW5nZU1hdGVyaWFsKClcclxuICAgIHRoaXMuX2VsbXMuc3BlZWQgJiYgdGhpcy5fZWxtcy5zcGVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdlxyXG4gICAgdGhpcy5jaGFuZ2VNYXRlcmlhbCgpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgbGV0IHNka0QgPSBnZXQyRFNkaygpLnNka0RcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSkge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaW5zdHJ1Y3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluc3RydWN0XHJcbiAgfVxyXG4gIHNldCBpbnN0cnVjdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaW5zdHJ1Y3QgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmluc3RydWN0ICYmIHRoaXMuX2VsbXMuaW5zdHJ1Y3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBvcGVyYXRpbmdQb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcbiAgc2V0IG9wZXJhdGluZ1BvaW50KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHZcclxuICAgIHRoaXMuX2VsbXMub3BlcmF0aW5nUG9pbnQgJiYgdGhpcy5fZWxtcy5vcGVyYXRpbmdQb2ludC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGxpbmtEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZihuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlIFxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlSVNDKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVJU0Modikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8IWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZihuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVHb29kcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVHb29kcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQgfSlcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMub3B0aW9ucy5yYWRpdXMgKiA2ICsgaGVpZ2h0KSxcclxuICAgICAgICBvcmllbnRhdGlvbjogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGR1cmF0aW9uOiAxLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSkge1xyXG5cclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfpm7fovr7lhYnms6LlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLmxhYmVsLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMubGFiZWwucG9zaXRpb25bMV0sIGFsdDogdGhpcy5sYWJlbC5wb3NpdGlvblsyXSB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyByYWRhci1zY2FuJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVJU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicygncmFkYXItc2Nhbi1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgbGV0IGlucHV0UmFkaXVzRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzJylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgaW5wdXRSYWRpdXNFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMucmFkaXVzXHJcbiAgICAgIHRoaXMuX2VsbXMucmFkaXVzID0gW2lucHV0UmFkaXVzRWxtXVxyXG4gICAgICBpbnB1dFJhZGl1c0VsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cy11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICBsZXQgdW5pdCA9IHVuaXREYXRhTGVncEVsbS52YWx1ZVxyXG4gICAgICAgIGlmIChlLnRhcmdldC52YWx1ZSB8fCBlLnRhcmdldC52YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmICgoKCFlLnRhcmdldC5tYXgpICYmICghZS50YXJnZXQubWluKSkgfHwgKCh2YWx1ZSA8PSAoTnVtYmVyKGUudGFyZ2V0Lm1heCkgLyAodW5pdCA9PT0gJ+exsycgPyAxIDogMTAwMCkpKSAmJiB2YWx1ZSA+PSBOdW1iZXIoZS50YXJnZXQubWluKSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHZhbHVlICogKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlucHV0UmFkaXVzRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgbGV0IHVuaXQgPSB1bml0RGF0YUxlZ3BFbG0udmFsdWVcclxuICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgfHwgZS50YXJnZXQudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IChOdW1iZXIoZS50YXJnZXQubWF4KSAvICh1bml0ID09PSAn57GzJyA/IDEgOiAxMDAwKSkpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSAoTnVtYmVyKGUudGFyZ2V0Lm1heCkgLyAodW5pdCA9PT0gJ+exsycgPyAxIDogMTAwMCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJhZGl1cyA9IE51bWJlcigodmFsdWUgKiAodW5pdCA9PT0gJ+exsycgPyAxIDogMTAwMCkpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgdGhpcy5JU0NTZWxlY3QgJiYgdGhpcy5JU0NTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG5cclxuXHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgbGV0IGxlZ3BPYmplY3QgPSBsZWdwKGF0dHJpYnV0ZUVsbSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IGF0dHJpYnV0ZUVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUgPSB0YWdEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn57GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfnsbMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAn5Y2D57GzJyxcclxuICAgICAgICAgICAgdmFsdWU6ICfljYPnsbMnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIGxldCB1bml0RGF0YUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cy11bml0LWJveCcpWzBdXHJcbiAgICAgICAgaWYgKHVuaXREYXRhRWxtKSB7XHJcbiAgICAgICAgICBsZXQgdW5pdERhdGFMZWdwT2JqZWN0ID0gbGVncCh1bml0RGF0YUVsbSwgXCIuaW5wdXQtcmFkaXVzLXVuaXRcIilcclxuICAgICAgICAgIHVuaXREYXRhTGVncE9iamVjdC5sZWdwX3NlYXJjaCh1bml0RGF0YSlcclxuICAgICAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0udmFsdWUgPSB1bml0RGF0YVswXS52YWx1ZVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmFkaXVzRWxtQm94ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzJylbMF1cclxuICAgICAgICAgICAgbGV0IHVuaXRFbG0gPSByYWRpdXNFbG1Cb3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndW5pdCcpWzBdXHJcbiAgICAgICAgICAgIGxldCByYWRpdXNFbG0gPSByYWRpdXNFbG1Cb3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+exsyc6XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pdEVsbS5pbm5lckhUTUwgPT09ICdrbScpIHtcclxuICAgICAgICAgICAgICAgICAgdW5pdEVsbS5pbm5lckhUTUwgPSAnbSdcclxuICAgICAgICAgICAgICAgICAgcmFkaXVzRWxtLnZhbHVlID0gTnVtYmVyKChyYWRpdXNFbG0udmFsdWUgKiAxMDAwKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICfljYPnsbMnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXRFbG0uaW5uZXJIVE1MID09PSAnbScpIHtcclxuICAgICAgICAgICAgICAgICAgdW5pdEVsbS5pbm5lckhUTUwgPSAna20nXHJcbiAgICAgICAgICAgICAgICAgIHJhZGl1c0VsbS52YWx1ZSA9IE51bWJlcigocmFkaXVzRWxtLnZhbHVlIC8gMTAwMCkudG9GaXhlZCg1KSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5sbmcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sbmdcclxuICAgIHRoaXMubGF0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGF0XHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMucmFkaXVzID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucmFkaXVzXHJcbiAgICB0aGlzLmR1cmF0aW9uID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZHVyYXRpb25cclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgdGhpcy5pbnN0cnVjdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmluc3RydWN0XHJcbiAgICB0aGlzLm9wZXJhdGluZ1BvaW50ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMub3BlcmF0aW5nUG9pbnRcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudFxyXG4gICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5lbnRpdHkgJiYgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5MiAmJiB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5MilcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy5lbnRpdHkyID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgaW5zdHJ1Y3RTdWJtaXQoKSB7XHJcbiAgICB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCAmJiB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCh0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0LCB0aGlzLmluc3RydWN0KVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3QgPSB0aGlzLmluc3RydWN0XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpbmdQb2ludFN1Ym1pdCgpIHtcclxuICAgIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0ICYmIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0KHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQsIHRoaXMub3BlcmF0aW5nUG9pbnQpXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHRoaXMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcblxyXG4gIGNoYW5nZU1hdGVyaWFsKCkge1xyXG4gICAgLy8g5o+Q5Y+W6aKc6Imy6YCP5piO5bqmXHJcbiAgICBmdW5jdGlvbiBleHRyYWN0UkdCQShyZ2JhU3RyaW5nKSB7XHJcbiAgICAgIGlmICgvXiMvLnRlc3QocmdiYVN0cmluZykpIHtcclxuICAgICAgICAvLyDljrvpmaQj5Y+3XHJcbiAgICAgICAgbGV0IGNvbG9yID0gcmdiYVN0cmluZy5yZXBsYWNlKFwiI1wiLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8g5YiG5Ymy5oiQ57qi44CB57u/44CB6JOd5LiJ6YOo5YiG55qEMTbov5vliLblrZfnrKbkuLJcclxuICAgICAgICBsZXQgcmVkID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICAgICAgbGV0IGdyZWVuID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICAgICAgbGV0IGJsdWUgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuICAgICAgICBsZXQgb3BhY2l0eSA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg2LCA4KSwgMTYpO1xyXG4gICAgICAgIGlmICghb3BhY2l0eSAmJiBvcGFjaXR5ICE9PSAwKSB7XHJcbiAgICAgICAgICBvcGFjaXR5ID0gMVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIG9wYWNpdHkgPSBvcGFjaXR5IC8gMjU1XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJnYmFTdHJpbmcgPSBgcmdiYSgke3JlZH0sJHtncmVlbn0sJHtibHVlfSwke29wYWNpdHl9KWBcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtYXRjaCA9IHJnYmFTdHJpbmcubWF0Y2goL15yZ2JhP1xcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykoPzosXFxzKihcXGQrKD86XFwuXFxkKyk/KSk/XFwpJC8pO1xyXG4gICAgICByZXR1cm4gbWF0Y2ggPyBbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSwgcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSwgcGFyc2VJbnQobWF0Y2hbM10sIDEwKSwgbWF0Y2hbNF0gPyBwYXJzZUZsb2F0KG1hdGNoWzRdKSA6IDFdIDogbnVsbFxyXG4gICAgfVxyXG4gICAgbGV0IGFycmF5ID0gZXh0cmFjdFJHQkEodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgbGV0IGNvbG9yID0gYHJnYmEoJHthcnJheVswXX0sJHthcnJheVsxXX0sJHthcnJheVsyXX0sMSlgXHJcbiAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuZWxsaXBzZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uUmFkYXJTY2FuTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKSxcclxuICAgICAgdHJhbnNwYXJlbmN5OiBhcnJheVszXSxcclxuICAgICAgc3BlZWQ6IHRoaXMub3B0aW9ucy5zcGVlZCxcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgX2FkZExpbmsoKSB7XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluaygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rKGxpbmspIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgdXJsOiBsaW5rXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIF9hZGRScigpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgdXJsOiB2clxyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJk+W8gOWvjOaWh+acrOahhlxyXG4gICAqL1xyXG4gIG9wZW5SaWNoVGV4dEVkaXRvcihlKSB7XHJcbiAgICByaWNoVGV4dC5vcGVuKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLm5hbWUsIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQpXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSAoY29udGVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RElWKG9wdGlvbnMgPSB7IGRvbWlkOiBcIlwiLCB4OiAxMCwgeTogMTAgfSkge1xyXG4gICAgb3B0aW9ucy54ID0gKG9wdGlvbnMueCB8fCBvcHRpb25zLnggPT09IDApID8gb3B0aW9ucy54IDogMTBcclxuICAgIG9wdGlvbnMueSA9IChvcHRpb25zLnkgfHwgb3B0aW9ucy55ID09PSAwKSA/IG9wdGlvbnMueSA6IDEwXHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubG5nLCB0aGlzLm9wdGlvbnMubGF0KVxyXG5cclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoKHBlcmNlbnRhZ2UpID0+IHtcclxuICAgICAgLy/ovazmjaLliLDlsY/luZXlnZDmoIdcclxuICAgICAgaWYgKHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycgfHwgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJycpIHtcclxuICAgICAgICBsZXQgd2lucG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNhcnRlc2lhblRvQ2FudmFzQ29vcmRpbmF0ZXMoc2l0ZUluZm9Qb3NpdGlvbik7XHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS50b3AgPSAod2lucG9zLnkgKyBvcHRpb25zLnkpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYWRhclNjYW5cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBKQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUE4RkE7QUFDQTtBQUFBO0FBekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFsRUE7QUFBQTtBQUFBO0FBQUE7QUFvRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbkNBO0FBb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUEvUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFsNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXZCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWl3Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/RadarScan/index.js\n"); /***/ }), /***/ "./src/Obj/Base/RadarScanStereoscopic/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Base/RadarScanStereoscopic/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u7ECF\\u5EA6\\n \\n
\\n
\\n \\u6269\\u6563\\u534A\\u5F84\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7EAC\\u5EA6\\n \\n
\\n
\\n \\u6301\\u7EED\\u65F6\\u95F4\\n
\\n \\n ms\\n \\n
\\n
\\n
\\n
\\n
\\n \\u9AD8\\u5EA6\\n
\\n \\n m\\n \\n
\\n
\\n
\\n
\\n
\\n \\u8303\\u56F4\\u989C\\u8272\\n
\\n
\\n
\\n \\u626B\\u63CF\\u989C\\u8272\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
\\n
\\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUmFkYXJTY2FuU3RlcmVvc2NvcGljL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1JhZGFyU2NhblN0ZXJlb3Njb3BpYy9fZWxlbWVudC5qcz9iNzIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSwgbGFiZWxTdHlsZUVsbTEsIGxhYmVsU3R5bGVFbG0yIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9lbG1faHRtbCdcclxuXHJcbmZ1bmN0aW9uIGh0bWwodGhhdCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57uP5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItMTgwXCIgbWF4PVwiMTgwXCIgQG1vZGVsPVwibG5nXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5omp5pWj5Y2K5b6EPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0yIGlucHV0LXJhZGl1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgZGF0YS1taW49XCIwLjFcIiBtYXg9XCI5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1yYWRpdXMtdW5pdC1ib3hcIiBzdHlsZT1cImZsZXg6IDAgMCA2MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1yYWRpdXMtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue6rOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTkwXCIgbWF4PVwiOTBcIiBAbW9kZWw9XCJsYXRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mjIHnu63ml7bpl7Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjEwMFwiIG1heD1cIjk5OTk5XCIgQG1vZGVsPVwiZHVyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumrmOW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJhbHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ojIPlm7TpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvck91dFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaJq+aPj+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9ySW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJyYWRhci1zY2FuLWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBcUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/RadarScanStereoscopic/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/RadarScanStereoscopic/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/RadarScanStereoscopic/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/RadarScanStereoscopic/_element.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 立体雷达扫描\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RadarScanStereoscopic = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 立体雷达扫描\r\n * @param sdk \r\n * @param options {object} 属性\r\n * @param options.id {string} 标注id\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.lng {number} 经度\r\n * @param options.lat {number} 纬度\r\n * @param options.alt {number} 高度\r\n * @param options.colorOut=rgba(255,255,0,0.3){string} 范围颜色\r\n * @param options.colorIn=rgba(255,0,0,0.3){string} 扫描颜色\r\n * @param options.radius=10 {number} 半径\r\n * @param options.duration=2000 {number} 持续时间\r\n * @param options.label {object} 标签对象\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function RadarScanStereoscopic(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, RadarScanStereoscopic);\n _this2 = _callSuper(this, RadarScanStereoscopic, [sdk, options]);\n _this2.options.lng = options.lng;\n _this2.options.lat = options.lat;\n _this2.options.alt = options.alt;\n _this2.options.colorOut = options.colorOut || 'rgba(255,255,0,0.3)';\n _this2.options.colorIn = options.colorIn || 'rgba(255,0,0,0.3)';\n _this2.options.radius = options.radius || 10;\n if (_this2.options.radius > 999999) {\n _this2.options.radius = 999999;\n }\n _this2.options.duration = options.duration || 2000;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.options.positionEditin = false;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.instruct = options.instruct || \"\";\n _this2.options.operatingPoint = options.operatingPoint || \"\";\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"]();\n _this2.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_this2.sdk);\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n RadarScanStereoscopic.radarSolidScan(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(RadarScanStereoscopic, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(RadarScanStereoscopic, [{\n key: \"type\",\n get: function get() {\n return 'RadarScanStereoscopic';\n }\n }, {\n key: \"positionEditing\",\n get: function get() {\n if (this.ControllerObject.getActiveState() === 'translational') {\n return true;\n }\n return false;\n },\n set:\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n function set(status) {\n var _this3 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n if (status) {\n this.picking = false;\n this.ControllerObject.position = {\n lng: this.options.lng,\n lat: this.options.lat,\n alt: this.options.alt\n };\n this.ControllerObject.editTranslational();\n this.ControllerObject.controllerCallBack = function (params) {\n _this3.lng = params.position.lng;\n _this3.lat = params.position.lat;\n _this3.alt = params.position.alt;\n };\n } else {\n setTimeout(function () {\n _this3.picking = true;\n }, 500);\n this.ControllerObject.destroy();\n }\n // this.options.positionEditing = status\n // if (status === true) {\n // this.picking = false\n // this.event.mouse_move((movement, cartesian) => {\n // let positions = this.cartesian3Towgs84(cartesian, this.sdk.viewer)\n // this.lng = positions.lng\n // this.lat = positions.lat\n // })\n // this.event.mouse_left((movement, cartesian) => {\n // let positions = this.cartesian3Towgs84(cartesian, this.sdk.viewer)\n // this.originalOptions.lng = this.lng = positions.lng\n // this.originalOptions.lat = this.lat = positions.lat\n // this.event.mouse_move(() => { })\n // this.event.mouse_left(() => { })\n // this.event.mouse_right(() => { })\n // this.positionEditing = false\n // })\n // this.event.mouse_right((movement, cartesian) => {\n // this.positionEditing = false\n // })\n // }\n // else {\n // this.picking = true\n // this.event.mouse_move(() => { })\n // this.event.mouse_left(() => { })\n // this.event.mouse_right(() => { })\n // this.lng = this.originalOptions.lng\n // this.lat = this.originalOptions.lat\n // }\n }\n }, {\n key: \"lng\",\n get: function get() {\n return this.options.lng;\n },\n set: function set(v) {\n this.options.lng = Number(v);\n this.label.position = [v, this.lat, this.alt + this.radius];\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n RadarScanStereoscopic.changeParam(this);\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.lat;\n },\n set: function set(v) {\n this.options.lat = Number(v);\n this.label.position = [this.lng, v, this.alt + this.radius];\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n RadarScanStereoscopic.changeParam(this);\n }\n }, {\n key: \"alt\",\n get: function get() {\n return this.options.alt;\n },\n set: function set(v) {\n this.options.alt = Number(v);\n this.label.position = [this.lng, this.lat, v + this.radius];\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.value = v;\n });\n RadarScanStereoscopic.changeParam(this);\n }\n }, {\n key: \"radius\",\n get: function get() {\n return this.options.radius;\n },\n set: function set(v) {\n var radius = Number(v.toFixed(2));\n if (radius > 999999) {\n radius = 999999;\n }\n if (radius < 0.1) {\n radius = 0.1;\n }\n this.options.radius = radius;\n this.label.position = [this.lng, this.lat, this.alt + v];\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var unitDataLegpElm = this._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n if (unitDataLegpElm.value === '千米') {\n radius = Number((radius / 1000).toFixed(5));\n }\n }\n this._elms.radius && this._elms.radius.forEach(function (item) {\n item.value = radius;\n });\n RadarScanStereoscopic.changeParam(this);\n }\n }, {\n key: \"duration\",\n get: function get() {\n return this.options.duration;\n },\n set: function set(v) {\n this.options.duration = v;\n this._elms.duration && this._elms.duration.forEach(function (item) {\n item.value = v;\n });\n RadarScanStereoscopic.changeParam(this);\n }\n }, {\n key: \"colorOut\",\n get: function get() {\n return this.options.colorOut;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.colorOut = v;\n this.entity.ellipsoid.material = Cesium.Color.fromCssColorString(v);\n this.entity.ellipsoid.outlineColor = Cesium.Color.fromCssColorString(v);\n if (this._elms.colorOut) {\n this._elms.colorOut.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.colorOut = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.colorOut = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.colorOut[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"colorIn\",\n get: function get() {\n return this.options.colorIn;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.colorIn = v;\n this.entity.wall.material = Cesium.Color.fromCssColorString(v);\n if (this._elms.colorIn) {\n this._elms.colorIn.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this5.colorIn = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.colorIn = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.colorIn[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"instruct\",\n get: function get() {\n return this.options.instruct;\n },\n set: function set(v) {\n this.options.instruct = v;\n this._elms.instruct && this._elms.instruct.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"operatingPoint\",\n get: function get() {\n return this.options.operatingPoint;\n },\n set: function set(v) {\n this.options.operatingPoint = v;\n this._elms.operatingPoint && this._elms.operatingPoint.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this10.options.attribute.link.content;\n case 2:\n _this10.attributeLink = _context3.sent;\n table = _this10._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this10.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this10.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this10.options.attribute.link.content.splice(i, 1);\n _this10.attributeLink = _this10.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this10.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this10.attributeLink = _this10.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this10.attributeLink = _this10.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this11 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this11.options.attribute.vr.content;\n case 2:\n _this11.attributeVr = _context6.sent;\n table = _this11._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this11.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this11.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this11.options.attribute.vr.content.splice(i, 1);\n _this11.attributeVr = _this11.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this11.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this11.attributeVr = _this11.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this11.attributeVr = _this11.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n\n // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this12 = this;\n var _this, contentElm, tabsElm, colorOutPicker, colorInPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, inputRadiusElm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 36;\n break;\n }\n _context7.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_13__[\"default\"](this.sdk, this.options, {\n title: '立体雷达扫描属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this12.name = _this12.name.trim();\n if (!_this12.name) {\n _this12.name = '未命名对象';\n }\n _this12.options.label.position = {\n lng: _this12.label.position[0],\n lat: _this12.label.position[1],\n alt: _this12.options.alt + _this12.options.radius\n };\n _this12.label.position = [_this12.options.label.position.lng, _this12.options.label.position.lat, _this12.options.label.position.alt];\n _this12.originalOptions = _this12.deepCopyObj(_this12.options);\n _this12._DialogObject.close();\n _this12.Dialog.confirmCallBack && _this12.Dialog.confirmCallBack(_this12.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(_this12.sdk, _this12.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"syncSplitData\"])(_this12.sdk, _this12.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this12.reset();\n _this12.Dialog.resetCallBack && _this12.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this12.Dialog.removeCallBack && _this12.Dialog.removeCallBack(_this12.options);\n },\n closeCallBack: function closeCallBack() {\n _this12.reset();\n _this12.Dialog.closeCallBack && _this12.Dialog.closeCallBack();\n if (_this12.positionEditing) {\n _this12.positionEditing = false;\n }\n _this12.positionEditing = false;\n },\n showCallBack: function showCallBack(show) {\n _this12.options.show = show;\n _this12.originalOptions.show = show;\n _this12.show = show;\n _this12.Dialog.showCallBack && _this12.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this12.positionEditing = !_this12.positionEditing;\n }\n }, true);\n case 6:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' radar-scan-stereoscopic';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('radar-scan-edit-tabs', undefined, this.sdk); // 颜色组件\n colorOutPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"colorOut\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.colorOut,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.colorOut = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.colorOut = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n colorInPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"colorIn\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.colorIn,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.colorIn = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.colorIn = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this12.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this12.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this12.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this12.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.colorOut = [colorOutPicker];\n this._elms.colorIn = [colorInPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n inputRadiusElm = this._DialogObject._element.content.getElementsByClassName('input-radius')[0].getElementsByTagName('input')[0];\n inputRadiusElm.value = this.options.radius;\n this._elms.radius = [inputRadiusElm];\n inputRadiusElm.addEventListener('input', function (e) {\n var unitDataLegpElm = _this12._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (!e.target.max && !e.target.min || value <= Number(e.target.max) / (unit === '米' ? 1 : 1000) && value >= Number(e.target.min)) {\n _this12.radius = value * (unit === '米' ? 1 : 1000);\n }\n }\n }\n });\n inputRadiusElm.addEventListener('blur', function (e) {\n var unitDataLegpElm = _this12._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n var unit = unitDataLegpElm.value;\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.target.max && value > Number(e.target.max) / (unit === '米' ? 1 : 1000)) {\n value = Number(e.target.max) / (unit === '米' ? 1 : 1000);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n _this12.radius = Number((value * (unit === '米' ? 1 : 1000)).toFixed(2));\n }\n });\n setTimeout(function () {\n _this12.attributeLink = _this12.options.attribute.link.content;\n _this12.attributeVr = _this12.options.attribute.vr.content;\n _this12.ISCSelect && _this12.ISCSelect();\n _this12.goodsSelect && _this12.goodsSelect();\n _this12.cameraSelect && _this12.cameraSelect();\n var tagData = _this12.attributeSelect;\n var attributeElm = _this12._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = attributeElm.getElementsByTagName('input')[0];\n for (var i = 0; i < tagData.length; i++) {\n if (tagData[i].key === _this12.options.attributeType) {\n attributeSelectElm.value = tagData[i].value;\n legpObject.legp_searchActive(tagData[i].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < tagData.length; _i5++) {\n if (tagData[_i5].value === attributeSelectElm.value) {\n _this12.attributeType = tagData[_i5].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '米',\n value: '米'\n }, {\n name: '千米',\n value: '千米'\n }];\n var unitDataElm = _this12._DialogObject._element.content.getElementsByClassName('input-radius-unit-box')[0];\n if (unitDataElm) {\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(unitDataElm, \".input-radius-unit\");\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this12._DialogObject._element.content.getElementsByClassName('input-radius-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = unitData[0].value;\n unitDataLegpElm.addEventListener('input', function () {\n var radiusElmBox = _this12._DialogObject._element.content.getElementsByClassName('input-radius')[0];\n var unitElm = radiusElmBox.getElementsByClassName('unit')[0];\n var radiusElm = radiusElmBox.getElementsByClassName('input')[0];\n switch (unitDataLegpElm.value) {\n case '米':\n if (unitElm.innerHTML === 'km') {\n unitElm.innerHTML = 'm';\n radiusElm.value = Number((radiusElm.value * 1000).toFixed(2));\n }\n break;\n case '千米':\n if (unitElm.innerHTML === 'm') {\n unitElm.innerHTML = 'km';\n radiusElm.value = Number((radiusElm.value / 1000).toFixed(5));\n }\n break;\n default:\n break;\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this12._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this12._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this12.labelFontFamily].value;\n for (var _i6 = 0; _i6 < fontData.length; _i6++) {\n if (fontData[_i6].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i6].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < fontData.length; _i7++) {\n if (fontData[_i7].value === fontDataLegpElm.value) {\n _this12.labelFontFamily = fontData[_i7].key;\n break;\n }\n }\n });\n _this12._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n case 36:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n height,\n _args8 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_22__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context8.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context8.next = 16;\n break;\n }\n _context8.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context8.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context8.next = 27;\n break;\n case 23:\n _context8.next = 25;\n return this.getClampToHeight({\n lng: this.options.lng,\n lat: this.options.lat\n });\n case 25:\n height = _context8.sent;\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.radius * 6 + height),\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n duration: 1\n });\n case 27:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.lng = this.originalOptions.lng;\n this.lat = this.originalOptions.lat;\n this.alt = this.originalOptions.alt;\n this.colorOut = this.originalOptions.colorOut;\n this.colorIn = this.originalOptions.colorIn;\n this.radius = this.originalOptions.radius;\n this.duration = this.originalOptions.duration;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.instruct = this.originalOptions.instruct;\n this.operatingPoint = this.originalOptions.operatingPoint;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.positionEditing = false;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context9.next = 6;\n return this.sdk.removeIncetance(this.options.id);\n case 6:\n _context9.next = 8;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(this.sdk, this.options.id);\n case 8:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"instructSubmit\",\n value: function instructSubmit() {\n this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct);\n this.originalOptions.instruct = this.instruct;\n }\n }, {\n key: \"operatingPointSubmit\",\n value: function operatingPointSubmit() {\n this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint);\n this.originalOptions.operatingPoint = this.operatingPoint;\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this13 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this13.options.richTextContent = content;\n };\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this14 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.lng, this.options.lat, this.options.alt + this.options.radius);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this14.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"radarSolidScan\",\n value: function radarSolidScan(that) {\n var viewer = that.sdk.viewer;\n var options = that.options;\n var radius = options.radius;\n var centerLng = options.lng;\n var centerLat = options.lat;\n var height = options.alt;\n var heading = that.options.duration ? 360 / that.options.duration * Cesium.getTimestamp() : 0;\n var arr = calculatePane(that.options, that.options.radius, heading);\n var _time = new Date().getTime();\n\n // 每一帧刷新时调用\n viewer.clock.onTick.addEventListener(function () {\n // let tempTime = new Date().getTime()\n // let everyTime = that.options.duration ? 360 / that.options.duration : 0\n // let speed = (tempTime - _time) * everyTime\n // _time = tempTime\n // heading += speed;\n\n heading = that.options.duration ? 360 / that.options.duration * Cesium.getTimestamp() : 0;\n arr = calculatePane(that.options, that.options.radius, heading);\n });\n that.entity = viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n position: new Cesium.CallbackProperty(function () {\n return new Cesium.Cartesian3.fromDegrees(that.options.lng, that.options.lat, that.options.alt);\n }, false),\n ellipsoid: {\n radii: new Cesium.CallbackProperty(function () {\n return new Cesium.Cartesian3(that.options.radius, that.options.radius, that.options.radius);\n }, false),\n material: Cesium.Color.fromCssColorString(options.colorOut),\n outline: true,\n outlineColor: Cesium.Color.fromCssColorString(options.colorOut),\n outlineWidth: 1,\n maximumCone: Cesium.Math.toRadians(90)\n },\n wall: {\n positions: new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArrayHeights(arr.positionArr);\n }, false),\n material: Cesium.Color.fromCssColorString(options.colorIn),\n minimumHeights: new Cesium.CallbackProperty(function () {\n return arr.bottomArr;\n }, false)\n }\n });\n RadarScanStereoscopic.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_21__[\"setSplitDirection\"])(0, that.options.id);\n }\n\n // 计算平面扫描范围\n function calculatePane(position, radius, heading) {\n var x1 = position.lng,\n y1 = position.lat,\n height = position.alt;\n var m = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(x1, y1, height));\n var rx = radius * Math.cos(heading * Math.PI / 180.0);\n var ry = radius * Math.sin(heading * Math.PI / 180.0);\n var translation = Cesium.Cartesian3.fromElements(rx, ry, height);\n var d = Cesium.Matrix4.multiplyByPoint(m, translation, new Cesium.Cartesian3());\n var c = Cesium.Cartographic.fromCartesian(d);\n var x2 = Cesium.Math.toDegrees(c.longitude);\n var y2 = Cesium.Math.toDegrees(c.latitude);\n return calculateSector(x1, y1, x2, y2, height);\n }\n\n // 计算竖直扇形\n function calculateSector(x1, y1, x2, y2, height) {\n var positionArr = [];\n var bottomArr = [];\n positionArr.push(x1, y1, height);\n bottomArr.push(height);\n var radius = Cesium.Cartesian3.distance(Cesium.Cartesian3.fromDegrees(x1, y1), Cesium.Cartesian3.fromDegrees(x2, y2));\n // 角度设置为0-90,也就是1/4圆\n for (var i = 0; i <= 90; i++) {\n var h = radius * Math.sin(i * Math.PI / 180.0);\n var r = Math.cos(i * Math.PI / 180.0);\n var x = (x2 - x1) * r + x1;\n var y = (y2 - y1) * r + y1;\n positionArr.push(x, y, h + height);\n bottomArr.push(height);\n }\n return {\n positionArr: positionArr,\n bottomArr: bottomArr\n };\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n var height, objectsToExclude;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!that.options.alt) {\n _context10.next = 4;\n break;\n }\n height = that.options.alt + that.options.radius;\n _context10.next = 8;\n break;\n case 4:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(that.sdk.viewer.entities.values);\n _context10.next = 7;\n return that.getClampToHeight({\n lng: that.options.lng,\n lat: that.options.lat\n }, objectsToExclude);\n case 7:\n height = _context10.sent;\n case 8:\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.lng,\n lat: that.options.lat,\n alt: height\n };\n }\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_16__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n ground: false,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n });\n case 10:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"changeParam\",\n value: function changeParam(that) {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RadarScanStereoscopic);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUmFkYXJTY2FuU3RlcmVvc2NvcGljL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1JhZGFyU2NhblN0ZXJlb3Njb3BpYy9pbmRleC5qcz85MTRlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZGVzY3JpcHRpb24g56uL5L2T6Zu36L6+5omr5o+PXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xsZXIvaW5kZXhcIjtcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvd30gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIFJhZGFyU2NhblN0ZXJlb3Njb3BpYyBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjcmlwdGlvbiDnq4vkvZPpm7fovr7miavmj49cclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOagh+azqGlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2hvdz10cnVlIHtib29sZWFufSDmmL7npLov6ZqQ6JePXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3JPdXQ9cmdiYSgyNTUsMjU1LDAsMC4zKXtzdHJpbmd9IOiMg+WbtOminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9ySW49cmdiYSgyNTUsMCwwLDAuMyl7c3RyaW5nfSDmiavmj4/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yYWRpdXM9MTAge251bWJlcn0g5Y2K5b6EXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZHVyYXRpb249MjAwMCB7bnVtYmVyfSDmjIHnu63ml7bpl7RcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zLCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmdcclxuICAgIHRoaXMub3B0aW9ucy5sYXQgPSBvcHRpb25zLmxhdFxyXG4gICAgdGhpcy5vcHRpb25zLmFsdCA9IG9wdGlvbnMuYWx0XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3JPdXQgPSBvcHRpb25zLmNvbG9yT3V0IHx8ICdyZ2JhKDI1NSwyNTUsMCwwLjMpJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9ySW4gPSBvcHRpb25zLmNvbG9ySW4gfHwgJ3JnYmEoMjU1LDAsMCwwLjMpJ1xyXG4gICAgdGhpcy5vcHRpb25zLnJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHx8IDEwXHJcbiAgICBpZih0aGlzLm9wdGlvbnMucmFkaXVzID4gOTk5OTk5KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yYWRpdXMgPSA5OTk5OTlcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gfHwgMjAwMFxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uRWRpdGluID0gZmFsc2VcclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmluc3RydWN0ID0gb3B0aW9ucy5pbnN0cnVjdCB8fCBcIlwiXHJcbiAgICB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSBvcHRpb25zLm9wZXJhdGluZ1BvaW50IHx8IFwiXCJcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ID0gbmV3IENvbnRyb2xsZXIodGhpcy5zZGspXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgUmFkYXJTY2FuU3RlcmVvc2NvcGljLnJhZGFyU29saWRTY2FuKHRoaXMpXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnUmFkYXJTY2FuU3RlcmVvc2NvcGljJ1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJhZGFyU29saWRTY2FuKHRoYXQpIHtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGF0LnNkay52aWV3ZXJcclxuICAgIGxldCBvcHRpb25zID0gdGhhdC5vcHRpb25zXHJcbiAgICBsZXQgcmFkaXVzID0gb3B0aW9ucy5yYWRpdXM7XHJcbiAgICBsZXQgY2VudGVyTG5nID0gb3B0aW9ucy5sbmc7XHJcbiAgICBsZXQgY2VudGVyTGF0ID0gb3B0aW9ucy5sYXQ7XHJcbiAgICBsZXQgaGVpZ2h0ID0gb3B0aW9ucy5hbHQ7XHJcblxyXG5cclxuICAgIGxldCBoZWFkaW5nID0gdGhhdC5vcHRpb25zLmR1cmF0aW9uID8gMzYwIC8gdGhhdC5vcHRpb25zLmR1cmF0aW9uICogQ2VzaXVtLmdldFRpbWVzdGFtcCgpIDogMDtcclxuICAgIGxldCBhcnIgPSBjYWxjdWxhdGVQYW5lKHRoYXQub3B0aW9ucywgdGhhdC5vcHRpb25zLnJhZGl1cywgaGVhZGluZyk7XHJcbiAgICBsZXQgX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAvLyDmr4/kuIDluKfliLfmlrDml7bosIPnlKhcclxuICAgIHZpZXdlci5jbG9jay5vblRpY2suYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAgIC8vIGxldCB0ZW1wVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgIC8vIGxldCBldmVyeVRpbWUgPSB0aGF0Lm9wdGlvbnMuZHVyYXRpb24gPyAzNjAgLyB0aGF0Lm9wdGlvbnMuZHVyYXRpb24gOiAwXHJcbiAgICAgIC8vIGxldCBzcGVlZCA9ICh0ZW1wVGltZSAtIF90aW1lKSAqIGV2ZXJ5VGltZVxyXG4gICAgICAvLyBfdGltZSA9IHRlbXBUaW1lXHJcbiAgICAgIC8vIGhlYWRpbmcgKz0gc3BlZWQ7XHJcblxyXG4gICAgICBoZWFkaW5nID0gdGhhdC5vcHRpb25zLmR1cmF0aW9uID8gMzYwIC8gdGhhdC5vcHRpb25zLmR1cmF0aW9uICogQ2VzaXVtLmdldFRpbWVzdGFtcCgpIDogMDtcclxuICAgICAgYXJyID0gY2FsY3VsYXRlUGFuZSh0aGF0Lm9wdGlvbnMsIHRoYXQub3B0aW9ucy5yYWRpdXMsIGhlYWRpbmcpO1xyXG4gICAgfSk7XHJcbiAgICB0aGF0LmVudGl0eSA9IHZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5sbmcsXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMubGF0LFxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLmFsdFxyXG4gICAgICAgIClcclxuICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICBlbGxpcHNvaWQ6IHtcclxuICAgICAgICByYWRpaTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjModGhhdC5vcHRpb25zLnJhZGl1cywgdGhhdC5vcHRpb25zLnJhZGl1cywgdGhhdC5vcHRpb25zLnJhZGl1cylcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcob3B0aW9ucy5jb2xvck91dCksXHJcbiAgICAgICAgb3V0bGluZTogdHJ1ZSxcclxuICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcob3B0aW9ucy5jb2xvck91dCksXHJcbiAgICAgICAgb3V0bGluZVdpZHRoOiAxLFxyXG4gICAgICAgIG1heGltdW1Db25lOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoOTApLFxyXG4gICAgICB9LFxyXG4gICAgICB3YWxsOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGFyci5wb3NpdGlvbkFycik7XHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKG9wdGlvbnMuY29sb3JJbiksXHJcbiAgICAgICAgbWluaW11bUhlaWdodHM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gYXJyLmJvdHRvbUFyclxyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgUmFkYXJTY2FuU3RlcmVvc2NvcGljLmNyZWF0ZUxhYmVsKHRoYXQpXHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgIFxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcblxyXG4gICAgLy8g6K6h566X5bmz6Z2i5omr5o+P6IyD5Zu0XHJcbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVQYW5lKHBvc2l0aW9uLCByYWRpdXMsIGhlYWRpbmcpIHtcclxuICAgICAgbGV0IHgxID0gcG9zaXRpb24ubG5nLFxyXG4gICAgICAgIHkxID0gcG9zaXRpb24ubGF0LFxyXG4gICAgICAgIGhlaWdodCA9IHBvc2l0aW9uLmFsdDtcclxuICAgICAgbGV0IG0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh4MSwgeTEsIGhlaWdodClcclxuICAgICAgKTtcclxuICAgICAgbGV0IHJ4ID0gcmFkaXVzICogTWF0aC5jb3MoKGhlYWRpbmcgKiBNYXRoLlBJKSAvIDE4MC4wKTtcclxuICAgICAgbGV0IHJ5ID0gcmFkaXVzICogTWF0aC5zaW4oKGhlYWRpbmcgKiBNYXRoLlBJKSAvIDE4MC4wKTtcclxuICAgICAgbGV0IHRyYW5zbGF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbUVsZW1lbnRzKHJ4LCByeSwgaGVpZ2h0KTtcclxuICAgICAgbGV0IGQgPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5UG9pbnQoXHJcbiAgICAgICAgbSxcclxuICAgICAgICB0cmFuc2xhdGlvbixcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApO1xyXG4gICAgICBsZXQgYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihkKTtcclxuICAgICAgbGV0IHgyID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGMubG9uZ2l0dWRlKTtcclxuICAgICAgbGV0IHkyID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGMubGF0aXR1ZGUpO1xyXG4gICAgICByZXR1cm4gY2FsY3VsYXRlU2VjdG9yKHgxLCB5MSwgeDIsIHkyLCBoZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOiuoeeul+erluebtOaJh+W9olxyXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlU2VjdG9yKHgxLCB5MSwgeDIsIHkyLCBoZWlnaHQpIHtcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyID0gW107XHJcbiAgICAgIGxldCBib3R0b21BcnIgPSBbXTtcclxuICAgICAgcG9zaXRpb25BcnIucHVzaCh4MSwgeTEsIGhlaWdodCk7XHJcbiAgICAgIGJvdHRvbUFyci5wdXNoKGhlaWdodCk7XHJcbiAgICAgIGxldCByYWRpdXMgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh4MSwgeTEpLFxyXG4gICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHgyLCB5MilcclxuICAgICAgKTtcclxuICAgICAgLy8g6KeS5bqm6K6+572u5Li6MC05MCzkuZ/lsLHmmK8xLzTlnIZcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gOTA7IGkrKykge1xyXG4gICAgICAgIGxldCBoID0gcmFkaXVzICogTWF0aC5zaW4oKGkgKiBNYXRoLlBJKSAvIDE4MC4wKTtcclxuICAgICAgICBsZXQgciA9IE1hdGguY29zKChpICogTWF0aC5QSSkgLyAxODAuMCk7XHJcbiAgICAgICAgbGV0IHggPSAoeDIgLSB4MSkgKiByICsgeDE7XHJcbiAgICAgICAgbGV0IHkgPSAoeTIgLSB5MSkgKiByICsgeTE7XHJcbiAgICAgICAgcG9zaXRpb25BcnIucHVzaCh4LCB5LCBoICsgaGVpZ2h0KTtcclxuICAgICAgICBib3R0b21BcnIucHVzaChoZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IHBvc2l0aW9uQXJyLCBib3R0b21BcnIgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVMYWJlbCh0aGF0KSB7XHJcbiAgICBsZXQgaGVpZ2h0XHJcbiAgICBpZiAodGhhdC5vcHRpb25zLmFsdCkge1xyXG4gICAgICBoZWlnaHQgPSB0aGF0Lm9wdGlvbnMuYWx0ICsgdGhhdC5vcHRpb25zLnJhZGl1c1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgIGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogdGhhdC5vcHRpb25zLmxuZywgbGF0OiB0aGF0Lm9wdGlvbnMubGF0IH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbikge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhhdC5vcHRpb25zLmxuZywgbGF0OiB0aGF0Lm9wdGlvbnMubGF0LCBhbHQ6IGhlaWdodCB9XHJcbiAgICB9XHJcbiAgICAvLyDmoIfnrb5cclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogW3RoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZ3JvdW5kOiBmYWxzZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKkBkZXNjIOaJk+W8gOW5s+enu+WKn+iDvVxyXG4gKlxyXG4gKiBAbWVtYmVyT2YgU291cmNlXHJcbiAqIEBwYXJhbSBzdGF0dXMge2Jvb2xlYW59XHJcbiAqXHJcbiAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMucGlja2luZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLm9wdGlvbnMubG5nLCBsYXQ6IHRoaXMub3B0aW9ucy5sYXQsIGFsdDogdGhpcy5vcHRpb25zLmFsdCB9XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5lZGl0VHJhbnNsYXRpb25hbCgpXHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5jb250cm9sbGVyQ2FsbEJhY2sgPSAocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sbmcgPSBwYXJhbXMucG9zaXRpb24ubG5nXHJcbiAgICAgICAgdGhpcy5sYXQgPSBwYXJhbXMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgdGhpcy5hbHQgPSBwYXJhbXMucG9zaXRpb24uYWx0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIC8vIHRoaXMub3B0aW9ucy5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIC8vIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgIC8vICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgIC8vICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAvLyAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAvLyAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbnMubG5nXHJcbiAgICAvLyAgICAgdGhpcy5sYXQgPSBwb3NpdGlvbnMubGF0XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgLy8gICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgLy8gICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLmxuZyA9IHRoaXMubG5nID0gcG9zaXRpb25zLmxuZ1xyXG4gICAgLy8gICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLmxhdCA9IHRoaXMubGF0ID0gcG9zaXRpb25zLmxhdFxyXG4gICAgLy8gICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAvLyAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgIC8vICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgIC8vICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgIC8vICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5waWNraW5nID0gdHJ1ZVxyXG4gICAgLy8gICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgLy8gICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgLy8gICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgIC8vICAgdGhpcy5sbmcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sbmdcclxuICAgIC8vICAgdGhpcy5sYXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYXRcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCBwb3NpdGlvbkVkaXRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5Db250cm9sbGVyT2JqZWN0LmdldEFjdGl2ZVN0YXRlKCkgPT09ICd0cmFuc2xhdGlvbmFsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBnZXQgbG5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sbmdcclxuICB9XHJcbiAgc2V0IGxuZyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubG5nID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3YsIHRoaXMubGF0LCB0aGlzLmFsdCArIHRoaXMucmFkaXVzXVxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIFJhZGFyU2NhblN0ZXJlb3Njb3BpYy5jaGFuZ2VQYXJhbSh0aGlzKVxyXG4gIH1cclxuICBnZXQgbGF0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYXRcclxuICB9XHJcbiAgc2V0IGxhdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGF0ID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMubG5nLCB2LCB0aGlzLmFsdCArIHRoaXMucmFkaXVzXVxyXG4gICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIFJhZGFyU2NhblN0ZXJlb3Njb3BpYy5jaGFuZ2VQYXJhbSh0aGlzKVxyXG4gIH1cclxuICBnZXQgYWx0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbHRcclxuICB9XHJcbiAgc2V0IGFsdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYWx0ID0gTnVtYmVyKHYpXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMubG5nLCB0aGlzLmxhdCwgdiArIHRoaXMucmFkaXVzXVxyXG4gICAgdGhpcy5fZWxtcy5hbHQgJiYgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIFJhZGFyU2NhblN0ZXJlb3Njb3BpYy5jaGFuZ2VQYXJhbSh0aGlzKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJhZGl1cygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmFkaXVzXHJcbiAgfVxyXG4gIHNldCByYWRpdXModikge1xyXG4gICAgbGV0IHJhZGl1cyA9IE51bWJlcih2LnRvRml4ZWQoMikpXHJcbiAgICBpZihyYWRpdXMgPiA5OTk5OTkpIHtcclxuICAgICAgcmFkaXVzID0gOTk5OTk5XHJcbiAgICB9XHJcbiAgICBpZihyYWRpdXMgPCAwLjEpIHtcclxuICAgICAgcmFkaXVzID0gMC4xXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMucmFkaXVzID0gcmFkaXVzXHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMubG5nLCB0aGlzLmxhdCwgdGhpcy5hbHQgKyB2XVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50KSB7XHJcbiAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGlmICh1bml0RGF0YUxlZ3BFbG0udmFsdWUgPT09ICfljYPnsbMnKSB7XHJcbiAgICAgICAgcmFkaXVzID0gTnVtYmVyKChyYWRpdXMgLyAxMDAwKS50b0ZpeGVkKDUpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZWxtcy5yYWRpdXMgJiYgdGhpcy5fZWxtcy5yYWRpdXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gcmFkaXVzXHJcbiAgICB9KVxyXG4gICAgUmFkYXJTY2FuU3RlcmVvc2NvcGljLmNoYW5nZVBhcmFtKHRoaXMpXHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uXHJcbiAgfVxyXG4gIHNldCBkdXJhdGlvbih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZHVyYXRpb24gPSB2XHJcbiAgICB0aGlzLl9lbG1zLmR1cmF0aW9uICYmIHRoaXMuX2VsbXMuZHVyYXRpb24uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIFJhZGFyU2NhblN0ZXJlb3Njb3BpYy5jaGFuZ2VQYXJhbSh0aGlzKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yT3V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvck91dFxyXG4gIH1cclxuICBzZXQgY29sb3JPdXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yT3V0ID0gdlxyXG4gICAgdGhpcy5lbnRpdHkuZWxsaXBzb2lkLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgdGhpcy5lbnRpdHkuZWxsaXBzb2lkLm91dGxpbmVDb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodilcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yT3V0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3JPdXQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3JPdXQgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yT3V0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yT3V0W2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2xvckluKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvckluXHJcbiAgfVxyXG4gIHNldCBjb2xvckluKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvckluID0gdlxyXG4gICAgdGhpcy5lbnRpdHkud2FsbC5tYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodilcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9ySW4pIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvckluLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9ySW4gPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9ySW4gPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JJbltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93ICYmICF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaW5zdHJ1Y3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluc3RydWN0XHJcbiAgfVxyXG4gIHNldCBpbnN0cnVjdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaW5zdHJ1Y3QgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmluc3RydWN0ICYmIHRoaXMuX2VsbXMuaW5zdHJ1Y3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBvcGVyYXRpbmdQb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcbiAgc2V0IG9wZXJhdGluZ1BvaW50KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHZcclxuICAgIHRoaXMuX2VsbXMub3BlcmF0aW5nUG9pbnQgJiYgdGhpcy5fZWxtcy5vcGVyYXRpbmdQb2ludC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVUeXBlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlICYmIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNvbnRlbnQgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudCcpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB2KSA+IC0xKSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlTGluayh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHIgPSBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRWRpdFwiPue8lui+kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIGxpbmtFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGxpbmtEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8IWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlSVNDKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVJU0Modikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWUgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8IWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZSBcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+eri+S9k+mbt+i+vuaJq+aPj+WxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSwgYWx0OiB0aGlzLm9wdGlvbnMuYWx0ICsgdGhpcy5vcHRpb25zLnJhZGl1cyB9XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdXHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKHRoaXMub3B0aW9ucylcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSAhdGhpcy5wb3NpdGlvbkVkaXRpbmdcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgcmFkYXItc2Nhbi1zdGVyZW9zY29waWMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUlTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdyYWRhci1zY2FuLWVkaXQtdGFicycsIHVuZGVmaW5lZCwgdGhpcy5zZGspXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JPdXRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yT3V0XCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yT3V0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvck91dCA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yT3V0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgY29sb3JJblBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY29sb3JJblwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvckluLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvckluID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3JJbiA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yT3V0ID0gW2NvbG9yT3V0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9ySW4gPSBbY29sb3JJblBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yID0gW2xhYmVsQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IgPSBbbGluZUNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IFtsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlcl1cclxuXHJcbiAgICAgIGxldCBpbnB1dFJhZGl1c0VsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cycpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGlucHV0UmFkaXVzRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLnJhZGl1c1xyXG4gICAgICB0aGlzLl9lbG1zLnJhZGl1cyA9IFtpbnB1dFJhZGl1c0VsbV1cclxuICAgICAgaW5wdXRSYWRpdXNFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB1bml0RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMtdW5pdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgbGV0IHVuaXQgPSB1bml0RGF0YUxlZ3BFbG0udmFsdWVcclxuICAgICAgICBpZiAoZS50YXJnZXQudmFsdWUgfHwgZS50YXJnZXQudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAoKCghZS50YXJnZXQubWF4KSAmJiAoIWUudGFyZ2V0Lm1pbikpIHx8ICgodmFsdWUgPD0gKE51bWJlcihlLnRhcmdldC5tYXgpIC8gKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApKSkgJiYgdmFsdWUgPj0gTnVtYmVyKGUudGFyZ2V0Lm1pbikpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSB2YWx1ZSAqICh1bml0ID09PSAn57GzJyA/IDEgOiAxMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpbnB1dFJhZGl1c0VsbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgICBsZXQgdW5pdERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzLXVuaXQnKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgIGxldCB1bml0ID0gdW5pdERhdGFMZWdwRWxtLnZhbHVlXHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlIHx8IGUudGFyZ2V0LnZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiAoTnVtYmVyKGUudGFyZ2V0Lm1heCkgLyAodW5pdCA9PT0gJ+exsycgPyAxIDogMTAwMCkpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gKE51bWJlcihlLnRhcmdldC5tYXgpIC8gKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yYWRpdXMgPSBOdW1iZXIoKHZhbHVlICogKHVuaXQgPT09ICfnsbMnID8gMSA6IDEwMDApKS50b0ZpeGVkKDIpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIHRoaXMuSVNDU2VsZWN0ICYmIHRoaXMuSVNDU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICBsZXQgdGFnRGF0YSA9IHRoaXMuYXR0cmlidXRlU2VsZWN0XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QtYm94JylbMF1cclxuICAgICAgICBpZiAoYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgICBsZXQgbGVncE9iamVjdCA9IGxlZ3AoYXR0cmlidXRlRWxtLCBcIi5hdHRyaWJ1dGUtc2VsZWN0XCIpXHJcbiAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gYXR0cmlidXRlRWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0ua2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSkge1xyXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSA9IHRhZ0RhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHRhZ0RhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGFnRGF0YVtpXS52YWx1ZSA9PT0gYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0YWdEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdW5pdERhdGEgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+exsydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICfljYPnsbMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogJ+WNg+exsydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtcmFkaXVzLXVuaXQtYm94JylbMF1cclxuICAgICAgICBpZiAodW5pdERhdGFFbG0pIHtcclxuICAgICAgICAgIGxldCB1bml0RGF0YUxlZ3BPYmplY3QgPSBsZWdwKHVuaXREYXRhRWxtLCBcIi5pbnB1dC1yYWRpdXMtdW5pdFwiKVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXJhZGl1cy11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHVuaXREYXRhWzBdLnZhbHVlXHJcbiAgICAgICAgICB1bml0RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByYWRpdXNFbG1Cb3ggPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1yYWRpdXMnKVswXVxyXG4gICAgICAgICAgICBsZXQgdW5pdEVsbSA9IHJhZGl1c0VsbUJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bml0JylbMF1cclxuICAgICAgICAgICAgbGV0IHJhZGl1c0VsbSA9IHJhZGl1c0VsbUJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAn57GzJzpcclxuICAgICAgICAgICAgICAgIGlmICh1bml0RWxtLmlubmVySFRNTCA9PT0gJ2ttJykge1xyXG4gICAgICAgICAgICAgICAgICB1bml0RWxtLmlubmVySFRNTCA9ICdtJ1xyXG4gICAgICAgICAgICAgICAgICByYWRpdXNFbG0udmFsdWUgPSBOdW1iZXIoKHJhZGl1c0VsbS52YWx1ZSAqIDEwMDApLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ+WNg+exsyc6XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pdEVsbS5pbm5lckhUTUwgPT09ICdtJykge1xyXG4gICAgICAgICAgICAgICAgICB1bml0RWxtLmlubmVySFRNTCA9ICdrbSdcclxuICAgICAgICAgICAgICAgICAgcmFkaXVzRWxtLnZhbHVlID0gTnVtYmVyKChyYWRpdXNFbG0udmFsdWUgLyAxMDAwKS50b0ZpeGVkKDUpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2hhbmdlUGFyYW0odGhhdCkge1xyXG5cclxuICB9XHJcblxyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHRoaXMub3B0aW9ucy5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhdCB9KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxuZywgdGhpcy5vcHRpb25zLmxhdCwgdGhpcy5vcHRpb25zLnJhZGl1cyAqIDYgKyBoZWlnaHQpLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHVyYXRpb246IDEsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMubG5nID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubG5nXHJcbiAgICB0aGlzLmxhdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhdFxyXG4gICAgdGhpcy5hbHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hbHRcclxuICAgIHRoaXMuY29sb3JPdXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5jb2xvck91dFxyXG4gICAgdGhpcy5jb2xvckluID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JJblxyXG4gICAgdGhpcy5yYWRpdXMgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5yYWRpdXNcclxuICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5kdXJhdGlvblxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmluc3RydWN0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3RcclxuICAgIHRoaXMub3BlcmF0aW5nUG9pbnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVJU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50XHJcbiAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIGluc3RydWN0U3VibWl0KCkge1xyXG4gICAgdGhpcy5EaWFsb2cuaW5zdHJ1Y3RTdWJtaXQgJiYgdGhpcy5EaWFsb2cuaW5zdHJ1Y3RTdWJtaXQodGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubGFiZWwudGV4dCwgdGhpcy5pbnN0cnVjdClcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLmluc3RydWN0ID0gdGhpcy5pbnN0cnVjdFxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW5nUG9pbnRTdWJtaXQoKSB7XHJcbiAgICB0aGlzLkRpYWxvZy5vcGVyYXRpbmdQb2ludFN1Ym1pdCAmJiB0aGlzLkRpYWxvZy5vcGVyYXRpbmdQb2ludFN1Ym1pdCh0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0LCB0aGlzLm9wZXJhdGluZ1BvaW50KVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSB0aGlzLm9wZXJhdGluZ1BvaW50XHJcbiAgfVxyXG5cclxuICBfYWRkTGluaygpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmsobGluaykge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICB1cmw6IGxpbmtcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgX2FkZFJyKCkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkRpYWxvZy5jbGlja0FkZFZyICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlUnIodnIpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRESVYob3B0aW9ucyA9IHsgZG9taWQ6IFwiXCIsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSAob3B0aW9ucy54IHx8IG9wdGlvbnMueCA9PT0gMCkgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gKG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDApID8gb3B0aW9ucy55IDogMTBcclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5sbmcsIHRoaXMub3B0aW9ucy5sYXQsIHRoaXMub3B0aW9ucy5hbHQgKyB0aGlzLm9wdGlvbnMucmFkaXVzKVxyXG5cclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIoKHBlcmNlbnRhZ2UpID0+IHtcclxuICAgICAgLy/ovazmjaLliLDlsY/luZXlnZDmoIdcclxuICAgICAgaWYgKHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycgfHwgc2l0ZUluZm9Eb20uc3R5bGUuZGlzcGxheSA9PT0gJycpIHtcclxuICAgICAgICBsZXQgd2lucG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNhcnRlc2lhblRvQ2FudmFzQ29vcmRpbmF0ZXMoc2l0ZUluZm9Qb3NpdGlvbik7XHJcbiAgICAgICAgaWYgKHdpbnBvcykge1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUubGVmdCA9ICh3aW5wb3MueCArIG9wdGlvbnMueCkudG9GaXhlZCgwKSArICdweCc7XHJcbiAgICAgICAgICBzaXRlSW5mb0RvbS5zdHlsZS50b3AgPSAod2lucG9zLnkgKyBvcHRpb25zLnkpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYWRhclNjYW5TdGVyZW9zY29waWNcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBc01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF2Q0E7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFoU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFsRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFWQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF6MUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBOUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeWlDQTtBQUFBO0FBME1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/RadarScanStereoscopic/index.js\n"); /***/ }), /***/ "./src/Obj/Base/RoadObject/_element.js": /*!*********************************************!*\ !*** ./src/Obj/Base/RoadObject/_element.js ***! \*********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n \\u9053\\u8DEF\\u7C7B\\u578B\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\u8F66\\u9053\\u5BBD\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n \\u4EBA\\u884C\\u9053\\u5BBD\\u5EA6\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUm9hZE9iamVjdC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Sb2FkT2JqZWN0L19lbGVtZW50LmpzPzI4MWQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbCgpIHtcclxuICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgcm9hZC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPumBk+i3r+exu+Weizwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2FkLXR5cGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovabpgZPlrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1heD1cIjk5OTk5XCIgbWluPVwiMVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwiY2FyUm9hZFdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuS6uuihjOmBk+WuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWF4PVwiOTk5OTlcIiBtaW49XCIxXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzaWRlV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQW1DQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/RoadObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/RoadObject/index.js": /*!******************************************!*\ !*** ./src/Obj/Base/RoadObject/index.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/RoadObject/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 道路\r\n */\n\n\n\n\n\n\n\nvar Road = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 道路\r\n * @param options {object} 道路属性\r\n * @param options.name=未命名对象 {string} 名称\r\n * @param options.carRoadWidth=2 {number} 车道宽度\r\n * @param options.sideWidth=2 {number} 人行道宽度\r\n * @param options.positions=[] {array} 道路positions\r\n * @param options.roadImage='' {string} 车道贴图\r\n * @param options.sideImage='' {string} 人行道贴图\r\n * @param Dialog {object} 弹框对象\r\n * @param Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function Road(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Road);\n _this2 = _callSuper(this, Road, [sdk, options]);\n _this2.viewer = _this2.sdk.viewer;\n _this2.options.name = options.name || '道路';\n _this2.options.carRoadWidth = options.carRoadWidth || 10;\n _this2.options.sideWidth = options.sideWidth || 5;\n _this2.options.positions = options.positions || [];\n _this2.options.roadImage = options.roadImage || _this2.getSourceRootPath() + '/img/roadPhoto.png';\n _this2.options.sideImage = options.sideImage || _this2.getSourceRootPath() + '/img/sidePhoto.png';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n _this2._elms = {};\n _this2.positionArea = [];\n _this2.positions = [];\n _this2.lineEntity = '';\n _this2.crossArr = [];\n _this2.pointArr = [];\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n // Road.create(this)\n // console.log('1212')\n function createCustomCorridor(viewer, positions, width) {\n // 计算两侧顶点位置\n var leftPositions = [];\n var rightPositions = [];\n var topPositions = [];\n\n // 生成两侧和顶部顶点\n for (var i = 0; i < positions.length; i++) {\n var position = positions[i];\n var nextPosition = positions[i + 1];\n if (!nextPosition) continue;\n\n // 计算方向向量\n var direction = Cesium.Cartesian3.subtract(nextPosition, position, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(direction, direction);\n\n // 计算垂直向量\n var normal = Cesium.Cartesian3.cross(direction, Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(normal, normal);\n\n // 计算两侧偏移量\n var offset = Cesium.Cartesian3.multiplyByScalar(normal, width / 2, new Cesium.Cartesian3());\n\n // 左侧点\n var left = Cesium.Cartesian3.add(position, offset, new Cesium.Cartesian3());\n leftPositions.push(left.x, left.y, left.z);\n\n // 右侧点\n var right = Cesium.Cartesian3.subtract(position, offset, new Cesium.Cartesian3());\n rightPositions.push(right.x, right.y, right.z);\n\n // 顶部点(高度增加)\n var top = Cesium.Cartesian3.clone(position);\n top.z += 100; // 设置顶部高度\n topPositions.push(top.x, top.y, top.z);\n }\n\n // 合并所有顶点\n var allPositions = new Float64Array([].concat(leftPositions, rightPositions, topPositions));\n\n // 创建几何体\n var geometry = new Cesium.Geometry({\n attributes: {\n position: new Cesium.GeometryAttribute({\n componentDatatype: Cesium.ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: allPositions\n })\n },\n indices: new Uint16Array([\n // 左侧面索引\n 0, 1, 3, 1, 4, 3,\n // 右侧面索引\n 2, 5, 6, 2, 6, 7,\n // 顶面索引\n 8, 9, 10, 8, 10, 11]),\n primitiveType: Cesium.PrimitiveType.TRIANGLES,\n boundingSphere: Cesium.BoundingSphere.fromVertices(allPositions)\n });\n\n // 创建图元\n var primitive = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: geometry\n }),\n appearance: new Cesium.PerInstanceColorAppearance({\n flat: true,\n translucent: false\n }),\n asynchronous: false\n });\n viewer.scene.primitives.add(primitive);\n return primitive;\n }\n\n // 使用示例\n var positions = Cesium.Cartesian3.fromDegreesArray([-75.0, 39.0, -74.5, 39.5, -74.0, 40.0]);\n createCustomCorridor(_this2.sdk.viewer, positions, 1000);\n _this2.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(-75.0, 39.0, 100)\n // orientation: {\n // heading: Cesium.Math.toRadians(0),\n // pitch: Cesium.Math.toRadians(-30),\n // roll: 0.0\n // }\n });\n return _this2;\n }\n // 创建走廊几何体\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(Road, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Road, [{\n key: \"createCorridor\",\n value: function createCorridor(myImg) {\n var positions = Cesium.Cartesian3.fromDegreesArray([116.391, 39.907,\n // 北京\n 116.404, 39.914, 116.417, 39.921, 116.430, 39.928]);\n var corridorInstance = new Cesium.GeometryInstance({\n geometry: new Cesium.CorridorGeometry({\n positions: positions,\n width: 200.0,\n vertexFormat: Cesium.VertexFormat.POSITION_AND_ST,\n cornerType: Cesium.CornerType.ROUNDED\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)\n }\n });\n var primitive = new Cesium.Primitive({\n geometryInstances: corridorInstance,\n appearance: new Cesium.MaterialAppearance({\n material: new Cesium.Material({\n fabric: {\n type: 'Image',\n uniforms: {\n image: myImg\n }\n }\n }),\n translucent: false\n }),\n asynchronous: false\n });\n this.sdk.viewer.scene.primitives.add(primitive);\n\n // 定位到走廊\n this.sdk.viewer.camera.flyTo({\n destination: Cesium.Cartesian3.fromDegrees(116.404, 39.914, 2000),\n orientation: {\n heading: Cesium.Math.toRadians(0),\n pitch: Cesium.Math.toRadians(-30),\n roll: 0.0\n }\n });\n return primitive;\n }\n // 创建道路\n }, {\n key: \"getSideRectangle\",\n value: function getSideRectangle(positions, width) {\n var right = [];\n var left = [];\n var that = this;\n positions.forEach(function (item) {\n right.push([item[0], item[1]]);\n left.push([item[2], item[3]]);\n });\n var rightPosi = that.getRectangle(right, width, 'side');\n var leftPosi = this.getRectangle(left, width, 'side');\n return {\n left: leftPosi,\n right: rightPosi\n };\n }\n }, {\n key: \"getRectangle\",\n value: function getRectangle(positions, width, type) {\n var areaArr = [];\n var newPositions = [];\n var that = this;\n // for (let i = 0; i < positions.length - 1; i++) {\n var _loop = function _loop() {\n var start = positions[i][0];\n var end = positions[i][1];\n areaArr[i] = [];\n var posi = [];\n var Outlinegeometry = new Cesium.CorridorGeometry({\n positions: [start, end],\n width: width,\n cornerType: Cesium.CornerType.MITERED,\n vertexFormat: Cesium.MaterialAppearance.MaterialSupport.ALL.vertexFormat\n });\n var geometry = Cesium.CorridorGeometry.createGeometry(Outlinegeometry);\n for (var j = 0; j < geometry.attributes.position.values.length; j += 3) {\n var val = that.cartesian3Towgs84(new Cesium.Cartesian3(geometry.attributes.position.values[j], geometry.attributes.position.values[j + 1], geometry.attributes.position.values[j + 2]), that.sdk.viewer);\n posi.push([val.lng, val.lat]);\n }\n for (var x = 0; x < geometry.indices.length; x += 3) {\n areaArr[i].push(turf.polygon([[posi[geometry.indices[x]], posi[geometry.indices[x + 1]], posi[geometry.indices[x + 2]], posi[geometry.indices[x]]]]));\n }\n var geojson = turf.union(areaArr[i][0], areaArr[i][1]);\n var arr = [];\n geojson.geometry.coordinates[0].pop();\n geojson.geometry.coordinates[0].forEach(function (item) {\n arr.push(new Cesium.Cartesian3.fromDegrees(item[0], item[1]));\n });\n var dotResult, angle;\n var tempVec = new Cesium.Cartesian3();\n\n // 计算并归一化第一个向量\n var vector1 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(that.pointArr[i][1], that.pointArr[i][0], tempVec), tempVec);\n\n // 计算并归一化第二个向量\n var vector2 = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(arr[1], arr[0], new Cesium.Cartesian3()), new Cesium.Cartesian3());\n dotResult = Cesium.Cartesian3.dot(vector1, vector2);\n if (0.999 < dotResult && dotResult < 1.001 || -0.999 > dotResult && dotResult > -1.001) {\n //调整方向\n newPositions.push(arr);\n } else {\n var newArr = [];\n newArr[0] = arr[1];\n newArr[1] = arr[2];\n newArr[2] = arr[3];\n newArr[3] = arr[0];\n newPositions.push(newArr);\n }\n // }\n\n // if (!type) {\n // // if (cross > 0 && !type) {//调整方向\n // if ((0.999 < dotResult && dotResult < 1.001) || (-0.999 > dotResult && dotResult > -1.001)) {//调整方向\n // newPositions.push(arr)\n // } else {\n // let newArr = []\n // newArr[0] = arr[1]\n // newArr[1] = arr[2]\n // newArr[2] = arr[3]\n // newArr[3] = arr[0]\n // newPositions.push(newArr)\n // }\n // } else {\n // newPositions.push(arr)\n // }\n };\n for (var i = 0; i < positions.length; i++) {\n _loop();\n }\n return newPositions;\n }\n }, {\n key: \"getExtendPoint\",\n value: function getExtendPoint(position1, position2, distance) {\n // let position1 = Cesium.Cartesian3.fromDegrees(p1[0], p1[1], 0);\n // let position2 = Cesium.Cartesian3.fromDegrees(p2[0], p2[1], 0);\n var pot = Cesium.Cartesian3.subtract(position2, position1, new Cesium.Cartesian3()); //方向\n var dir = Cesium.Cartesian3.normalize(pot, new Cesium.Cartesian3()); //向量归一化\n\n var ray = new Cesium.Ray(position1, dir);\n var np = Cesium.Ray.getPoint(ray, distance * 10); //计算延长点\n return np;\n }\n }, {\n key: \"getArr\",\n value: function getArr(arr1, arr2) {\n arr2 = arr2.reverse();\n var polygon = [];\n for (var index = 0; index < arr1.length - 1; index++) {\n polygon.push([arr1[index], arr1[index + 1], arr2[index + 1], arr2[index]]);\n }\n return polygon;\n }\n }, {\n key: \"calculateRoadAngle2\",\n value: function calculateRoadAngle2(startPoint, endPoint) {\n // 1. 获取地表法向量\n var normal = this.sdk.viewer.scene.globe.ellipsoid.geodeticSurfaceNormal(startPoint, new Cesium.Cartesian3());\n\n // 2. 构建带椭球参数的ENU矩阵\n var enuMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(startPoint, this.sdk.viewer.scene.globe.ellipsoid, normal);\n var inverseMatrix = Cesium.Matrix4.inverse(enuMatrix, new Cesium.Matrix4());\n\n // 3. 转换坐标并计算相对向量\n var localEnd = Cesium.Matrix4.multiplyByPoint(inverseMatrix, endPoint, new Cesium.Cartesian3());\n var heightFactor = Math.abs(localEnd.z) / 1000; // 高度差补偿\n\n // 4. 使用四象限反正切计算角度\n var angle = Math.atan2(localEnd.y, localEnd.x);\n var adjustedAngle = angle - heightFactor * 0.01; // 高度补偿\n var result = Cesium.Math.toDegrees(adjustedAngle);\n console.log(result, 'result');\n return result;\n }\n }, {\n key: \"calculateRoadAngle\",\n value: function calculateRoadAngle(startPoint, endPoint) {\n // 1. 获取地表法向量\n var normal = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal(startPoint);\n\n // 2. 构建精确ENU坐标系\n var enuMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(startPoint, undefined, normal);\n var inverseMatrix = Cesium.Matrix4.inverse(enuMatrix, new Cesium.Matrix4());\n\n // 3. 转换终点并计算水平向量\n var localEnd = Cesium.Matrix4.multiplyByPoint(inverseMatrix, endPoint, new Cesium.Cartesian3());\n var horizontalVec = new Cesium.Cartesian2(localEnd.x, localEnd.y);\n Cesium.Cartesian2.normalize(horizontalVec, horizontalVec);\n var north = new Cesium.Cartesian2(1, 0);\n var angle = Cesium.Cartesian2.angleBetween(north, horizontalVec);\n var cross = Cesium.Cartesian2.cross(north, horizontalVec, new Cesium.Cartesian2());\n return cross < 0 ? angle : -angle;\n }\n }, {\n key: \"calculatePolygonOrientation\",\n value: function calculatePolygonOrientation(positions) {\n // 假设 position 是 Cesium.Cartesian3 对象,表示地球上的某个点\n var position = positions[0];\n // 获取东、北、上坐标系\n var eastNorthUp = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n // northAxis 是北方向向量\n var northAxis = eastNorthUp.getColumn(1, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(northAxis, northAxis);\n var direction = Cesium.Cartesian3.subtract(positions[0], positions[1], new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(direction, direction);\n var dot = Cesium.Cartesian3.dot(northAxis, direction);\n var magA = Cesium.Cartesian3.magnitude(northAxis);\n var magB = Cesium.Cartesian3.magnitude(direction);\n return Math.acos(dot / (magA * magB));\n }\n }, {\n key: \"calculateTextureRepeat\",\n value: function calculateTextureRepeat(polygonPositions, textureSize) {\n var meterPerPixel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.01;\n // 验证纹理尺寸\n if (!textureSize.width || !textureSize.height) {\n throw new Error('Texture size must contain width and height in pixels');\n }\n\n // 创建多边形几何体\n var geometry = Cesium.PolygonGeometry.createGeometry(new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(polygonPositions),\n vertexFormat: Cesium.VertexFormat.POSITION_ONLY\n }));\n\n // 计算多边形面积(平方米)\n var area = 0;\n var indices = geometry.indices;\n var positions = geometry.attributes.position.values;\n for (var i = 0; i < indices.length; i += 3) {\n var i0 = indices[i] * 3;\n var i1 = indices[i + 1] * 3;\n var i2 = indices[i + 2] * 3;\n var p0 = new Cesium.Cartesian3(positions[i0], positions[i0 + 1], positions[i0 + 2]);\n var p1 = new Cesium.Cartesian3(positions[i1], positions[i1 + 1], positions[i1 + 2]);\n var p2 = new Cesium.Cartesian3(positions[i2], positions[i2 + 1], positions[i2 + 2]);\n var cross = Cesium.Cartesian3.cross(Cesium.Cartesian3.subtract(p1, p0, new Cesium.Cartesian3()), Cesium.Cartesian3.subtract(p2, p0, new Cesium.Cartesian3()), new Cesium.Cartesian3());\n area += Cesium.Cartesian3.magnitude(cross) * 0.5;\n }\n\n // 将像素尺寸转换为实际尺寸(平方米)\n var textureWidthMeters = textureSize.width * meterPerPixel;\n var textureHeightMeters = textureSize.height * meterPerPixel;\n var textureArea = textureWidthMeters * textureHeightMeters;\n\n // 计算各轴向重复次数\n var repeatX = Math.sqrt(area) / textureWidthMeters;\n var repeatY = Math.sqrt(area) / textureHeightMeters;\n return new Cesium.Cartesian2(Math.max(1, Math.ceil(repeatX)), 1.0);\n }\n }, {\n key: \"swapLastElements\",\n value: function swapLastElements(arr1, arr2) {\n var last = arr1[arr1.length - 1];\n var first = arr2[0];\n arr1[arr1.length - 1] = first;\n arr2[0] = last;\n return [arr1, arr2];\n }\n }, {\n key: \"createLineBufferPolygonSide\",\n value: function createLineBufferPolygonSide(positions, width) {\n var area = [];\n for (var i = 0; i < positions.length; i++) {\n var posi = positions[i];\n var dir = Cesium.Cartesian3.subtract(posi[1], posi[0], new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(dir, dir);\n\n // 获取垂直向量(基于Z轴)\n var perp = Cesium.Cartesian3.cross(dir, Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(perp, perp);\n\n // 生成偏移向量\n var offset = Cesium.Cartesian3.multiplyByScalar(perp, width, new Cesium.Cartesian3());\n var point1 = Cesium.Cartesian3.add(posi[0], offset, new Cesium.Cartesian3());\n var point3 = Cesium.Cartesian3.add(posi[1], offset, new Cesium.Cartesian3());\n\n // i == positions.length - 2 ? area.push(start, point1, end, point3) : area.push(start, point1)\n area.push([posi[0], point1, point3, posi[1]]);\n }\n // let arr = []\n // for (let i = 0; i < area.length - 2; i += 2) {\n // arr.push([area[i], area[i + 1], area[i + 3], area[i + 2]])\n // }\n return area;\n }\n }, {\n key: \"createLineBufferPolygon2\",\n value: function createLineBufferPolygon2(positions, width) {\n var area = [];\n var leftPositions = [];\n var rightPositions = [];\n for (var i = 0; i < positions.length - 1; i++) {\n var start = positions[i];\n // const end = positions[i + 1] || positions[i - 1];\n var end = positions[i + 1];\n var dir = Cesium.Cartesian3.subtract(end, start, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(dir, dir);\n\n // 获取垂直向量(基于Z轴)\n var perp = Cesium.Cartesian3.cross(dir, Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(perp, perp);\n var dir2 = Cesium.Cartesian3.subtract(start, end, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(dir2, dir2);\n\n // 获取垂直向量(基于Z轴)\n var perp2 = Cesium.Cartesian3.cross(dir2, Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(perp2, perp2);\n\n // 生成偏移向量\n var offset = Cesium.Cartesian3.multiplyByScalar(perp, width, new Cesium.Cartesian3());\n var offset2 = Cesium.Cartesian3.multiplyByScalar(perp, -width, new Cesium.Cartesian3());\n var offsetEnd = Cesium.Cartesian3.multiplyByScalar(perp2, -width, new Cesium.Cartesian3());\n var offsetEnd2 = Cesium.Cartesian3.multiplyByScalar(perp2, width, new Cesium.Cartesian3());\n var point1 = Cesium.Cartesian3.add(start, offset, new Cesium.Cartesian3());\n var point2 = Cesium.Cartesian3.add(start, offset2, new Cesium.Cartesian3());\n var point3 = Cesium.Cartesian3.add(end, offsetEnd, new Cesium.Cartesian3());\n var point4 = Cesium.Cartesian3.add(end, offsetEnd2, new Cesium.Cartesian3());\n area.push([point1, point3, point4, point2]);\n rightPositions.push([point1, point3]);\n leftPositions.push([point2, point4]);\n\n // if (i == positions.length - 2) {\n // area.push(point1, point2, point3, point4)\n // rightPositions.push(point1)\n // leftPositions.push(point2)\n // leftPositions.push(point4)\n // rightPositions.push(point3)\n // } else {\n // area.push(point1, point2)\n // rightPositions.push(point1)\n // leftPositions.push(point2)\n // }\n }\n // let arr = []\n // for (let i = 0; i < area.length - 2; i += 2) {\n // arr.push([area[i], area[i + 1], area[i + 3], area[i + 2]])\n // }\n console.log(area, rightPositions, 'rightPositions');\n var that = this;\n // return [arr, rightPositions, leftPositions]\n return [area, rightPositions, leftPositions];\n }\n }, {\n key: \"getIntersects\",\n value: function getIntersects(point1, point2, point3, point4) {\n var carPoint1 = this.getLonLat(point1);\n var carPoint2 = this.getLonLat(point2);\n var carPoint3 = this.getLonLat(point3);\n var carPoint4 = this.getLonLat(point4);\n var line1 = turf.lineString([[carPoint1.lon, carPoint1.lat], [carPoint2.lon, carPoint2.lat]]);\n var line2 = turf.lineString([[carPoint3.lon, carPoint3.lat], [carPoint4.lon, carPoint4.lat]]);\n var intersects = turf.lineIntersect(line1, line2);\n if (intersects.features.length > 0) {\n return Cesium.Cartesian3.fromDegrees(intersects.features[0].geometry.coordinates[0], intersects.features[0].geometry.coordinates[1]);\n }\n }\n }, {\n key: \"getLonLat\",\n value: function getLonLat(point) {\n var pointDe = Cesium.Cartographic.fromCartesian(point);\n var longitude = Cesium.Math.toDegrees(pointDe.longitude);\n var latitude = Cesium.Math.toDegrees(pointDe.latitude);\n return {\n lon: longitude,\n lat: latitude\n };\n }\n }, {\n key: \"createLineBufferPolygon\",\n value: function createLineBufferPolygon(viewer, positions, width) {\n // 计算每个线段的左右偏移点\n var leftPositions = [];\n var rightPositions = [];\n for (var i = 0; i < positions.length; i++) {\n var start = positions[i];\n var end = positions[i + 1] || positions[i - 1];\n\n // 计算线段方向向量\n var direction = Cesium.Cartesian3.subtract(end, start, new Cesium.Cartesian3());\n // const direction = Cesium.Cartesian3.subtract(start, end, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(direction, direction);\n\n // 计算垂直向量(使用上向量叉积)\n var up = Cesium.Cartesian3.UNIT_Z;\n var perpendicular = Cesium.Cartesian3.cross(direction, up, new Cesium.Cartesian3());\n Cesium.Cartesian3.normalize(perpendicular, perpendicular);\n\n // 计算左右偏移点\n var leftOffset = Cesium.Cartesian3.multiplyByScalar(perpendicular, width, new Cesium.Cartesian3());\n if (width > 0) {\n rightPositions.unshift(Cesium.Cartesian3.add(start, leftOffset, new Cesium.Cartesian3()));\n } else if (width < 0) {\n rightPositions.push(Cesium.Cartesian3.add(start, leftOffset, new Cesium.Cartesian3()));\n }\n }\n return rightPositions;\n }\n //计算角度\n }, {\n key: \"calculateAangle\",\n value: function calculateAangle(arr) {\n // let fromDegreesArray = that.calSector(that.options.center, that.options.radius, that.options.startAngle, that.options.endAngle, 360, true)\n\n function getAangle(start, end) {\n var rad = Math.PI / 180,\n lat1 = start.y * rad,\n lat2 = end.y * rad,\n lon1 = start.x * rad,\n lon2 = end.x * rad;\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n var radians = Math.atan2(a, b);\n var degrees = radians % (2 * Math.PI);\n var bearing = 450 - (degrees * 180 / Math.PI < 0 ? 360 + degrees * 180 / Math.PI : degrees * 180 / Math.PI) - 90;\n return 360 - bearing % 360;\n }\n var center = arr[0];\n var pos84_1 = arr[1];\n var pos84_2 = arr[2];\n var start = {\n x: center.lng,\n y: center.lat\n };\n var end1 = {\n x: pos84_1.lng,\n y: pos84_1.lat\n };\n var end2 = {\n x: pos84_2.lng,\n y: pos84_2.lat\n };\n var angle1 = getAangle(start, end1);\n var angle2 = getAangle(start, end2);\n return {\n angle1: angle1,\n angle2: angle2\n };\n }\n }, {\n key: \"carRoadWidth\",\n get: function get() {\n return this.options.carRoadWidth;\n },\n set: function set(v) {\n this.options.carRoadWidth = v;\n Road.create(this);\n }\n }, {\n key: \"sideWidth\",\n get: function get() {\n return this.options.sideWidth;\n },\n set: function set(v) {\n this.options.sideWidth = v;\n Road.create(this);\n }\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var _this3 = this;\n var state,\n _this,\n contentElm,\n all_elm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = _args.length > 0 && _args[0] !== undefined ? _args[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 17;\n break;\n }\n _context.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk, this.originalOptions, {\n title: '道路属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this3.name = _this3.name.trim();\n if (!_this3.name) {\n _this3.name = '道路';\n }\n _this3.originalOptions = _this3.deepCopyObj(_this3.options);\n _this3._DialogObject.close();\n _this3.Dialog.confirmCallBack && _this3.Dialog.confirmCallBack(_this3.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(_this3.sdk, _this3.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(_this3.sdk, _this3.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this3.reset();\n _this3.Dialog.resetCallBack && _this3.Dialog.resetCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this3.reset();\n _this3.Dialog.closeCallBack && _this3.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this3.show = show;\n _this3.Dialog.showCallBack && _this3.Dialog.showCallBack();\n }\n }, true);\n case 7:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' road-surface';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_9__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n\n // 下拉选项\n // let heightModeData = [\n // {\n // name: '海拔高度',\n // value: '海拔高度',\n // key: '0',\n // },\n // {\n // name: '相对地表',\n // value: '相对地表',\n // key: '1',\n // },\n // {\n // name: '依附模型',\n // value: '依附模型',\n // key: '2',\n // }\n // ]\n // let heightModeObject = legp(\n // this._DialogObject._element.content.getElementsByClassName(\n // 'road-box'\n // )[0],\n // '.road-type'\n // )\n // if (heightModeObject) {\n // heightModeObject.legp_search(heightModeData)\n // let heightModeDataLegpElm = this._DialogObject._element.content\n // .getElementsByClassName('road-type')[0]\n // .getElementsByTagName('input')[0]\n // for (let i = 0; i < heightModeData.length; i++) {\n // if (heightModeData[i].key == this.heightMode) {\n // heightModeDataLegpElm.value = heightModeData[i].value\n // heightModeObject.legp_searchActive(\n // heightModeData[i].value\n // )\n // break\n // }\n // }\n // heightModeDataLegpElm.addEventListener('input', () => {\n // for (let i = 0; i < heightModeData.length; i++) {\n // if (heightModeData[i].value === heightModeDataLegpElm.value) {\n // this.heightMode = heightModeData[i].key\n // break\n // }\n // }\n // })\n\n // this._elms.height = heightElm\n // this._elms.heightBox = heightBoxElm\n // this._elms.heightMode = heightModeDataLegpElm\n // this._elms.heightConfirm = heightConfirmElm\n // this._elms.heightModeObject = heightModeObject\n\n // heightConfirmElm.addEventListener('click', () => {\n // this.positionEditing = false\n // for (let i = 0; i < this.options.positions.length; i++) {\n // this.options.positions[i].alt = Number((this.options.positions[i].alt + Number(heightElm.value)).toFixed(2))\n // this._elms.alt[i].innerHTML = this.options.positions[i].alt\n // }\n // let fromDegreesArray = this.renewPositions(this.options.positions)\n // this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(\n // fromDegreesArray\n // )\n\n // this.positionEditing = false\n // PolylineObject.closeNodeEdit(this)\n // })\n // }\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n _context.next = 17;\n break;\n case 17:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.viewer.entities.getById(this.options.id)) {\n return;\n }\n this.name = this.originalOptions.name;\n this.carRoadWidth = this.originalOptions.carRoadWidth;\n this.sideWidth = this.originalOptions.sideWidth;\n this.positions = this.originalOptions.positions;\n this.roadImage = this.originalOptions.roadImage;\n this.sideImage = this.originalOptions.sideImage;\n }\n\n /**\r\n * 飞到对应实体\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n i,\n a,\n BoundingSphere,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeViewFollow\"])(this.sdk);\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n // if (!position.hasOwnProperty('alt')) {\n // position.alt = await this.getClampToHeight(position)\n // }\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n } else {\n positionArray = [];\n for (i = 0; i < this.positions.length; i++) {\n a = Cesium.Cartesian3.fromDegrees(this.positions[i][0], this.positions[i][1], this.options.height + this.options.heightDifference / 2);\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-20.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }())\n }, {\n key: \"getSphere\",\n value: function getSphere() {\n var _this4 = this;\n return new Promise(function (resolve) {\n // entity没有加载完成时 state 不会等于0 所以设置定时器直到获取到为止\n var interval = setInterval(function () {\n var sphere = new Cesium.BoundingSphere();\n var state = _this4.sdk.viewer._dataSourceDisplay.getBoundingSphere(_this4.viewer.entities.getById(_this4.options.id), false, sphere);\n if (state === Cesium.BoundingSphereState.DONE) {\n clearInterval(interval);\n }\n }, 1000);\n });\n }\n\n /**\r\n * 删除\r\n */\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var _this5 = this;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n this.positions = [];\n this.lineEntity = null;\n if (this.viewer.entities.getById(this.options.id)) {\n this.viewer.entities.getById(this.options.id)._children.forEach(function (item) {\n _this5.viewer.entities.remove(item);\n });\n this.viewer.entities.remove(this.viewer.entities.getById(this.options.id));\n }\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context3.next = 6;\n return this.sdk.removeIncetance(this.options.id);\n case 6:\n _context3.next = 8;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(this.sdk, this.options.id);\n case 8:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = [];\n that.options.positions.forEach(function (v) {\n positions.push(new Cesium.Cartesian3.fromDegrees(v.lng, v.lat, v.alt));\n });\n var newPosi = [];\n for (var i = 0; i < positions.length - 1; i++) {\n var start = positions[i];\n var end = positions[i + 1];\n newPosi.push([start, end]);\n that.pointArr = newPosi;\n }\n var area = [[], [], []];\n\n // area[1] = that.getRectangle(positions, that.options.carRoadWidth)\n area[1][0] = that.getRectangle(newPosi, that.options.carRoadWidth);\n var sideArr = that.getSideRectangle(area[1][0], that.options.sideWidth);\n area[0] = sideArr.left;\n area[2] = sideArr.right;\n // area[1] = that.createLineBufferPolygon2(positions, that.options.carRoadWidth / 2)\n // area[1] = newPositions\n // area[0] = that.createLineBufferPolygonSide(area[1][2], -that.options.sideWidth)\n // area[2] = that.createLineBufferPolygonSide(area[1][1], that.options.sideWidth)\n\n //判断道路边是否相交\n for (var _i = 0; _i < area[0].length - 1; _i++) {\n var leftItem = area[0][_i];\n var leftItem2 = area[0][_i + 1];\n var rightItem = area[2][_i];\n var rightItem2 = area[2][_i + 1];\n var carItem = area[1][0][_i];\n var carItem2 = area[1][0][_i + 1];\n var leftLine = that.getIntersects(leftItem[2], leftItem[3], leftItem2[2], leftItem2[3]);\n var rightLine = that.getIntersects(rightItem[0], rightItem[1], rightItem2[0], rightItem2[1]);\n if (!leftLine && !rightLine) {\n for (var index = 0; index < 4; index++) {\n var _positions = [];\n index === 0 ? _positions.push(leftItem[2], leftItem[3]) : index === 1 ? _positions.push(leftItem2[2], leftItem2[3]) : index === 2 ? _positions.push(rightItem[0], rightItem[1]) : _positions.push(rightItem2[0], rightItem2[1]);\n that.sdk.viewer.entities.add({\n polyline: {\n positions: _positions,\n width: 10.0,\n material: new Cesium.PolylineGlowMaterialProperty({\n color: index === 0 ? Cesium.Color.RED : index === 1 ? Cesium.Color.BLUE : index === 2 ? Cesium.Color.YELLOW : Cesium.Color.GREEN,\n glowPower: 0.25\n })\n }\n });\n }\n }\n console.log(leftLine, rightLine, 'leftLine');\n if (leftLine) {\n //左侧相交\n //获取右侧延长交点\n var point1 = that.getExtendPoint(rightItem[0], rightItem[1], 1000);\n var point2 = that.getExtendPoint(rightItem2[1], rightItem2[0], 1000);\n console.log('aaaa');\n var rightIntersection = that.getIntersects(rightItem[0], point1, rightItem2[1], point2);\n //将其他几条边都延长\n var leftLineNeiPoint = that.getExtendPoint(leftItem[0], leftItem[1], 1000);\n var carLeftPoint = that.getExtendPoint(carItem[3], carItem[2], 1000);\n var carRightPoint = that.getExtendPoint(carItem[0], carItem[1], 1000);\n var rightLineNeiPoint = that.getExtendPoint(rightItem[3], rightItem[2], 1000);\n console.log(leftLine, rightIntersection, leftItem[0], leftLineNeiPoint, 'bbbb');\n //跟左侧里相交点\n var leftLineNei = that.getIntersects(leftLine, rightIntersection, leftItem[0], leftLineNeiPoint);\n console.log(leftLineNei, 'leftLineNei');\n //跟车道左侧相交点\n var carLeft = that.getIntersects(leftLine, rightIntersection, carItem[3], carLeftPoint);\n\n //跟车道右侧相交点\n var carRight = that.getIntersects(leftLine, rightIntersection, carItem[0], carRightPoint);\n var rightLineNei = that.getIntersects(leftLine, rightIntersection, rightItem[3], rightLineNeiPoint);\n console.log('ccc');\n // let leftLineNei = that.getIntersects(leftLine, rightItem[2], leftItem[0], leftItem[3])\n // let carLeft = that.getIntersects(leftLine, rightItem[2], carItem[3], carItem[2])\n // let carRight = that.getIntersects(leftLine, rightItem[2], carItem[0], carItem[1])\n // let rightLineNei = that.getIntersects(leftLine, rightItem[2], rightItem[0], rightItem[3])\n\n // let leftLineNei = that.getIntersects(leftLine, intersection, leftItem[0], leftItem[3])\n // //跟车道左侧相交点\n // let carLeft = that.getIntersects(leftLine, intersection, carItem[3], carItem[2])\n // //跟车道右侧相交点\n // let carRight = that.getIntersects(leftLine, intersection, carItem[0], carItem[1])\n // let rightLineNei = that.getIntersects(leftLine, intersection, rightItem[0], rightItem[3])\n\n leftItem[2] = leftLine;\n leftItem[1] = leftLineNei;\n carItem[2] = carLeft;\n carItem[1] = carRight;\n rightItem[2] = rightLineNei;\n rightItem[1] = rightIntersection;\n console.log(leftItem, carItem, rightItem, 'leftItemleft');\n\n //将其他几条边都延长\n var leftLineNeiPoint2 = that.getExtendPoint(leftItem2[1], leftItem2[0], 1000);\n var carLeftPoint2 = that.getExtendPoint(carItem2[2], carItem2[3], 1000);\n var carRightPoint2 = that.getExtendPoint(carItem2[1], carItem2[0], 1000);\n var rightLineNeiPoint2 = that.getExtendPoint(rightItem2[2], rightItem2[3], 1000);\n\n // let leftLineNei2 = that.getIntersects(leftLine, rightItem2[1], leftItem2[0], leftItem2[3])\n // let carLeft2 = that.getIntersects(leftLine, rightItem2[1], carItem2[3], carItem2[2])\n // let carRight2 = that.getIntersects(leftLine, rightItem2[1], carItem2[0], carItem2[1])\n // let rightLineNei2 = that.getIntersects(leftLine, rightItem2[1], rightItem2[0], rightItem2[3])\n\n var leftLineNei2 = that.getIntersects(leftLine, rightIntersection, leftItem2[1], leftLineNeiPoint2);\n var carLeft2 = that.getIntersects(leftLine, rightIntersection, carItem2[2], carLeftPoint2);\n var carRight2 = that.getIntersects(leftLine, rightIntersection, carItem2[1], carRightPoint2);\n var rightLineNei2 = that.getIntersects(leftLine, rightIntersection, rightItem2[2], rightLineNeiPoint2);\n\n // let arr = [leftLine, rightIntersection, leftItem2[3], leftLineNeiPoint2]\n // arr.forEach((item, index) => {\n // that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: item,\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // color: Cesium.Color.WHITE.withAlpha(0.99)\n // },\n // label: {\n // text: '' + index,\n // pixelOffset: { x: 0, y: -20 },\n // },\n // })\n // })\n\n // let leftLineNei2 = that.getIntersects(leftLine, intersection, leftItem2[0], leftItem2[3])\n // //跟车道左侧相交点\n // let carLeft2 = that.getIntersects(leftLine, intersection, carItem2[3], carItem2[2])\n // //跟车道右侧相交点\n // let carRight2 = that.getIntersects(leftLine, intersection, carItem2[0], carItem2[1])\n // let rightLineNei2 = that.getIntersects(leftLine, intersection, rightItem2[0], rightItem2[3])\n\n leftItem2[3] = leftLine;\n leftItem2[0] = leftLineNei;\n carItem2[3] = carLeft;\n carItem2[0] = carRight;\n rightItem2[3] = rightLineNei;\n rightItem2[0] = rightIntersection;\n console.log(leftItem2, carItem2, rightItem2, 'leftItem2left');\n } else if (rightLine) {\n //右侧相交\n\n //获取左侧延长交点\n var _point = that.getExtendPoint(leftItem[3], leftItem[2], 1000);\n var _point2 = that.getExtendPoint(leftItem2[2], leftItem2[3], 1000);\n var _rightIntersection = that.getIntersects(leftItem[3], _point, leftItem2[2], _point2);\n if (!_rightIntersection) {\n return;\n }\n //将其他几条边都延长\n var _leftLineNeiPoint = that.getExtendPoint(leftItem[0], leftItem[1], 1000);\n var _carLeftPoint = that.getExtendPoint(carItem[3], carItem[2], 1000);\n var _carRightPoint = that.getExtendPoint(carItem[0], carItem[1], 1000);\n var _rightLineNeiPoint = that.getExtendPoint(rightItem[3], rightItem[2], 1000);\n\n // //跟左侧里相交点\n var _leftLineNei = that.getIntersects(rightLine, _rightIntersection, leftItem[0], _leftLineNeiPoint);\n //跟车道左侧相交点\n var _carLeft = that.getIntersects(rightLine, _rightIntersection, carItem[3], _carLeftPoint);\n //跟车道右侧相交点\n var _carRight = that.getIntersects(rightLine, _rightIntersection, carItem[0], _carRightPoint);\n var _rightLineNei = that.getIntersects(rightLine, _rightIntersection, rightItem[3], _rightLineNeiPoint);\n // //跟左侧里相交点\n // let leftLineNei = that.getIntersects(rightLine, leftItem[2], leftItem[0], leftItem[3])\n // //跟车道左侧相交点\n // let carLeft = that.getIntersects(rightLine, leftItem[2], carItem[3], carItem[2])\n // //跟车道右侧相交点\n // let carRight = that.getIntersects(rightLine, leftItem[2], carItem[0], carItem[1])\n // let rightLineNei = that.getIntersects(rightLine, leftItem[2], rightItem[0], rightItem[3])\n\n leftItem[2] = _rightIntersection;\n leftItem[1] = _leftLineNei;\n carItem[2] = _carLeft;\n carItem[1] = _carRight;\n rightItem[2] = _rightLineNei;\n rightItem[1] = rightLine;\n console.log(leftItem, carItem, rightItem, 'leftItemright');\n\n //将其他几条边都延长\n var _leftLineNeiPoint2 = that.getExtendPoint(leftItem2[2], leftItem2[3], 1000);\n var _carLeftPoint2 = that.getExtendPoint(carItem2[2], carItem2[3], 1000);\n var _carRightPoint2 = that.getExtendPoint(carItem2[1], carItem2[0], 1000);\n var _rightLineNeiPoint2 = that.getExtendPoint(rightItem2[2], rightItem2[3], 1000);\n var _leftLineNei2 = that.getIntersects(rightLine, _rightIntersection, leftItem2[1], _leftLineNeiPoint2);\n //跟车道左侧相交点\n var _carLeft2 = that.getIntersects(rightLine, _rightIntersection, carItem2[2], _carLeftPoint2);\n //跟车道右侧相交点\n var _carRight2 = that.getIntersects(rightLine, _rightIntersection, carItem2[1], _carRightPoint2);\n var _rightLineNei2 = that.getIntersects(rightLine, _rightIntersection, rightItem2[2], _rightLineNeiPoint2);\n // let leftLineNei2 = that.getIntersects(rightLine, leftItem2[1], leftItem2[0], leftItem2[3])\n // //跟车道左侧相交点\n // let carLeft2 = that.getIntersects(rightLine, leftItem2[1], carItem2[3], carItem2[2])\n // //跟车道右侧相交点\n // let carRight2 = that.getIntersects(rightLine, leftItem2[1], carItem2[0], carItem2[1])\n // let rightLineNei2 = that.getIntersects(rightLine, leftItem2[1], rightItem2[0], rightItem2[3])\n\n leftItem2[3] = _rightIntersection;\n leftItem2[0] = _leftLineNei;\n carItem2[3] = _carLeft;\n carItem2[0] = _carRight;\n rightItem2[3] = _rightLineNei;\n rightItem2[0] = rightLine;\n console.log(leftItem2, carItem2, rightItem2, 'leftItem2right');\n }\n }\n if (that.viewer.entities.getById(that.options.id)) {\n that.viewer.entities.getById(that.options.id)._children.forEach(function (item) {\n that.viewer.entities.remove(item);\n });\n that.viewer.entities.remove(that.viewer.entities.getById(that.options.id));\n }\n that.lineEntity = that.viewer.entities.add(new Cesium.Entity({\n id: that.options.id,\n show: that.options.show\n }));\n var myImg = new Image();\n myImg.src = that.options.roadImage;\n myImg.onload = function () {\n console.log(area[1][0], that.options.roadImage, 'llll');\n area[1][0].forEach(function (item, index) {\n that.viewer.entities.add({\n // id: that.options.id,\n parent: that.lineEntity,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(item),\n material: new Cesium.ImageMaterialProperty({\n image: that.options.roadImage,\n transparent: true,\n // 如果图片有透明部分,需要设置为 true\n repeat: that.calculateTextureRepeat(item, myImg)\n }),\n stRotation: that.calculateRoadAngle(positions[index], positions[index + 1])\n }\n });\n });\n };\n var myImg2 = new Image();\n myImg2.src = that.options.sideImage;\n myImg2.onload = function () {\n // area[0].forEach((item, index) => {\n area[0].forEach(function (item, index) {\n that.viewer.entities.add({\n parent: that.lineEntity,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(item),\n material: new Cesium.ImageMaterialProperty({\n image: that.options.sideImage,\n transparent: true,\n // 如果图片有透明部分,需要设置为 true\n repeat: that.calculateTextureRepeat(item, myImg2)\n }),\n stRotation: that.calculateRoadAngle(positions[index], positions[index + 1])\n }\n });\n });\n\n // area[2].forEach((item, index) => {\n area[2].forEach(function (item, index) {\n that.viewer.entities.add({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(item),\n material: new Cesium.ImageMaterialProperty({\n image: that.options.sideImage,\n transparent: true,\n // 如果图片有透明部分,需要设置为 true\n repeat: that.calculateTextureRepeat(item, myImg2)\n }),\n stRotation: that.calculateRoadAngle(positions[index], positions[index + 1])\n }\n });\n });\n };\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Road);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUm9hZE9iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Sb2FkT2JqZWN0L2luZGV4LmpzPzc1M2IiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiDpgZPot69cclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIFJvYWQgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOmBk+i3r1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOmBk+i3r+WxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWU95pyq5ZG95ZCN5a+56LGhIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNhclJvYWRXaWR0aD0yIHtudW1iZXJ9IOi9pumBk+WuveW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNpZGVXaWR0aD0yIHtudW1iZXJ9IOS6uuihjOmBk+WuveW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9ucz1bXSB7YXJyYXl9IOmBk+i3r3Bvc2l0aW9uc1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJvYWRJbWFnZT0nJyB7c3RyaW5nfSDovabpgZPotLTlm75cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaWRlSW1hZ2U9Jycge3N0cmluZ30g5Lq66KGM6YGT6LS05Zu+XHJcbiAgICogQHBhcmFtIERpYWxvZyB7b2JqZWN0fSDlvLnmoYblr7nosaFcclxuICAgKiBAcGFyYW0gRGlhbG9nLmNvbmZpcm1DYWxsQmFjayB7ZnVuY3Rpb259IOW8ueahhuehruiupOaXtueahOWbnuiwg1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMudmlld2VyID0gdGhpcy5zZGsudmlld2VyXHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn6YGT6LevJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNhclJvYWRXaWR0aCA9IG9wdGlvbnMuY2FyUm9hZFdpZHRoIHx8IDEwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2lkZVdpZHRoID0gb3B0aW9ucy5zaWRlV2lkdGggfHwgNVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMucm9hZEltYWdlID0gb3B0aW9ucy5yb2FkSW1hZ2UgfHwgKHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3JvYWRQaG90by5wbmcnKVxyXG4gICAgdGhpcy5vcHRpb25zLnNpZGVJbWFnZSA9IG9wdGlvbnMuc2lkZUltYWdlIHx8ICh0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9zaWRlUGhvdG8ucG5nJylcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLnBvc2l0aW9uQXJlYSA9IFtdXHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmxpbmVFbnRpdHkgPSAnJ1xyXG4gICAgdGhpcy5jcm9zc0FyciA9IFtdXHJcbiAgICB0aGlzLnBvaW50QXJyID0gW11cclxuXHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgLy8gUm9hZC5jcmVhdGUodGhpcylcclxuICAgIC8vIGNvbnNvbGUubG9nKCcxMjEyJylcclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUNvcnJpZG9yKHZpZXdlciwgcG9zaXRpb25zLCB3aWR0aCkge1xyXG4gICAgICAvLyDorqHnrpfkuKTkvqfpobbngrnkvY3nva5cclxuICAgICAgY29uc3QgbGVmdFBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICBjb25zdCByaWdodFBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICBjb25zdCB0b3BQb3NpdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgIC8vIOeUn+aIkOS4pOS+p+WSjOmhtumDqOmhtueCuVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25zW2ldO1xyXG4gICAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uc1tpICsgMV07XHJcblxyXG4gICAgICAgIGlmICghbmV4dFBvc2l0aW9uKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgLy8g6K6h566X5pa55ZCR5ZCR6YePXHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoXHJcbiAgICAgICAgICBuZXh0UG9zaXRpb24sXHJcbiAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICAvLyDorqHnrpflnoLnm7TlkJHph49cclxuICAgICAgICBjb25zdCBub3JtYWwgPSBDZXNpdW0uQ2FydGVzaWFuMy5jcm9zcyhcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLlVOSVRfWixcclxuICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUobm9ybWFsLCBub3JtYWwpO1xyXG5cclxuICAgICAgICAvLyDorqHnrpfkuKTkvqflgY/np7vph49cclxuICAgICAgICBjb25zdCBvZmZzZXQgPSBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKFxyXG4gICAgICAgICAgbm9ybWFsLFxyXG4gICAgICAgICAgd2lkdGggLyAyLFxyXG4gICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDlt6bkvqfngrlcclxuICAgICAgICBjb25zdCBsZWZ0ID0gQ2VzaXVtLkNhcnRlc2lhbjMuYWRkKHBvc2l0aW9uLCBvZmZzZXQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgICBsZWZ0UG9zaXRpb25zLnB1c2gobGVmdC54LCBsZWZ0LnksIGxlZnQueik7XHJcblxyXG4gICAgICAgIC8vIOWPs+S+p+eCuVxyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QocG9zaXRpb24sIG9mZnNldCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICAgIHJpZ2h0UG9zaXRpb25zLnB1c2gocmlnaHQueCwgcmlnaHQueSwgcmlnaHQueik7XHJcblxyXG4gICAgICAgIC8vIOmhtumDqOeCue+8iOmrmOW6puWinuWKoO+8iVxyXG4gICAgICAgIGNvbnN0IHRvcCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmNsb25lKHBvc2l0aW9uKTtcclxuICAgICAgICB0b3AueiArPSAxMDA7IC8vIOiuvue9rumhtumDqOmrmOW6plxyXG4gICAgICAgIHRvcFBvc2l0aW9ucy5wdXNoKHRvcC54LCB0b3AueSwgdG9wLnopO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDlkIjlubbmiYDmnInpobbngrlcclxuICAgICAgY29uc3QgYWxsUG9zaXRpb25zID0gbmV3IEZsb2F0NjRBcnJheShbXHJcbiAgICAgICAgLi4ubGVmdFBvc2l0aW9ucyxcclxuICAgICAgICAuLi5yaWdodFBvc2l0aW9ucyxcclxuICAgICAgICAuLi50b3BQb3NpdGlvbnNcclxuICAgICAgXSk7XHJcblxyXG4gICAgICAvLyDliJvlu7rlh6DkvZXkvZNcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQ2VzaXVtLkdlb21ldHJ5KHtcclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5HZW9tZXRyeUF0dHJpYnV0ZSh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGF0eXBlOiBDZXNpdW0uQ29tcG9uZW50RGF0YXR5cGUuRE9VQkxFLFxyXG4gICAgICAgICAgICBjb21wb25lbnRzUGVyQXR0cmlidXRlOiAzLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGFsbFBvc2l0aW9uc1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZGljZXM6IG5ldyBVaW50MTZBcnJheShbXHJcbiAgICAgICAgICAvLyDlt6bkvqfpnaLntKLlvJVcclxuICAgICAgICAgIDAsIDEsIDMsXHJcbiAgICAgICAgICAxLCA0LCAzLFxyXG4gICAgICAgICAgLy8g5Y+z5L6n6Z2i57Si5byVXHJcbiAgICAgICAgICAyLCA1LCA2LFxyXG4gICAgICAgICAgMiwgNiwgNyxcclxuICAgICAgICAgIC8vIOmhtumdoue0ouW8lVxyXG4gICAgICAgICAgOCwgOSwgMTAsXHJcbiAgICAgICAgICA4LCAxMCwgMTFcclxuICAgICAgICBdKSxcclxuICAgICAgICBwcmltaXRpdmVUeXBlOiBDZXNpdW0uUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsXHJcbiAgICAgICAgYm91bmRpbmdTcGhlcmU6IENlc2l1bS5Cb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMoYWxsUG9zaXRpb25zKVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIOWIm+W7uuWbvuWFg1xyXG4gICAgICBjb25zdCBwcmltaXRpdmUgPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZSh7XHJcbiAgICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcclxuICAgICAgICB9KSxcclxuICAgICAgICBhcHBlYXJhbmNlOiBuZXcgQ2VzaXVtLlBlckluc3RhbmNlQ29sb3JBcHBlYXJhbmNlKHtcclxuICAgICAgICAgIGZsYXQ6IHRydWUsXHJcbiAgICAgICAgICB0cmFuc2x1Y2VudDogZmFsc2VcclxuICAgICAgICB9KSxcclxuICAgICAgICBhc3luY2hyb25vdXM6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZSk7XHJcbiAgICAgIHJldHVybiBwcmltaXRpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5L2/55So56S65L6LXHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KFtcclxuICAgICAgLTc1LjAsIDM5LjAsXHJcbiAgICAgIC03NC41LCAzOS41LFxyXG4gICAgICAtNzQuMCwgNDAuMFxyXG4gICAgXSk7XHJcbiAgICBjcmVhdGVDdXN0b21Db3JyaWRvcih0aGlzLnNkay52aWV3ZXIsIHBvc2l0aW9ucywgMTAwMCk7XHJcbiAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKC03NS4wLCAzOS4wLCAxMDApLFxyXG4gICAgICAvLyBvcmllbnRhdGlvbjoge1xyXG4gICAgICAvLyAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwKSxcclxuICAgICAgLy8gICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0zMCksXHJcbiAgICAgIC8vICAgcm9sbDogMC4wXHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG4gIC8vIOWIm+W7uui1sOW7iuWHoOS9leS9k1xyXG4gIGNyZWF0ZUNvcnJpZG9yKG15SW1nKSB7XHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KFtcclxuICAgICAgMTE2LjM5MSwgMzkuOTA3LCAgLy8g5YyX5LqsXHJcbiAgICAgIDExNi40MDQsIDM5LjkxNCxcclxuICAgICAgMTE2LjQxNywgMzkuOTIxLFxyXG4gICAgICAxMTYuNDMwLCAzOS45MjhcclxuICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IGNvcnJpZG9ySW5zdGFuY2UgPSBuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICBnZW9tZXRyeTogbmV3IENlc2l1bS5Db3JyaWRvckdlb21ldHJ5KHtcclxuICAgICAgICBwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuICAgICAgICB3aWR0aDogMjAwLjAsXHJcbiAgICAgICAgdmVydGV4Rm9ybWF0OiBDZXNpdW0uVmVydGV4Rm9ybWF0LlBPU0lUSU9OX0FORF9TVCxcclxuICAgICAgICBjb3JuZXJUeXBlOiBDZXNpdW0uQ29ybmVyVHlwZS5ST1VOREVEXHJcbiAgICAgIH0pLFxyXG4gICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKENlc2l1bS5Db2xvci5XSElURSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcHJpbWl0aXZlID0gbmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICBnZW9tZXRyeUluc3RhbmNlczogY29ycmlkb3JJbnN0YW5jZSxcclxuICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5NYXRlcmlhbEFwcGVhcmFuY2Uoe1xyXG4gICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLk1hdGVyaWFsKHtcclxuICAgICAgICAgIGZhYnJpYzoge1xyXG4gICAgICAgICAgICB0eXBlOiAnSW1hZ2UnLFxyXG4gICAgICAgICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiBteUltZ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdHJhbnNsdWNlbnQ6IGZhbHNlXHJcbiAgICAgIH0pLFxyXG4gICAgICBhc3luY2hyb25vdXM6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQocHJpbWl0aXZlKTtcclxuXHJcbiAgICAvLyDlrprkvY3liLDotbDlu4pcclxuICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoMTE2LjQwNCwgMzkuOTE0LCAyMDAwKSxcclxuICAgICAgb3JpZW50YXRpb246IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtMzApLFxyXG4gICAgICAgIHJvbGw6IDAuMFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xyXG4gIH1cclxuICAvLyDliJvlu7rpgZPot69cclxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICBwb3NpdGlvbnMucHVzaChuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModi5sbmcsIHYubGF0LCB2LmFsdCkpXHJcbiAgICB9KVxyXG4gICAgbGV0IG5ld1Bvc2kgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb25zW2ldO1xyXG4gICAgICBjb25zdCBlbmQgPSBwb3NpdGlvbnNbaSArIDFdO1xyXG4gICAgICBuZXdQb3NpLnB1c2goW3N0YXJ0LCBlbmRdKVxyXG4gICAgICB0aGF0LnBvaW50QXJyID0gbmV3UG9zaVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBhcmVhID0gW1tdLCBbXSwgW11dXHJcblxyXG4gICAgLy8gYXJlYVsxXSA9IHRoYXQuZ2V0UmVjdGFuZ2xlKHBvc2l0aW9ucywgdGhhdC5vcHRpb25zLmNhclJvYWRXaWR0aClcclxuICAgIGFyZWFbMV1bMF0gPSB0aGF0LmdldFJlY3RhbmdsZShuZXdQb3NpLCB0aGF0Lm9wdGlvbnMuY2FyUm9hZFdpZHRoKVxyXG4gICAgbGV0IHNpZGVBcnIgPSB0aGF0LmdldFNpZGVSZWN0YW5nbGUoYXJlYVsxXVswXSwgdGhhdC5vcHRpb25zLnNpZGVXaWR0aClcclxuICAgIGFyZWFbMF0gPSBzaWRlQXJyLmxlZnRcclxuICAgIGFyZWFbMl0gPSBzaWRlQXJyLnJpZ2h0XHJcbiAgICAvLyBhcmVhWzFdID0gdGhhdC5jcmVhdGVMaW5lQnVmZmVyUG9seWdvbjIocG9zaXRpb25zLCB0aGF0Lm9wdGlvbnMuY2FyUm9hZFdpZHRoIC8gMilcclxuICAgIC8vIGFyZWFbMV0gPSBuZXdQb3NpdGlvbnNcclxuICAgIC8vIGFyZWFbMF0gPSB0aGF0LmNyZWF0ZUxpbmVCdWZmZXJQb2x5Z29uU2lkZShhcmVhWzFdWzJdLCAtdGhhdC5vcHRpb25zLnNpZGVXaWR0aClcclxuICAgIC8vIGFyZWFbMl0gPSB0aGF0LmNyZWF0ZUxpbmVCdWZmZXJQb2x5Z29uU2lkZShhcmVhWzFdWzFdLCB0aGF0Lm9wdGlvbnMuc2lkZVdpZHRoKVxyXG5cclxuICAgIC8v5Yik5pat6YGT6Lev6L655piv5ZCm55u45LqkXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZWFbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblxyXG4gICAgICBsZXQgbGVmdEl0ZW0gPSBhcmVhWzBdW2ldXHJcbiAgICAgIGxldCBsZWZ0SXRlbTIgPSBhcmVhWzBdW2kgKyAxXVxyXG4gICAgICBsZXQgcmlnaHRJdGVtID0gYXJlYVsyXVtpXVxyXG4gICAgICBsZXQgcmlnaHRJdGVtMiA9IGFyZWFbMl1baSArIDFdXHJcbiAgICAgIGxldCBjYXJJdGVtID0gYXJlYVsxXVswXVtpXVxyXG4gICAgICBsZXQgY2FySXRlbTIgPSBhcmVhWzFdWzBdW2kgKyAxXVxyXG4gICAgICBsZXQgbGVmdExpbmUgPSB0aGF0LmdldEludGVyc2VjdHMobGVmdEl0ZW1bMl0sIGxlZnRJdGVtWzNdLCBsZWZ0SXRlbTJbMl0sIGxlZnRJdGVtMlszXSlcclxuICAgICAgbGV0IHJpZ2h0TGluZSA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodEl0ZW1bMF0sIHJpZ2h0SXRlbVsxXSwgcmlnaHRJdGVtMlswXSwgcmlnaHRJdGVtMlsxXSlcclxuICAgICAgaWYgKCFsZWZ0TGluZSAmJiAhcmlnaHRMaW5lKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgaW5kZXggPT09IDAgPyBwb3NpdGlvbnMucHVzaChsZWZ0SXRlbVsyXSwgbGVmdEl0ZW1bM10pIDogaW5kZXggPT09IDEgPyBwb3NpdGlvbnMucHVzaChsZWZ0SXRlbTJbMl0sIGxlZnRJdGVtMlszXSkgOiBpbmRleCA9PT0gMiA/IHBvc2l0aW9ucy5wdXNoKHJpZ2h0SXRlbVswXSwgcmlnaHRJdGVtWzFdKSA6IHBvc2l0aW9ucy5wdXNoKHJpZ2h0SXRlbTJbMF0sIHJpZ2h0SXRlbTJbMV0pXHJcbiAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuICAgICAgICAgICAgICB3aWR0aDogMTAuMCxcclxuICAgICAgICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5Qb2x5bGluZUdsb3dNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBpbmRleCA9PT0gMCA/IENlc2l1bS5Db2xvci5SRUQgOiBpbmRleCA9PT0gMSA/IENlc2l1bS5Db2xvci5CTFVFIDogaW5kZXggPT09IDIgPyBDZXNpdW0uQ29sb3IuWUVMTE9XIDogQ2VzaXVtLkNvbG9yLkdSRUVOLFxyXG4gICAgICAgICAgICAgICAgZ2xvd1Bvd2VyOiAwLjI1LFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKGxlZnRMaW5lLCByaWdodExpbmUsICdsZWZ0TGluZScpXHJcbiAgICAgIGlmIChsZWZ0TGluZSkgey8v5bem5L6n55u45LqkXHJcbiAgICAgICAgLy/ojrflj5blj7Pkvqflu7bplb/kuqTngrlcclxuICAgICAgICBsZXQgcG9pbnQxID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW1bMF0sIHJpZ2h0SXRlbVsxXSwgMTAwMClcclxuICAgICAgICBsZXQgcG9pbnQyID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW0yWzFdLCByaWdodEl0ZW0yWzBdLCAxMDAwKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdhYWFhJylcclxuICAgICAgICBsZXQgcmlnaHRJbnRlcnNlY3Rpb24gPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRJdGVtWzBdLCBwb2ludDEsIHJpZ2h0SXRlbTJbMV0sIHBvaW50MilcclxuICAgICAgICAvL+WwhuWFtuS7luWHoOadoei+uemDveW7tumVv1xyXG4gICAgICAgIGxldCBsZWZ0TGluZU5laVBvaW50ID0gdGhhdC5nZXRFeHRlbmRQb2ludChsZWZ0SXRlbVswXSwgbGVmdEl0ZW1bMV0sIDEwMDApXHJcbiAgICAgICAgbGV0IGNhckxlZnRQb2ludCA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQoY2FySXRlbVszXSwgY2FySXRlbVsyXSwgMTAwMClcclxuICAgICAgICBsZXQgY2FyUmlnaHRQb2ludCA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQoY2FySXRlbVswXSwgY2FySXRlbVsxXSwgMTAwMClcclxuXHJcbiAgICAgICAgbGV0IHJpZ2h0TGluZU5laVBvaW50ID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW1bM10sIHJpZ2h0SXRlbVsyXSwgMTAwMClcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGxlZnRJdGVtWzBdLCBsZWZ0TGluZU5laVBvaW50LCAnYmJiYicpXHJcbiAgICAgICAgLy/ot5/lt6bkvqfph4znm7jkuqTngrlcclxuICAgICAgICBsZXQgbGVmdExpbmVOZWkgPSB0aGF0LmdldEludGVyc2VjdHMobGVmdExpbmUsIHJpZ2h0SW50ZXJzZWN0aW9uLCBsZWZ0SXRlbVswXSwgbGVmdExpbmVOZWlQb2ludClcclxuICAgICAgICBjb25zb2xlLmxvZyhsZWZ0TGluZU5laSwgJ2xlZnRMaW5lTmVpJylcclxuICAgICAgICAvL+i3n+i9pumBk+W3puS+p+ebuOS6pOeCuVxyXG4gICAgICAgIGxldCBjYXJMZWZ0ID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCByaWdodEludGVyc2VjdGlvbiwgY2FySXRlbVszXSwgY2FyTGVmdFBvaW50KVxyXG5cclxuICAgICAgICAvL+i3n+i9pumBk+WPs+S+p+ebuOS6pOeCuVxyXG4gICAgICAgIGxldCBjYXJSaWdodCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGNhckl0ZW1bMF0sIGNhclJpZ2h0UG9pbnQpXHJcbiAgICAgICAgbGV0IHJpZ2h0TGluZU5laSA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIHJpZ2h0SXRlbVszXSwgcmlnaHRMaW5lTmVpUG9pbnQpXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NjYycpXHJcbiAgICAgICAgLy8gbGV0IGxlZnRMaW5lTmVpID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCByaWdodEl0ZW1bMl0sIGxlZnRJdGVtWzBdLCBsZWZ0SXRlbVszXSlcclxuICAgICAgICAvLyBsZXQgY2FyTGVmdCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJdGVtWzJdLCBjYXJJdGVtWzNdLCBjYXJJdGVtWzJdKVxyXG4gICAgICAgIC8vIGxldCBjYXJSaWdodCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJdGVtWzJdLCBjYXJJdGVtWzBdLCBjYXJJdGVtWzFdKVxyXG4gICAgICAgIC8vIGxldCByaWdodExpbmVOZWkgPSB0aGF0LmdldEludGVyc2VjdHMobGVmdExpbmUsIHJpZ2h0SXRlbVsyXSwgcmlnaHRJdGVtWzBdLCByaWdodEl0ZW1bM10pXHJcblxyXG4gICAgICAgIC8vIGxldCBsZWZ0TGluZU5laSA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCBsZWZ0SXRlbVswXSwgbGVmdEl0ZW1bM10pXHJcbiAgICAgICAgLy8gLy/ot5/ovabpgZPlt6bkvqfnm7jkuqTngrlcclxuICAgICAgICAvLyBsZXQgY2FyTGVmdCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCBjYXJJdGVtWzNdLCBjYXJJdGVtWzJdKVxyXG4gICAgICAgIC8vIC8v6Lef6L2m6YGT5Y+z5L6n55u45Lqk54K5XHJcbiAgICAgICAgLy8gbGV0IGNhclJpZ2h0ID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCBpbnRlcnNlY3Rpb24sIGNhckl0ZW1bMF0sIGNhckl0ZW1bMV0pXHJcbiAgICAgICAgLy8gbGV0IHJpZ2h0TGluZU5laSA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCByaWdodEl0ZW1bMF0sIHJpZ2h0SXRlbVszXSlcclxuXHJcbiAgICAgICAgbGVmdEl0ZW1bMl0gPSBsZWZ0TGluZVxyXG4gICAgICAgIGxlZnRJdGVtWzFdID0gbGVmdExpbmVOZWlcclxuICAgICAgICBjYXJJdGVtWzJdID0gY2FyTGVmdFxyXG4gICAgICAgIGNhckl0ZW1bMV0gPSBjYXJSaWdodFxyXG4gICAgICAgIHJpZ2h0SXRlbVsyXSA9IHJpZ2h0TGluZU5laVxyXG4gICAgICAgIHJpZ2h0SXRlbVsxXSA9IHJpZ2h0SW50ZXJzZWN0aW9uXHJcbiAgICAgICAgY29uc29sZS5sb2cobGVmdEl0ZW0sIGNhckl0ZW0sIHJpZ2h0SXRlbSwgJ2xlZnRJdGVtbGVmdCcpXHJcblxyXG5cclxuICAgICAgICAvL+WwhuWFtuS7luWHoOadoei+uemDveW7tumVv1xyXG4gICAgICAgIGxldCBsZWZ0TGluZU5laVBvaW50MiA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQobGVmdEl0ZW0yWzFdLCBsZWZ0SXRlbTJbMF0sIDEwMDApXHJcbiAgICAgICAgbGV0IGNhckxlZnRQb2ludDIgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW0yWzJdLCBjYXJJdGVtMlszXSwgMTAwMClcclxuICAgICAgICBsZXQgY2FyUmlnaHRQb2ludDIgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW0yWzFdLCBjYXJJdGVtMlswXSwgMTAwMClcclxuICAgICAgICBsZXQgcmlnaHRMaW5lTmVpUG9pbnQyID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW0yWzJdLCByaWdodEl0ZW0yWzNdLCAxMDAwKVxyXG5cclxuICAgICAgICAvLyBsZXQgbGVmdExpbmVOZWkyID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCByaWdodEl0ZW0yWzFdLCBsZWZ0SXRlbTJbMF0sIGxlZnRJdGVtMlszXSlcclxuICAgICAgICAvLyBsZXQgY2FyTGVmdDIgPSB0aGF0LmdldEludGVyc2VjdHMobGVmdExpbmUsIHJpZ2h0SXRlbTJbMV0sIGNhckl0ZW0yWzNdLCBjYXJJdGVtMlsyXSlcclxuICAgICAgICAvLyBsZXQgY2FyUmlnaHQyID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCByaWdodEl0ZW0yWzFdLCBjYXJJdGVtMlswXSwgY2FySXRlbTJbMV0pXHJcbiAgICAgICAgLy8gbGV0IHJpZ2h0TGluZU5laTIgPSB0aGF0LmdldEludGVyc2VjdHMobGVmdExpbmUsIHJpZ2h0SXRlbTJbMV0sIHJpZ2h0SXRlbTJbMF0sIHJpZ2h0SXRlbTJbM10pXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGxlZnRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGxlZnRJdGVtMlsxXSwgbGVmdExpbmVOZWlQb2ludDIpXHJcbiAgICAgICAgbGV0IGNhckxlZnQyID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCByaWdodEludGVyc2VjdGlvbiwgY2FySXRlbTJbMl0sIGNhckxlZnRQb2ludDIpXHJcbiAgICAgICAgbGV0IGNhclJpZ2h0MiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGNhckl0ZW0yWzFdLCBjYXJSaWdodFBvaW50MilcclxuICAgICAgICBsZXQgcmlnaHRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIHJpZ2h0SXRlbTJbMl0sIHJpZ2h0TGluZU5laVBvaW50MilcclxuXHJcbiAgICAgICAgLy8gbGV0IGFyciA9IFtsZWZ0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGxlZnRJdGVtMlszXSwgbGVmdExpbmVOZWlQb2ludDJdXHJcbiAgICAgICAgLy8gYXJyLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAvLyAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgIC8vICAgICBpbmRleDogaSxcclxuICAgICAgICAvLyAgICAgcG9zaXRpb246IGl0ZW0sXHJcbiAgICAgICAgLy8gICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgIC8vICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgIC8vICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAvLyAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgIC8vICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgIC8vICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgLy8gICAgIH0sXHJcbiAgICAgICAgLy8gICAgIGxhYmVsOiB7XHJcbiAgICAgICAgLy8gICAgICAgdGV4dDogJycgKyBpbmRleCxcclxuICAgICAgICAvLyAgICAgICBwaXhlbE9mZnNldDogeyB4OiAwLCB5OiAtMjAgfSxcclxuICAgICAgICAvLyAgICAgfSxcclxuICAgICAgICAvLyAgIH0pXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgLy8gbGV0IGxlZnRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCBsZWZ0SXRlbTJbMF0sIGxlZnRJdGVtMlszXSlcclxuICAgICAgICAvLyAvL+i3n+i9pumBk+W3puS+p+ebuOS6pOeCuVxyXG4gICAgICAgIC8vIGxldCBjYXJMZWZ0MiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCBjYXJJdGVtMlszXSwgY2FySXRlbTJbMl0pXHJcbiAgICAgICAgLy8gLy/ot5/ovabpgZPlj7Pkvqfnm7jkuqTngrlcclxuICAgICAgICAvLyBsZXQgY2FyUmlnaHQyID0gdGhhdC5nZXRJbnRlcnNlY3RzKGxlZnRMaW5lLCBpbnRlcnNlY3Rpb24sIGNhckl0ZW0yWzBdLCBjYXJJdGVtMlsxXSlcclxuICAgICAgICAvLyBsZXQgcmlnaHRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0TGluZSwgaW50ZXJzZWN0aW9uLCByaWdodEl0ZW0yWzBdLCByaWdodEl0ZW0yWzNdKVxyXG5cclxuICAgICAgICBsZWZ0SXRlbTJbM10gPSBsZWZ0TGluZVxyXG4gICAgICAgIGxlZnRJdGVtMlswXSA9IGxlZnRMaW5lTmVpXHJcbiAgICAgICAgY2FySXRlbTJbM10gPSBjYXJMZWZ0XHJcbiAgICAgICAgY2FySXRlbTJbMF0gPSBjYXJSaWdodFxyXG4gICAgICAgIHJpZ2h0SXRlbTJbM10gPSByaWdodExpbmVOZWlcclxuICAgICAgICByaWdodEl0ZW0yWzBdID0gcmlnaHRJbnRlcnNlY3Rpb25cclxuICAgICAgICBjb25zb2xlLmxvZyhsZWZ0SXRlbTIsIGNhckl0ZW0yLCByaWdodEl0ZW0yLCAnbGVmdEl0ZW0ybGVmdCcpXHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0TGluZSkgey8v5Y+z5L6n55u45LqkXHJcblxyXG4gICAgICAgIC8v6I635Y+W5bem5L6n5bu26ZW/5Lqk54K5XHJcbiAgICAgICAgbGV0IHBvaW50MSA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQobGVmdEl0ZW1bM10sIGxlZnRJdGVtWzJdLCAxMDAwKVxyXG4gICAgICAgIGxldCBwb2ludDIgPSB0aGF0LmdldEV4dGVuZFBvaW50KGxlZnRJdGVtMlsyXSwgbGVmdEl0ZW0yWzNdLCAxMDAwKVxyXG4gICAgICAgIGxldCByaWdodEludGVyc2VjdGlvbiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhsZWZ0SXRlbVszXSwgcG9pbnQxLCBsZWZ0SXRlbTJbMl0sIHBvaW50MilcclxuICAgICAgICBpZiAoIXJpZ2h0SW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lsIblhbbku5blh6DmnaHovrnpg73lu7bplb9cclxuICAgICAgICBsZXQgbGVmdExpbmVOZWlQb2ludCA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQobGVmdEl0ZW1bMF0sIGxlZnRJdGVtWzFdLCAxMDAwKVxyXG4gICAgICAgIGxldCBjYXJMZWZ0UG9pbnQgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW1bM10sIGNhckl0ZW1bMl0sIDEwMDApXHJcbiAgICAgICAgbGV0IGNhclJpZ2h0UG9pbnQgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW1bMF0sIGNhckl0ZW1bMV0sIDEwMDApXHJcbiAgICAgICAgbGV0IHJpZ2h0TGluZU5laVBvaW50ID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW1bM10sIHJpZ2h0SXRlbVsyXSwgMTAwMClcclxuXHJcbiAgICAgICAgLy8gLy/ot5/lt6bkvqfph4znm7jkuqTngrlcclxuICAgICAgICBsZXQgbGVmdExpbmVOZWkgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCByaWdodEludGVyc2VjdGlvbiwgbGVmdEl0ZW1bMF0sIGxlZnRMaW5lTmVpUG9pbnQpXHJcbiAgICAgICAgLy/ot5/ovabpgZPlt6bkvqfnm7jkuqTngrlcclxuICAgICAgICBsZXQgY2FyTGVmdCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodExpbmUsIHJpZ2h0SW50ZXJzZWN0aW9uLCBjYXJJdGVtWzNdLCBjYXJMZWZ0UG9pbnQpXHJcbiAgICAgICAgLy/ot5/ovabpgZPlj7Pkvqfnm7jkuqTngrlcclxuICAgICAgICBsZXQgY2FyUmlnaHQgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCByaWdodEludGVyc2VjdGlvbiwgY2FySXRlbVswXSwgY2FyUmlnaHRQb2ludClcclxuICAgICAgICBsZXQgcmlnaHRMaW5lTmVpID0gdGhhdC5nZXRJbnRlcnNlY3RzKHJpZ2h0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIHJpZ2h0SXRlbVszXSwgcmlnaHRMaW5lTmVpUG9pbnQpXHJcbiAgICAgICAgLy8gLy/ot5/lt6bkvqfph4znm7jkuqTngrlcclxuICAgICAgICAvLyBsZXQgbGVmdExpbmVOZWkgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCBsZWZ0SXRlbVsyXSwgbGVmdEl0ZW1bMF0sIGxlZnRJdGVtWzNdKVxyXG4gICAgICAgIC8vIC8v6Lef6L2m6YGT5bem5L6n55u45Lqk54K5XHJcbiAgICAgICAgLy8gbGV0IGNhckxlZnQgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCBsZWZ0SXRlbVsyXSwgY2FySXRlbVszXSwgY2FySXRlbVsyXSlcclxuICAgICAgICAvLyAvL+i3n+i9pumBk+WPs+S+p+ebuOS6pOeCuVxyXG4gICAgICAgIC8vIGxldCBjYXJSaWdodCA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodExpbmUsIGxlZnRJdGVtWzJdLCBjYXJJdGVtWzBdLCBjYXJJdGVtWzFdKVxyXG4gICAgICAgIC8vIGxldCByaWdodExpbmVOZWkgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCBsZWZ0SXRlbVsyXSwgcmlnaHRJdGVtWzBdLCByaWdodEl0ZW1bM10pXHJcblxyXG5cclxuICAgICAgICBsZWZ0SXRlbVsyXSA9IHJpZ2h0SW50ZXJzZWN0aW9uXHJcbiAgICAgICAgbGVmdEl0ZW1bMV0gPSBsZWZ0TGluZU5laVxyXG4gICAgICAgIGNhckl0ZW1bMl0gPSBjYXJMZWZ0XHJcbiAgICAgICAgY2FySXRlbVsxXSA9IGNhclJpZ2h0XHJcbiAgICAgICAgcmlnaHRJdGVtWzJdID0gcmlnaHRMaW5lTmVpXHJcbiAgICAgICAgcmlnaHRJdGVtWzFdID0gcmlnaHRMaW5lXHJcbiAgICAgICAgY29uc29sZS5sb2cobGVmdEl0ZW0sIGNhckl0ZW0sIHJpZ2h0SXRlbSwgJ2xlZnRJdGVtcmlnaHQnKVxyXG5cclxuICAgICAgICAvL+WwhuWFtuS7luWHoOadoei+uemDveW7tumVv1xyXG4gICAgICAgIGxldCBsZWZ0TGluZU5laVBvaW50MiA9IHRoYXQuZ2V0RXh0ZW5kUG9pbnQobGVmdEl0ZW0yWzJdLCBsZWZ0SXRlbTJbM10sIDEwMDApXHJcbiAgICAgICAgbGV0IGNhckxlZnRQb2ludDIgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW0yWzJdLCBjYXJJdGVtMlszXSwgMTAwMClcclxuICAgICAgICBsZXQgY2FyUmlnaHRQb2ludDIgPSB0aGF0LmdldEV4dGVuZFBvaW50KGNhckl0ZW0yWzFdLCBjYXJJdGVtMlswXSwgMTAwMClcclxuICAgICAgICBsZXQgcmlnaHRMaW5lTmVpUG9pbnQyID0gdGhhdC5nZXRFeHRlbmRQb2ludChyaWdodEl0ZW0yWzJdLCByaWdodEl0ZW0yWzNdLCAxMDAwKVxyXG5cclxuICAgICAgICBsZXQgbGVmdExpbmVOZWkyID0gdGhhdC5nZXRJbnRlcnNlY3RzKHJpZ2h0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGxlZnRJdGVtMlsxXSwgbGVmdExpbmVOZWlQb2ludDIpXHJcbiAgICAgICAgLy/ot5/ovabpgZPlt6bkvqfnm7jkuqTngrlcclxuICAgICAgICBsZXQgY2FyTGVmdDIgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCByaWdodEludGVyc2VjdGlvbiwgY2FySXRlbTJbMl0sIGNhckxlZnRQb2ludDIpXHJcbiAgICAgICAgLy/ot5/ovabpgZPlj7Pkvqfnm7jkuqTngrlcclxuICAgICAgICBsZXQgY2FyUmlnaHQyID0gdGhhdC5nZXRJbnRlcnNlY3RzKHJpZ2h0TGluZSwgcmlnaHRJbnRlcnNlY3Rpb24sIGNhckl0ZW0yWzFdLCBjYXJSaWdodFBvaW50MilcclxuICAgICAgICBsZXQgcmlnaHRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodExpbmUsIHJpZ2h0SW50ZXJzZWN0aW9uLCByaWdodEl0ZW0yWzJdLCByaWdodExpbmVOZWlQb2ludDIpXHJcbiAgICAgICAgLy8gbGV0IGxlZnRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodExpbmUsIGxlZnRJdGVtMlsxXSwgbGVmdEl0ZW0yWzBdLCBsZWZ0SXRlbTJbM10pXHJcbiAgICAgICAgLy8gLy/ot5/ovabpgZPlt6bkvqfnm7jkuqTngrlcclxuICAgICAgICAvLyBsZXQgY2FyTGVmdDIgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCBsZWZ0SXRlbTJbMV0sIGNhckl0ZW0yWzNdLCBjYXJJdGVtMlsyXSlcclxuICAgICAgICAvLyAvL+i3n+i9pumBk+WPs+S+p+ebuOS6pOeCuVxyXG4gICAgICAgIC8vIGxldCBjYXJSaWdodDIgPSB0aGF0LmdldEludGVyc2VjdHMocmlnaHRMaW5lLCBsZWZ0SXRlbTJbMV0sIGNhckl0ZW0yWzBdLCBjYXJJdGVtMlsxXSlcclxuICAgICAgICAvLyBsZXQgcmlnaHRMaW5lTmVpMiA9IHRoYXQuZ2V0SW50ZXJzZWN0cyhyaWdodExpbmUsIGxlZnRJdGVtMlsxXSwgcmlnaHRJdGVtMlswXSwgcmlnaHRJdGVtMlszXSlcclxuXHJcbiAgICAgICAgbGVmdEl0ZW0yWzNdID0gcmlnaHRJbnRlcnNlY3Rpb25cclxuICAgICAgICBsZWZ0SXRlbTJbMF0gPSBsZWZ0TGluZU5laVxyXG4gICAgICAgIGNhckl0ZW0yWzNdID0gY2FyTGVmdFxyXG4gICAgICAgIGNhckl0ZW0yWzBdID0gY2FyUmlnaHRcclxuICAgICAgICByaWdodEl0ZW0yWzNdID0gcmlnaHRMaW5lTmVpXHJcbiAgICAgICAgcmlnaHRJdGVtMlswXSA9IHJpZ2h0TGluZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGxlZnRJdGVtMiwgY2FySXRlbTIsIHJpZ2h0SXRlbTIsICdsZWZ0SXRlbTJyaWdodCcpXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoYXQudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhhdC5vcHRpb25zLmlkKSkge1xyXG4gICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoYXQub3B0aW9ucy5pZCkuX2NoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGF0Lm9wdGlvbnMuaWQpKVxyXG4gICAgfVxyXG4gICAgdGhhdC5saW5lRW50aXR5ID0gdGhhdC52aWV3ZXIuZW50aXRpZXMuYWRkKG5ldyBDZXNpdW0uRW50aXR5KHsgaWQ6IHRoYXQub3B0aW9ucy5pZCwgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgfSkpXHJcblxyXG4gICAgY29uc3QgbXlJbWcgPSBuZXcgSW1hZ2UoKVxyXG4gICAgbXlJbWcuc3JjID0gdGhhdC5vcHRpb25zLnJvYWRJbWFnZVxyXG4gICAgbXlJbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhhcmVhWzFdWzBdLCB0aGF0Lm9wdGlvbnMucm9hZEltYWdlLCAnbGxsbCcpXHJcbiAgICAgIGFyZWFbMV1bMF0uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgLy8gaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgICAgIHBhcmVudDogdGhhdC5saW5lRW50aXR5LFxyXG4gICAgICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShpdGVtKSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uSW1hZ2VNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgICBpbWFnZTogdGhhdC5vcHRpb25zLnJvYWRJbWFnZSxcclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSwvLyDlpoLmnpzlm77niYfmnInpgI/mmI7pg6jliIbvvIzpnIDopoHorr7nva7kuLogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlcGVhdDogdGhhdC5jYWxjdWxhdGVUZXh0dXJlUmVwZWF0KGl0ZW0sIG15SW1nKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3RSb3RhdGlvbjogdGhhdC5jYWxjdWxhdGVSb2FkQW5nbGUocG9zaXRpb25zW2luZGV4XSwgcG9zaXRpb25zW2luZGV4ICsgMV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbXlJbWcyID0gbmV3IEltYWdlKClcclxuICAgIG15SW1nMi5zcmMgPSB0aGF0Lm9wdGlvbnMuc2lkZUltYWdlXHJcbiAgICBteUltZzIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyBhcmVhWzBdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGFyZWFbMF0uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgcGFyZW50OiB0aGF0LmxpbmVFbnRpdHksXHJcbiAgICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KGl0ZW0pLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbmV3IENlc2l1bS5JbWFnZU1hdGVyaWFsUHJvcGVydHkoe1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0Lm9wdGlvbnMuc2lkZUltYWdlLFxyXG4gICAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLC8vIOWmguaenOWbvueJh+aciemAj+aYjumDqOWIhu+8jOmcgOimgeiuvue9ruS4uiB0cnVlXHJcbiAgICAgICAgICAgICAgcmVwZWF0OiB0aGF0LmNhbGN1bGF0ZVRleHR1cmVSZXBlYXQoaXRlbSwgbXlJbWcyKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3RSb3RhdGlvbjogdGhhdC5jYWxjdWxhdGVSb2FkQW5nbGUocG9zaXRpb25zW2luZGV4XSwgcG9zaXRpb25zW2luZGV4ICsgMV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBhcmVhWzJdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGFyZWFbMl0uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICB0aGF0LnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShpdGVtKSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uSW1hZ2VNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgICBpbWFnZTogdGhhdC5vcHRpb25zLnNpZGVJbWFnZSxcclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSwvLyDlpoLmnpzlm77niYfmnInpgI/mmI7pg6jliIbvvIzpnIDopoHorr7nva7kuLogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlcGVhdDogdGhhdC5jYWxjdWxhdGVUZXh0dXJlUmVwZWF0KGl0ZW0sIG15SW1nMilcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN0Um90YXRpb246IHRoYXQuY2FsY3VsYXRlUm9hZEFuZ2xlKHBvc2l0aW9uc1tpbmRleF0sIHBvc2l0aW9uc1tpbmRleCArIDFdKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGdldFNpZGVSZWN0YW5nbGUocG9zaXRpb25zLCB3aWR0aCkge1xyXG4gICAgbGV0IHJpZ2h0ID0gW11cclxuICAgIGxldCBsZWZ0ID0gW11cclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgcG9zaXRpb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHJpZ2h0LnB1c2goW2l0ZW1bMF0sIGl0ZW1bMV1dKVxyXG4gICAgICBsZWZ0LnB1c2goW2l0ZW1bMl0sIGl0ZW1bM11dKVxyXG4gICAgfSlcclxuICAgIGxldCByaWdodFBvc2kgPSB0aGF0LmdldFJlY3RhbmdsZShyaWdodCwgd2lkdGgsICdzaWRlJylcclxuXHJcbiAgICBsZXQgbGVmdFBvc2kgPSB0aGlzLmdldFJlY3RhbmdsZShsZWZ0LCB3aWR0aCwgJ3NpZGUnKVxyXG4gICAgcmV0dXJuIHsgbGVmdDogbGVmdFBvc2ksIHJpZ2h0OiByaWdodFBvc2kgfVxyXG4gIH1cclxuICBnZXRSZWN0YW5nbGUocG9zaXRpb25zLCB3aWR0aCwgdHlwZSkge1xyXG4gICAgbGV0IGFyZWFBcnIgPSBbXVxyXG4gICAgbGV0IG5ld1Bvc2l0aW9ucyA9IFtdXHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbnNbaV1bMF07XHJcbiAgICAgIGNvbnN0IGVuZCA9IHBvc2l0aW9uc1tpXVsxXTtcclxuXHJcbiAgICAgIGFyZWFBcnJbaV0gPSBbXVxyXG4gICAgICBsZXQgcG9zaSA9IFtdXHJcbiAgICAgIGxldCBPdXRsaW5lZ2VvbWV0cnkgPSBuZXcgQ2VzaXVtLkNvcnJpZG9yR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvc2l0aW9uczogW3N0YXJ0LCBlbmRdLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBjb3JuZXJUeXBlOiBDZXNpdW0uQ29ybmVyVHlwZS5NSVRFUkVELFxyXG4gICAgICAgIHZlcnRleEZvcm1hdDogQ2VzaXVtLk1hdGVyaWFsQXBwZWFyYW5jZS5NYXRlcmlhbFN1cHBvcnQuQUxMLnZlcnRleEZvcm1hdFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgZ2VvbWV0cnkgPSBDZXNpdW0uQ29ycmlkb3JHZW9tZXRyeS5jcmVhdGVHZW9tZXRyeShPdXRsaW5lZ2VvbWV0cnkpXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoOyBqICs9IDMpIHtcclxuICAgICAgICBsZXQgdmFsID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXNbal0sIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzW2ogKyAxXSwgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXNbaiArIDJdKSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgIHBvc2kucHVzaChbdmFsLmxuZywgdmFsLmxhdF0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgZ2VvbWV0cnkuaW5kaWNlcy5sZW5ndGg7IHggKz0gMykge1xyXG4gICAgICAgIGFyZWFBcnJbaV0ucHVzaCh0dXJmLnBvbHlnb24oW1twb3NpW2dlb21ldHJ5LmluZGljZXNbeF1dLCBwb3NpW2dlb21ldHJ5LmluZGljZXNbeCArIDFdXSwgcG9zaVtnZW9tZXRyeS5pbmRpY2VzW3ggKyAyXV0sIHBvc2lbZ2VvbWV0cnkuaW5kaWNlc1t4XV1dXSkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBnZW9qc29uID0gdHVyZi51bmlvbihhcmVhQXJyW2ldWzBdLCBhcmVhQXJyW2ldWzFdKTtcclxuICAgICAgbGV0IGFyciA9IFtdXHJcbiAgICAgIGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0ucG9wKClcclxuICAgICAgZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhpdGVtWzBdLCBpdGVtWzFdKSlcclxuICAgICAgfSlcclxuICAgICAgbGV0IGRvdFJlc3VsdCwgYW5nbGVcclxuICAgICAgY29uc3QgdGVtcFZlYyA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpO1xyXG5cclxuICAgICAgLy8g6K6h566X5bm25b2S5LiA5YyW56ys5LiA5Liq5ZCR6YePXHJcbiAgICAgIGNvbnN0IHZlY3RvcjEgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QodGhhdC5wb2ludEFycltpXVsxXSwgdGhhdC5wb2ludEFycltpXVswXSwgdGVtcFZlYyksXHJcbiAgICAgICAgdGVtcFZlY1xyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8g6K6h566X5bm25b2S5LiA5YyW56ys5LqM5Liq5ZCR6YePXHJcbiAgICAgIGNvbnN0IHZlY3RvcjIgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoXHJcbiAgICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoYXJyWzFdLCBhcnJbMF0sIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSxcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgZG90UmVzdWx0ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZG90KHZlY3RvcjEsIHZlY3RvcjIpO1xyXG4gICAgICBpZiAoKDAuOTk5IDwgZG90UmVzdWx0ICYmIGRvdFJlc3VsdCA8IDEuMDAxKSB8fCAoLTAuOTk5ID4gZG90UmVzdWx0ICYmIGRvdFJlc3VsdCA+IC0xLjAwMSkpIHsvL+iwg+aVtOaWueWQkVxyXG4gICAgICAgIG5ld1Bvc2l0aW9ucy5wdXNoKGFycilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgbmV3QXJyID0gW11cclxuICAgICAgICBuZXdBcnJbMF0gPSBhcnJbMV1cclxuICAgICAgICBuZXdBcnJbMV0gPSBhcnJbMl1cclxuICAgICAgICBuZXdBcnJbMl0gPSBhcnJbM11cclxuICAgICAgICBuZXdBcnJbM10gPSBhcnJbMF1cclxuICAgICAgICBuZXdQb3NpdGlvbnMucHVzaChuZXdBcnIpXHJcbiAgICAgIH1cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gaWYgKCF0eXBlKSB7XHJcbiAgICAgIC8vICAgLy8gaWYgKGNyb3NzID4gMCAmJiAhdHlwZSkgey8v6LCD5pW05pa55ZCRXHJcbiAgICAgIC8vICAgaWYgKCgwLjk5OSA8IGRvdFJlc3VsdCAmJiBkb3RSZXN1bHQgPCAxLjAwMSkgfHwgKC0wLjk5OSA+IGRvdFJlc3VsdCAmJiBkb3RSZXN1bHQgPiAtMS4wMDEpKSB7Ly/osIPmlbTmlrnlkJFcclxuICAgICAgLy8gICAgIG5ld1Bvc2l0aW9ucy5wdXNoKGFycilcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgbGV0IG5ld0FyciA9IFtdXHJcbiAgICAgIC8vICAgICBuZXdBcnJbMF0gPSBhcnJbMV1cclxuICAgICAgLy8gICAgIG5ld0FyclsxXSA9IGFyclsyXVxyXG4gICAgICAvLyAgICAgbmV3QXJyWzJdID0gYXJyWzNdXHJcbiAgICAgIC8vICAgICBuZXdBcnJbM10gPSBhcnJbMF1cclxuICAgICAgLy8gICAgIG5ld1Bvc2l0aW9ucy5wdXNoKG5ld0FycilcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgbmV3UG9zaXRpb25zLnB1c2goYXJyKVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3UG9zaXRpb25zXHJcbiAgfVxyXG4gIGdldEV4dGVuZFBvaW50KHBvc2l0aW9uMSwgcG9zaXRpb24yLCBkaXN0YW5jZSkge1xyXG4gICAgLy8gbGV0IHBvc2l0aW9uMSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHAxWzBdLCBwMVsxXSwgMCk7XHJcbiAgICAvLyBsZXQgcG9zaXRpb24yID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocDJbMF0sIHAyWzFdLCAwKTtcclxuICAgIGxldCBwb3QgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwb3NpdGlvbjIsIHBvc2l0aW9uMSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpOy8v5pa55ZCRXHJcbiAgICB2YXIgZGlyID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKHBvdCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpOy8v5ZCR6YeP5b2S5LiA5YyWXHJcblxyXG4gICAgdmFyIHJheSA9IG5ldyBDZXNpdW0uUmF5KHBvc2l0aW9uMSwgZGlyKTtcclxuICAgIGxldCBucCA9IENlc2l1bS5SYXkuZ2V0UG9pbnQocmF5LCBkaXN0YW5jZSAqIDEwKTsvL+iuoeeul+W7tumVv+eCuVxyXG4gICAgcmV0dXJuIG5wXHJcbiAgfVxyXG4gIGdldEFycihhcnIxLCBhcnIyKSB7XHJcbiAgICBhcnIyID0gYXJyMi5yZXZlcnNlKClcclxuICAgIGxldCBwb2x5Z29uID0gW11cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnIxLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcclxuICAgICAgcG9seWdvbi5wdXNoKFthcnIxW2luZGV4XSwgYXJyMVtpbmRleCArIDFdLCBhcnIyW2luZGV4ICsgMV0sIGFycjJbaW5kZXhdXSlcclxuICAgIH1cclxuICAgIHJldHVybiBwb2x5Z29uXHJcbiAgfVxyXG4gIGNhbGN1bGF0ZVJvYWRBbmdsZTIoc3RhcnRQb2ludCwgZW5kUG9pbnQpIHtcclxuICAgIC8vIDEuIOiOt+WPluWcsOihqOazleWQkemHj1xyXG4gICAgY29uc3Qgbm9ybWFsID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoXHJcbiAgICAgIHN0YXJ0UG9pbnQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcbiAgICAvLyAyLiDmnoTlu7rluKbmpK3nkIPlj4LmlbDnmoRFTlXnn6npmLVcclxuICAgIGNvbnN0IGVudU1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKFxyXG4gICAgICBzdGFydFBvaW50LCB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLCBub3JtYWwpO1xyXG4gICAgY29uc3QgaW52ZXJzZU1hdHJpeCA9IENlc2l1bS5NYXRyaXg0LmludmVyc2UoXHJcbiAgICAgIGVudU1hdHJpeCwgbmV3IENlc2l1bS5NYXRyaXg0KCkpO1xyXG5cclxuICAgIC8vIDMuIOi9rOaNouWdkOagh+W5tuiuoeeul+ebuOWvueWQkemHj1xyXG4gICAgY29uc3QgbG9jYWxFbmQgPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5UG9pbnQoXHJcbiAgICAgIGludmVyc2VNYXRyaXgsIGVuZFBvaW50LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBoZWlnaHRGYWN0b3IgPSBNYXRoLmFicyhsb2NhbEVuZC56KSAvIDEwMDA7IC8vIOmrmOW6puW3ruihpeWBv1xyXG5cclxuICAgIC8vIDQuIOS9v+eUqOWbm+ixoemZkOWPjeato+WIh+iuoeeul+inkuW6plxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKGxvY2FsRW5kLnksIGxvY2FsRW5kLngpO1xyXG4gICAgY29uc3QgYWRqdXN0ZWRBbmdsZSA9IGFuZ2xlIC0gKGhlaWdodEZhY3RvciAqIDAuMDEpOyAvLyDpq5jluqbooaXlgb9cclxuICAgIGxldCByZXN1bHQgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoYWRqdXN0ZWRBbmdsZSlcclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCwgJ3Jlc3VsdCcpXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICBjYWxjdWxhdGVSb2FkQW5nbGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpIHtcclxuICAgIC8vIDEuIOiOt+WPluWcsOihqOazleWQkemHj1xyXG4gICAgY29uc3Qgbm9ybWFsID0gQ2VzaXVtLkVsbGlwc29pZC5XR1M4NC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoc3RhcnRQb2ludCk7XHJcblxyXG4gICAgLy8gMi4g5p6E5bu657K+56GuRU5V5Z2Q5qCH57O7XHJcbiAgICBjb25zdCBlbnVNYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShzdGFydFBvaW50LCB1bmRlZmluZWQsIG5vcm1hbCk7XHJcbiAgICBjb25zdCBpbnZlcnNlTWF0cml4ID0gQ2VzaXVtLk1hdHJpeDQuaW52ZXJzZShlbnVNYXRyaXgsIG5ldyBDZXNpdW0uTWF0cml4NCgpKTtcclxuXHJcbiAgICAvLyAzLiDovazmjaLnu4jngrnlubborqHnrpfmsLTlubPlkJHph49cclxuICAgIGNvbnN0IGxvY2FsRW5kID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50KGludmVyc2VNYXRyaXgsIGVuZFBvaW50LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICBjb25zdCBob3Jpem9udGFsVmVjID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKGxvY2FsRW5kLngsIGxvY2FsRW5kLnkpO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjIubm9ybWFsaXplKGhvcml6b250YWxWZWMsIGhvcml6b250YWxWZWMpO1xyXG5cclxuICAgIGNvbnN0IG5vcnRoID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEsIDApO1xyXG5cclxuICAgIGNvbnN0IGFuZ2xlID0gQ2VzaXVtLkNhcnRlc2lhbjIuYW5nbGVCZXR3ZWVuKG5vcnRoLCBob3Jpem9udGFsVmVjKTtcclxuICAgIGNvbnN0IGNyb3NzID0gQ2VzaXVtLkNhcnRlc2lhbjIuY3Jvc3Mobm9ydGgsIGhvcml6b250YWxWZWMsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMigpKTtcclxuICAgIHJldHVybiBjcm9zcyA8IDAgPyBhbmdsZSA6IC1hbmdsZTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVBvbHlnb25PcmllbnRhdGlvbihwb3NpdGlvbnMpIHtcclxuXHJcbiAgICAvLyDlgYforr4gcG9zaXRpb24g5pivIENlc2l1bS5DYXJ0ZXNpYW4zIOWvueixoe+8jOihqOekuuWcsOeQg+S4iueahOafkOS4queCuVxyXG4gICAgdmFyIHBvc2l0aW9uID0gcG9zaXRpb25zWzBdXHJcbiAgICAvLyDojrflj5bkuJzjgIHljJfjgIHkuIrlnZDmoIfns7tcclxuICAgIHZhciBlYXN0Tm9ydGhVcCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKTtcclxuICAgIC8vIG5vcnRoQXhpcyDmmK/ljJfmlrnlkJHlkJHph49cclxuICAgIHZhciBub3J0aEF4aXMgPSBlYXN0Tm9ydGhVcC5nZXRDb2x1bW4oMSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKG5vcnRoQXhpcywgbm9ydGhBeGlzKTtcclxuXHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpcmVjdGlvbiwgZGlyZWN0aW9uKTtcclxuXHJcblxyXG4gICAgY29uc3QgZG90ID0gQ2VzaXVtLkNhcnRlc2lhbjMuZG90KG5vcnRoQXhpcywgZGlyZWN0aW9uKTtcclxuICAgIGNvbnN0IG1hZ0EgPSBDZXNpdW0uQ2FydGVzaWFuMy5tYWduaXR1ZGUobm9ydGhBeGlzKTtcclxuICAgIGNvbnN0IG1hZ0IgPSBDZXNpdW0uQ2FydGVzaWFuMy5tYWduaXR1ZGUoZGlyZWN0aW9uKTtcclxuICAgIHJldHVybiBNYXRoLmFjb3MoZG90IC8gKG1hZ0EgKiBtYWdCKSk7XHJcbiAgfVxyXG4gIGNhbGN1bGF0ZVRleHR1cmVSZXBlYXQocG9seWdvblBvc2l0aW9ucywgdGV4dHVyZVNpemUsIG1ldGVyUGVyUGl4ZWwgPSAwLjAxKSB7XHJcbiAgICAvLyDpqozor4HnurnnkIblsLrlr7hcclxuICAgIGlmICghdGV4dHVyZVNpemUud2lkdGggfHwgIXRleHR1cmVTaXplLmhlaWdodCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgc2l6ZSBtdXN0IGNvbnRhaW4gd2lkdGggYW5kIGhlaWdodCBpbiBwaXhlbHMnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDliJvlu7rlpJrovrnlvaLlh6DkvZXkvZNcclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gQ2VzaXVtLlBvbHlnb25HZW9tZXRyeS5jcmVhdGVHZW9tZXRyeShcclxuICAgICAgbmV3IENlc2l1bS5Qb2x5Z29uR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShwb2x5Z29uUG9zaXRpb25zKSxcclxuICAgICAgICB2ZXJ0ZXhGb3JtYXQ6IENlc2l1bS5WZXJ0ZXhGb3JtYXQuUE9TSVRJT05fT05MWVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyDorqHnrpflpJrovrnlvaLpnaLnp68o5bmz5pa557GzKVxyXG4gICAgbGV0IGFyZWEgPSAwO1xyXG4gICAgY29uc3QgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgICBjb25zdCBpMCA9IGluZGljZXNbaV0gKiAzO1xyXG4gICAgICBjb25zdCBpMSA9IGluZGljZXNbaSArIDFdICogMztcclxuICAgICAgY29uc3QgaTIgPSBpbmRpY2VzW2kgKyAyXSAqIDM7XHJcblxyXG4gICAgICBjb25zdCBwMCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhwb3NpdGlvbnNbaTBdLCBwb3NpdGlvbnNbaTAgKyAxXSwgcG9zaXRpb25zW2kwICsgMl0pO1xyXG4gICAgICBjb25zdCBwMSA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhwb3NpdGlvbnNbaTFdLCBwb3NpdGlvbnNbaTEgKyAxXSwgcG9zaXRpb25zW2kxICsgMl0pO1xyXG4gICAgICBjb25zdCBwMiA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhwb3NpdGlvbnNbaTJdLCBwb3NpdGlvbnNbaTIgKyAxXSwgcG9zaXRpb25zW2kyICsgMl0pO1xyXG5cclxuICAgICAgY29uc3QgY3Jvc3MgPSBDZXNpdW0uQ2FydGVzaWFuMy5jcm9zcyhcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwMSwgcDAsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSxcclxuICAgICAgICBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwMiwgcDAsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSxcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApO1xyXG4gICAgICBhcmVhICs9IENlc2l1bS5DYXJ0ZXNpYW4zLm1hZ25pdHVkZShjcm9zcykgKiAwLjU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5bCG5YOP57Sg5bC65a+46L2s5o2i5Li65a6e6ZmF5bC65a+477yI5bmz5pa557Gz77yJXHJcbiAgICBjb25zdCB0ZXh0dXJlV2lkdGhNZXRlcnMgPSB0ZXh0dXJlU2l6ZS53aWR0aCAqIG1ldGVyUGVyUGl4ZWw7XHJcbiAgICBjb25zdCB0ZXh0dXJlSGVpZ2h0TWV0ZXJzID0gdGV4dHVyZVNpemUuaGVpZ2h0ICogbWV0ZXJQZXJQaXhlbDtcclxuICAgIGNvbnN0IHRleHR1cmVBcmVhID0gdGV4dHVyZVdpZHRoTWV0ZXJzICogdGV4dHVyZUhlaWdodE1ldGVycztcclxuXHJcbiAgICAvLyDorqHnrpflkITovbTlkJHph43lpI3mrKHmlbBcclxuICAgIGNvbnN0IHJlcGVhdFggPSBNYXRoLnNxcnQoYXJlYSkgLyB0ZXh0dXJlV2lkdGhNZXRlcnM7XHJcbiAgICBjb25zdCByZXBlYXRZID0gTWF0aC5zcXJ0KGFyZWEpIC8gdGV4dHVyZUhlaWdodE1ldGVycztcclxuXHJcbiAgICByZXR1cm4gbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKE1hdGgubWF4KDEsIE1hdGguY2VpbChyZXBlYXRYKSksIDEuMCk7XHJcbiAgfVxyXG4gIHN3YXBMYXN0RWxlbWVudHMoYXJyMSwgYXJyMikge1xyXG4gICAgY29uc3QgbGFzdCA9IGFycjFbYXJyMS5sZW5ndGggLSAxXVxyXG4gICAgY29uc3QgZmlyc3QgPSBhcnIyWzBdXHJcbiAgICBhcnIxW2FycjEubGVuZ3RoIC0gMV0gPSBmaXJzdFxyXG4gICAgYXJyMlswXSA9IGxhc3RcclxuXHJcbiAgICByZXR1cm4gW2FycjEsIGFycjJdO1xyXG4gIH1cclxuICBjcmVhdGVMaW5lQnVmZmVyUG9seWdvblNpZGUocG9zaXRpb25zLCB3aWR0aCkge1xyXG4gICAgbGV0IGFyZWEgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgcG9zaSA9IHBvc2l0aW9uc1tpXTtcclxuXHJcbiAgICAgIGNvbnN0IGRpciA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvc2lbMV0sIHBvc2lbMF0sIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpciwgZGlyKTtcclxuXHJcbiAgICAgIC8vIOiOt+WPluWeguebtOWQkemHj++8iOWfuuS6jlrovbTvvIlcclxuICAgICAgY29uc3QgcGVycCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmNyb3NzKGRpciwgQ2VzaXVtLkNhcnRlc2lhbjMuVU5JVF9aLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShwZXJwLCBwZXJwKTtcclxuXHJcbiAgICAgIC8vIOeUn+aIkOWBj+enu+WQkemHj1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSBDZXNpdW0uQ2FydGVzaWFuMy5tdWx0aXBseUJ5U2NhbGFyKHBlcnAsIHdpZHRoLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIGxldCBwb2ludDEgPSBDZXNpdW0uQ2FydGVzaWFuMy5hZGQocG9zaVswXSwgb2Zmc2V0LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgICAgbGV0IHBvaW50MyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmFkZChwb3NpWzFdLCBvZmZzZXQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKVxyXG5cclxuICAgICAgLy8gaSA9PSBwb3NpdGlvbnMubGVuZ3RoIC0gMiA/IGFyZWEucHVzaChzdGFydCwgcG9pbnQxLCBlbmQsIHBvaW50MykgOiBhcmVhLnB1c2goc3RhcnQsIHBvaW50MSlcclxuICAgICAgYXJlYS5wdXNoKFtwb3NpWzBdLCBwb2ludDEsIHBvaW50MywgcG9zaVsxXV0pXHJcbiAgICB9XHJcbiAgICAvLyBsZXQgYXJyID0gW11cclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgYXJlYS5sZW5ndGggLSAyOyBpICs9IDIpIHtcclxuICAgIC8vICAgYXJyLnB1c2goW2FyZWFbaV0sIGFyZWFbaSArIDFdLCBhcmVhW2kgKyAzXSwgYXJlYVtpICsgMl1dKVxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIGFyZWFcclxuICB9XHJcbiAgY3JlYXRlTGluZUJ1ZmZlclBvbHlnb24yKHBvc2l0aW9ucywgd2lkdGgpIHtcclxuICAgIGxldCBhcmVhID0gW11cclxuICAgIGxldCBsZWZ0UG9zaXRpb25zID0gW107XHJcbiAgICBsZXQgcmlnaHRQb3NpdGlvbnMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbnNbaV07XHJcbiAgICAgIC8vIGNvbnN0IGVuZCA9IHBvc2l0aW9uc1tpICsgMV0gfHwgcG9zaXRpb25zW2kgLSAxXTtcclxuICAgICAgY29uc3QgZW5kID0gcG9zaXRpb25zW2kgKyAxXTtcclxuXHJcbiAgICAgIGNvbnN0IGRpciA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KGVuZCwgc3RhcnQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpciwgZGlyKTtcclxuXHJcbiAgICAgIC8vIOiOt+WPluWeguebtOWQkemHj++8iOWfuuS6jlrovbTvvIlcclxuICAgICAgY29uc3QgcGVycCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmNyb3NzKGRpciwgQ2VzaXVtLkNhcnRlc2lhbjMuVU5JVF9aLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShwZXJwLCBwZXJwKTtcclxuXHJcbiAgICAgIGNvbnN0IGRpcjIgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChzdGFydCwgZW5kLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShkaXIyLCBkaXIyKTtcclxuXHJcbiAgICAgIC8vIOiOt+WPluWeguebtOWQkemHj++8iOWfuuS6jlrovbTvvIlcclxuICAgICAgY29uc3QgcGVycDIgPSBDZXNpdW0uQ2FydGVzaWFuMy5jcm9zcyhkaXIyLCBDZXNpdW0uQ2FydGVzaWFuMy5VTklUX1osIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuICAgICAgQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKHBlcnAyLCBwZXJwMik7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAvLyDnlJ/miJDlgY/np7vlkJHph49cclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gQ2VzaXVtLkNhcnRlc2lhbjMubXVsdGlwbHlCeVNjYWxhcihwZXJwLCB3aWR0aCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICBjb25zdCBvZmZzZXQyID0gQ2VzaXVtLkNhcnRlc2lhbjMubXVsdGlwbHlCeVNjYWxhcihwZXJwLCAtd2lkdGgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcbiAgICAgIGNvbnN0IG9mZnNldEVuZCA9IENlc2l1bS5DYXJ0ZXNpYW4zLm11bHRpcGx5QnlTY2FsYXIocGVycDIsIC13aWR0aCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICBjb25zdCBvZmZzZXRFbmQyID0gQ2VzaXVtLkNhcnRlc2lhbjMubXVsdGlwbHlCeVNjYWxhcihwZXJwMiwgd2lkdGgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKTtcclxuXHJcbiAgICAgIGxldCBwb2ludDEgPSBDZXNpdW0uQ2FydGVzaWFuMy5hZGQoc3RhcnQsIG9mZnNldCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpXHJcbiAgICAgIGxldCBwb2ludDIgPSBDZXNpdW0uQ2FydGVzaWFuMy5hZGQoc3RhcnQsIG9mZnNldDIsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKVxyXG4gICAgICBsZXQgcG9pbnQzID0gQ2VzaXVtLkNhcnRlc2lhbjMuYWRkKGVuZCwgb2Zmc2V0RW5kLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSlcclxuICAgICAgbGV0IHBvaW50NCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmFkZChlbmQsIG9mZnNldEVuZDIsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKVxyXG5cclxuICAgICAgYXJlYS5wdXNoKFtwb2ludDEsIHBvaW50MywgcG9pbnQ0LCBwb2ludDJdKVxyXG5cclxuICAgICAgcmlnaHRQb3NpdGlvbnMucHVzaChbcG9pbnQxLCBwb2ludDNdKVxyXG4gICAgICBsZWZ0UG9zaXRpb25zLnB1c2goW3BvaW50MiwgcG9pbnQ0XSlcclxuXHJcbiAgICAgIC8vIGlmIChpID09IHBvc2l0aW9ucy5sZW5ndGggLSAyKSB7XHJcbiAgICAgIC8vICAgYXJlYS5wdXNoKHBvaW50MSwgcG9pbnQyLCBwb2ludDMsIHBvaW50NClcclxuICAgICAgLy8gICByaWdodFBvc2l0aW9ucy5wdXNoKHBvaW50MSlcclxuICAgICAgLy8gICBsZWZ0UG9zaXRpb25zLnB1c2gocG9pbnQyKVxyXG4gICAgICAvLyAgIGxlZnRQb3NpdGlvbnMucHVzaChwb2ludDQpXHJcbiAgICAgIC8vICAgcmlnaHRQb3NpdGlvbnMucHVzaChwb2ludDMpXHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgYXJlYS5wdXNoKHBvaW50MSwgcG9pbnQyKVxyXG4gICAgICAvLyAgIHJpZ2h0UG9zaXRpb25zLnB1c2gocG9pbnQxKVxyXG4gICAgICAvLyAgIGxlZnRQb3NpdGlvbnMucHVzaChwb2ludDIpXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIC8vIGxldCBhcnIgPSBbXVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBhcmVhLmxlbmd0aCAtIDI7IGkgKz0gMikge1xyXG4gICAgLy8gICBhcnIucHVzaChbYXJlYVtpXSwgYXJlYVtpICsgMV0sIGFyZWFbaSArIDNdLCBhcmVhW2kgKyAyXV0pXHJcbiAgICAvLyB9XHJcbiAgICBjb25zb2xlLmxvZyhhcmVhLCByaWdodFBvc2l0aW9ucywgJ3JpZ2h0UG9zaXRpb25zJylcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgLy8gcmV0dXJuIFthcnIsIHJpZ2h0UG9zaXRpb25zLCBsZWZ0UG9zaXRpb25zXVxyXG4gICAgcmV0dXJuIFthcmVhLCByaWdodFBvc2l0aW9ucywgbGVmdFBvc2l0aW9uc11cclxuICB9XHJcbiAgZ2V0SW50ZXJzZWN0cyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBwb2ludDQpIHtcclxuICAgIGxldCBjYXJQb2ludDEgPSB0aGlzLmdldExvbkxhdChwb2ludDEpXHJcbiAgICBsZXQgY2FyUG9pbnQyID0gdGhpcy5nZXRMb25MYXQocG9pbnQyKVxyXG4gICAgbGV0IGNhclBvaW50MyA9IHRoaXMuZ2V0TG9uTGF0KHBvaW50MylcclxuICAgIGxldCBjYXJQb2ludDQgPSB0aGlzLmdldExvbkxhdChwb2ludDQpXHJcbiAgICB2YXIgbGluZTEgPSB0dXJmLmxpbmVTdHJpbmcoW1xyXG4gICAgICBbY2FyUG9pbnQxLmxvbiwgY2FyUG9pbnQxLmxhdF0sXHJcbiAgICAgIFtjYXJQb2ludDIubG9uLCBjYXJQb2ludDIubGF0XVxyXG4gICAgXSk7XHJcbiAgICB2YXIgbGluZTIgPSB0dXJmLmxpbmVTdHJpbmcoW1xyXG4gICAgICBbY2FyUG9pbnQzLmxvbiwgY2FyUG9pbnQzLmxhdF0sXHJcbiAgICAgIFtjYXJQb2ludDQubG9uLCBjYXJQb2ludDQubGF0XVxyXG4gICAgXSk7XHJcbiAgICB2YXIgaW50ZXJzZWN0cyA9IHR1cmYubGluZUludGVyc2VjdChsaW5lMSwgbGluZTIpO1xyXG4gICAgaWYgKGludGVyc2VjdHMuZmVhdHVyZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoaW50ZXJzZWN0cy5mZWF0dXJlc1swXS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgaW50ZXJzZWN0cy5mZWF0dXJlc1swXS5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0TG9uTGF0KHBvaW50KSB7XHJcbiAgICBsZXQgcG9pbnREZSA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb2ludClcclxuICAgIGNvbnN0IGxvbmdpdHVkZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhwb2ludERlLmxvbmdpdHVkZSk7XHJcbiAgICBjb25zdCBsYXRpdHVkZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhwb2ludERlLmxhdGl0dWRlKTtcclxuICAgIHJldHVybiB7IGxvbjogbG9uZ2l0dWRlLCBsYXQ6IGxhdGl0dWRlIH1cclxuXHJcbiAgfVxyXG4gIGNyZWF0ZUxpbmVCdWZmZXJQb2x5Z29uKHZpZXdlciwgcG9zaXRpb25zLCB3aWR0aCkge1xyXG4gICAgLy8g6K6h566X5q+P5Liq57q/5q6155qE5bem5Y+z5YGP56e754K5XHJcbiAgICBjb25zdCBsZWZ0UG9zaXRpb25zID0gW107XHJcbiAgICBjb25zdCByaWdodFBvc2l0aW9ucyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb25zW2ldO1xyXG4gICAgICBjb25zdCBlbmQgPSBwb3NpdGlvbnNbaSArIDFdIHx8IHBvc2l0aW9uc1tpIC0gMV07XHJcblxyXG4gICAgICAvLyDorqHnrpfnur/mrrXmlrnlkJHlkJHph49cclxuICAgICAgY29uc3QgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuc3VidHJhY3QoZW5kLCBzdGFydCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICAvLyBjb25zdCBkaXJlY3Rpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChzdGFydCwgZW5kLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShkaXJlY3Rpb24sIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAvLyDorqHnrpflnoLnm7TlkJHph4/vvIjkvb/nlKjkuIrlkJHph4/lj4nnp6/vvIlcclxuICAgICAgY29uc3QgdXAgPSBDZXNpdW0uQ2FydGVzaWFuMy5VTklUX1o7XHJcbiAgICAgIGNvbnN0IHBlcnBlbmRpY3VsYXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5jcm9zcyhkaXJlY3Rpb24sIHVwLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIENlc2l1bS5DYXJ0ZXNpYW4zLm5vcm1hbGl6ZShwZXJwZW5kaWN1bGFyLCBwZXJwZW5kaWN1bGFyKTtcclxuXHJcbiAgICAgIC8vIOiuoeeul+W3puWPs+WBj+enu+eCuVxyXG4gICAgICBjb25zdCBsZWZ0T2Zmc2V0ID0gQ2VzaXVtLkNhcnRlc2lhbjMubXVsdGlwbHlCeVNjYWxhcihcclxuICAgICAgICBwZXJwZW5kaWN1bGFyLFxyXG4gICAgICAgIHdpZHRoLFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2lkdGggPiAwKSB7XHJcbiAgICAgICAgcmlnaHRQb3NpdGlvbnMudW5zaGlmdChDZXNpdW0uQ2FydGVzaWFuMy5hZGQoc3RhcnQsIGxlZnRPZmZzZXQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkdGggPCAwKSB7XHJcbiAgICAgICAgcmlnaHRQb3NpdGlvbnMucHVzaChDZXNpdW0uQ2FydGVzaWFuMy5hZGQoc3RhcnQsIGxlZnRPZmZzZXQsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygpKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmlnaHRQb3NpdGlvbnNcclxuICB9XHJcbiAgLy/orqHnrpfop5LluqZcclxuICBjYWxjdWxhdGVBYW5nbGUoYXJyKSB7XHJcbiAgICAvLyBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoYXQuY2FsU2VjdG9yKHRoYXQub3B0aW9ucy5jZW50ZXIsIHRoYXQub3B0aW9ucy5yYWRpdXMsIHRoYXQub3B0aW9ucy5zdGFydEFuZ2xlLCB0aGF0Lm9wdGlvbnMuZW5kQW5nbGUsIDM2MCwgdHJ1ZSlcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRBYW5nbGUoc3RhcnQsIGVuZCkge1xyXG4gICAgICBsZXQgcmFkID0gTWF0aC5QSSAvIDE4MCxcclxuICAgICAgICBsYXQxID0gc3RhcnQueSAqIHJhZCxcclxuICAgICAgICBsYXQyID0gZW5kLnkgKiByYWQsXHJcbiAgICAgICAgbG9uMSA9IHN0YXJ0LnggKiByYWQsXHJcbiAgICAgICAgbG9uMiA9IGVuZC54ICogcmFkO1xyXG4gICAgICBjb25zdCBhID0gTWF0aC5zaW4obG9uMiAtIGxvbjEpICogTWF0aC5jb3MobGF0Mik7XHJcbiAgICAgIGNvbnN0IGIgPVxyXG4gICAgICAgIE1hdGguY29zKGxhdDEpICogTWF0aC5zaW4obGF0MikgLVxyXG4gICAgICAgIE1hdGguc2luKGxhdDEpICogTWF0aC5jb3MobGF0MikgKiBNYXRoLmNvcyhsb24yIC0gbG9uMSk7XHJcbiAgICAgIGNvbnN0IHJhZGlhbnMgPSBNYXRoLmF0YW4yKGEsIGIpXHJcbiAgICAgIGNvbnN0IGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcclxuICAgICAgbGV0IGJlYXJpbmcgPSA0NTAgLSAoKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSSA8IDBcclxuICAgICAgICA/IDM2MCArIChkZWdyZWVzICogMTgwKSAvIE1hdGguUElcclxuICAgICAgICA6IChkZWdyZWVzICogMTgwKSAvIE1hdGguUEkpIC0gOTA7XHJcbiAgICAgIHJldHVybiAzNjAgLSAoYmVhcmluZyAlIDM2MClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2VudGVyID0gYXJyWzBdXHJcbiAgICBsZXQgcG9zODRfMSA9IGFyclsxXVxyXG4gICAgbGV0IHBvczg0XzIgPSBhcnJbMl1cclxuXHJcbiAgICBsZXQgc3RhcnQgPSB7IHg6IGNlbnRlci5sbmcsIHk6IGNlbnRlci5sYXQgfVxyXG4gICAgbGV0IGVuZDEgPSB7IHg6IHBvczg0XzEubG5nLCB5OiBwb3M4NF8xLmxhdCB9XHJcbiAgICBsZXQgZW5kMiA9IHsgeDogcG9zODRfMi5sbmcsIHk6IHBvczg0XzIubGF0IH1cclxuXHJcbiAgICBsZXQgYW5nbGUxID0gZ2V0QWFuZ2xlKHN0YXJ0LCBlbmQxKVxyXG4gICAgbGV0IGFuZ2xlMiA9IGdldEFhbmdsZShzdGFydCwgZW5kMilcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbmdsZTEsXHJcbiAgICAgIGFuZ2xlMlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclJvYWRXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2FyUm9hZFdpZHRoXHJcbiAgfVxyXG5cclxuICBzZXQgY2FyUm9hZFdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jYXJSb2FkV2lkdGggPSB2XHJcbiAgICBSb2FkLmNyZWF0ZSh0aGlzKVxyXG5cclxuICB9XHJcbiAgZ2V0IHNpZGVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2lkZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBzaWRlV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNpZGVXaWR0aCA9IHZcclxuICAgIFJvYWQuY3JlYXRlKHRoaXMpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDnvJbovpHmoYZcclxuICAgKiBAcGFyYW0gc3RhdGU9ZmFsc2Uge2Jvb2xlYW59IOeKtuaAgTogdHJ1ZeaJk+W8gCwgZmFsc2XlhbPpl61cclxuICAgKi9cclxuICBhc3luYyBlZGl0KHN0YXRlID0gZmFsc2UpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9yaWdpbmFsT3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn6YGT6Lev5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfpgZPot68nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHJvYWQtc3VyZmFjZSdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuXHJcbiAgICAgIC8vIOS4i+aLiemAiemhuVxyXG4gICAgICAvLyBsZXQgaGVpZ2h0TW9kZURhdGEgPSBbXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAgbmFtZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgIC8vICAgICB2YWx1ZTogJ+a1t+aLlOmrmOW6picsXHJcbiAgICAgIC8vICAgICBrZXk6ICcwJyxcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyAgIHtcclxuICAgICAgLy8gICAgIG5hbWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAvLyAgICAgdmFsdWU6ICfnm7jlr7nlnLDooagnLFxyXG4gICAgICAvLyAgICAga2V5OiAnMScsXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICB7XHJcbiAgICAgIC8vICAgICBuYW1lOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgLy8gICAgIHZhbHVlOiAn5L6d6ZmE5qih5Z6LJyxcclxuICAgICAgLy8gICAgIGtleTogJzInLFxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gXVxyXG4gICAgICAvLyBsZXQgaGVpZ2h0TW9kZU9iamVjdCA9IGxlZ3AoXHJcbiAgICAgIC8vICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgLy8gICAgICdyb2FkLWJveCdcclxuICAgICAgLy8gICApWzBdLFxyXG4gICAgICAvLyAgICcucm9hZC10eXBlJ1xyXG4gICAgICAvLyApXHJcbiAgICAgIC8vIGlmIChoZWlnaHRNb2RlT2JqZWN0KSB7XHJcbiAgICAgIC8vICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaChoZWlnaHRNb2RlRGF0YSlcclxuICAgICAgLy8gICBsZXQgaGVpZ2h0TW9kZURhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgLy8gICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyb2FkLXR5cGUnKVswXVxyXG4gICAgICAvLyAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgLy8gICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgLy8gICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgLy8gICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAvLyAgICAgICApXHJcbiAgICAgIC8vICAgICAgIGJyZWFrXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgLy8gICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YVtpXS5rZXlcclxuICAgICAgLy8gICAgICAgICBicmVha1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuXHJcblxyXG4gICAgICAvLyAgIHRoaXMuX2VsbXMuaGVpZ2h0ID0gaGVpZ2h0RWxtXHJcbiAgICAgIC8vICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggPSBoZWlnaHRCb3hFbG1cclxuICAgICAgLy8gICB0aGlzLl9lbG1zLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG1cclxuICAgICAgLy8gICB0aGlzLl9lbG1zLmhlaWdodENvbmZpcm0gPSBoZWlnaHRDb25maXJtRWxtXHJcbiAgICAgIC8vICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0ID0gaGVpZ2h0TW9kZU9iamVjdFxyXG5cclxuICAgICAgLy8gICBoZWlnaHRDb25maXJtRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0ID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpKS50b0ZpeGVkKDIpKVxyXG4gICAgICAvLyAgICAgICB0aGlzLl9lbG1zLmFsdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSB0aGlzLnJlbmV3UG9zaXRpb25zKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgIC8vICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgLy8gICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICAvLyAgICAgKVxyXG5cclxuICAgICAgLy8gICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgLy8gICAgIFBvbHlsaW5lT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgLy8gICB9KVxyXG4gICAgICAvLyB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICB0aGlzLl9FdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IHRoaXMuX0V2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudF9zdHlsZSlcclxuICAgICAgLy8gICB0aGlzLl9lbGVtZW50X3N0eWxlID0gbnVsbFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAvLyAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMuY2FyUm9hZFdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY2FyUm9hZFdpZHRoXHJcbiAgICB0aGlzLnNpZGVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNpZGVXaWR0aFxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIHRoaXMucm9hZEltYWdlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm9hZEltYWdlXHJcbiAgICB0aGlzLnNpZGVJbWFnZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNpZGVJbWFnZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5Yiw5a+55bqU5a6e5L2TXHJcbiAgICovXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICAvLyBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAvLyAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgLy8gfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcG9zaXRpb25BcnJheSA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaV1bMF0sXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpXVsxXSxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuaGVpZ2h0RGlmZmVyZW5jZSAvIDJcclxuICAgICAgICApXHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG9Cb3VuZGluZ1NwaGVyZShCb3VuZGluZ1NwaGVyZSwge1xyXG4gICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC0yMC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNwaGVyZSgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAvLyBlbnRpdHnmsqHmnInliqDovb3lrozmiJDml7Ygc3RhdGUg5LiN5Lya562J5LqOMCDmiYDku6Xorr7nva7lrprml7blmajnm7TliLDojrflj5bliLDkuLrmraJcclxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3BoZXJlID0gbmV3IENlc2l1bS5Cb3VuZGluZ1NwaGVyZSgpXHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNkay52aWV3ZXIuX2RhdGFTb3VyY2VEaXNwbGF5LmdldEJvdW5kaW5nU3BoZXJlKFxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBzcGhlcmVcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHN0YXRlID09PSBDZXNpdW0uQm91bmRpbmdTcGhlcmVTdGF0ZS5ET05FKSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliKDpmaRcclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdXHJcbiAgICB0aGlzLmxpbmVFbnRpdHkgPSBudWxsXHJcblxyXG4gICAgaWYgKHRoaXMudmlld2VyLmVudGl0aWVzLmdldEJ5SWQodGhpcy5vcHRpb25zLmlkKSkge1xyXG4gICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5nZXRCeUlkKHRoaXMub3B0aW9ucy5pZCkuX2NoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy52aWV3ZXIuZW50aXRpZXMuZ2V0QnlJZCh0aGlzLm9wdGlvbnMuaWQpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkgeyB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJvYWRcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkVBO0FBQUE7QUFBQTtBQXdFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBekJBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBaklBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQTM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBNnJCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/RoadObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/RoutePlanning/_element.js": /*!************************************************!*\ !*** ./src/Obj/Base/RoutePlanning/_element.js ***! \************************************************/ /*! exports provided: html, css */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return css; });\nfunction html() {\n return \"\\n
\\n
\\n \\u8D77\\u70B9\\n \\n \\n \\n
\\n
\\n
\\n
\\n \\u7EC8\\u70B9\\n \\n \\n \\n
\\n
\\n \";\n}\nfunction css() {\n return \"\\n .YJ-custom-base-dialog>.content {\\n width: 460px;\\n }\\n .YJ-custom-base-dialog>.content>div>.row .col {\\n margin: 0 10px;\\n }\\n .YJ-custom-base-dialog>.content .row .label {\\n flex: auto;\\n }\\n\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUm91dGVQbGFubmluZy9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Sb3V0ZVBsYW5uaW5nL19lbGVtZW50LmpzPzU3ZmEiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbCgpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHN0YXJ0LWNvbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6LW354K5PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJzdGFydExuZ1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwic3RhcnRMYXRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJwaWNrU3RhcnRQb3NcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPuaLvuWPljwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogZmxleC1zdGFydDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4jngrk8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTE4MFwiIG1heD1cIjE4MFwiIEBtb2RlbD1cImVuZExuZ1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwiZW5kTGF0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlbmQtcGljay1idG5cIiBAY2xpY2s9XCJwaWNrRW5kUG9zXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj7mi77lj5Y8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgYFxyXG59XHJcbmZ1bmN0aW9uIGNzcygpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50IHtcclxuICAgICAgICB3aWR0aDogNDYwcHg7XHJcbiAgICB9XHJcbiAgICAuWUotY3VzdG9tLWJhc2UtZGlhbG9nPi5jb250ZW50PmRpdj4ucm93IC5jb2wge1xyXG4gICAgICAgIG1hcmdpbjogMCAxMHB4O1xyXG4gICAgfVxyXG4gICAgLllKLWN1c3RvbS1iYXNlLWRpYWxvZz4uY29udGVudCAucm93IC5sYWJlbCB7XHJcbiAgICAgICAgZmxleDogYXV0bztcclxuICAgIH1cclxuYFxyXG59XHJcbmV4cG9ydCB7IGh0bWwsIGNzcyB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQVdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/RoutePlanning/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/RoutePlanning/clear.js": /*!*********************************************!*\ !*** ./src/Obj/Base/RoutePlanning/clear.js ***! \*********************************************/ /*! exports provided: Clear */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Clear\", function() { return Clear; });\nfunction Clear() {\n YJ.RoutePlanningArrays.forEach(function (m) {\n m.destroy();\n });\n YJ.RoutePlanningArrays = [];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUm91dGVQbGFubmluZy9jbGVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Sb3V0ZVBsYW5uaW5nL2NsZWFyLmpzPzViN2IiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gQ2xlYXIoKSB7XHJcbiAgWUouUm91dGVQbGFubmluZ0FycmF5cy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgbS5kZXN0cm95KClcclxuICB9KVxyXG4gIFlKLlJvdXRlUGxhbm5pbmdBcnJheXMgPSBbXVxyXG59XHJcblxyXG5leHBvcnQge0NsZWFyfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/RoutePlanning/clear.js\n"); /***/ }), /***/ "./src/Obj/Base/RoutePlanning/index.js": /*!*********************************************!*\ !*** ./src/Obj/Base/RoutePlanning/index.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/RoutePlanning/_element.js\");\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\nvar RoutePlanning = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 路径规划\r\n * */\n function RoutePlanning(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, RoutePlanning);\n _this2 = _callSuper(this, RoutePlanning, [sdk, options]);\n YJ.RoutePlanningArrays.push(_this2);\n _this2.options.width = options.width || 4;\n _this2.options.color = options.color || '#ff0000';\n _this2.options.gps = options.gps || false;\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2.start = {\n lng: null,\n lat: null\n };\n _this2.end = {\n lng: null,\n lat: null\n };\n _this2.init();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(RoutePlanning, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(RoutePlanning, [{\n key: \"init\",\n value: function init() {\n var _this3 = this;\n this.startEntity = this.sdk.viewer.entities.getOrCreateEntity('YJ-route-planning-start');\n if (this.start && (this.start.lng || this.start.lng === 0) && (this.start.lat || this.start.lat === 0)) {\n this.startEntity.show = true;\n } else {\n this.startEntity.show = false;\n }\n this.startEntity.position = new Cesium.CallbackProperty(function () {\n var pos = _this3.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this3.startLng, _this3.startLat));\n return pos;\n }, false);\n this.startEntity.billboard = {\n image: this.getSourceRootPath() + '/img/start.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n };\n this.endEntity = this.sdk.viewer.entities.getOrCreateEntity('YJ-route-planning-end');\n if (this.end && (this.end.lng || this.end.lng === 0) && (this.end.lat || this.end.lat === 0)) {\n this.endEntity.show = true;\n } else {\n this.endEntity.show = false;\n }\n this.endEntity.position = new Cesium.CallbackProperty(function () {\n var pos = _this3.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this3.endLng, _this3.endLat));\n return pos;\n }, false);\n this.endEntity.billboard = {\n image: this.getSourceRootPath() + '/img/end.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n };\n this.edit(true);\n this.clear();\n }\n }, {\n key: \"startLng\",\n get: function get() {\n return this.start.lng;\n },\n set: function set(v) {\n this.start.lng = v;\n if (this.start && (this.start.lng || this.start.lng === 0) && (this.start.lat || this.start.lat === 0)) {\n this.startEntity && (this.startEntity.show = true);\n } else {\n this.startEntity && (this.startEntity.show = false);\n }\n this._elms.startLng && this._elms.startLng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"startLat\",\n get: function get() {\n return this.start.lat;\n },\n set: function set(v) {\n this.start.lat = v;\n if (this.start && (this.start.lng || this.start.lng === 0) && (this.start.lat || this.start.lat === 0)) {\n this.startEntity && (this.startEntity.show = true);\n } else {\n this.startEntity && (this.startEntity.show = false);\n }\n this._elms.startLat && this._elms.startLat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"endLng\",\n get: function get() {\n return this.end.lng;\n },\n set: function set(v) {\n this.end.lng = v;\n if (this.end && (this.end.lng || this.end.lng === 0) && (this.end.lat || this.end.lat === 0)) {\n this.endEntity && (this.endEntity.show = true);\n } else {\n this.endEntity && (this.endEntity.show = false);\n }\n this._elms.endLng && this._elms.endLng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"endLat\",\n get: function get() {\n return this.end.lat;\n },\n set: function set(v) {\n this.end.lat = v;\n if (this.end && (this.end.lng || this.end.lng === 0) && (this.end.lat || this.end.lat === 0)) {\n this.endEntity && (this.endEntity.show = true);\n } else {\n this.endEntity && (this.endEntity.show = false);\n }\n this._elms.endLat && this._elms.endLat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(state) {\n var _this4 = this;\n var _this, div, queryBtn, cleanBtn, contentElm, locateCurrentBtn, startColElm, endPickBtnElm, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n this._element_style = null;\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 42;\n break;\n }\n this._element_style = document.createElement('style');\n this._element_style.type = 'text/css';\n this._element_style.setAttribute('data-name', 'YJ_style_dialog');\n this._element_style.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"css\"])();\n _context.next = 11;\n return new _BaseDialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk.viewer._container, {\n title: '路径规划',\n closeCallBack: function closeCallBack() {\n _this4.tip && _this4.tip.destroy();\n _this4.event && _this4.event.destroy();\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n }\n });\n case 11:\n this._DialogObject = _context.sent;\n _context.next = 14;\n return this._DialogObject.init();\n case 14:\n div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '24px';\n div.style.flet = '0';\n div.style.display = 'flex';\n this._DialogObject.footAppChild(div);\n queryBtn = document.createElement('button');\n queryBtn.className = 'default';\n queryBtn.innerHTML = '查询';\n queryBtn.style.width = 'auto';\n queryBtn.addEventListener('click', function () {\n if ((_this4.startLng || _this4.startLng === 0) && (_this4.startLat || _this4.startLat === 0) && (_this4.endLng || _this4.endLng === 0) && (_this4.endLat || _this4.endLat === 0)) {\n !_this4.startEntity && (_this4.startEntity = _this4.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this4.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this4.startLng, _this4.startLat));\n return pos;\n }, false),\n billboard: {\n image: _this4.getSourceRootPath() + '/img/start.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this4.startEntity.show = true;\n !_this4.endEntity && (_this4.endEntity = _this4.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this4.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this4.endLng, _this4.endLat));\n return pos;\n }, false),\n billboard: {\n image: _this4.getSourceRootPath() + '/img/end.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this4.endEntity.show = true;\n _this4.Dialog.queryCallBack && _this4.Dialog.queryCallBack({\n start: [_this4.startLng, _this4.startLat],\n end: [_this4.endLng, _this4.endLat]\n });\n } else {\n console.error('请先设置起点和终点坐标!');\n }\n });\n div.appendChild(queryBtn);\n cleanBtn = document.createElement('button');\n cleanBtn.className = 'default';\n cleanBtn.innerHTML = '清除路线';\n cleanBtn.style.width = 'auto';\n cleanBtn.style.marginLeft = '10px';\n cleanBtn.addEventListener('click', function () {\n _this4.clear();\n });\n div.appendChild(cleanBtn);\n document.getElementsByTagName('head')[0].appendChild(this._element_style);\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n if (this.options.gps) {\n locateCurrentBtn = document.createElement('button');\n locateCurrentBtn.innerHTML = '当前位置';\n locateCurrentBtn.style.marginLeft = '10px';\n locateCurrentBtn.setAttribute('data-is', 'start');\n locateCurrentBtn.addEventListener('click', function (e) {\n _this4.getLocateCurrent(e);\n });\n startColElm = contentElm.getElementsByClassName('start-col')[0];\n startColElm.appendChild(locateCurrentBtn);\n endPickBtnElm = this._DialogObject._element.body.getElementsByClassName('end-pick-btn')[0];\n endPickBtnElm.style.marginRight = '91px';\n }\n all_elm = contentElm.getElementsByTagName('*');\n RoutePlanning.EventBinding(this, all_elm);\n _context.next = 44;\n break;\n case 42:\n if (this._element_style) {\n document.getElementsByTagName('head')[0].removeChild(this._element_style);\n this._element_style = null;\n }\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 44:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"clear\",\n value: function clear() {\n if (this.startEntity) {\n this.sdk.viewer.entities.remove(this.startEntity);\n this.startEntity = null;\n }\n if (this.endEntity) {\n this.sdk.viewer.entities.remove(this.endEntity);\n this.endEntity = null;\n }\n if (this.entity) {\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n }\n if (this.startExtensionEntity) {\n this.sdk.viewer.entities.remove(this.startExtensionEntity);\n this.startExtensionEntity = null;\n }\n if (this.endExtensionEntity) {\n this.sdk.viewer.entities.remove(this.endExtensionEntity);\n this.endExtensionEntity = null;\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.clear();\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n }\n }, {\n key: \"getLocateCurrent\",\n value: function getLocateCurrent(e) {\n var _this5 = this;\n this.reconnecting && this.reconnecting.close();\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_7__[\"getHost\"])();\n var url = '';\n url = this.options.host + '/yjearth4.0/api/v1/gps/state';\n this.reconnecting = new ReconnectingWebSocket('ws://' + url);\n this.reconnecting.onopen = function (event) {\n _this5.reconnecting.onmessage = function (event) {\n _this5.data = JSON.parse(event.data);\n if (_this5.data && _this5.data.rmc) {\n _this5.reconnecting.close();\n if (e.srcElement.getAttribute('data-is') === 'start') {\n _this5.startLng = _this5.data.rmc.lng;\n _this5.startLat = _this5.data.rmc.lat;\n !_this5.startEntity && (_this5.startEntity = _this5.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this5.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this5.startLng, _this5.startLat));\n return pos;\n }, false),\n billboard: {\n image: _this5.getSourceRootPath() + '/img/start.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this5.startEntity.show = true;\n } else {\n _this5.endLng = _this5.data.rmc.lng;\n _this5.endLat = _this5.data.rmc.lat;\n !_this5.endEntity && (_this5.endEntity = _this5.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this5.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this5.endLng, _this5.endLat));\n return pos;\n }, false),\n billboard: {\n image: _this5.getSourceRootPath() + '/img/end.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this5.endEntity.show = true;\n }\n }\n };\n };\n }\n\n /**\r\n * 绘制路径\r\n */\n }, {\n key: \"createRoute\",\n value: function createRoute(positions) {\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n if ((this.startLng || this.startLng === 0) && (this.startLat || this.startLat === 0) && (this.startLng !== positions[0].lng || this.startLat !== positions[0].lat)) {\n this.startExtension = [this.startLng, this.startLat, positions[0].lng, positions[0].lat];\n if (this.startExtensionEntity) {\n this.startExtensionEntity.polyline.positions = Cesium.Cartesian3.fromDegreesArray(this.startExtension);\n } else {\n this.startExtensionEntity = this.sdk.viewer.entities.add({\n show: this.options.show,\n polyline: {\n positions: Cesium.Cartesian3.fromDegreesArray(this.startExtension),\n width: this.options.width,\n clampToGround: true,\n material: this.getMaterial(this.options.color, 2),\n zIndex: 99999999\n }\n });\n }\n }\n if ((this.endLng || this.endLng === 0) && (this.endLat || this.endLat === 0) && (this.endLng !== positions[positions.length - 1].lng || this.endLat !== positions[positions.length - 1].lat)) {\n this.endExtension = [this.endLng, this.endLat, positions[positions.length - 1].lng, positions[positions.length - 1].lat];\n if (this.endExtensionEntity) {\n this.endExtensionEntity.polyline.positions = Cesium.Cartesian3.fromDegreesArray(this.endExtension);\n } else {\n this.endExtensionEntity = this.sdk.viewer.entities.add({\n show: this.options.show,\n polyline: {\n positions: Cesium.Cartesian3.fromDegreesArray(this.endExtension),\n width: this.options.width,\n clampToGround: true,\n material: this.getMaterial(this.options.color, 2),\n zIndex: 99999999\n }\n });\n }\n }\n if (this.entity) {\n this.entity.polyline.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n } else {\n this.entity = this.sdk.viewer.entities.add({\n show: this.options.show,\n polyline: {\n positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),\n width: this.options.width,\n clampToGround: true,\n material: this.getMaterial(this.options.color, 0),\n zIndex: 99999999\n }\n });\n }\n }\n\n /**\r\n * 拾取起点\r\n */\n }, {\n key: \"pickStartPos\",\n value: function pickStartPos(e) {\n var _this6 = this;\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('左键选择起点坐标,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk);\n this.event.mouse_move(function (movement, cartesian) {\n _this6.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n var leftEvent = function leftEvent(movement, cartesian) {\n var pos84 = _this6.cartesian3Towgs84(cartesian, _this6.sdk.viewer);\n _this6.startLng = pos84.lng;\n _this6.startLat = pos84.lat;\n !_this6.startEntity && (_this6.startEntity = _this6.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this6.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this6.startLng, _this6.startLat));\n return pos;\n }, false),\n billboard: {\n image: _this6.getSourceRootPath() + '/img/start.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this6.startEntity.show = true;\n _this6.tip && _this6.tip.destroy();\n _this6.event && _this6.event.destroy();\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_right(function (movement, cartesian) {\n _this6.tip && _this6.tip.destroy();\n _this6.event && _this6.event.destroy();\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this6.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this6.tip && _this6.tip.destroy();\n _this6.event && _this6.event.destroy();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n }\n\n /**\r\n * 拾取终点\r\n */\n }, {\n key: \"pickEndPos\",\n value: function pickEndPos(e) {\n var _this7 = this;\n this.tip && this.tip.destroy();\n this.event && this.event.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('左键选择终点坐标,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk);\n this.event.mouse_move(function (movement, cartesian) {\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var pos84 = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.endLng = pos84.lng;\n _this7.endLat = pos84.lat;\n !_this7.endEntity && (_this7.endEntity = _this7.viewer.entities.add(new Cesium.Entity({\n position: new Cesium.CallbackProperty(function () {\n var pos = _this7.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(_this7.endLng, _this7.endLat));\n return pos;\n }, false),\n billboard: {\n image: _this7.getSourceRootPath() + '/img/end.png',\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n width: 32,\n height: 32\n }\n })));\n _this7.endEntity.show = true;\n _this7.tip && _this7.tip.destroy();\n _this7.event && _this7.event.destroy();\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.tip && _this7.tip.destroy();\n _this7.event && _this7.event.destroy();\n });\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RoutePlanning);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvUm91dGVQbGFubmluZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9Sb3V0ZVBsYW5uaW5nL2luZGV4LmpzPzMxN2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SG9zdCB9IGZyb20gJy4uLy4uLy4uL29uJ1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9pbmRleCdcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi8uLi9CYXNlRGlhbG9nJ1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBodG1sLCBjc3MgfSBmcm9tICcuL19lbGVtZW50J1xyXG5cclxuY2xhc3MgUm91dGVQbGFubmluZyBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBzZGtcclxuICAgKiBAZGVzY3JpcHRpb24g6Lev5b6E6KeE5YiSXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICBZSi5Sb3V0ZVBsYW5uaW5nQXJyYXlzLnB1c2godGhpcylcclxuICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgNFxyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCAnI2ZmMDAwMCdcclxuICAgIHRoaXMub3B0aW9ucy5ncHMgPSBvcHRpb25zLmdwcyB8fCBmYWxzZVxyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLl9lbG1zID0ge31cclxuICAgIHRoaXMuc3RhcnQgPSB7XHJcbiAgICAgIGxuZzogbnVsbCxcclxuICAgICAgbGF0OiBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLmVuZCA9IHtcclxuICAgICAgbG5nOiBudWxsLFxyXG4gICAgICBsYXQ6IG51bGxcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy5zdGFydEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5nZXRPckNyZWF0ZUVudGl0eShcclxuICAgICAgJ1lKLXJvdXRlLXBsYW5uaW5nLXN0YXJ0J1xyXG4gICAgKVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnN0YXJ0ICYmXHJcbiAgICAgICh0aGlzLnN0YXJ0LmxuZyB8fCB0aGlzLnN0YXJ0LmxuZyA9PT0gMCkgJiZcclxuICAgICAgKHRoaXMuc3RhcnQubGF0IHx8IHRoaXMuc3RhcnQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRFbnRpdHkuc2hvdyA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRFbnRpdHkuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuc3RhcnRFbnRpdHkucG9zaXRpb24gPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICBsZXQgcG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuc3RhcnRMbmcsIHRoaXMuc3RhcnRMYXQpXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIHBvc1xyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLnN0YXJ0RW50aXR5LmJpbGxib2FyZCA9IHtcclxuICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3N0YXJ0LnBuZycsXHJcbiAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICBoZWlnaHQ6IDMyXHJcbiAgICB9XHJcbiAgICB0aGlzLmVuZEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5nZXRPckNyZWF0ZUVudGl0eShcclxuICAgICAgJ1lKLXJvdXRlLXBsYW5uaW5nLWVuZCdcclxuICAgIClcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmQgJiZcclxuICAgICAgKHRoaXMuZW5kLmxuZyB8fCB0aGlzLmVuZC5sbmcgPT09IDApICYmXHJcbiAgICAgICh0aGlzLmVuZC5sYXQgfHwgdGhpcy5lbmQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZW5kRW50aXR5LnNob3cgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZEVudGl0eS5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuZW5kRW50aXR5LnBvc2l0aW9uID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgbGV0IHBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KFxyXG4gICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmVuZExuZywgdGhpcy5lbmRMYXQpXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIHBvc1xyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVuZEVudGl0eS5iaWxsYm9hcmQgPSB7XHJcbiAgICAgIGltYWdlOiB0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9lbmQucG5nJyxcclxuICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICB3aWR0aDogMzIsXHJcbiAgICAgIGhlaWdodDogMzJcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdCh0cnVlKVxyXG4gICAgdGhpcy5jbGVhcigpXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRMbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydC5sbmdcclxuICB9XHJcbiAgc2V0IHN0YXJ0TG5nKHYpIHtcclxuICAgIHRoaXMuc3RhcnQubG5nID0gdlxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnN0YXJ0ICYmXHJcbiAgICAgICh0aGlzLnN0YXJ0LmxuZyB8fCB0aGlzLnN0YXJ0LmxuZyA9PT0gMCkgJiZcclxuICAgICAgKHRoaXMuc3RhcnQubGF0IHx8IHRoaXMuc3RhcnQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRFbnRpdHkgJiYgKHRoaXMuc3RhcnRFbnRpdHkuc2hvdyA9IHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0RW50aXR5ICYmICh0aGlzLnN0YXJ0RW50aXR5LnNob3cgPSBmYWxzZSlcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuc3RhcnRMbmcgJiZcclxuICAgICAgdGhpcy5fZWxtcy5zdGFydExuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRMYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydC5sYXRcclxuICB9XHJcbiAgc2V0IHN0YXJ0TGF0KHYpIHtcclxuICAgIHRoaXMuc3RhcnQubGF0ID0gdlxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnN0YXJ0ICYmXHJcbiAgICAgICh0aGlzLnN0YXJ0LmxuZyB8fCB0aGlzLnN0YXJ0LmxuZyA9PT0gMCkgJiZcclxuICAgICAgKHRoaXMuc3RhcnQubGF0IHx8IHRoaXMuc3RhcnQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRFbnRpdHkgJiYgKHRoaXMuc3RhcnRFbnRpdHkuc2hvdyA9IHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0RW50aXR5ICYmICh0aGlzLnN0YXJ0RW50aXR5LnNob3cgPSBmYWxzZSlcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuc3RhcnRMYXQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5zdGFydExhdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZW5kTG5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5kLmxuZ1xyXG4gIH1cclxuICBzZXQgZW5kTG5nKHYpIHtcclxuICAgIHRoaXMuZW5kLmxuZyA9IHZcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmQgJiZcclxuICAgICAgKHRoaXMuZW5kLmxuZyB8fCB0aGlzLmVuZC5sbmcgPT09IDApICYmXHJcbiAgICAgICh0aGlzLmVuZC5sYXQgfHwgdGhpcy5lbmQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZW5kRW50aXR5ICYmICh0aGlzLmVuZEVudGl0eS5zaG93ID0gdHJ1ZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kRW50aXR5ICYmICh0aGlzLmVuZEVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmVuZExuZyAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmVuZExuZy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZW5kTGF0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5kLmxhdFxyXG4gIH1cclxuICBzZXQgZW5kTGF0KHYpIHtcclxuICAgIHRoaXMuZW5kLmxhdCA9IHZcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmQgJiZcclxuICAgICAgKHRoaXMuZW5kLmxuZyB8fCB0aGlzLmVuZC5sbmcgPT09IDApICYmXHJcbiAgICAgICh0aGlzLmVuZC5sYXQgfHwgdGhpcy5lbmQubGF0ID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZW5kRW50aXR5ICYmICh0aGlzLmVuZEVudGl0eS5zaG93ID0gdHJ1ZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kRW50aXR5ICYmICh0aGlzLmVuZEVudGl0eS5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmVuZExhdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmVuZExhdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcclxuICAgICAgdGhpcy5fZWxlbWVudF9zdHlsZS50eXBlID0gJ3RleHQvY3NzJ1xyXG4gICAgICB0aGlzLl9lbGVtZW50X3N0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJywgJ1lKX3N0eWxlX2RpYWxvZycpXHJcbiAgICAgIHRoaXMuX2VsZW1lbnRfc3R5bGUuaW5uZXJIVE1MID0gY3NzKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkay52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgICAgIHRpdGxlOiAn6Lev5b6E6KeE5YiSJyxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBhd2FpdCB0aGlzLl9EaWFsb2dPYmplY3QuaW5pdCgpXHJcblxyXG4gICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xyXG4gICAgICBkaXYuc3R5bGUubGVmdCA9ICcyNHB4J1xyXG4gICAgICBkaXYuc3R5bGUuZmxldCA9ICcwJ1xyXG4gICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuZm9vdEFwcENoaWxkKGRpdilcclxuXHJcbiAgICAgIGxldCBxdWVyeUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpXHJcbiAgICAgIHF1ZXJ5QnRuLmNsYXNzTmFtZSA9ICdkZWZhdWx0J1xyXG4gICAgICBxdWVyeUJ0bi5pbm5lckhUTUwgPVxyXG4gICAgICAgICc8c3ZnIGNsYXNzPVwiaWNvbi1xdWVyeVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXF1ZXJ5XCI+PC91c2U+PC9zdmc+5p+l6K+iJ1xyXG4gICAgICBxdWVyeUJ0bi5zdHlsZS53aWR0aCA9ICdhdXRvJ1xyXG4gICAgICBxdWVyeUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAodGhpcy5zdGFydExuZyB8fCB0aGlzLnN0YXJ0TG5nID09PSAwKSAmJlxyXG4gICAgICAgICAgKHRoaXMuc3RhcnRMYXQgfHwgdGhpcy5zdGFydExhdCA9PT0gMCkgJiZcclxuICAgICAgICAgICh0aGlzLmVuZExuZyB8fCB0aGlzLmVuZExuZyA9PT0gMCkgJiZcclxuICAgICAgICAgICh0aGlzLmVuZExhdCB8fCB0aGlzLmVuZExhdCA9PT0gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICF0aGlzLnN0YXJ0RW50aXR5ICYmXHJcbiAgICAgICAgICAgICh0aGlzLnN0YXJ0RW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICAgICAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuc3RhcnRMbmcsIHRoaXMuc3RhcnRMYXQpXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1xyXG4gICAgICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9zdGFydC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICB0aGlzLnN0YXJ0RW50aXR5LnNob3cgPSB0cnVlXHJcbiAgICAgICAgICAhdGhpcy5lbmRFbnRpdHkgJiZcclxuICAgICAgICAgICAgKHRoaXMuZW5kRW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICAgICAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuZW5kTG5nLCB0aGlzLmVuZExhdClcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcG9zXHJcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2VuZC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICB0aGlzLmVuZEVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucXVlcnlDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5xdWVyeUNhbGxCYWNrKHtcclxuICAgICAgICAgICAgICBzdGFydDogW3RoaXMuc3RhcnRMbmcsIHRoaXMuc3RhcnRMYXRdLFxyXG4gICAgICAgICAgICAgIGVuZDogW3RoaXMuZW5kTG5nLCB0aGlzLmVuZExhdF1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcign6K+35YWI6K6+572u6LW354K55ZKM57uI54K55Z2Q5qCH77yBJylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGRpdi5hcHBlbmRDaGlsZChxdWVyeUJ0bilcclxuXHJcbiAgICAgIGxldCBjbGVhbkJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpXHJcbiAgICAgIGNsZWFuQnRuLmNsYXNzTmFtZSA9ICdkZWZhdWx0J1xyXG4gICAgICBjbGVhbkJ0bi5pbm5lckhUTUwgPVxyXG4gICAgICAgICc8c3ZnIGNsYXNzPVwiaWNvbi1yb3V0ZVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXJvdXRlXCI+PC91c2U+PC9zdmc+5riF6Zmk6Lev57q/J1xyXG4gICAgICBjbGVhbkJ0bi5zdHlsZS53aWR0aCA9ICdhdXRvJ1xyXG4gICAgICBjbGVhbkJ0bi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzEwcHgnXHJcbiAgICAgIGNsZWFuQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICB9KVxyXG4gICAgICBkaXYuYXBwZW5kQ2hpbGQoY2xlYW5CdG4pXHJcblxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ncHMpIHtcclxuICAgICAgICBsZXQgbG9jYXRlQ3VycmVudEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpXHJcbiAgICAgICAgbG9jYXRlQ3VycmVudEJ0bi5pbm5lckhUTUwgPSAn5b2T5YmN5L2N572uJ1xyXG4gICAgICAgIGxvY2F0ZUN1cnJlbnRCdG4uc3R5bGUubWFyZ2luTGVmdCA9ICcxMHB4J1xyXG4gICAgICAgIGxvY2F0ZUN1cnJlbnRCdG4uc2V0QXR0cmlidXRlKCdkYXRhLWlzJywgJ3N0YXJ0JylcclxuICAgICAgICBsb2NhdGVDdXJyZW50QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldExvY2F0ZUN1cnJlbnQoZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBzdGFydENvbEVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3RhcnQtY29sJylbMF1cclxuICAgICAgICBzdGFydENvbEVsbS5hcHBlbmRDaGlsZChsb2NhdGVDdXJyZW50QnRuKVxyXG5cclxuICAgICAgICBsZXQgZW5kUGlja0J0bkVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnZW5kLXBpY2stYnRuJ1xyXG4gICAgICAgIClbMF1cclxuICAgICAgICBlbmRQaWNrQnRuRWxtLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzkxcHgnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpXHJcbiAgICAgIFJvdXRlUGxhbm5pbmcuRXZlbnRCaW5kaW5nKHRoaXMsIGFsbF9lbG0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fZWxlbWVudF9zdHlsZSkge1xyXG4gICAgICAgIGRvY3VtZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXVxyXG4gICAgICAgICAgLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpXHJcbiAgICAgICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIGlmICh0aGlzLnN0YXJ0RW50aXR5KSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zdGFydEVudGl0eSlcclxuICAgICAgdGhpcy5zdGFydEVudGl0eSA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuZEVudGl0eSkge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW5kRW50aXR5KVxyXG4gICAgICB0aGlzLmVuZEVudGl0eSA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnN0YXJ0RXh0ZW5zaW9uRW50aXR5KSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zdGFydEV4dGVuc2lvbkVudGl0eSlcclxuICAgICAgdGhpcy5zdGFydEV4dGVuc2lvbkVudGl0eSA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuZEV4dGVuc2lvbkVudGl0eSkge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW5kRXh0ZW5zaW9uRW50aXR5KVxyXG4gICAgICB0aGlzLmVuZEV4dGVuc2lvbkVudGl0eSA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNsZWFyKClcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExvY2F0ZUN1cnJlbnQoZSkge1xyXG4gICAgdGhpcy5yZWNvbm5lY3RpbmcgJiYgdGhpcy5yZWNvbm5lY3RpbmcuY2xvc2UoKVxyXG4gICAgdGhpcy5vcHRpb25zLmhvc3QgPSB0aGlzLm9wdGlvbnMuaG9zdCB8fCBnZXRIb3N0KClcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL3lqZWFydGg0LjAvYXBpL3YxL2dwcy9zdGF0ZSdcclxuICAgIHRoaXMucmVjb25uZWN0aW5nID0gbmV3IFJlY29ubmVjdGluZ1dlYlNvY2tldCgnd3M6Ly8nICsgdXJsKVxyXG4gICAgdGhpcy5yZWNvbm5lY3Rpbmcub25vcGVuID0gZXZlbnQgPT4ge1xyXG4gICAgICB0aGlzLnJlY29ubmVjdGluZy5vbm1lc3NhZ2UgPSBldmVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJtYykge1xyXG4gICAgICAgICAgdGhpcy5yZWNvbm5lY3RpbmcuY2xvc2UoKVxyXG4gICAgICAgICAgaWYgKGUuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMnKSA9PT0gJ3N0YXJ0Jykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0TG5nID0gdGhpcy5kYXRhLnJtYy5sbmdcclxuICAgICAgICAgICAgdGhpcy5zdGFydExhdCA9IHRoaXMuZGF0YS5ybWMubGF0XHJcbiAgICAgICAgICAgICF0aGlzLnN0YXJ0RW50aXR5ICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuc3RhcnRFbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgICAgICAgICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2xhbXBUb0hlaWdodChcclxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydExuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydExhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zXHJcbiAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3N0YXJ0LnBuZycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RW50aXR5LnNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVuZExuZyA9IHRoaXMuZGF0YS5ybWMubG5nXHJcbiAgICAgICAgICAgIHRoaXMuZW5kTGF0ID0gdGhpcy5kYXRhLnJtYy5sYXRcclxuICAgICAgICAgICAgIXRoaXMuZW5kRW50aXR5ICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuZW5kRW50aXR5ID0gdGhpcy52aWV3ZXIuZW50aXRpZXMuYWRkKFxyXG4gICAgICAgICAgICAgICAgbmV3IENlc2l1bS5FbnRpdHkoe1xyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kTG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZExhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zXHJcbiAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL2VuZC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgdGhpcy5lbmRFbnRpdHkuc2hvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOe7mOWItui3r+W+hFxyXG4gICAqL1xyXG4gIGNyZWF0ZVJvdXRlKHBvc2l0aW9ucykge1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLnN0YXJ0TG5nIHx8IHRoaXMuc3RhcnRMbmcgPT09IDApICYmXHJcbiAgICAgICh0aGlzLnN0YXJ0TGF0IHx8IHRoaXMuc3RhcnRMYXQgPT09IDApICYmXHJcbiAgICAgICh0aGlzLnN0YXJ0TG5nICE9PSBwb3NpdGlvbnNbMF0ubG5nIHx8IHRoaXMuc3RhcnRMYXQgIT09IHBvc2l0aW9uc1swXS5sYXQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zdGFydEV4dGVuc2lvbiA9IFtcclxuICAgICAgICB0aGlzLnN0YXJ0TG5nLFxyXG4gICAgICAgIHRoaXMuc3RhcnRMYXQsXHJcbiAgICAgICAgcG9zaXRpb25zWzBdLmxuZyxcclxuICAgICAgICBwb3NpdGlvbnNbMF0ubGF0XHJcbiAgICAgIF1cclxuICAgICAgaWYgKHRoaXMuc3RhcnRFeHRlbnNpb25FbnRpdHkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0RXh0ZW5zaW9uRW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoXHJcbiAgICAgICAgICB0aGlzLnN0YXJ0RXh0ZW5zaW9uXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnRFeHRlbnNpb25FbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93LFxyXG4gICAgICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICAgICAgcG9zaXRpb25zOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KHRoaXMuc3RhcnRFeHRlbnNpb24pLFxyXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5vcHRpb25zLndpZHRoLFxyXG4gICAgICAgICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIDIpLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5lbmRMbmcgfHwgdGhpcy5lbmRMbmcgPT09IDApICYmXHJcbiAgICAgICh0aGlzLmVuZExhdCB8fCB0aGlzLmVuZExhdCA9PT0gMCkgJiZcclxuICAgICAgKHRoaXMuZW5kTG5nICE9PSBwb3NpdGlvbnNbcG9zaXRpb25zLmxlbmd0aCAtIDFdLmxuZyB8fFxyXG4gICAgICAgIHRoaXMuZW5kTGF0ICE9PSBwb3NpdGlvbnNbcG9zaXRpb25zLmxlbmd0aCAtIDFdLmxhdClcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVuZEV4dGVuc2lvbiA9IFtcclxuICAgICAgICB0aGlzLmVuZExuZyxcclxuICAgICAgICB0aGlzLmVuZExhdCxcclxuICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25zLmxlbmd0aCAtIDFdLmxuZyxcclxuICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25zLmxlbmd0aCAtIDFdLmxhdFxyXG4gICAgICBdXHJcbiAgICAgIGlmICh0aGlzLmVuZEV4dGVuc2lvbkVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuZW5kRXh0ZW5zaW9uRW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoXHJcbiAgICAgICAgICB0aGlzLmVuZEV4dGVuc2lvblxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmVuZEV4dGVuc2lvbkVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgc2hvdzogdGhpcy5vcHRpb25zLnNob3csXHJcbiAgICAgICAgICBwb2x5bGluZToge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkodGhpcy5lbmRFeHRlbnNpb24pLFxyXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5vcHRpb25zLndpZHRoLFxyXG4gICAgICAgICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5nZXRNYXRlcmlhbCh0aGlzLm9wdGlvbnMuY29sb3IsIDIpLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheVxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93LFxyXG4gICAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgICBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5vcHRpb25zLndpZHRoLFxyXG4gICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLmdldE1hdGVyaWFsKHRoaXMub3B0aW9ucy5jb2xvciwgMCksXHJcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5OTk5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5ou+5Y+W6LW354K5XHJcbiAgICovXHJcbiAgcGlja1N0YXJ0UG9zKGUpIHtcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUrumAieaLqei1t+eCueWdkOagh++8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICB0aGlzLnN0YXJ0TG5nID0gcG9zODQubG5nXHJcbiAgICAgIHRoaXMuc3RhcnRMYXQgPSBwb3M4NC5sYXRcclxuICAgICAgIXRoaXMuc3RhcnRFbnRpdHkgJiZcclxuICAgICAgICAodGhpcy5zdGFydEVudGl0eSA9IHRoaXMudmlld2VyLmVudGl0aWVzLmFkZChcclxuICAgICAgICAgIG5ldyBDZXNpdW0uRW50aXR5KHtcclxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KFxyXG4gICAgICAgICAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMuc3RhcnRMbmcsIHRoaXMuc3RhcnRMYXQpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJldHVybiBwb3NcclxuICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvc3RhcnQucG5nJyxcclxuICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgICB3aWR0aDogMzIsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkpXHJcbiAgICAgIHRoaXMuc3RhcnRFbnRpdHkuc2hvdyA9IHRydWVcclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmi77lj5bnu4jngrlcclxuICAgKi9cclxuICBwaWNrRW5kUG9zKGUpIHtcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+W3pumUrumAieaLqee7iOeCueWdkOagh++8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICB0aGlzLmVuZExuZyA9IHBvczg0LmxuZ1xyXG4gICAgICB0aGlzLmVuZExhdCA9IHBvczg0LmxhdFxyXG4gICAgICAhdGhpcy5lbmRFbnRpdHkgJiZcclxuICAgICAgICAodGhpcy5lbmRFbnRpdHkgPSB0aGlzLnZpZXdlci5lbnRpdGllcy5hZGQoXHJcbiAgICAgICAgICBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuY2xhbXBUb0hlaWdodChcclxuICAgICAgICAgICAgICAgIG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLmVuZExuZywgdGhpcy5lbmRMYXQpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJldHVybiBwb3NcclxuICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICBiaWxsYm9hcmQ6IHtcclxuICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvZW5kLnBuZycsXHJcbiAgICAgICAgICAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogMzJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApKVxyXG4gICAgICB0aGlzLmVuZEVudGl0eS5zaG93ID0gdHJ1ZVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgfSlcclxuICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRXZlbnRCaW5kaW5nKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaChlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1heCAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5taW4gJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgPT0gJ0lNRycpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0Ll9lbG1zW20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoYXRbbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjaGFuZ2UnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LnB1c2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhhdFttLnZhbHVlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlLCB2YWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKHZlbnRUeXBlLCBlID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkge31cclxufVxyXG5leHBvcnQgZGVmYXVsdCBSb3V0ZVBsYW5uaW5nXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUFBO0FBQUE7QUFRQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUEzSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBTUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQU1BO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWdHQTtBQUFBO0FBQUE7QUE5RkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuRUE7QUFBQTtBQUFBO0FBbUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExRkE7QUFBQTtBQUtBO0FBc0ZBO0FBQUE7QUFBQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/RoutePlanning/index.js\n"); /***/ }), /***/ "./src/Obj/Base/SectorObject/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Base/SectorObject/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n
\\n
\\n \\u540D\\u79F0\\n \\n
\\n
\\n
\\n
\\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
\\n
\\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
\\n
\\n
\\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
\\n \\n m\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7ECF\\u5EA6\\uFF08X\\uFF09
\\n
\\u7EAC\\u5EA6\\uFF08Y\\uFF09
\\n
\\u9AD8\\u5EA6\\uFF08Z\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u9762\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
\\n
\\n
\\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
\\n \\n px\\n \\n
\\n
\\n
\\n
\\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
\\n
\\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU2VjdG9yT2JqZWN0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1NlY3Rvck9iamVjdC9fZWxlbWVudC5qcz9jZDMyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZUVsbSwgbGFiZWxTdHlsZUVsbTEsIGxhYmVsU3R5bGVFbG0yIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9lbG1faHRtbCdcclxuXHJcbmZ1bmN0aW9uIGh0bWwodGhhdCkge1xyXG4gICAgcmV0dXJuIGBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCA2MCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtc2VsZWN0LXVuaXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCI+5oqV5b2x6Z2i56evOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC10ZXh0XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwiYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWxlY3QtdW5pdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPERJVi1jeS10YWJzIGlkPVwiY2lyY2xlLW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgJHthdHRyaWJ1dGVFbG0odGhhdCl9XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi56m66Ze05L+h5oGvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGhlaWdodC1tb2RlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDU2cHg7XCI+6auY5bqm5qih5byPPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlaWdodC1tb2RlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+WuWAvOe7n+S4gOWinuWKoDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiLTk5OTk5OTlcIiBtYXg9XCI5OTk5OTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maXJtIGhlaWdodC1jb25maXJtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBzcGF0aWFsLWluZm8tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nu4/luqbvvIhY77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPue6rOW6pu+8iFnvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6auY5bqm77yIWu+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIumdoumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumdouminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZUNvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6L6557q/5a695bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiOTlcIiBAbW9kZWw9XCJsaW5lV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfms6jpo47moLxcIj5cclxuICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTEoKX1cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLmoIfnrb7po47moLxcIj5cclxuICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTIoKX1cclxuICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgPC9ESVYtY3ktdGFicz5cclxuICAgIDwvZGl2PlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQWlGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/SectorObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/SectorObject/index.js": /*!********************************************!*\ !*** ./src/Obj/Base/SectorObject/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/SectorObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 扇形\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SectorObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 创建扇形\r\n * @param sdk\r\n * @param options {object} 扇形属性\r\n * @param options.id {string} 标注id\r\n * @param options.name {string} 名称\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.color=\"rgba(255, 0, 0, 0.5)\" {string} 颜色\r\n * @param options.center {object} 位置\r\n * @param options.center.lng {number} 经度\r\n * @param options.center.lat {number} 纬度\r\n * @param options.center.alt {number} 高度\r\n * @param options.radius=10 {number} 半径\r\n * @param options.startAngle=10 {number} 起始方向\r\n * @param options.endAngle=0 {number} 结束方向\r\n * @param options.line {object} 边框\r\n * @param options.line.width=3 {number} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n */\n function SectorObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, SectorObject);\n _this2 = _callSuper(this, SectorObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"rgba(255, 0, 0, 0.5)\";\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.semiMinorAxis = options.semiMinorAxis || options.semiMinorAxis === 0 ? options.semiMinorAxis : 10;\n _this2.options.semiMajorAxis = options.semiMajorAxis || options.semiMajorAxis === 0 ? options.semiMajorAxis : 20;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.center = options.center || {};\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n options.label = options.label || {};\n _this2._elms = {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.nodePoints = [];\n _this2.operate = {};\n _this2.Dialog = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n SectorObject.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(SectorObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(SectorObject, [{\n key: \"type\",\n get: function get() {\n return 'SectorObject';\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this3 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this3.options.heightMode = v || v == 0 ? v : 2;\n _this3.positionEditing = false;\n if (!_this3.entity) {\n return;\n }\n var heightModeName = '';\n SectorObject.closeNodeEdit(_this3);\n var ground = false;\n var disabled = false;\n _this3.renewPositions();\n _this3.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this3.positions), [_this3.positions[0], _this3.positions[1]]);\n _this3.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this3.positions);\n switch (_this3.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this3.label.ground = ground;\n _this3.entity.polyline.clampToGround = ground;\n _this3.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this3.entity.polygon.perPositionHeight = !ground ? true : false;\n _this3._elms.heightMode && (_this3._elms.heightMode.value = heightModeName);\n _this3._elms.heightModeObject && _this3._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this3._elms.heightBox && (_this3._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this3._elms.heightConfirm && _this3._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.center.alt;\n },\n set: function set(v) {\n var _this4 = this;\n if (!v || isNaN(Number(v))) {\n this.options.center.alt = 0;\n } else {\n this.options.center.alt = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positions);\n _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positions), [_this4.positions[0], _this4.positions[1]]);\n _this4.entity.polyline.clampToGround = !ground ? false : true;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this4.options.center.alt;\n });\n }\n }, {\n key: \"startAngle\",\n get: function get() {\n return this.options.startAngle;\n },\n set: function set(v) {\n this.options.startAngle = v;\n this.height = this.height;\n }\n }, {\n key: \"endAngle\",\n get: function get() {\n return this.options.endAngle;\n },\n set: function set(v) {\n this.options.endAngle = v;\n this.height = this.height;\n }\n }, {\n key: \"center\",\n get: function get() {\n return this.options.center;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.center = v;\n this.height = this.height;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this5.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this5.options.center.lat;\n });\n }\n }, {\n key: \"radius\",\n get: function get() {\n return this.options.radius;\n },\n set: function set(v) {\n this.options.radius = v;\n this.height = this.height;\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n this.entity.polyline.width = this.lineWidth;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.color = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.line.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.options.line.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this7.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.lineColor = 'rgba(255,0,0,0.5)';\n } //点击清空按钮事件回调\n });\n _this7._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.line.width = v || v === 0 ? v : 3;\n this.entity.polyline.width = this.options.line.width;\n this._elms.lineWidth && this._elms.lineWidth.forEach(function (item) {\n item.value = _this8.options.line.width;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this11 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this11.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this11._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this12 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this12.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this12._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this13 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.link.content[i].name + \"
\\n
\" + this.options.attribute.link.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this13.options.attribute.link.content;\n case 2:\n _this13.attributeLink = _context3.sent;\n table = _this13._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this13.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this13.options.attribute.link.content.splice(i, 1);\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this13.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this13.attributeLink = _this13.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this14 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
\\n
\" + this.options.attribute.vr.content[i].name + \"
\\n
\" + this.options.attribute.vr.content[i].url + \"
\\n
\\n \\n \\n
\\n
\";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this14.options.attribute.vr.content;\n case 2:\n _this14.attributeVr = _context6.sent;\n table = _this14._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this14.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this14.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this14.options.attribute.vr.content.splice(i, 1);\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this14.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this14.attributeVr = _this14.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this15 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, heightBoxElm, heightElm, heightConfirmElm, heightModeData, heightModeObject, heightModeDataLegpElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 59;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
\\u5706\\u5FC3\\u5750\\u6807
\\n
\\n
\\n
\\n \";\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.center.lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.center.lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n SectorObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.center.lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.center.lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.center.lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n SectorObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.center.lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.center.lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.center.lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n SectorObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n _context7.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '扇形属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this15.name = _this15.name.trim();\n if (!_this15.name) {\n _this15.name = '未命名对象';\n }\n _this15.options.label.position = {\n lng: _this15.label.position[0],\n lat: _this15.label.position[1],\n alt: _this15.label.position[2]\n };\n _this15.originalOptions = _this15.deepCopyObj(_this15.options);\n _this15._DialogObject.close();\n _this15.Dialog.confirmCallBack && _this15.Dialog.confirmCallBack(_this15.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this15.sdk, _this15.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this15.sdk, _this15.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this15.reset();\n _this15.Dialog.resetCallBack && _this15.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this15.Dialog.removeCallBack && _this15.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this15.reset();\n _this15.positionEditing = false;\n _this15.Dialog.closeCallBack && _this15.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this15.options.show = show;\n _this15.originalOptions.show = show;\n _this15.show = show;\n _this15.Dialog.showCallBack && _this15.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this15.positionEditing = !_this15.positionEditing;\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n SectorObject.nodeEdit(_this15, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 7:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' circle';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('circle-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this15.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this15.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this15.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this15.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this15.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this15.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n SectorObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightConfirmElm = this._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (this.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 56;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = this._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n i = 0;\n case 40:\n if (!(i < heightModeData.length)) {\n _context7.next = 48;\n break;\n }\n if (!(heightModeData[i].key == this.heightMode)) {\n _context7.next = 45;\n break;\n }\n heightModeDataLegpElm.value = heightModeData[i].value;\n heightModeObject.legp_searchActive(heightModeData[i].value);\n return _context7.abrupt(\"break\", 48);\n case 45:\n i++;\n _context7.next = 40;\n break;\n case 48:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < heightModeData.length; _i5++) {\n if (heightModeData[_i5].value === heightModeDataLegpElm.value) {\n _this15.heightMode = heightModeData[_i5].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this15.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n this._elms.height = heightElm;\n this._elms.heightBox = heightBoxElm;\n this._elms.heightMode = heightModeDataLegpElm;\n this._elms.heightConfirm = heightConfirmElm;\n this._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this15.operate.positionEditing) {\n _this15.positionEditing = false;\n _this15.height = _this15.height + Number(heightElm.value);\n } else {\n SectorObject.closeNodeEdit(_this15);\n _this15.heightMode = _this15.heightMode;\n setTimeout(function () {\n _this15.height = _this15.height + Number(heightElm.value);\n }, 100);\n }\n });\n case 56:\n setTimeout(function () {\n _this15.attributeLink = _this15.options.attribute.link.content;\n _this15.attributeVr = _this15.options.attribute.vr.content;\n _this15.cameraSelect && _this15.cameraSelect();\n _this15.goodsSelect && _this15.goodsSelect();\n var tagData = _this15.attributeSelect;\n var attributeElm = _this15._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this15._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this15.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this15.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this15._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this15._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this15.options['area-unit'];\n for (var _i8 = 0; _i8 < unitData.length; _i8++) {\n if (unitData[_i8].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i8].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < unitData.length; _i9++) {\n if (unitData[_i9].value === unitDataLegpElm.value) {\n _this15.areaUnit = unitData[_i9].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this15._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this15._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this15.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this15.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this15._elms.labelFontFamily = [fontDataLegpElm];\n }\n createSpatialInfoTableContent();\n }, 0);\n _context7.next = 60;\n break;\n case 59:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 60:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this16 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.radius = this.originalOptions.radius;\n this.color = this.originalOptions.color;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelColor = this.originalOptions.label.color;\n this.lineWidth = this.originalOptions.line.width;\n this.lineLength = this.originalOptions.line.length;\n this.lineColor = this.originalOptions.line.color;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n this.heightMode = this.originalOptions.heightMode;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.innerHTML = _this16.options.center.lng;\n });\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.innerHTML = _this16.options.center.lat;\n });\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this16.options.center.alt;\n });\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positions,\n positionArray,\n height,\n pos84,\n point1,\n point2,\n direction,\n c,\n ray,\n r,\n pickedObjects,\n i,\n promise,\n a,\n _i12,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!this.options.customView) {\n _context9.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 16;\n break;\n }\n _context9.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context9.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 60;\n break;\n case 23:\n positions = this.entity.polyline.positions.getValue();\n positionArray = [];\n height = 0;\n pos84 = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n point1 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 0);\n point2 = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 10000000);\n direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n c = Cesium.Cartesian3.normalize(direction, direction);\n ray = new Cesium.Ray(point1, c);\n r = {};\n pickedObjects = this.sdk.viewer.scene.drillPickFromRay(ray);\n i = 0;\n case 35:\n if (!(i < pickedObjects.length)) {\n _context9.next = 42;\n break;\n }\n if (!pickedObjects[i].position) {\n _context9.next = 39;\n break;\n }\n r = pickedObjects[i];\n return _context9.abrupt(\"break\", 42);\n case 39:\n i++;\n _context9.next = 35;\n break;\n case 42:\n if (!(r && r.position)) {\n _context9.next = 46;\n break;\n }\n height = this.cartesian3Towgs84(r.position, this.sdk.viewer).alt;\n _context9.next = 55;\n break;\n case 46:\n _context9.prev = 46;\n _context9.next = 49;\n return Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(pos84.lng, pos84.lat)]);\n case 49:\n promise = _context9.sent;\n height = promise[0].height;\n _context9.next = 55;\n break;\n case 53:\n _context9.prev = 53;\n _context9.t0 = _context9[\"catch\"](46);\n case 55:\n a = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, height);\n positionArray.push(a.x, a.y, a.z);\n for (_i12 = 1; _i12 < positions.length; _i12++) {\n positionArray.push(positions[_i12].x, positions[_i12].y, positions[_i12].z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 60:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this, [[46, 53]]);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this17 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this17.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this18 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var _this = this;\n this.operate.positionEditing = status;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n if (status === true) {\n this.previous = {\n center: this.deepCopyObj(this.options.center)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n this.renewPositions();\n this.event.mouse_move(function (movement, cartesian) {\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n positions.alt = _this18.options.center.alt;\n // this.renewPositions(positions)\n var height = 0;\n var ground = false;\n switch (_this18.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = _this18.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(positions.lng, positions.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray = _this18.calSector(positions, _this18.options.radius, _this18.options.startAngle, _this18.options.endAngle, 360, true);\n var fromDegreesArray2 = [];\n if (!ground) {\n for (var i = 0; i < fromDegreesArray.length; i++) {\n fromDegreesArray2.push(fromDegreesArray[i].lng, fromDegreesArray[i].lat, positions.alt + height);\n }\n _this18.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n _this18.label && (_this18.label.position = [positions.lng, positions.lat, positions.alt + height]);\n } else {\n for (var _i13 = 0; _i13 < fromDegreesArray.length; _i13++) {\n fromDegreesArray2.push(fromDegreesArray[_i13].lng, fromDegreesArray[_i13].lat);\n }\n _this18.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray2);\n _this18.getClampToHeight({\n lng: positions.lng,\n lat: positions.lat\n }).then(function (height) {\n _this18.label && (_this18.label.position = [positions.lng, positions.lat, height]);\n });\n }\n _this18.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n _this18.options.center.lng = Number(positions.lng.toFixed(8));\n _this18.options.center.lat = Number(positions.lat.toFixed(8));\n _this18.center = _this18.options.center;\n _this18.event.mouse_move(function () {});\n _this18.event.mouse_left(function () {});\n _this18.event.mouse_right(function () {});\n _this18.event.gesture_pinck_start(function () {});\n _this18.previous = {\n center: _this18.deepCopyObj(_this18.options.center)\n };\n _this18.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this18.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this18.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this18.positionEditing = false;\n } else {\n var positions = _this18.cartesian3Towgs84(cartesian, _this18.sdk.viewer);\n _this18.options.center.lng = positions.lng;\n _this18.options.center.lat = positions.lat;\n _this18.center = _this18.options.center;\n _this18.event.mouse_move(function () {});\n _this18.event.mouse_left(function () {});\n _this18.event.mouse_right(function () {});\n _this18.event.gesture_pinck_start(function () {});\n _this18.event.gesture_pinck_end(function () {});\n _this18.previous = {\n center: _this18.deepCopyObj(_this18.options.center)\n };\n _this18.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positions);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n }, false);\n } else {\n if (!this.previous) {\n this.previous = {\n center: this.deepCopyObj(this.options.center)\n };\n }\n this.options.center = this.deepCopyObj(this.previous.center);\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this.positions);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positions), [_this.positions[0], _this.positions[1]]);\n this.previous = null;\n }\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this19 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(this.options.center.lng, this.options.center.lat);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this19.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(center) {\n var _this20 = this;\n if (this._error) {\n return;\n }\n var ground = false;\n if (!center) {\n center = this.options.center;\n }\n var height = 0;\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(center.lng, center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray = this.calSector(center, this.options.radius, this.options.startAngle, this.options.endAngle, 360, true);\n var fromDegreesArray2 = [];\n if (!ground) {\n for (var i = 0; i < fromDegreesArray.length; i++) {\n fromDegreesArray2.push(fromDegreesArray[i].lng, fromDegreesArray[i].lat, center.alt + height);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [center.lng, center.lat, center.alt + height]);\n } else {\n for (var _i14 = 0; _i14 < fromDegreesArray.length; _i14++) {\n fromDegreesArray2.push(fromDegreesArray[_i14].lng, fromDegreesArray[_i14].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray2);\n setTimeout(function () {\n _this20.getClampToHeight({\n lng: center.lng,\n lat: center.lat\n }).then(function (height) {\n _this20.label && (_this20.label.position = [center.lng, center.lat, height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n var angle = this.options.endAngle - this.options.startAngle;\n if (angle < 0) {\n angle = 360 + angle;\n }\n this.options.areaByMeter = Number((Cesium.Math.PI * this.options.radius * this.options.radius * (angle / 360)).toFixed(2));\n this.areaUnit = this.areaUnit;\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var fromDegreesArray = that.calSector(that.options.center, that.options.radius, that.options.startAngle, that.options.endAngle, 360, true);\n var ground = true;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(that.options.center.lng, that.options.center.lat)) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: that.options.center.lng,\n lat: that.options.center.lat,\n alt: that.options.center.alt + height\n };\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n var fromDegreesArray2 = [];\n var positionsA;\n that.options.label.ground = ground;\n if (ground) {\n for (var i = 0; i < fromDegreesArray.length; i++) {\n fromDegreesArray2.push(fromDegreesArray[i].lng, fromDegreesArray[i].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray2);\n } else {\n for (var _i15 = 0; _i15 < fromDegreesArray.length; _i15++) {\n fromDegreesArray2.push(fromDegreesArray[_i15].lng, fromDegreesArray[_i15].lat, that.options.center.alt + height);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n }\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(that.positions),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positions), [that.positions[0], that.positions[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n SectorObject.createLabel(that);\n var angle = that.options.endAngle - that.options.startAngle;\n if (angle < 0) {\n angle = 360 + angle;\n }\n that.options.areaByMeter = Number((Cesium.Math.PI * that.options.radius * that.options.radius * (angle / 360)).toFixed(2));\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n function createLabel(_x4) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {} else {\n var calculateAangle = function calculateAangle(arr) {\n function getAangle(start, end) {\n var rad = Math.PI / 180,\n lat1 = start.y * rad,\n lat2 = end.y * rad,\n lon1 = start.x * rad,\n lon2 = end.x * rad;\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n var radians = Math.atan2(a, b);\n var degrees = radians % (2 * Math.PI);\n var bearing = 450 - (degrees * 180 / Math.PI < 0 ? 360 + degrees * 180 / Math.PI : degrees * 180 / Math.PI) - 90;\n return 360 - bearing % 360;\n }\n var center = arr[0];\n var pos84_1 = arr[1];\n var pos84_2 = arr[2];\n var start = {\n x: center.lng,\n y: center.lat\n };\n var end1 = {\n x: pos84_1.lng,\n y: pos84_1.lat\n };\n var end2 = {\n x: pos84_2.lng,\n y: pos84_2.lat\n };\n var angle1 = getAangle(start, end1);\n var angle2 = getAangle(start, end2);\n return {\n angle1: angle1,\n angle2: angle2\n };\n };\n var createNodePoints = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(pos, type) {\n var pos84, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n pos84 = that.cartesian3Towgs84(pos, that.sdk.viewer);\n _context11.next = 3;\n return that.getClampToHeight(pos84);\n case 3:\n height = _context11.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n type: type,\n position: Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY\n }\n });\n that.nodePoints.push(entity);\n case 6:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return function createNodePoints(_x5, _x6) {\n return _ref.apply(this, arguments);\n };\n }();\n that.event && that.event.destroy();\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个编辑点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var fromDegreesArray = that.calSector(that.options.center, that.options.radius, that.options.startAngle, that.options.endAngle);\n var points = [];\n var radius = that.options.radius;\n var options = {\n angle1: that.options.startAngle,\n angle2: that.options.endAngle\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(fromDegreesArray);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(fromDegreesArray), [fromDegreesArray[0], fromDegreesArray[1]]);\n }, false);\n var positions = that.entity.polyline.positions.getValue();\n points = [_objectSpread({}, that.center), that.cartesian3Towgs84(positions[1], that.sdk.viewer), that.cartesian3Towgs84(positions[positions.length - 4], that.sdk.viewer)];\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: that.options.center.lng,\n lat: that.options.center.lat\n }, objectsToExclude).then(function (height) {\n that.label.position = [that.options.center.lng, that.options.center.lat, height];\n });\n setTimeout(function () {\n createNodePoints(positions[1], 'sector-start');\n createNodePoints(positions[positions.length - 4], 'sector-end');\n that.event.mouse_left(function (movement, cartesian) {\n if (selectPoint) {\n that.options.startAngle = options.angle1;\n that.options.endAngle = options.angle2;\n that.options.radius = radius;\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n selectPoint = null;\n YJ.Measure.SetMeasureStatus(false);\n that.heightMode = that.heightMode;\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point' && (pick.id._type === 'sector-start' || pick.id._type === 'sector-end')) {\n that.tip.set_text('左键确认,右键取消');\n selectPoint = pick.id;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n }\n }\n });\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n var pos84 = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n if (selectPoint._type === 'sector-start') {\n points[1] = pos84;\n }\n if (selectPoint._type === 'sector-end') {\n points[2] = pos84;\n }\n options = calculateAangle(points);\n var pointA = Cesium.Cartesian3.fromDegrees(points[0].lng, points[0].lat, 0);\n var pointB = Cesium.Cartesian3.fromDegrees(pos84.lng, pos84.lat, 0);\n ;\n radius = Cesium.Cartesian3.distance(pointA, pointB);\n fromDegreesArray = that.calSector(that.options.center, radius, options.angle1, options.angle2);\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right(function (movement, cartesian) {\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n that.heightMode = that.heightMode;\n });\n }, 200);\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop9 = function _loop9() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop10 = function _loop10() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop10();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop9()) continue;\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SectorObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU2VjdG9yT2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1NlY3Rvck9iamVjdC9pbmRleC5qcz8zOThjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDmiYflvaJcclxuICovXHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cnO1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tIFwiLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnNcIjtcclxuaW1wb3J0IHJpY2hUZXh0IGZyb20gXCIuLi8uLi9FbGVtZW50L3JpY2hUZXh0XCI7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgbGVncCB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZGF0YWxpc3QnO1xyXG5pbXBvcnQgeyBnZXRGb250TGlzdCwgZ2V0Rm9udEZhbWlseU5hbWUgfSBmcm9tICcuLi8uLi9FbGVtZW50L2ZvbnRTZWxlY3QnXHJcbmltcG9ydCB7IHNldFNwbGl0RGlyZWN0aW9uLCBzeW5jU3BsaXREYXRhLCBzZXRBY3RpdmVJZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9TcGxpdFNjcmVlbidcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIFNlY3Rvck9iamVjdCBleHRlbmRzIEJhc2Uge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBkZXNjcmlwdGlvbiDliJvlu7rmiYflvaJcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQHBhcmFtIG9wdGlvbnMge29iamVjdH0g5omH5b2i5bGe5oCnXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5qCH5rOoaWRcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPVwicmdiYSgyNTUsIDAsIDAsIDAuNSlcIiB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jZW50ZXIge29iamVjdH0g5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY2VudGVyLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jZW50ZXIubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNlbnRlci5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmFkaXVzPTEwIHtudW1iZXJ9IOWNiuW+hFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnN0YXJ0QW5nbGU9MTAge251bWJlcn0g6LW35aeL5pa55ZCRXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZW5kQW5nbGU9MCB7bnVtYmVyfSDnu5PmnZ/mlrnlkJFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lIHtvYmplY3R9IOi+ueahhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbmUud2lkdGg9MyB7bnVtYmVyfSDovrnmoYblrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lLmNvbG9yPVwicmdiYSgxNTUsIDE1NSwgMTI0LCAwLjg5KVwiIHtzdHJpbmd9IOi+ueahhuminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmhlaWdodE1vZGU9MntudW1iZXJ9IOmrmOW6puaooeW8j++8iDDvvJrmtbfmi5Tpq5jluqbvvJsx77ya55u45a+55Zyw6KGo77ybMu+8muS+nemZhOaooeW8j++8iVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFyZWFVbml0PSflubPmlrnnsbMnIHtzdHJpbmd9IOmdouenr+WNleS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsIHtvYmplY3R9IOagh+etvuWvueixoVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnRleHQge3N0cmluZ30g5qCH562+5paH5pysXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2hvdyB7c3RyaW5nfSDmoIfnrb7mmL7pmpBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7c3RyaW5nfSDmoIfnrb7kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250U2l6ZT0yMCB7bnVtYmVyfSDlrZfkvZPlpKflsI9cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5PTAge251bWJlcn0g5a2X5L2T6aG5IDDvvJrpu5HkvZPvvJsx77ya5oCd5rqQ6buR5L2T77ybMu+8muW6numXqOato+mBk+agh+mimOS9k++8mzPvvJrmlbDpu5HkvZNcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5jb2xvcj0jZmZmZmZmIHtzdHJpbmd9IOWtl+S9k+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aD00IHtudW1iZXJ9IOW8lee6v+WuvVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmxpbmVDb2xvcj0jMDBmZmZmODAge3N0cmluZ30g5byV57q/6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQ9MjAge251bWJlcn0g5a2X5L2T5YGP56e7KOW8lee6v+mVv+W6pilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3I9WycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10ge2FycmF5fSDog4zmma/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2Uge2Jvb2xlYW59IOi3neemu+e8qeaUvlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLm5lYXI9MjAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5Hot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5mYXI9MTAwMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/nOi3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZSB7b2JqZWN0fSDlsZ7mgKflhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluayB7b2JqZWN0fSDpk77mjqVcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50PVtdXSB7YXJyYXl9IOmTvuaOpeWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS5uYW1lIHtzdHJpbmd9IOmTvuaOpeWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbXS51cmwge3N0cmluZ30g6ZO+5o6l5Zyw5Z2AXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucmljaFRleHRDb250ZW50IHtzdHJpbmd9IOWvjOaWh+acrOWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcge29iamVjdH0g6buY6K6k6KeG6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbiB7b2JqZWN0fSDpu5jorqTop4bop5LmlrnkvY1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcge251bWJlcn0g6Iiq5ZCR6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB7bnVtYmVyfSDkv6/ku7Dop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwge251bWJlcn0g57+75rua6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uIHtvYmplY3R9IOinhuinkuebuOWvueS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgXCJyZ2JhKDI1NSwgMCwgMCwgMC41KVwiXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLnNlbWlNaW5vckF4aXMgPSAob3B0aW9ucy5zZW1pTWlub3JBeGlzIHx8IG9wdGlvbnMuc2VtaU1pbm9yQXhpcyA9PT0gMCkgPyBvcHRpb25zLnNlbWlNaW5vckF4aXMgOiAxMFxyXG4gICAgdGhpcy5vcHRpb25zLnNlbWlNYWpvckF4aXMgPSAob3B0aW9ucy5zZW1pTWFqb3JBeGlzIHx8IG9wdGlvbnMuc2VtaU1ham9yQXhpcyA9PT0gMCkgPyBvcHRpb25zLnNlbWlNYWpvckF4aXMgOiAyMFxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmNlbnRlciA9IG9wdGlvbnMuY2VudGVyIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZSA9IG9wdGlvbnMubGluZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHRoaXMub3B0aW9ucy5saW5lLndpZHRoIHx8IHRoaXMub3B0aW9ucy5saW5lLndpZHRoID09PSAwKSA/IHRoaXMub3B0aW9ucy5saW5lLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgfHwgJ3JnYmEoMjU1LCAwLCAwLCAxKSdcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSBvcHRpb25zWydhcmVhLXVuaXQnXSB8fCAn5bmz5pa557GzJ1xyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IG9wdGlvbnMubGFiZWwucG9zaXRpb24sXHJcbiAgICAgIGZvbnRTaXplOiAob3B0aW9ucy5sYWJlbC5mb250U2l6ZSB8fCBvcHRpb25zLmxhYmVsLmZvbnRTaXplID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZm9udFNpemUgOiAyMCxcclxuICAgICAgZm9udEZhbWlseTogb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID8gb3B0aW9ucy5sYWJlbC5mb250RmFtaWx5IDogMCxcclxuICAgICAgY29sb3I6IG9wdGlvbnMubGFiZWwuY29sb3IgfHwgJyNmZmZmZmYnLFxyXG4gICAgICBsaW5lV2lkdGg6IChvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCB8fCBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA6IDQsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAob3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCB8fCBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID09PSAwKSA/IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgOiAyMCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvciB8fCBbJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSxcclxuICAgICAgbGluZUNvbG9yOiBvcHRpb25zLmxhYmVsLmxpbmVDb2xvciB8fCAnIzAwZmZmZjgwJyxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB8fCBmYWxzZSxcclxuICAgICAgbmVhcjogKG9wdGlvbnMubGFiZWwubmVhciB8fCBvcHRpb25zLmxhYmVsLm5lYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5uZWFyIDogMjAwMCxcclxuICAgICAgZmFyOiAob3B0aW9ucy5sYWJlbC5mYXIgfHwgb3B0aW9ucy5sYWJlbC5mYXIgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mYXIgOiAxMDAwMDAsXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLm9wZXJhdGUgPSB7fVxyXG4gICAgdGhpcy5EaWFsb2cgPSB7fVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIFNlY3Rvck9iamVjdC5jcmVhdGUodGhpcylcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuICdTZWN0b3JPYmplY3QnXHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA/IHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlIDogMFxyXG4gIH1cclxuICBzZXQgaGVpZ2h0TW9kZSh2KSB7XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IFtdXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPSAodiB8fCB2ID09IDApID8gdiA6IDJcclxuICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhlaWdodE1vZGVOYW1lID0gJydcclxuICAgICAgU2VjdG9yT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMF0sXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMV1cclxuICAgICAgXVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfmtbfmi5Tpq5jluqYnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+ebuOWvueWcsOihqCdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfkvp3pmYTmqKHlnosnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBncm91bmRcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUgPSBoZWlnaHRNb2RlTmFtZSlcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0ICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWVcclxuICAgICAgKSlcclxuICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNlbnRlci5hbHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKCF2IHx8IGlzTmFOKE51bWJlcih2KSkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5hbHQgPSAwXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmNlbnRlci5hbHQgPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoMikpXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoaXMucG9zaXRpb25zKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gIWdyb3VuZCA/IHRydWUgOiBmYWxzZVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMF0sXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbMV1cclxuICAgICAgXVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gIWdyb3VuZCA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5hcmNUeXBlID0gIWdyb3VuZCA/IENlc2l1bS5BcmNUeXBlLk5PTkUgOiBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgdGhpcy5fZWxtcy5hbHQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5hbHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIuYWx0XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRBbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhcnRBbmdsZVxyXG4gIH1cclxuICBzZXQgc3RhcnRBbmdsZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhcnRBbmdsZSA9IHY7XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0XHJcbiAgfVxyXG4gIGdldCBlbmRBbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW5kQW5nbGU7XHJcbiAgfVxyXG4gIHNldCBlbmRBbmdsZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZW5kQW5nbGUgPSB2O1xyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodFxyXG4gIH1cclxuXHJcbiAgZ2V0IGNlbnRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2VudGVyXHJcbiAgfVxyXG4gIHNldCBjZW50ZXIodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNlbnRlciA9IHZcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHRcclxuICAgIHRoaXMuX2VsbXMubG5nICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubG5nLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmxuZ1xyXG4gICAgICB9KVxyXG4gICAgdGhpcy5fZWxtcy5sYXQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIubGF0XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGdldCByYWRpdXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1c1xyXG4gIH1cclxuXHJcbiAgc2V0IHJhZGl1cyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucmFkaXVzID0gdjtcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHRcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHYgfHwgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJ1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdGhpcy5saW5lV2lkdGhcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMCwwLDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUuY29sb3JcclxuICB9XHJcbiAgc2V0IGxpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5jb2xvciA9IHYgfHwgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJ1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWxpbmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5tYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmxpbmUuY29sb3IpXHJcbiAgICBpZiAodGhpcy5fZWxtcy5saW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5vcHRpb25zLmxpbmUuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9ICdyZ2JhKDI1NSwwLDAsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgfVxyXG4gIHNldCBsaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHYgfHwgdiA9PT0gMCkgPyB2IDogMylcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICAgIHRoaXMuX2VsbXMubGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGluZVdpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5saW5lLndpZHRoXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFyZWEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFyZWFcclxuICB9XHJcblxyXG4gIHNldCBhcmVhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hcmVhID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhICYmIHRoaXMuX2VsbXMuYXJlYS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFyZWFVbml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICB9XHJcbiAgc2V0IGFyZWFVbml0KHYpIHtcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFyZWFVbml0ICYmIHRoaXMuX2VsbXMuYXJlYVVuaXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIpIHtcclxuICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgY2FzZSAn5bmz5pa557GzJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5bmz5pa55Y2D57GzJzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+S6qSc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAn5YWs6aG3JzpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IE51bWJlcigodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDApLnRvRml4ZWQoNikpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gdGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiYgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mb250RmFtaWx5ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkpXHJcblxyXG4gICAgbGV0IG5hbWUgPSBnZXRGb250RmFtaWx5TmFtZSh0aGlzLmxhYmVsRm9udEZhbWlseSkgfHwgJydcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IG5hbWVcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUgJiYgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbE5lYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLm5lYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsTmVhcih2KSB7XHJcbiAgICBsZXQgbmVhciA9IHZcclxuICAgIGlmIChuZWFyID4gdGhpcy5sYWJlbEZhcikge1xyXG4gICAgICBuZWFyID0gdGhpcy5sYWJlbEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTmVhciAmJiB0aGlzLl9lbG1zLmxhYmVsTmVhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBuZWFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsRmFyKHYpIHtcclxuICAgIGxldCBmYXIgPSB2XHJcbiAgICBpZiAoZmFyIDwgdGhpcy5sYWJlbE5lYXIpIHtcclxuICAgICAgZmFyID0gdGhpcy5sYWJlbE5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRmFyICYmIHRoaXMuX2VsbXMubGFiZWxGYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gZmFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGggJiYgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsUGl4ZWxPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBsYWJlbFBpeGVsT2Zmc2V0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQgJiYgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldCBsYWJlbExpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0sIHZdXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kW2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlVHlwZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZSAmJiB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIGxldCBhdHRyaWJ1dGVDb250ZW50ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQnKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdikgPiAtMSkge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUxpbmsodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICBsaW5rRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGxpbmtEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVDYW1lcmEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlR29vZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlR29vZHModikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoYXQuY2FsU2VjdG9yKHRoYXQub3B0aW9ucy5jZW50ZXIsIHRoYXQub3B0aW9ucy5yYWRpdXMsIHRoYXQub3B0aW9ucy5zdGFydEFuZ2xlLCB0aGF0Lm9wdGlvbnMuZW5kQW5nbGUsIDM2MCwgdHJ1ZSlcclxuICAgIGxldCBncm91bmQgPSB0cnVlXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG5cclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLCB0aGF0Lm9wdGlvbnMuY2VudGVyLmxhdCkpIHx8IDBcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbikge1xyXG4gICAgICB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhhdC5vcHRpb25zLmNlbnRlci5sbmcsIGxhdDogdGhhdC5vcHRpb25zLmNlbnRlci5sYXQsIGFsdDogdGhhdC5vcHRpb25zLmNlbnRlci5hbHQgKyBoZWlnaHQgfVxyXG4gICAgfVxyXG4gICAgbGV0IG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICBpZiAodGhhdC5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbUNvbG9yTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMuY29sb3JcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICBsZXQgcG9zaXRpb25zQVxyXG5cclxuICAgIHRoYXQub3B0aW9ucy5sYWJlbC5ncm91bmQgPSBncm91bmRcclxuXHJcbiAgICBpZiAoZ3JvdW5kKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbURlZ3JlZXNBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2goZnJvbURlZ3JlZXNBcnJheVtpXS5sbmcsIGZyb21EZWdyZWVzQXJyYXlbaV0ubGF0KVxyXG4gICAgICB9XHJcbiAgICAgIHRoYXQucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5MilcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKGZyb21EZWdyZWVzQXJyYXlbaV0ubG5nLCBmcm9tRGVncmVlc0FycmF5W2ldLmxhdCwgdGhhdC5vcHRpb25zLmNlbnRlci5hbHQgKyBoZWlnaHQpXHJcbiAgICAgIH1cclxuICAgICAgdGhhdC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5MilcclxuICAgIH1cclxuXHJcbiAgICB0aGF0LmVudGl0eSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgIGhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXQucG9zaXRpb25zKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogIWdyb3VuZCA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhhdC5wb3NpdGlvbnMsIHRoYXQucG9zaXRpb25zWzBdLCB0aGF0LnBvc2l0aW9uc1sxXV0sXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5saW5lLndpZHRoLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5saW5lLmNvbG9yKSxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIGFyY1R5cGU6ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICBTZWN0b3JPYmplY3QuY3JlYXRlTGFiZWwodGhhdClcclxuXHJcbiAgICBsZXQgYW5nbGUgPSB0aGF0Lm9wdGlvbnMuZW5kQW5nbGUgLSB0aGF0Lm9wdGlvbnMuc3RhcnRBbmdsZVxyXG4gICAgaWYgKGFuZ2xlIDwgMCkge1xyXG4gICAgICBhbmdsZSA9IDM2MCArIGFuZ2xlXHJcbiAgICB9XHJcbiAgICB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSBOdW1iZXIoKENlc2l1bS5NYXRoLlBJICogdGhhdC5vcHRpb25zLnJhZGl1cyAqIHRoYXQub3B0aW9ucy5yYWRpdXMgKiAoYW5nbGUgLyAzNjApKS50b0ZpeGVkKDIpKTtcclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zWydhcmVhLXVuaXQnXSkge1xyXG4gICAgICBjYXNlICflubPmlrnnsbMnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+S6qSc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDY2Ni42NjY2NjY3KS50b0ZpeGVkKDQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICflhazpobcnOlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gTnVtYmVyKCh0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyAxMDAwMCkudG9GaXhlZCg2KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgfVxyXG5cclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVMYWJlbCh0aGF0KSB7XHJcbiAgICAvLyDmoIfnrb5cclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogW3RoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoYXQub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhcixcclxuICAgICAgZ3JvdW5kOiB0aGF0Lm9wdGlvbnMubGFiZWwuZ3JvdW5kLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KCkge1xyXG4gICAgICAgIGxldCB0YWJsZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3BhdGlhbC1pbmZvLXRhYmxlJylbMF1cclxuICAgICAgICBsZXQgdEJvZHlFbG0gPSB0YWJsZUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICB0Qm9keUVsbS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZyA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdCA9IFtdXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQgPSBbXVxyXG4gICAgICAgIGxldCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgdHIuY2xhc3NOYW1lID0gJ3RyJ1xyXG4gICAgICAgIHRyLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBhbGlnbi1jZW50ZXJcIj7lnIblv4PlnZDmoIc8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsbmcgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbGF0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGFsdCBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICBgXHJcbiAgICAgICAgbGV0IGxuZ0JveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xuZycpWzBdXHJcbiAgICAgICAgbGV0IGxuZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgIGxuZy5pbm5lckhUTUwgPSAoX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nKS50b0ZpeGVkKDgpXHJcbiAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICBsZXQgbG5nSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgbG5nSW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgIGxuZ0lucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGxuZ0lucHV0LnRpdGxlID0gJydcclxuICAgICAgICBsbmdJbnB1dC5taW4gPSAtMTgwXHJcbiAgICAgICAgbG5nSW5wdXQubWF4ID0gMTgwXHJcbiAgICAgICAgbG5nSW5wdXQudmFsdWUgPSAoX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nKS50b0ZpeGVkKDgpXHJcblxyXG4gICAgICAgIGxldCBsYXRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYXQnKVswXVxyXG4gICAgICAgIGxldCBsYXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICBsYXQuaW5uZXJIVE1MID0gKF90aGlzLm9wdGlvbnMuY2VudGVyLmxhdCkudG9GaXhlZCg4KVxyXG4gICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXQpXHJcbiAgICAgICAgbGV0IGxhdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgIGxhdElucHV0LmNsYXNzTmFtZSA9ICdpbnB1dCdcclxuICAgICAgICBsYXRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICBsYXRJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgbGF0SW5wdXQubWluID0gLTkwXHJcbiAgICAgICAgbGF0SW5wdXQubWF4ID0gOTBcclxuICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IChfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQpLnRvRml4ZWQoOClcclxuXHJcbiAgICAgICAgbGV0IGFsdEJveCA9IHRyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsdCcpWzBdXHJcbiAgICAgICAgbGV0IGFsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgIGFsdC5pbm5lckhUTUwgPSAoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpXHJcbiAgICAgICAgYWx0Qm94LmFwcGVuZENoaWxkKGFsdClcclxuICAgICAgICBsZXQgYWx0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgYWx0SW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgIGFsdElucHV0LnR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGFsdElucHV0LnRpdGxlID0gJydcclxuICAgICAgICBhbHRJbnB1dC5taW4gPSAtOTk5OTk5OVxyXG4gICAgICAgIGFsdElucHV0Lm1heCA9IDk5OTk5OTk5OVxyXG4gICAgICAgIGFsdElucHV0LnZhbHVlID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG5cclxuICAgICAgICBsbmdCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLmNlbnRlci5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nSW5wdXQpXHJcbiAgICAgICAgICBsbmdJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFNlY3Rvck9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxuZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbG5nSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5vcHRpb25zLmNlbnRlci5sbmcgPSBOdW1iZXIoTnVtYmVyKGxuZ0lucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbG5nLmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMuY2VudGVyLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBfdGhpcy5oZWlnaHRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBsYXRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBsYXRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0SW5wdXQpXHJcbiAgICAgICAgICBsYXRJbnB1dC5mb2N1cygpXHJcbiAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFNlY3Rvck9iamVjdC5jbG9zZU5vZGVFZGl0KF90aGlzKVxyXG4gICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XHJcbiAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5jZW50ZXIubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5vcHRpb25zLmNlbnRlci5sYXQgPSBOdW1iZXIoTnVtYmVyKGxhdElucHV0LnZhbHVlKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgbGF0LmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMuY2VudGVyLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBfdGhpcy5oZWlnaHRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBhbHRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHRJbnB1dClcclxuICAgICAgICAgIGFsdElucHV0LmZvY3VzKClcclxuICAgICAgICAgIGlmIChfdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgU2VjdG9yT2JqZWN0LmNsb3NlTm9kZUVkaXQoX3RoaXMpXHJcbiAgICAgICAgICBfdGhpcy5oZWlnaHRNb2RlID0gX3RoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICBhbHRCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgfSlcclxuICAgICAgICBhbHRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIF90aGlzLmhlaWdodCA9IE51bWJlcihOdW1iZXIoYWx0SW5wdXQudmFsdWUpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICBhbHQuaW5uZXJIVE1MID0gTnVtYmVyKF90aGlzLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICBfdGhpcy5fZWxtcy5sbmcucHVzaChsbmcpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubG5nSW5wdXQucHVzaChsbmdJbnB1dClcclxuICAgICAgICBfdGhpcy5fZWxtcy5sYXQucHVzaChsYXQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQucHVzaChsYXRJbnB1dClcclxuICAgICAgICBfdGhpcy5fZWxtcy5hbHQucHVzaChhbHQpXHJcbiAgICAgICAgX3RoaXMuX2VsbXMuYWx0SW5wdXQucHVzaChhbHRJbnB1dClcclxuICAgICAgICB0Qm9keUVsbS5hcHBlbmRDaGlsZCh0cilcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+aJh+W9ouWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUudHJpbSgpXHJcbiAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IHRoaXMubGFiZWwucG9zaXRpb25bMF0sIGxhdDogdGhpcy5sYWJlbC5wb3NpdGlvblsxXSwgYWx0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzJdIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNldENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWNvbmRhcnlFZGl0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIFNlY3Rvck9iamVjdC5ub2RlRWRpdCh0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGNpcmNsZSdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29udGVudEVsbS5pbm5lckhUTUwgPSBodG1sKHRoaXMpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoY29udGVudEVsbSlcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGVcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcblxyXG4gICAgICAvLyDliJvlu7rmoIfnrb7pobVcclxuICAgICAgbGV0IHRhYnNFbG0gPSBuZXcgY3lfdGFicygnY2lyY2xlLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbExpbmVDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIFNlY3Rvck9iamVjdC5FdmVudEJpbmRpbmcodGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgPSBbbGluZWNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsYWJlbGxpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcblxyXG4gICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgIGxldCBoZWlnaHRFbG0gPSBoZWlnaHRCb3hFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0JylbMF1cclxuICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgIGhlaWdodEVsbS52YWx1ZSA9IDEwXHJcbiAgICAgIGlmICh0aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIGhlaWdodENvbmZpcm1FbG0gJiYgaGVpZ2h0Q29uZmlybUVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhlaWdodE1vZGVEYXRhID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgdmFsdWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAga2V5OiAnMCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIGtleTogJzEnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnaGVpZ2h0LW1vZGUtYm94J1xyXG4gICAgICAgIClbMF0sXHJcbiAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgKVxyXG4gICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodCA9IGhlaWdodEVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtID0gaGVpZ2h0Q29uZmlybUVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgU2VjdG9yT2JqZWN0LmNsb3NlTm9kZUVkaXQodGhpcylcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyBOdW1iZXIoaGVpZ2h0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncChhdHRyaWJ1dGVFbG0sIFwiLmF0dHJpYnV0ZS1zZWxlY3RcIilcclxuICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodGFnRGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0YWdEYXRhW2ldLnZhbHVlID09PSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW3tcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5bmz5pa55Y2D57GzJyxcclxuICAgICAgICAgIHZhbHVlOiAn5bmz5pa55Y2D57GzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S6qScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S6qSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflhazpobcnLFxyXG4gICAgICAgICAgdmFsdWU6ICflhazpobcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQtYm94JylbMF0sIFwiLmlucHV0LXNlbGVjdC11bml0XCIpXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodW5pdERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJlYVVuaXQgPSB1bml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICB9LCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMucmFkaXVzID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucmFkaXVzXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICAgIHRoaXMuYXJlYSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmFyZWFcclxuICAgIHRoaXMuYXJlYVVuaXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9uc1snYXJlYS11bml0J11cclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5saW5lV2lkdGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLndpZHRoXHJcbiAgICB0aGlzLmxpbmVMZW5ndGggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLmxlbmd0aFxyXG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLmNvbG9yXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgIHRoaXMuZ29vZHNTZWxlY3QgJiYgdGhpcy5nb29kc1NlbGVjdCgpXHJcblxyXG4gICAgdGhpcy5oZWlnaHRNb2RlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaGVpZ2h0TW9kZVxyXG5cclxuICAgIHRoaXMuX2VsbXMubG5nICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubG5nLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmxuZ1xyXG4gICAgICB9KVxyXG4gICAgdGhpcy5fZWxtcy5sYXQgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5jZW50ZXIubGF0XHJcbiAgICAgIH0pXHJcbiAgICB0aGlzLl9lbG1zLmFsdCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmFsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmNlbnRlci5hbHRcclxuICAgICAgfSlcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBfYWRkUnIoKSB7XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICflhajmma/lm74nLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nLFxyXG4gICAgICB1cmw6IHZyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6aOe5YiwXHJcbiAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3KSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY2VudGVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5jZW50ZXIgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuc3RhcnQgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xuZycpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sbmcgPSB0aGlzLm9wdGlvbnMubG5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5sYXQgPSB0aGlzLm9wdGlvbnMubGF0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgICBwb3NpdGlvbi5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOayoeaciemrmOW6puWAvO+8jOWImeiOt+WPlue0p+i0tOmrmOW6puiuoeeul1xyXG4gICAgICBpZiAoIXBvc2l0aW9uLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgIHBvc2l0aW9uLmFsdCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodChwb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgICBsbmcgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyArIHBvc2l0aW9uLmxuZ1xyXG4gICAgICBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdCArIHBvc2l0aW9uLmxhdFxyXG4gICAgICBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCArIHBvc2l0aW9uLmFsdFxyXG4gICAgICBkZXN0aW5hdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGxuZywgbGF0LCBhbHQpXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcclxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zLmdldFZhbHVlKClcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgICBsZXQgcG9zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBsZXQgcG9pbnQxID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIDApO1xyXG4gICAgICBsZXQgcG9pbnQyID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIDEwMDAwMDAwKTtcclxuICAgICAgbGV0IGRpcmVjdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvaW50MiwgcG9pbnQxLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIGxldCBjID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKGRpcmVjdGlvbiwgZGlyZWN0aW9uKTtcclxuICAgICAgbGV0IHJheSA9IG5ldyBDZXNpdW0uUmF5KHBvaW50MSwgYyk7XHJcbiAgICAgIGxldCByID0ge31cclxuICAgICAgbGV0IHBpY2tlZE9iamVjdHMgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZHJpbGxQaWNrRnJvbVJheShyYXkpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAocGlja2VkT2JqZWN0c1tpXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgciA9IHBpY2tlZE9iamVjdHNbaV1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChyICYmIHIucG9zaXRpb24pIHtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHIucG9zaXRpb24sIHRoaXMuc2RrLnZpZXdlcikuYWx0XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGxldCBwcm9taXNlID0gYXdhaXQgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQodGhpcy5zZGsudmlld2VyLnRlcnJhaW5Qcm92aWRlciwgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQpXSk7XHJcbiAgICAgICAgICBoZWlnaHQgPSBwcm9taXNlWzBdLmhlaWdodFxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zODQubG5nLCBwb3M4NC5sYXQsIGhlaWdodClcclxuICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKHBvc2l0aW9uc1tpXS54LCBwb3NpdGlvbnNbaV0ueSwgcG9zaXRpb25zW2ldLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipAZGVzYyDmiZPlvIDlubPnp7vlip/og71cclxuICAgKlxyXG4gICAqIEBtZW1iZXJPZiBTb3VyY2VcclxuICAgKiBAcGFyYW0gc3RhdHVzIHtib29sZWFufVxyXG4gICAqXHJcbiAgICogKi9cclxuICBzZXQgcG9zaXRpb25FZGl0aW5nKHN0YXR1cykge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICBjZW50ZXI6IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLmNlbnRlcilcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIHBvc2l0aW9ucy5hbHQgPSB0aGlzLm9wdGlvbnMuY2VudGVyLmFsdFxyXG4gICAgICAgIC8vIHRoaXMucmVuZXdQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgICAgIGxldCBoZWlnaHQgPSAwXHJcbiAgICAgICAgbGV0IGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvc2l0aW9ucy5sbmcsIHBvc2l0aW9ucy5sYXQpKSB8fCAwXHJcbiAgICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IHRoaXMuY2FsU2VjdG9yKHBvc2l0aW9ucywgdGhpcy5vcHRpb25zLnJhZGl1cywgdGhpcy5vcHRpb25zLnN0YXJ0QW5nbGUsIHRoaXMub3B0aW9ucy5lbmRBbmdsZSwgMzYwLCB0cnVlKVxyXG4gICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICAgICAgaWYgKCFncm91bmQpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbURlZ3JlZXNBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKGZyb21EZWdyZWVzQXJyYXlbaV0ubG5nLCBmcm9tRGVncmVlc0FycmF5W2ldLmxhdCwgcG9zaXRpb25zLmFsdCArIGhlaWdodClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoXHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkyXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgcG9zaXRpb25zLmxuZyxcclxuICAgICAgICAgICAgcG9zaXRpb25zLmxhdCxcclxuICAgICAgICAgICAgcG9zaXRpb25zLmFsdCArIGhlaWdodFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2goZnJvbURlZ3JlZXNBcnJheVtpXS5sbmcsIGZyb21EZWdyZWVzQXJyYXlbaV0ubGF0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkyKVxyXG4gICAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHtcclxuICAgICAgICAgICAgbG5nOiBwb3NpdGlvbnMubG5nLFxyXG4gICAgICAgICAgICBsYXQ6IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICAgIH0pLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgICBwb3NpdGlvbnMubG5nLFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9ucy5sYXQsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxuZyA9IE51bWJlcigocG9zaXRpb25zLmxuZykudG9GaXhlZCg4KSlcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdCA9IE51bWJlcigocG9zaXRpb25zLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMub3B0aW9ucy5jZW50ZXJcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgY2VudGVyOiB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucy5jZW50ZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jZW50ZXIubG5nID0gcG9zaXRpb25zLmxuZ1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdCA9IHBvc2l0aW9ucy5sYXRcclxuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLm9wdGlvbnMuY2VudGVyXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICAgICAgICBjZW50ZXI6IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLmNlbnRlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9ucylcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fdGhpcy5wb3NpdGlvbnMsIF90aGlzLnBvc2l0aW9uc1swXSwgX3RoaXMucG9zaXRpb25zWzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgY2VudGVyOiB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucy5jZW50ZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jZW50ZXIgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMucHJldmlvdXMuY2VudGVyKVxyXG4gICAgICBpZiAodGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLmVudGl0eSAmJiB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICB0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDEpYClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICAgIGlmICh0aGlzLmV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KF90aGlzLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gWy4uLl90aGlzLnBvc2l0aW9ucywgX3RoaXMucG9zaXRpb25zWzBdLCBfdGhpcy5wb3NpdGlvbnNbMV1dXHJcblxyXG4gICAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIHN0YXRpYyBub2RlRWRpdCh0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGF0LmV2ZW50ICYmIHRoYXQuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrnvJbovpHngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICBsZXQgc2VsZWN0UG9pbnRcclxuXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhhdC5jYWxTZWN0b3IodGhhdC5vcHRpb25zLmNlbnRlciwgdGhhdC5vcHRpb25zLnJhZGl1cywgdGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUsIHRoYXQub3B0aW9ucy5lbmRBbmdsZSlcclxuICAgICAgbGV0IHBvaW50cyA9IFtdXHJcbiAgICAgIGxldCByYWRpdXMgPSB0aGF0Lm9wdGlvbnMucmFkaXVzXHJcbiAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgIGFuZ2xlMTogdGhhdC5vcHRpb25zLnN0YXJ0QW5nbGUsXHJcbiAgICAgICAgYW5nbGUyOiB0aGF0Lm9wdGlvbnMuZW5kQW5nbGVcclxuICAgICAgfVxyXG4gICAgICBmdW5jdGlvbiBjYWxjdWxhdGVBYW5nbGUoYXJyKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0QWFuZ2xlKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICAgIGxldCByYWQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gICAgICAgICAgICBsYXQxID0gc3RhcnQueSAqIHJhZCxcclxuICAgICAgICAgICAgbGF0MiA9IGVuZC55ICogcmFkLFxyXG4gICAgICAgICAgICBsb24xID0gc3RhcnQueCAqIHJhZCxcclxuICAgICAgICAgICAgbG9uMiA9IGVuZC54ICogcmFkO1xyXG4gICAgICAgICAgY29uc3QgYSA9IE1hdGguc2luKGxvbjIgLSBsb24xKSAqIE1hdGguY29zKGxhdDIpO1xyXG4gICAgICAgICAgY29uc3QgYiA9XHJcbiAgICAgICAgICAgIE1hdGguY29zKGxhdDEpICogTWF0aC5zaW4obGF0MikgLVxyXG4gICAgICAgICAgICBNYXRoLnNpbihsYXQxKSAqIE1hdGguY29zKGxhdDIpICogTWF0aC5jb3MobG9uMiAtIGxvbjEpO1xyXG4gICAgICAgICAgY29uc3QgcmFkaWFucyA9IE1hdGguYXRhbjIoYSwgYilcclxuICAgICAgICAgIGNvbnN0IGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICAgIGxldCBiZWFyaW5nID0gNDUwIC0gKChkZWdyZWVzICogMTgwKSAvIE1hdGguUEkgPCAwXHJcbiAgICAgICAgICAgID8gMzYwICsgKGRlZ3JlZXMgKiAxODApIC8gTWF0aC5QSVxyXG4gICAgICAgICAgICA6IChkZWdyZWVzICogMTgwKSAvIE1hdGguUEkpIC0gOTA7XHJcbiAgICAgICAgICByZXR1cm4gMzYwIC0gKGJlYXJpbmcgJSAzNjApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2VudGVyID0gYXJyWzBdXHJcbiAgICAgICAgbGV0IHBvczg0XzEgPSBhcnJbMV1cclxuICAgICAgICBsZXQgcG9zODRfMiA9IGFyclsyXVxyXG5cclxuICAgICAgICBsZXQgc3RhcnQgPSB7IHg6IGNlbnRlci5sbmcsIHk6IGNlbnRlci5sYXQgfVxyXG4gICAgICAgIGxldCBlbmQxID0geyB4OiBwb3M4NF8xLmxuZywgeTogcG9zODRfMS5sYXQgfVxyXG4gICAgICAgIGxldCBlbmQyID0geyB4OiBwb3M4NF8yLmxuZywgeTogcG9zODRfMi5sYXQgfVxyXG5cclxuICAgICAgICBsZXQgYW5nbGUxID0gZ2V0QWFuZ2xlKHN0YXJ0LCBlbmQxKVxyXG4gICAgICAgIGxldCBhbmdsZTIgPSBnZXRBYW5nbGUoc3RhcnQsIGVuZDIpXHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBhbmdsZTEsXHJcbiAgICAgICAgICBhbmdsZTJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSB0cnVlXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gZmFsc2VcclxuICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgfSwgZmFsc2UpXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5mcm9tRGVncmVlc0FycmF5LCBmcm9tRGVncmVlc0FycmF5WzBdLCBmcm9tRGVncmVlc0FycmF5WzFdXVxyXG4gICAgICB9LCBmYWxzZSlcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMuZ2V0VmFsdWUoKVxyXG4gICAgICBwb2ludHMgPSBbXHJcbiAgICAgICAgeyAuLi50aGF0LmNlbnRlciB9LFxyXG4gICAgICAgIHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zWzFdLCB0aGF0LnNkay52aWV3ZXIpLFxyXG4gICAgICAgIHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW3Bvc2l0aW9ucy5sZW5ndGggLSA0XSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICBdXHJcbiAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgIHRoYXRcclxuICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICBsbmc6IHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLFxyXG4gICAgICAgICAgbGF0OiB0aGF0Lm9wdGlvbnMuY2VudGVyLmxhdFxyXG4gICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5jZW50ZXIubG5nLFxyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMuY2VudGVyLmxhdCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY3JlYXRlTm9kZVBvaW50cyhwb3NpdGlvbnNbMV0sICdzZWN0b3Itc3RhcnQnKVxyXG4gICAgICAgIGNyZWF0ZU5vZGVQb2ludHMocG9zaXRpb25zW3Bvc2l0aW9ucy5sZW5ndGggLSA0XSwgJ3NlY3Rvci1lbmQnKVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMuc3RhcnRBbmdsZSA9IG9wdGlvbnMuYW5nbGUxXHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5lbmRBbmdsZSA9IG9wdGlvbnMuYW5nbGUyXHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5yYWRpdXMgPSByYWRpdXNcclxuXHJcbiAgICAgICAgICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhhdC50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgICAgIHRoYXQudGlwID0gbnVsbFxyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IG51bGxcclxuICAgICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgdGhhdC5oZWlnaHRNb2RlID0gdGhhdC5oZWlnaHRNb2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbilcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHBpY2sgJiZcclxuICAgICAgICAgICAgICBwaWNrLmlkICYmXHJcbiAgICAgICAgICAgICAgcGljay5pZC5uYW1lICYmXHJcbiAgICAgICAgICAgICAgcGljay5pZC5uYW1lID09PSAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcgJiZcclxuICAgICAgICAgICAgICAocGljay5pZC5fdHlwZSA9PT0gJ3NlY3Rvci1zdGFydCcgfHwgcGljay5pZC5fdHlwZSA9PT0gJ3NlY3Rvci1lbmQnKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGF0LnRpcC5zZXRfdGV4dCgn5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgICBsZXQgcG9zODQgPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuX3R5cGUgPT09ICdzZWN0b3Itc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgcG9pbnRzWzFdID0gcG9zODRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuX3R5cGUgPT09ICdzZWN0b3ItZW5kJykge1xyXG4gICAgICAgICAgICAgIHBvaW50c1syXSA9IHBvczg0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3B0aW9ucyA9IGNhbGN1bGF0ZUFhbmdsZShwb2ludHMpXHJcbiAgICAgICAgICAgIGxldCBwb2ludEEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwb2ludHNbMF0ubG5nLCBwb2ludHNbMF0ubGF0LCAwKTtcclxuICAgICAgICAgICAgbGV0IHBvaW50QiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCAwKTs7XHJcbiAgICAgICAgICAgIHJhZGl1cyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKTtcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheSA9IHRoYXQuY2FsU2VjdG9yKHRoYXQub3B0aW9ucy5jZW50ZXIsIHJhZGl1cywgb3B0aW9ucy5hbmdsZTEsIG9wdGlvbnMuYW5nbGUyKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcblxyXG4gICAgICAgICAgdGhhdC5ldmVudCAmJiB0aGF0LmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhhdC50aXAgJiYgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGF0LnRpcCA9IG51bGxcclxuXHJcbiAgICAgICAgICB0aGF0LmhlaWdodE1vZGUgPSB0aGF0LmhlaWdodE1vZGVcclxuICAgICAgICB9KVxyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKHBvcywgdHlwZSkge1xyXG4gICAgICAgIGxldCBwb3M4NCA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodChwb3M4NClcclxuICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczg0LmxuZywgcG9zODQubGF0LCBoZWlnaHQpLFxyXG4gICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoYXQubm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEV2ZW50QmluZGluZyh0aGF0LCBlbGVtZW50cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgRXZlbnQgPSBbXVxyXG4gICAgICBsZXQgaXNFdmVudCA9IGZhbHNlXHJcbiAgICAgIGxldCByZW1vdmVOYW1lID0gW11cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCAhZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChtLm5hbWUpIHtcclxuICAgICAgICAgIGNhc2UgJ0Btb2RlbCc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHsgdGhhdFttLnZhbHVlXSA9IGUudGFyZ2V0LmNoZWNrZWQgfSlcclxuICAgICAgICAgICAgICBlbGVtZW50c1tpXS5jaGVja2VkID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0Ll9lbG1zW20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoYXQuX2VsbXNbbS52YWx1ZV0gPSBbZWxlbWVudHNbaV1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2xpY2snOiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdAY2hhbmdlJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudHlwZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUsIHZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXNbbV0gPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlbW92ZU5hbWUubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShyZW1vdmVOYW1lW25dKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIGxldCB2ZW50VHlwZSA9ICdpbnB1dCdcclxuICAgICAgICBpZiAoZWxlbWVudHNbaV0udGFnTmFtZSAhPSAnSU5QVVQnIHx8IGVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgdmVudFR5cGUgPSAnY2hhbmdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKHZlbnRUeXBlLCAoZSkgPT4ge1xyXG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudC5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICBFdmVudFt0XShlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRESVYob3B0aW9ucyA9IHsgZG9taWQ6IFwiXCIsIHg6IDEwLCB5OiAxMCB9KSB7XHJcbiAgICBvcHRpb25zLnggPSAob3B0aW9ucy54IHx8IG9wdGlvbnMueCA9PT0gMCkgPyBvcHRpb25zLnggOiAxMFxyXG4gICAgb3B0aW9ucy55ID0gKG9wdGlvbnMueSB8fCBvcHRpb25zLnkgPT09IDApID8gb3B0aW9ucy55IDogMTBcclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5jZW50ZXIubG5nLCB0aGlzLm9wdGlvbnMuY2VudGVyLmxhdClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMoY2VudGVyKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuXHJcbiAgICBpZiAoIWNlbnRlcikge1xyXG4gICAgICBjZW50ZXIgPSB0aGlzLm9wdGlvbnMuY2VudGVyXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDBcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRlci5sbmcsIGNlbnRlci5sYXQpKSB8fCAwXHJcbiAgICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gdGhpcy5jYWxTZWN0b3IoY2VudGVyLCB0aGlzLm9wdGlvbnMucmFkaXVzLCB0aGlzLm9wdGlvbnMuc3RhcnRBbmdsZSwgdGhpcy5vcHRpb25zLmVuZEFuZ2xlLCAzNjAsIHRydWUpXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgaWYgKCFncm91bmQpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChmcm9tRGVncmVlc0FycmF5W2ldLmxuZywgZnJvbURlZ3JlZXNBcnJheVtpXS5sYXQsIGNlbnRlci5hbHQgKyBoZWlnaHQpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5MlxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgIGNlbnRlci5sbmcsXHJcbiAgICAgICAgY2VudGVyLmxhdCxcclxuICAgICAgICBjZW50ZXIuYWx0ICsgaGVpZ2h0XHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyb21EZWdyZWVzQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKGZyb21EZWdyZWVzQXJyYXlbaV0ubG5nLCBmcm9tRGVncmVlc0FycmF5W2ldLmxhdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheTIpXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgbG5nOiBjZW50ZXIubG5nLFxyXG4gICAgICAgICAgbGF0OiBjZW50ZXIubGF0XHJcbiAgICAgICAgfSkudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICAgICAgY2VudGVyLmxuZyxcclxuICAgICAgICAgICAgY2VudGVyLmxhdCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sIDEwMClcclxuICAgIH1cclxuXHJcbiAgICAvLyDorqHnrpfmipXlvbHpnaLnp69cclxuICAgIGxldCBhbmdsZSA9IHRoaXMub3B0aW9ucy5lbmRBbmdsZSAtIHRoaXMub3B0aW9ucy5zdGFydEFuZ2xlXHJcbiAgICBpZiAoYW5nbGUgPCAwKSB7XHJcbiAgICAgIGFuZ2xlID0gMzYwICsgYW5nbGVcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciA9IE51bWJlcigoQ2VzaXVtLk1hdGguUEkgKiB0aGlzLm9wdGlvbnMucmFkaXVzICogdGhpcy5vcHRpb25zLnJhZGl1cyAqIChhbmdsZSAvIDM2MCkpLnRvRml4ZWQoMikpO1xyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMuYXJlYVVuaXRcclxuICAgIHJldHVybiBmcm9tRGVncmVlc0FycmF5XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTZWN0b3JPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0E7QUE3Q0E7QUFBQTtBQUFBO0FBQUE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF5SEE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUxBO0FBQUE7QUFBQTtBQUFBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWplQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1lQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWhHQTtBQUFBO0FBQUE7QUFBQTtBQWtHQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUFBO0FBOEpBO0FBQ0E7QUFBQTtBQXpKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFtU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFqMUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeTNCQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF3R0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWZBO0FBQUE7QUFBQTtBQXpKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckVBO0FBQUE7QUFBQTtBQXFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUZBO0FBQUE7QUFLQTtBQXdGQTtBQUFBO0FBQUE7QUE4RkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/SectorObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Shp/index.js": /*!***********************************!*\ !*** ./src/Obj/Base/Shp/index.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_Pagination__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Element/Pagination */ \"./src/Obj/Element/Pagination.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _openAllNodeList__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./openAllNodeList */ \"./src/Obj/Base/Shp/openAllNodeList.js\");\n/* harmony import */ var _openNodeListById__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./openNodeListById */ \"./src/Obj/Base/Shp/openNodeListById.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n4 = 0, F = function F() {}; return { s: F, n: function n() { return _n4 >= r.length ? { done: !0 } : { done: !1, value: r[_n4++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\n\n\nvar Shp = /*#__PURE__*/function (_Base) {\n function Shp(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, Shp);\n _this2 = _callSuper(this, Shp, [sdk, options]);\n _this2.viewer = sdk.viewer;\n if (!_this2.options.path) {\n _this2.error = '未提供路径!';\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: _this2.error,\n type: 'warning',\n duration: 1500\n });\n }\n console.warn(_this2.error);\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(_this2);\n }\n _this2.options.fileName = options.fileName || '未命名对象';\n _this2.options.field = options.field || 'id';\n _this2.options.color = options.color || 'rgba(0,255,184,0.5)';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.total = 0;\n _this2.page = 1;\n _this2.pageSize = 20;\n _this2.currentData = [];\n _this2.data = [];\n _this2.list = [];\n _this2.imgEntity = [];\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(Shp, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(Shp, [{\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.setShow(v);\n }\n }, {\n key: \"on\",\n value: function on() {\n if (!this.options.path) {\n return;\n }\n return this.init();\n }\n }, {\n key: \"init\",\n value: function () {\n var _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee() {\n var url, response, data;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n url = \"\";\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getHost\"])();\n if (this.options.host.endsWith(\"yjearth4.0\")) {\n url = this.options.host + '/api/v1/vector/load';\n } else {\n url = this.options.host + '/yjearth4.0/api/v1/vector/load';\n }\n url += '?path=' + this.options.path;\n // url = 'json/shp.json'\n _context.next = 6;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getToken\"])()\n }\n });\n case 6:\n response = _context.sent;\n if (!(response.status === 200)) {\n _context.next = 19;\n break;\n }\n _context.next = 10;\n return response.json();\n case 10:\n data = _context.sent;\n if (!(data.code === 200 || data.code === 0)) {\n _context.next = 18;\n break;\n }\n this.data = data.data;\n\n // for (let i = 0; i < this.data.length; i++) {\n // let points\n // let polylines\n // let polygons\n // let multi_polylines\n // let multi_polygons\n // if (this.data[i].points) {\n // points = [...this.data[i].points]\n // }\n // else {\n // points = []\n // }\n // if (this.data[i].polylines) {\n // polylines = [...this.data[i].polylines]\n // }\n // else {\n // polylines = []\n // }\n // if (this.data[i].polygons) {\n // polygons = [...this.data[i].polygons]\n // }\n // else {\n // polygons = []\n // }\n // if (this.data[i].multi_polylines) {\n // multi_polylines = [...this.data[i].multi_polylines]\n // }\n // else {\n // multi_polylines = []\n // }\n // if (this.data[i].multi_polygons) {\n // multi_polygons = [...this.data[i].multi_polygons]\n // }\n // else {\n // multi_polygons = []\n // }\n // this.dataArray = [...this.dataArray, ...points, ...polylines, ...polygons, ...multi_polylines, ...multi_polygons]\n // }\n _context.next = 15;\n return this.formatData();\n case 15:\n return _context.abrupt(\"return\", Shp.create(this));\n case 18:\n return _context.abrupt(\"return\", console.error(data.message));\n case 19:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function init() {\n return _init.apply(this, arguments);\n }\n return init;\n }() // 格式化数据\n }, {\n key: \"formatData\",\n value: function () {\n var _formatData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2() {\n var features, _this, formatFeatures;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n formatFeatures = function _formatFeatures(data) {\n if (data.data) {\n var _this$list;\n (_this$list = _this.list).push.apply(_this$list, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data));\n for (var i = 0; i < data.data.length; i++) {\n var points = void 0;\n var polylines = void 0;\n var polygons = void 0;\n var multi_polylines = void 0;\n var multi_polygons = void 0;\n if (data.data[i].points) {\n points = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data[i].points);\n for (var m = 0; m < points.length; m++) {\n features.push({\n \"id\": points[m].attr.id,\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [points[m].x, points[m].y, points[m].z],\n \"range\": points[m].range,\n \"positions\": {\n x: points[m].x,\n y: points[m].y,\n z: points[m].z\n }\n },\n \"properties\": points[m].attr ? _objectSpread({}, points[m].attr) : {}\n });\n }\n }\n if (data.data[i].polylines) {\n polylines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data[i].polylines);\n for (var _m = 0; _m < polylines.length; _m++) {\n var positions = [];\n for (var n = 0; n < polylines[_m].positions.length; n++) {\n positions.push([polylines[_m].positions[n].x, polylines[_m].positions[n].y, polylines[_m].positions[n].z]);\n }\n features.push({\n \"id\": polylines[_m].attr.id,\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": positions,\n \"range\": polylines[_m].range,\n \"positions\": polylines[_m].positions\n },\n \"properties\": polylines[_m].attr ? _objectSpread({}, polylines[_m].attr) : {}\n });\n }\n }\n if (data.data[i].polygons) {\n polygons = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data[i].polygons);\n for (var _m2 = 0; _m2 < polygons.length; _m2++) {\n var _positions = [];\n for (var _n = 0; _n < polygons[_m2].positions.length; _n++) {\n _positions.push([polygons[_m2].positions[_n].x, polygons[_m2].positions[_n].y]);\n }\n features.push({\n \"id\": polygons[_m2].attr.id,\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [_positions],\n \"range\": polygons[_m2].range,\n \"positions\": polygons[_m2].positions\n },\n \"properties\": polygons[_m2].attr ? _objectSpread({}, polygons[_m2].attr) : {}\n });\n }\n }\n if (data.data[i].multi_polylines) {\n multi_polylines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data[i].multi_polylines);\n for (var _m3 = 0; _m3 < multi_polylines.length; _m3++) {\n var _positions2 = [];\n var positionsxyz = [];\n for (var _n2 = 0; _n2 < multi_polylines[_m3].polylines.length; _n2++) {\n var positions2 = [];\n positionsxyz.push(multi_polylines[_m3].polylines[_n2].positions);\n for (var r = 0; r < multi_polylines[_m3].polylines[_n2].positions.length; r++) {\n positions2.push([multi_polylines[_m3].polylines[_n2].positions[r].x, multi_polylines[_m3].polylines[_n2].positions[r].y, multi_polylines[_m3].polylines[_n2].positions[r].z]);\n }\n _positions2.push(positions2);\n }\n features.push({\n \"id\": multi_polylines[_m3].attr.id,\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiLineString\",\n \"coordinates\": _positions2,\n \"range\": multi_polylines[_m3].range,\n \"positions\": positionsxyz\n },\n \"properties\": multi_polylines[_m3].attr ? _objectSpread({}, multi_polylines[_m3].attr) : {}\n });\n }\n }\n if (data.data[i].multi_polygons) {\n multi_polygons = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(data.data[i].multi_polygons);\n for (var _m4 = 0; _m4 < multi_polygons.length; _m4++) {\n var _positions3 = [];\n var _positionsxyz = [];\n for (var _n3 = 0; _n3 < multi_polygons[_m4].polygons.length; _n3++) {\n var _positions4 = [];\n _positionsxyz.push(multi_polygons[_m4].polygons[_n3].positions);\n for (var _r = 0; _r < multi_polygons[_m4].polygons[_n3].positions.length; _r++) {\n _positions4.push([multi_polygons[_m4].polygons[_n3].positions[_r].x, multi_polygons[_m4].polygons[_n3].positions[_r].y, multi_polygons[_m4].polygons[_n3].positions[_r].z]);\n }\n _positions3.push(_positions4);\n }\n features.push({\n \"id\": multi_polygons[_m4].attr.id,\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [_positions3],\n \"range\": multi_polygons[_m4].range,\n \"positions\": _positionsxyz\n },\n \"properties\": multi_polygons[_m4].attr ? _objectSpread({}, multi_polygons[_m4].attr) : {}\n });\n }\n }\n }\n }\n if (data.children) {\n for (var _i = 0; _i < data.children.length; _i++) {\n formatFeatures(data.children[_i]);\n }\n }\n };\n features = [];\n _this = this;\n formatFeatures(this.data);\n features.sort(function (a, b) {\n return Number(a.properties.fid) - Number(b.properties.fid);\n });\n // for(let i=0;i<5;i++) {\n // features = [...features, ...features]\n // }\n this.geojson = {\n \"type\": \"FeatureCollection\",\n \"features\": features\n };\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function formatData() {\n return _formatData.apply(this, arguments);\n }\n return formatData;\n }()\n }, {\n key: \"fileName\",\n get: function get() {\n return this.options.fileName;\n },\n set: function set(v) {\n this.options.fileName = v;\n this._elms.fileName && (this._elms.fileName.value = v);\n }\n }, {\n key: \"field\",\n get: function get() {\n return this.options.field;\n },\n set: function set(v) {\n this.options.field = v;\n this._elms.field && (this._elms.field.value = v);\n }\n }, {\n key: \"onClick\",\n get: function get() {\n return this.clickCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n this.clickCallBack = val;\n }\n }\n }, {\n key: \"img\",\n get: function get() {\n return this.options.img;\n },\n set: function set(v) {\n if (!Array.isArray(v)) {\n v = [v];\n }\n this.options.img = v;\n Shp.createImage(this);\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n this.options.color = v;\n this.entity.entities.values.forEach(function (enetity) {\n if (enetity.billboard) {\n enetity.billboard.color = v;\n }\n if (enetity.polygon) {\n enetity.polygon.material = Cesium.Color.fromCssColorString(v);\n }\n if (enetity.polyline) {\n enetity.polyline.material = Cesium.Color.fromCssColorString(v);\n }\n });\n }\n }, {\n key: \"leftClickCB\",\n value: function leftClickCB(mo, id, p, that) {\n if (that.clickCallBack && typeof that.clickCallBack === 'function') {\n that.clickCallBack(mo, id, p);\n }\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3() {\n var _this3 = this;\n var status,\n DialogEvent,\n html,\n contentElm,\n nameElm,\n selectElm,\n option,\n key,\n o,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n status = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n DialogEvent = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!status) {\n _context3.next = 25;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk, this.options, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this3.fileName = _this3.fileName.trim();\n if (!_this3.fileName) {\n _this3.fileName = '未命名对象';\n }\n _this3.originalOptions.fileName = _this3.fileName;\n _this3.originalOptions.field = _this3.field;\n _this3._DialogObject.close();\n DialogEvent.confirmCallBack && DialogEvent.confirmCallBack({\n id: _this3.options.id,\n fileName: _this3.originalOptions.fileName,\n field: _this3.originalOptions.field\n });\n },\n closeCallBack: function closeCallBack() {\n _this3.reset();\n DialogEvent.closeCallBack && DialogEvent.closeCallBack();\n }\n });\n case 7:\n this._DialogObject = _context3.sent;\n html = \"\\n
\\n
\\n \\u6587\\u4EF6\\u540D\\u79F0\\uFF1A\\n \\n
\\n
\\n
\\n
\\n \\u540D\\u79F0\\u5B57\\u6BB5\\u9009\\u62E9\\uFF1A\\n \\n
\\n
\\n \";\n contentElm = document.createElement('div');\n contentElm.innerHTML = html;\n this._DialogObject.contentAppChild(contentElm);\n nameElm = contentElm.getElementsByClassName('flie-name')[0];\n nameElm.value = this.options.fileName;\n nameElm.addEventListener('input', function () {\n _this3.options.fileName = nameElm.value;\n });\n selectElm = contentElm.getElementsByClassName('input-select')[0];\n option = '';\n for (key in this.geojson.features[0].properties) {\n o = \"\");\n option = option + o;\n }\n selectElm.innerHTML = option;\n selectElm.value = this.options.field;\n selectElm.addEventListener('input', function () {\n _this3.options.field = selectElm.value;\n });\n this._elms.fileName = nameElm;\n this._elms.field = selectElm;\n _context3.next = 26;\n break;\n case 25:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 26:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"editById\",\n value: function () {\n var _editById = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee5() {\n var _this4 = this;\n var status,\n nodeId,\n DialogEvent,\n cameraName,\n index,\n options,\n i,\n html,\n contentElm,\n all_elm,\n attributeSelectElm,\n linkAddBtnElm,\n openRichTextBtnElm,\n attributeContent,\n _i2,\n cameraNameElm,\n cameraSelectElm,\n _args5 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n status = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false;\n nodeId = _args5.length > 1 ? _args5[1] : undefined;\n DialogEvent = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};\n // nodeId = this.dataArray[0].attr.id\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n cameraName = '';\n if (!status) {\n _context5.next = 48;\n break;\n }\n options = {};\n i = 0;\n case 8:\n if (!(i < this.geojson.features.length)) {\n _context5.next = 16;\n break;\n }\n if (!(this.geojson.features[i].properties.id === nodeId)) {\n _context5.next = 13;\n break;\n }\n if (this.geojson.features[i].content) {\n options = this.deepCopyObj(this.geojson.features[i].content);\n }\n index = i;\n return _context5.abrupt(\"break\", 16);\n case 13:\n i++;\n _context5.next = 8;\n break;\n case 16:\n options.id = options.id || nodeId;\n options.link || (options.link = {});\n options.link.content || (options.link.content = []);\n options.camera || (options.camera = []);\n options.richTextContent || (options.richTextContent = '');\n options.attributeType = options.attributeType || 'richText';\n _context5.next = 24;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk, options, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack() {\n _this4._DialogObject.close();\n _this4.geojson.features[index].content = _this4.deepCopyObj(_this4._DialogObject.attribute);\n DialogEvent.confirmCallBack && DialogEvent.confirmCallBack(_this4._DialogObject.attribute);\n },\n closeCallBack: function closeCallBack() {\n // this.reset()\n DialogEvent.closeCallBack && DialogEvent.closeCallBack();\n }\n });\n case 24:\n this._DialogObject = _context5.sent;\n this._DialogObject.event = DialogEvent;\n this._DialogObject.attribute = this.deepCopyObj(options);\n html = \"\\n
\\n
\\n \\u5185\\u5BB9\\u7C7B\\u578B\\uFF1A\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\u7F16\\u8F91\\u5185\\u5BB9\\uFF1A\\n
\\n
\\n
\\n
\\n
\\n
\\u540D\\u79F0
\\n
\\u94FE\\u63A5
\\n
\\u64CD\\u4F5C
\\n
\\n
\\n
\\n
\\n
\\n
\\n

\\u6682\\u65E0\\u6570\\u636E

\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u7F16\\u8F91\\u5185\\u5BB9\\uFF1A\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u64CD\\u4F5C
\\n
\\u8BBE\\u5907\\u540D\\u79F0
\\n
\\u8BBE\\u5907\\u7C7B\\u578B
\\n
\\u8BBE\\u5907IP
\\n
\\u8BBE\\u5907\\u7AEF\\u53E3
\\n
\\u7528\\u6237\\u540D
\\n
\\u5BC6\\u7801
\\n
\\n
\\n
\\n
\\n
\\n \\n \\u7ED1\\u5B9A\\n
\\n
\\u8BBE\\u5907\\u540D\\u79F0
\\n
\\u8BBE\\u5907\\u7C7B\\u578B
\\n
\\u8BBE\\u5907IP
\\n
\\u8BBE\\u5907\\u7AEF\\u53E3
\\n
\\u7528\\u6237\\u540D
\\n
\\u5BC6\\u7801
\\n
\\n
\\n
\\n
\\n

\\u6682\\u65E0\\u6570\\u636E

\\n
\\n
\\n
\\n
\\n
    \\n
    \\n
    \\n \";\n contentElm = document.createElement('div');\n contentElm.innerHTML = html;\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._DialogObject._element.body.style.width = '600px';\n attributeSelectElm = contentElm.getElementsByClassName('attribute-select')[0];\n linkAddBtnElm = contentElm.getElementsByClassName('link_add_btn')[0];\n openRichTextBtnElm = contentElm.getElementsByClassName('open-richText-btn')[0];\n attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (_i2 = 0; _i2 < attributeContent.length; _i2++) {\n if (attributeContent[_i2].className.indexOf('attribute-content-' + this._DialogObject.attribute.attributeType) > -1) {\n attributeContent[_i2].style.display = 'block';\n } else {\n attributeContent[_i2].style.display = 'none';\n }\n }\n attributeSelectElm.addEventListener('change', function () {\n _this4._DialogObject.attribute.attributeType = attributeSelectElm.value;\n for (var _i3 = 0; _i3 < attributeContent.length; _i3++) {\n if (attributeContent[_i3].className.indexOf('attribute-content-' + _this4._DialogObject.attribute.attributeType) > -1) {\n attributeContent[_i3].style.display = 'block';\n } else {\n attributeContent[_i3].style.display = 'none';\n }\n }\n });\n linkAddBtnElm.addEventListener('click', /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (_this4._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n _this4._DialogObject.attribute.link.content.push({\n name: '链接',\n url: _this4._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n _this4._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n _this4.setAttributeLinkById(nodeId, _this4._DialogObject.attribute.link.content);\n } else {\n DialogEvent.clickAddLink && DialogEvent.clickAddLink(nodeId);\n }\n case 1:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n })));\n openRichTextBtnElm.addEventListener('click', function () {\n _Element_richText__WEBPACK_IMPORTED_MODULE_14__[\"default\"].open(nodeId, nodeId, _this4._DialogObject.attribute.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_14__[\"default\"].primaryCallBack = function (content) {\n _this4._DialogObject.attribute.richTextContent = content;\n };\n });\n cameraNameElm = contentElm.getElementsByClassName('camera-name')[0];\n cameraSelectElm = contentElm.getElementsByClassName('camera-select')[0];\n cameraNameElm.addEventListener('input', function () {\n cameraName = cameraNameElm.value;\n });\n this.cameraSelect && this.cameraSelect(cameraName);\n cameraSelectElm.addEventListener('click', function () {\n _this4.cameraSelect && _this4.cameraSelect(cameraName);\n });\n\n // let nameElm = contentElm.getElementsByClassName('flie-name')[0]\n // nameElm.value = this.options.fileName\n // nameElm.addEventListener('input', ()=>{\n // this.options.fileName = nameElm.value\n // })\n\n // let selectElm = contentElm.getElementsByClassName('input-select')[0]\n // let option = ''\n // for(let key in this.dataArray[0].attr) {\n // let o = ``\n // option = option + o\n // }\n // selectElm.innerHTML = option\n // selectElm.value = this.options.field\n // selectElm.addEventListener('input', ()=>{\n // this.options.field = selectElm.value\n // })\n\n // this._elms.fileName = nameElm\n // this._elms.field = selectElm\n _context5.next = 49;\n break;\n case 48:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 49:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function editById() {\n return _editById.apply(this, arguments);\n }\n return editById;\n }()\n }, {\n key: \"editContentById\",\n value: function editContentById(nodeId, content) {\n for (var i = 0; i < this.geojson.features.length; i++) {\n if (this.geojson.features[i].properties.id === nodeId) {\n this.geojson.features[i].content = content;\n break;\n }\n }\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.fileName = this.originalOptions.fileName;\n this.field = this.originalOptions.field;\n }\n }, {\n key: \"addAttributeLinkById\",\n value: function addAttributeLinkById(nodeId, link, i) {\n if (this._DialogObject && this._DialogObject.attribute && this._DialogObject.attribute.id == nodeId) {\n if (i || i === 0) {\n this._DialogObject._element.body.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('tr')[i + 1].getElementsByClassName('file-select')[0].value = link;\n } else {\n this._DialogObject.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.setAttributeLinkById(nodeId, this._DialogObject.attribute.link.content);\n }\n }\n }\n }, {\n key: \"setAttributeLinkById\",\n value: function setAttributeLinkById(nodeId, data) {\n var _this5 = this;\n if (this._DialogObject && this._DialogObject.attribute && this._DialogObject.attribute.id == nodeId) {\n this._DialogObject.attribute.link.content = data;\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this._DialogObject.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this._DialogObject.attribute.link.content.length; i++) {\n var tr = \"\\n
    \\n
    \" + this._DialogObject.attribute.link.content[i].name + \"
    \\n
    \" + this._DialogObject.attribute.link.content[i].url + \"
    \\n
    \\n \\n \\n
    \\n
    \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee6(index) {\n var table, tableContent, item, _loop, _i4;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee6$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return _this5.setAttributeLinkById(nodeId, _this5._DialogObject.attribute.link.content);\n case 2:\n table = _this5._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop(_i4) {\n var html, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(index === _i4)) {\n _context7.next = 33;\n break;\n }\n html = \"\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \";\n item[_i4].innerHTML = html;\n td = item[_i4].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this5._DialogObject.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this5._DialogObject.attribute.link.content[index].url;\n btn = item[_i4].getElementsByTagName('button');\n n = 0;\n case 8:\n if (!(n < btn.length)) {\n _context7.next = 32;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context7.next = 11;\n break;\n }\n return _context7.abrupt(\"continue\", 29);\n case 11:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context7.prev = 12;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _loop2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context6.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context6.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context6.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 15:\n if ((_step = _iterator.n()).done) {\n _context7.next = 21;\n break;\n }\n return _context7.delegateYield(_loop2(), \"t0\", 17);\n case 17:\n if (!_context7.t0) {\n _context7.next = 19;\n break;\n }\n return _context7.abrupt(\"break\", 21);\n case 19:\n _context7.next = 15;\n break;\n case 21:\n _context7.next = 26;\n break;\n case 23:\n _context7.prev = 23;\n _context7.t1 = _context7[\"catch\"](12);\n _iterator.e(_context7.t1);\n case 26:\n _context7.prev = 26;\n _iterator.f();\n return _context7.finish(26);\n case 29:\n n++;\n _context7.next = 8;\n break;\n case 32:\n return _context7.abrupt(\"return\", 1);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _loop, null, [[12, 23, 26, 29]]);\n });\n _i4 = 0;\n case 7:\n if (!(_i4 < item.length)) {\n _context8.next = 14;\n break;\n }\n return _context8.delegateYield(_loop(_i4), \"t0\", 9);\n case 9:\n if (!_context8.t0) {\n _context8.next = 11;\n break;\n }\n return _context8.abrupt(\"break\", 14);\n case 11:\n _i4++;\n _context8.next = 7;\n break;\n case 14:\n case \"end\":\n return _context8.stop();\n }\n }, _callee6);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this5._DialogObject.attribute.link.content.splice(i, 1);\n _this5.setAttributeLinkById(nodeId, _this5._DialogObject.attribute.link.content);\n },\n confirmEdit: function confirmEdit(value, i) {\n _this5._DialogObject.attribute.link.content[i] = value;\n _this5.setAttributeLinkById(nodeId, _this5._DialogObject.attribute.link.content);\n },\n cancelEdit: function cancelEdit() {\n _this5.setAttributeLinkById(nodeId, _this5._DialogObject.attribute.link.content);\n },\n fileSelect: function fileSelect(value, i) {\n _this5._DialogObject.event && _this5._DialogObject.event.clickAddLink && _this5._DialogObject.event.clickAddLink(nodeId, i);\n }\n };\n var _loop3 = function _loop3(_i5) {\n var btn = item[_i5].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i5);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i5 = 0; _i5 < item.length; _i5++) {\n _loop3(_i5);\n }\n }\n for (var _i6 = 0; _i6 < this.dataArray.length; _i6++) {\n if (this.dataArray[_i6].attr.id === nodeId) {\n if (this.dataArray[_i6].content) {\n this.opt_DialogObject.attribute.link.content = v;\n }\n break;\n }\n }\n }\n }, {\n key: \"getAllNode\",\n value: function getAllNode() {\n return this.data;\n }\n }, {\n key: \"openAllNodeList\",\n value: function openAllNodeList() {\n Object(_openAllNodeList__WEBPACK_IMPORTED_MODULE_16__[\"openAllNodeList\"])(this);\n }\n }, {\n key: \"openNodeListById\",\n value: function openNodeListById(id) {\n Object(_openNodeListById__WEBPACK_IMPORTED_MODULE_17__[\"openNodeListById\"])(this, id);\n }\n }, {\n key: \"flyTo\",\n value: function flyTo(id) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (id) {\n for (var i = 0; i < this.geojson.features.length; i++) {\n if (this.geojson.features[i].properties.id === id) {\n var range = this.geojson.features[i].geometry.range;\n if (range) {\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeViewFollow\"])(this.sdk);\n this.viewer.camera.flyTo({\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n destination: Cesium.Rectangle.fromDegrees(range.min_x, range.min_y, range.max_x, range.max_y)\n });\n }\n }\n }\n } else {\n if (this.range) {\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_20__[\"closeViewFollow\"])(this.sdk);\n this.viewer.camera.flyTo({\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n destination: Cesium.Rectangle.fromDegrees(this.range.min_x, this.range.min_y, this.range.max_x, this.range.max_y)\n });\n }\n }\n }\n }, {\n key: \"setShow\",\n value: function setShow(status, id) {\n // let enetity = this.entity.entities.getById(id)\n // if(enetity) {\n // enetity.show = status\n // }\n // else {\n\n // }\n if (id) {\n for (var i = 0; i < this.entity.entities.values.length; i++) {\n if (this.entity.entities.values[i].id && this.entity.entities.values[i].id.startsWith(id)) {\n this.entity.entities.values[i].show = status;\n // this.entity.entities.remove(this.entity.entities.values[i])\n }\n }\n } else {\n this.options.show = status;\n // this.entity.show = status\n for (var _i7 = 0; _i7 < this.entity.entities.values.length; _i7++) {\n this.entity.entities.values[_i7].show = status;\n }\n }\n }\n }, {\n key: \"setShowImg\",\n value: function setShowImg(status, index) {\n if (index || index === 0) {\n for (var i = 0; i < this.imgEntity.length; i++) {\n if (i == index) {\n this.imgEntity[i].show = status;\n break;\n }\n }\n } else {\n for (var _i8 = 0; _i8 < this.imgEntity.length; _i8++) {\n this.imgEntity[_i8].show = status;\n }\n }\n }\n }, {\n key: \"remove\",\n value: function remove() {\n // this.entity.entities.values.forEach(enetity => {\n // this.sdk.viewer.entities.remove(enetity)\n // })\n this.viewer.dataSources.remove(this.entity, true);\n this.removeImage();\n this.entity = null;\n this.geojson = {};\n this.data = {};\n }\n }, {\n key: \"removeImage\",\n value: function removeImage() {\n for (var i = 0; i < this.imgEntity.length; i++) {\n this.sdk.viewer.entities.remove(this.imgEntity[i]);\n }\n this.imgEntity = [];\n }\n }, {\n key: \"cameraSelect\",\n value: function cameraSelect(cameraName, page) {\n var _this6 = this;\n var type = {\n '1': '海康',\n '2': '大华'\n };\n var host = this.options.host;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var paginationElm = that._DialogObject._element.content.getElementsByClassName('pagination')[0];\n var attributeCameraElm = that._DialogObject._element.content.getElementsByClassName('attribute-content-camera')[0];\n if (!paginationElm) {\n return;\n }\n if (!attributeCameraElm) {\n return;\n }\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_12__[\"generatePagination\"])(paginationElm, 1, 10, 1);\n } else {\n return;\n }\n var url = \"\";\n var params = {\n cameraName: cameraName,\n page: !page || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(page) === 'object' ? 1 : page,\n pageSize: 5\n };\n var queryString = new URLSearchParams(params).toString();\n if (host.endsWith(\"yjearth4.0\")) url = \"\".concat(host, \"/api/v1/cameraData/list?\").concat(queryString);else url = \"\".concat(host, \"/yjearth4.0/api/v1/cameraData/list?\").concat(queryString);\n // url = this.options.path\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_10__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!_this6._DialogObject || !_this6._DialogObject._element || !_this6._DialogObject._element.content) {\n return;\n }\n var _paginationElm = _this6._DialogObject._element.content.getElementsByClassName('pagination')[0];\n var table = _this6._DialogObject._element.content.getElementsByClassName('camera-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (data.data) {\n if (data.data.list && data.data.list.length > 0) {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_12__[\"generatePagination\"])(_paginationElm, data.data.total, 10, 1, function (pageIndex) {\n _this6.cameraSelect && _this6.cameraSelect(cameraName, pageIndex);\n });\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'inline-flex';\n var _loop5 = function _loop5(i) {\n var tr = \"\\n
    \\n
    \\n \\n \\u7ED1\\u5B9A\\n
    \\n
    \").concat(data.data.list[i].cameraName, \"
    \\n
    \").concat(type[data.data.list[i].type], \"
    \\n
    \").concat(data.data.list[i].ip, \"
    \\n
    \").concat(data.data.list[i].port, \"
    \\n
    \").concat(data.data.list[i].userName, \"
    \\n
    \").concat(data.data.list[i].passWord, \"
    \\n
    \");\n var trElm = document.createRange().createContextualFragment(tr);\n var checkbox = trElm.querySelector('input[type=\"checkbox\"]');\n checkbox.addEventListener('change', function () {\n if (checkbox.checked) {\n _this6._DialogObject.attribute.camera.push(data.data.list[i]);\n } else {\n var newArray = _this6._DialogObject.attribute.camera.filter(function (item) {\n return item.ID !== data.data.list[i].ID;\n });\n _this6._DialogObject.attribute.camera = newArray;\n }\n });\n tableContent.appendChild(trElm);\n for (var m = 0; m < _this6._DialogObject.attribute.camera.length; m++) {\n if (_this6._DialogObject.attribute.camera[m].ID === data.data.list[i].ID) {\n checkbox.checked = true;\n break;\n }\n }\n };\n for (var i = 0; i < data.data.list.length; i++) {\n _loop5(i);\n }\n }\n if (data.data && data.data.total) {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_12__[\"generatePagination\"])(_paginationElm, data.data.total, 10, 1, function (pageIndex) {\n _this6.cameraSelect && _this6.cameraSelect(cameraName, pageIndex);\n });\n }\n } else {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_12__[\"generatePagination\"])(_paginationElm, 1, 10, 1);\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n // that.entity = new Cesium.PrimitiveCollection();\n // that.viewer.scene.primitives.add(that.entity)\n // Shp.calculationScope(that, that.data)\n // Shp.createPoints(that, that.data.points)\n // Shp.createPolylines(that, that.data.polylines)\n // Shp.createPolygons(that, that.data.polygons)\n var bbox = turf.bbox(that.geojson);\n that.range = {\n max_x: bbox[2],\n max_y: bbox[3],\n min_x: bbox[0],\n min_y: bbox[1]\n };\n that.options.img && Shp.createImage(that);\n var getColor = function getColor(level) {\n var color = that.options.color;\n if (level) {\n switch (level._value) {\n case 1:\n color = 'rgba(255,0,0,1)';\n break;\n case 2:\n color = 'rgba(255,126,0,1)';\n break;\n case 3:\n color = 'rgba(255,250,0,1)';\n break;\n case 4:\n color = 'rgba(0,102,255,1)';\n break;\n case 5:\n color = 'rgba(0,255,0,1)';\n break;\n }\n return color;\n } else {\n return color;\n }\n };\n var geoJsonDataSource = new Cesium.GeoJsonDataSource();\n var promise = geoJsonDataSource.load(that.geojson, {\n clampToGround: true\n });\n var Instances = [];\n return promise.then(function (datasource) {\n that.entity = datasource;\n that.viewer.dataSources.add(datasource);\n datasource.entities.values.forEach(function (enetity) {\n enetity.show = that.options.show;\n // that.sdk.viewer.entities.add(enetity)\n if (enetity.billboard) {\n // enetity.billboard.show = false\n enetity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n enetity.point = new Cesium.PointGraphics({\n show: true,\n // position: new Cesium.Cartesian3(enetity.position._value.x, enetity.position._value.y, enetity.position._value.z), // 点的位置\n color: Cesium.Color.fromCssColorString(getColor(enetity.properties.level)),\n // 点的颜色\n pixelSize: 10,\n // 点的大小\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n disableDepthTestDistance: Number.POSITIVE_INFINITY // 不应用深度测试\n });\n }\n if (enetity.polygon) {\n enetity.polygon.perPositionHeight = false;\n enetity.polygon.material = Cesium.Color.fromCssColorString(getColor(enetity.properties.level));\n }\n if (enetity.polyline) {\n var color = that.options.color;\n enetity.polyline.material = Cesium.Color.fromCssColorString(getColor(enetity.properties.level));\n\n // let polyline = new Cesium.GroundPolylineGeometry({\n // positions: enetity.polyline.positions._value,\n // width: 2\n // });\n // Instances.push(new Cesium.GeometryInstance({\n // geometry: polyline,\n // attributes: {\n // color: Cesium.ColorGeometryInstanceAttribute.fromColor(\n // Cesium.Color.fromCssColorString('rgba(0,255,184,0.5)')\n // )\n // }\n // }))\n // console.log(enetity.polyline)\n }\n });\n // let primitive = new Cesium.GroundPolylinePrimitive({\n // geometryInstances: Instances,\n // appearance: new Cesium.PolylineColorAppearance()\n // });\n // that.viewer.scene.primitives.add(primitive);\n // that.viewer.zoomTo(datasource)\n });\n }\n }, {\n key: \"createImage\",\n value: function createImage(that) {\n //(primitive无法贴地?)\n that.removeImage();\n for (var i = 0; i < that.options.img.length; i++) {\n var entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n rectangle: {\n coordinates: Cesium.Rectangle.fromDegrees(that.range.min_x, that.range.min_y, that.range.max_x, that.range.max_y),\n material: new Cesium.ImageMaterialProperty({\n image: that.options.img[i],\n transparent: true\n })\n }\n });\n that.imgEntity.push(entity);\n }\n }\n\n /**\r\n * @description 计算shp范围\r\n */\n }, {\n key: \"calculationScope\",\n value: function calculationScope(that, data) {\n var points = [];\n if (data.points) {\n for (var i = 0; i < data.points.length; i++) {\n points.push(turf.point([data.points[i].position.x, data.points[i].position.y]));\n }\n }\n if (data.polylines) {\n for (var _i9 = 0; _i9 < data.polylines.length; _i9++) {\n if (data.polylines[_i9].positions) for (var m = 0; m < data.polylines[_i9].positions.length; m++) {\n points.push(turf.point([data.polylines[_i9].positions[m].x, data.polylines[_i9].positions[m].y]));\n }\n }\n }\n if (data.polygons) {\n for (var _i10 = 0; _i10 < data.polygons.length; _i10++) {\n if (data.polygons[_i10].positions) for (var _m5 = 0; _m5 < data.polygons[_i10].positions.length; _m5++) {\n points.push(turf.point([data.polygons[_i10].positions[_m5].x, data.polygons[_i10].positions[_m5].y]));\n }\n }\n }\n if (points.length > 0) {\n var _features = turf.featureCollection(points);\n var enveloped = turf.envelope(_features);\n if (enveloped && enveloped.bbox && enveloped.bbox.length == 4) {\n that.range = {\n max_x: enveloped.bbox[2],\n max_y: enveloped.bbox[3],\n min_x: enveloped.bbox[0],\n min_y: enveloped.bbox[1]\n };\n }\n }\n }\n }, {\n key: \"createPoints\",\n value: function createPoints(that, data) {\n if (!data) {\n return;\n }\n var points = new Cesium.PointPrimitiveCollection({\n scene: that.viewer.scene // 指定场景\n });\n for (var i = 0; i < data.length; i++) {\n data[i].attr.id || (data[i].attr.id = that.randomString());\n points.add({\n id: data[i].attr.id,\n position: Cesium.Cartesian3.fromDegrees(data[i].x, data[i].y, data[i].z),\n // 点的位置\n color: Cesium.Color.RED,\n // 点的颜色\n pixelSize: 10,\n // 点的大小\n disableDepthTestDistance: Number.POSITIVE_INFINITY // 不应用深度测试\n });\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_13__[\"regLeftClickCallback\"])(data[i].attr.id, that.leftClickCB, that);\n }\n that.entity.add(points);\n }\n }, {\n key: \"createPolylines\",\n value: function createPolylines(that, data) {\n if (!data) {\n return;\n }\n var polylineInstance = [];\n for (var i = 0; i < data.length; i++) {\n data[i].attr.id || (data[i].attr.id = that.randomString());\n var positions = data[i].positions;\n var fromDegreesArray = [];\n for (var m = 0; m < positions.length; m++) {\n fromDegreesArray.push(positions[m].x, positions[m].y, positions[m].z);\n }\n var polyline = new Cesium.GroundPolylineGeometry({\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n width: 4\n });\n var instance = new Cesium.GeometryInstance({\n id: data[i].attr.id,\n geometry: polyline,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString(data[i].COLOR || 'rgba(0,255,184,0.5)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true) //显示或者隐藏\n }\n });\n polylineInstance.push(instance);\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_13__[\"regLeftClickCallback\"])(data[i].attr.id, that.leftClickCB, that);\n }\n if (polylineInstance.length > 0) {\n that.entity.add(new Cesium.GroundPolylinePrimitive({\n geometryInstances: polylineInstance,\n appearance: new Cesium.PolylineColorAppearance()\n }));\n }\n }\n }, {\n key: \"createPolygons\",\n value: function createPolygons(that, data) {\n if (!data) {\n return;\n }\n var polygonInstance = [];\n for (var i = 0; i < data.length; i++) {\n data[i].attr.id || (data[i].attr.id = that.randomString());\n var positions = data[i].positions;\n var fromDegreesArray = [];\n for (var m = 0; m < positions.length; m++) {\n fromDegreesArray.push(positions[m].x, positions[m].y, positions[m].z);\n }\n var polygon = new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray))\n });\n var instance = new Cesium.GeometryInstance({\n id: data[i].attr.id,\n geometry: polygon,\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString(data[i].COLOR || 'rgba(0,255,184,0.5)')),\n show: new Cesium.ShowGeometryInstanceAttribute(true) //显示或者隐藏\n }\n });\n polygonInstance.push(instance);\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_13__[\"regLeftClickCallback\"])(data[i].attr.id, that.leftClickCB, that);\n }\n if (polygonInstance.length > 0) {\n var primitive = new Cesium.GroundPrimitive({\n geometryInstances: polygonInstance,\n appearance: new Cesium.PerInstanceColorAppearance({\n translucent: true,\n //false时透明度无效\n closed: false\n })\n });\n that.entity.add(primitive);\n }\n }\n }, {\n key: \"createTableContent\",\n value: function createTableContent(that) {\n var trsElm = '';\n for (var i = 0; i < that.currentData.length; i++) {\n var trElm = '';\n var tdElm = '';\n for (var key in that.currentData[i].attr) {\n tdElm = tdElm + \"
    \").concat(that.currentData[i].attr[key], \"
    \");\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Shp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU2hwL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1NocC9pbmRleC5qcz8zNDdjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEhvc3QsIGdldFRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL29uXCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVBhZ2luYXRpb24gfSBmcm9tIFwiLi4vLi4vRWxlbWVudC9QYWdpbmF0aW9uXCI7XHJcbmltcG9ydCB7IHJlZ0xlZnRDbGlja0NhbGxiYWNrIH0gZnJvbSBcIi4uLy4uLy4uL0dsb2JhbC9DbGlja0NhbGxiYWNrXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IHsgb3BlbkFsbE5vZGVMaXN0IGFzIE9wZW5BbGxOb2RlTGlzdCB9IGZyb20gXCIuL29wZW5BbGxOb2RlTGlzdFwiO1xyXG5pbXBvcnQgeyBvcGVuTm9kZUxpc3RCeUlkIGFzIE9wZW5Ob2RlTGlzdEJ5SWQgfSBmcm9tIFwiLi9vcGVuTm9kZUxpc3RCeUlkXCI7XHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBhdHRyaWJ1dGVFbG0gfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5pbXBvcnQgeyBzZXRBY3RpdmVWaWV3ZXIsIGNsb3NlUm90YXRlQXJvdW5kLCBjbG9zZVZpZXdGb2xsb3d9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBTaHAgZXh0ZW5kcyBCYXNlIHtcclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy52aWV3ZXIgPSBzZGsudmlld2VyXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wYXRoKSB7XHJcbiAgICAgIHRoaXMuZXJyb3IgPSAn5pyq5o+Q5L6b6Lev5b6EISdcclxuICAgICAgaWYgKHdpbmRvdy5FTEVNRU5UKSB7XHJcbiAgICAgICAgd2luZG93LkVMRU1FTlQuTWVzc2FnZS5jbG9zZUFsbCgpO1xyXG4gICAgICAgIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKHRoaXMuZXJyb3IpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmZpbGVOYW1lID0gb3B0aW9ucy5maWxlTmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgdGhpcy5vcHRpb25zLmZpZWxkID0gb3B0aW9ucy5maWVsZCB8fCAnaWQnXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8ICdyZ2JhKDAsMjU1LDE4NCwwLjUpJ1xyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG5cclxuICAgIHRoaXMudG90YWwgPSAwXHJcbiAgICB0aGlzLnBhZ2UgPSAxXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gMjBcclxuICAgIHRoaXMuY3VycmVudERhdGEgPSBbXVxyXG4gICAgdGhpcy5kYXRhID0gW11cclxuICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICB0aGlzLmltZ0VudGl0eSA9IFtdXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIHRoaXMuc2V0U2hvdyh2KVxyXG4gIH1cclxuXHJcbiAgb24oKSB7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wYXRoKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0KCkge1xyXG4gICAgbGV0IHVybCA9IFwiXCJcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QuZW5kc1dpdGgoXCJ5amVhcnRoNC4wXCIpKSB7XHJcbiAgICAgIHVybCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy9hcGkvdjEvdmVjdG9yL2xvYWQnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5vcHRpb25zLmhvc3QgKyAnL3lqZWFydGg0LjAvYXBpL3YxL3ZlY3Rvci9sb2FkJ1xyXG4gICAgfVxyXG4gICAgdXJsICs9ICc/cGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGhcclxuICAgIC8vIHVybCA9ICdqc29uL3NocC5qc29uJ1xyXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXHJcblxyXG4gICAgICAvLyBTaHAuY3JlYXRlKHRoaXMpXHJcbiAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCB8fCBkYXRhLmNvZGUgPT09IDApIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhLmRhdGFcclxuXHJcbiAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyAgIGxldCBwb2ludHNcclxuICAgICAgICAvLyAgIGxldCBwb2x5bGluZXNcclxuICAgICAgICAvLyAgIGxldCBwb2x5Z29uc1xyXG4gICAgICAgIC8vICAgbGV0IG11bHRpX3BvbHlsaW5lc1xyXG4gICAgICAgIC8vICAgbGV0IG11bHRpX3BvbHlnb25zXHJcbiAgICAgICAgLy8gICBpZiAodGhpcy5kYXRhW2ldLnBvaW50cykge1xyXG4gICAgICAgIC8vICAgICBwb2ludHMgPSBbLi4udGhpcy5kYXRhW2ldLnBvaW50c11cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAgIC8vICAgICBwb2ludHMgPSBbXVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKHRoaXMuZGF0YVtpXS5wb2x5bGluZXMpIHtcclxuICAgICAgICAvLyAgICAgcG9seWxpbmVzID0gWy4uLnRoaXMuZGF0YVtpXS5wb2x5bGluZXNdXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAvLyAgICAgcG9seWxpbmVzID0gW11cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmICh0aGlzLmRhdGFbaV0ucG9seWdvbnMpIHtcclxuICAgICAgICAvLyAgICAgcG9seWdvbnMgPSBbLi4udGhpcy5kYXRhW2ldLnBvbHlnb25zXVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHBvbHlnb25zID0gW11cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmICh0aGlzLmRhdGFbaV0ubXVsdGlfcG9seWxpbmVzKSB7XHJcbiAgICAgICAgLy8gICAgIG11bHRpX3BvbHlsaW5lcyA9IFsuLi50aGlzLmRhdGFbaV0ubXVsdGlfcG9seWxpbmVzXVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIG11bHRpX3BvbHlsaW5lcyA9IFtdXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAodGhpcy5kYXRhW2ldLm11bHRpX3BvbHlnb25zKSB7XHJcbiAgICAgICAgLy8gICAgIG11bHRpX3BvbHlnb25zID0gWy4uLnRoaXMuZGF0YVtpXS5tdWx0aV9wb2x5Z29uc11cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAgIC8vICAgICBtdWx0aV9wb2x5Z29ucyA9IFtdXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICB0aGlzLmRhdGFBcnJheSA9IFsuLi50aGlzLmRhdGFBcnJheSwgLi4ucG9pbnRzLCAuLi5wb2x5bGluZXMsIC4uLnBvbHlnb25zLCAuLi5tdWx0aV9wb2x5bGluZXMsIC4uLm11bHRpX3BvbHlnb25zXVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBhd2FpdCB0aGlzLmZvcm1hdERhdGEoKVxyXG4gICAgICAgIHJldHVybiBTaHAuY3JlYXRlKHRoaXMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZGF0YS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmoLzlvI/ljJbmlbDmja5cclxuICBhc3luYyBmb3JtYXREYXRhKCkge1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW11cclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGZvcm1hdEZlYXR1cmVzKHRoaXMuZGF0YSlcclxuICAgIGZ1bmN0aW9uIGZvcm1hdEZlYXR1cmVzKGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEuZGF0YSkge1xyXG4gICAgICAgIF90aGlzLmxpc3QucHVzaCguLi5kYXRhLmRhdGEpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb2ludHNcclxuICAgICAgICAgIGxldCBwb2x5bGluZXNcclxuICAgICAgICAgIGxldCBwb2x5Z29uc1xyXG4gICAgICAgICAgbGV0IG11bHRpX3BvbHlsaW5lc1xyXG4gICAgICAgICAgbGV0IG11bHRpX3BvbHlnb25zXHJcbiAgICAgICAgICBpZiAoZGF0YS5kYXRhW2ldLnBvaW50cykge1xyXG4gICAgICAgICAgICBwb2ludHMgPSBbLi4uZGF0YS5kYXRhW2ldLnBvaW50c11cclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb2ludHMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIFwiaWRcIjogcG9pbnRzW21dLmF0dHIuaWQsXHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcclxuICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBbcG9pbnRzW21dLngsIHBvaW50c1ttXS55LCBwb2ludHNbbV0uel0sXHJcbiAgICAgICAgICAgICAgICAgIFwicmFuZ2VcIjogcG9pbnRzW21dLnJhbmdlLFxyXG4gICAgICAgICAgICAgICAgICBcInBvc2l0aW9uc1wiOiB7IHg6IHBvaW50c1ttXS54LCB5OiBwb2ludHNbbV0ueSwgejogcG9pbnRzW21dLnogfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBwb2ludHNbbV0uYXR0ciA/IHtcclxuICAgICAgICAgICAgICAgICAgLi4ucG9pbnRzW21dLmF0dHJcclxuICAgICAgICAgICAgICAgIH0gOiB7fVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRhLmRhdGFbaV0ucG9seWxpbmVzKSB7XHJcbiAgICAgICAgICAgIHBvbHlsaW5lcyA9IFsuLi5kYXRhLmRhdGFbaV0ucG9seWxpbmVzXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHBvbHlsaW5lcy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcG9seWxpbmVzW21dLnBvc2l0aW9ucy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goW3BvbHlsaW5lc1ttXS5wb3NpdGlvbnNbbl0ueCwgcG9seWxpbmVzW21dLnBvc2l0aW9uc1tuXS55LCBwb2x5bGluZXNbbV0ucG9zaXRpb25zW25dLnpdKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIFwiaWRcIjogcG9seWxpbmVzW21dLmF0dHIuaWQsXHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcclxuICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiTGluZVN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzXCI6IHBvc2l0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgXCJyYW5nZVwiOiBwb2x5bGluZXNbbV0ucmFuZ2UsXHJcbiAgICAgICAgICAgICAgICAgIFwicG9zaXRpb25zXCI6IHBvbHlsaW5lc1ttXS5wb3NpdGlvbnNcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjogcG9seWxpbmVzW21dLmF0dHIgPyB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnBvbHlsaW5lc1ttXS5hdHRyXHJcbiAgICAgICAgICAgICAgICB9IDoge31cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZGF0YS5kYXRhW2ldLnBvbHlnb25zKSB7XHJcbiAgICAgICAgICAgIHBvbHlnb25zID0gWy4uLmRhdGEuZGF0YVtpXS5wb2x5Z29uc11cclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb2x5Z29ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcG9seWdvbnNbbV0ucG9zaXRpb25zLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChbcG9seWdvbnNbbV0ucG9zaXRpb25zW25dLngsIHBvbHlnb25zW21dLnBvc2l0aW9uc1tuXS55XSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBcImlkXCI6IHBvbHlnb25zW21dLmF0dHIuaWQsXHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcclxuICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUG9seWdvblwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzXCI6IFtwb3NpdGlvbnNdLFxyXG4gICAgICAgICAgICAgICAgICBcInJhbmdlXCI6IHBvbHlnb25zW21dLnJhbmdlLFxyXG4gICAgICAgICAgICAgICAgICBcInBvc2l0aW9uc1wiOiBwb2x5Z29uc1ttXS5wb3NpdGlvbnNcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjogcG9seWdvbnNbbV0uYXR0ciA/IHtcclxuICAgICAgICAgICAgICAgICAgLi4ucG9seWdvbnNbbV0uYXR0clxyXG4gICAgICAgICAgICAgICAgfSA6IHt9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRhdGEuZGF0YVtpXS5tdWx0aV9wb2x5bGluZXMpIHtcclxuICAgICAgICAgICAgbXVsdGlfcG9seWxpbmVzID0gWy4uLmRhdGEuZGF0YVtpXS5tdWx0aV9wb2x5bGluZXNdXHJcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXVsdGlfcG9seWxpbmVzLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uc3h5eiA9IFtdXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBtdWx0aV9wb2x5bGluZXNbbV0ucG9seWxpbmVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25zMiA9IFtdXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnN4eXoucHVzaChtdWx0aV9wb2x5bGluZXNbbV0ucG9seWxpbmVzW25dLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgbXVsdGlfcG9seWxpbmVzW21dLnBvbHlsaW5lc1tuXS5wb3NpdGlvbnMubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25zMi5wdXNoKFttdWx0aV9wb2x5bGluZXNbbV0ucG9seWxpbmVzW25dLnBvc2l0aW9uc1tyXS54LCBtdWx0aV9wb2x5bGluZXNbbV0ucG9seWxpbmVzW25dLnBvc2l0aW9uc1tyXS55LCBtdWx0aV9wb2x5bGluZXNbbV0ucG9seWxpbmVzW25dLnBvc2l0aW9uc1tyXS56XSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uczIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgXCJpZFwiOiBtdWx0aV9wb2x5bGluZXNbbV0uYXR0ci5pZCxcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcclxuICAgICAgICAgICAgICAgIFwiZ2VvbWV0cnlcIjoge1xyXG4gICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJNdWx0aUxpbmVTdHJpbmdcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBwb3NpdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgIFwicmFuZ2VcIjogbXVsdGlfcG9seWxpbmVzW21dLnJhbmdlLFxyXG4gICAgICAgICAgICAgICAgICBcInBvc2l0aW9uc1wiOiBwb3NpdGlvbnN4eXpcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjogbXVsdGlfcG9seWxpbmVzW21dLmF0dHIgPyB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLm11bHRpX3BvbHlsaW5lc1ttXS5hdHRyXHJcbiAgICAgICAgICAgICAgICB9IDoge31cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZGF0YS5kYXRhW2ldLm11bHRpX3BvbHlnb25zKSB7XHJcbiAgICAgICAgICAgIG11bHRpX3BvbHlnb25zID0gWy4uLmRhdGEuZGF0YVtpXS5tdWx0aV9wb2x5Z29uc11cclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdWx0aV9wb2x5Z29ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgICAgIGxldCBwb3NpdGlvbnN4eXogPSBbXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbXVsdGlfcG9seWdvbnNbbV0ucG9seWdvbnMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbnMyID0gW11cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uc3h5ei5wdXNoKG11bHRpX3BvbHlnb25zW21dLnBvbHlnb25zW25dLnBvc2l0aW9ucylcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgbXVsdGlfcG9seWdvbnNbbV0ucG9seWdvbnNbbl0ucG9zaXRpb25zLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczIucHVzaChbbXVsdGlfcG9seWdvbnNbbV0ucG9seWdvbnNbbl0ucG9zaXRpb25zW3JdLngsIG11bHRpX3BvbHlnb25zW21dLnBvbHlnb25zW25dLnBvc2l0aW9uc1tyXS55LCBtdWx0aV9wb2x5Z29uc1ttXS5wb2x5Z29uc1tuXS5wb3NpdGlvbnNbcl0uel0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbnMyKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIFwiaWRcIjogbXVsdGlfcG9seWdvbnNbbV0uYXR0ci5pZCxcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcclxuICAgICAgICAgICAgICAgIFwiZ2VvbWV0cnlcIjoge1xyXG4gICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJNdWx0aVBvbHlnb25cIixcclxuICAgICAgICAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBbcG9zaXRpb25zXSxcclxuICAgICAgICAgICAgICAgICAgXCJyYW5nZVwiOiBtdWx0aV9wb2x5Z29uc1ttXS5yYW5nZSxcclxuICAgICAgICAgICAgICAgICAgXCJwb3NpdGlvbnNcIjogcG9zaXRpb25zeHl6XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IG11bHRpX3BvbHlnb25zW21dLmF0dHIgPyB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLm11bHRpX3BvbHlnb25zW21dLmF0dHJcclxuICAgICAgICAgICAgICAgIH0gOiB7fVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGEuY2hpbGRyZW4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGZvcm1hdEZlYXR1cmVzKGRhdGEuY2hpbGRyZW5baV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmVhdHVyZXMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGEucHJvcGVydGllcy5maWQpIC0gTnVtYmVyKGIucHJvcGVydGllcy5maWQpKTtcclxuICAgIC8vIGZvcihsZXQgaT0wO2k8NTtpKyspIHtcclxuICAgIC8vICAgZmVhdHVyZXMgPSBbLi4uZmVhdHVyZXMsIC4uLmZlYXR1cmVzXVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5nZW9qc29uID0ge1xyXG4gICAgICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgICBcImZlYXR1cmVzXCI6IGZlYXR1cmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsZU5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbGVOYW1lXHJcbiAgfVxyXG4gIHNldCBmaWxlTmFtZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZmlsZU5hbWUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmZpbGVOYW1lICYmICh0aGlzLl9lbG1zLmZpbGVOYW1lLnZhbHVlID0gdilcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmllbGRcclxuICB9XHJcbiAgc2V0IGZpZWxkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5maWVsZCA9IHZcclxuICAgIHRoaXMuX2VsbXMuZmllbGQgJiYgKHRoaXMuX2VsbXMuZmllbGQudmFsdWUgPSB2KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9uQ2xpY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGlja0NhbGxCYWNrXHJcbiAgfVxyXG5cclxuICBzZXQgb25DbGljayh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCd2YWw6JywgdmFsLCAn5LiN5piv5LiA5LiqZnVuY3Rpb24nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbGlja0NhbGxCYWNrID0gdmFsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaW1nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbWdcclxuICB9XHJcblxyXG4gIHNldCBpbWcodikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgIHYgPSBbdl1cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5pbWcgPSB2XHJcbiAgICBTaHAuY3JlYXRlSW1hZ2UodGhpcylcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcblxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2XHJcbiAgICB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXMuZm9yRWFjaChlbmV0aXR5ID0+IHtcclxuICAgICAgaWYgKGVuZXRpdHkuYmlsbGJvYXJkKSB7XHJcbiAgICAgICAgZW5ldGl0eS5iaWxsYm9hcmQuY29sb3IgPSB2XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVuZXRpdHkucG9seWdvbikge1xyXG4gICAgICAgIGVuZXRpdHkucG9seWdvbi5tYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodilcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5ldGl0eS5wb2x5bGluZSkge1xyXG4gICAgICAgIGVuZXRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsZWZ0Q2xpY2tDQihtbywgaWQsIHAsIHRoYXQpIHtcclxuICAgIGlmICh0aGF0LmNsaWNrQ2FsbEJhY2sgJiYgdHlwZW9mIHRoYXQuY2xpY2tDYWxsQmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGF0LmNsaWNrQ2FsbEJhY2sobW8sIGlkLCBwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICAvLyB0aGF0LmVudGl0eSA9IG5ldyBDZXNpdW0uUHJpbWl0aXZlQ29sbGVjdGlvbigpO1xyXG4gICAgLy8gdGhhdC52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQodGhhdC5lbnRpdHkpXHJcbiAgICAvLyBTaHAuY2FsY3VsYXRpb25TY29wZSh0aGF0LCB0aGF0LmRhdGEpXHJcbiAgICAvLyBTaHAuY3JlYXRlUG9pbnRzKHRoYXQsIHRoYXQuZGF0YS5wb2ludHMpXHJcbiAgICAvLyBTaHAuY3JlYXRlUG9seWxpbmVzKHRoYXQsIHRoYXQuZGF0YS5wb2x5bGluZXMpXHJcbiAgICAvLyBTaHAuY3JlYXRlUG9seWdvbnModGhhdCwgdGhhdC5kYXRhLnBvbHlnb25zKVxyXG4gICAgbGV0IGJib3ggPSB0dXJmLmJib3godGhhdC5nZW9qc29uKTtcclxuICAgIHRoYXQucmFuZ2UgPSB7XHJcbiAgICAgIG1heF94OiBiYm94WzJdLFxyXG4gICAgICBtYXhfeTogYmJveFszXSxcclxuICAgICAgbWluX3g6IGJib3hbMF0sXHJcbiAgICAgIG1pbl95OiBiYm94WzFdLFxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmltZyAmJiBTaHAuY3JlYXRlSW1hZ2UodGhhdClcclxuICAgIGNvbnN0IGdldENvbG9yID0gKGxldmVsKSA9PiB7XHJcbiAgICAgIGxldCBjb2xvciA9IHRoYXQub3B0aW9ucy5jb2xvclxyXG4gICAgICBpZiAobGV2ZWwpIHtcclxuICAgICAgICBzd2l0Y2ggKGxldmVsLl92YWx1ZSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBjb2xvciA9ICdyZ2JhKDI1NSwwLDAsMSknXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJ3JnYmEoMjU1LDEyNiwwLDEpJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICBjb2xvciA9ICdyZ2JhKDI1NSwyNTAsMCwxKSdcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgY29sb3IgPSAncmdiYSgwLDEwMiwyNTUsMSknXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGNvbG9yID0gJ3JnYmEoMCwyNTUsMCwxKSdcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGdlb0pzb25EYXRhU291cmNlID0gbmV3IENlc2l1bS5HZW9Kc29uRGF0YVNvdXJjZSgpO1xyXG4gICAgbGV0IHByb21pc2UgPSBnZW9Kc29uRGF0YVNvdXJjZS5sb2FkKHRoYXQuZ2VvanNvbiwge1xyXG4gICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBsZXQgSW5zdGFuY2VzID0gW11cclxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZGF0YXNvdXJjZSA9PiB7XHJcbiAgICAgIHRoYXQuZW50aXR5ID0gZGF0YXNvdXJjZVxyXG4gICAgICB0aGF0LnZpZXdlci5kYXRhU291cmNlcy5hZGQoZGF0YXNvdXJjZSk7XHJcbiAgICAgIGRhdGFzb3VyY2UuZW50aXRpZXMudmFsdWVzLmZvckVhY2goZW5ldGl0eSA9PiB7XHJcbiAgICAgICAgZW5ldGl0eS5zaG93ID0gdGhhdC5vcHRpb25zLnNob3dcclxuICAgICAgICAvLyB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKGVuZXRpdHkpXHJcbiAgICAgICAgaWYgKGVuZXRpdHkuYmlsbGJvYXJkKSB7XHJcbiAgICAgICAgICAvLyBlbmV0aXR5LmJpbGxib2FyZC5zaG93ID0gZmFsc2VcclxuICAgICAgICAgIGVuZXRpdHkuYmlsbGJvYXJkLmhlaWdodFJlZmVyZW5jZSA9IENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5EXHJcbiAgICAgICAgICBlbmV0aXR5LnBvaW50ID0gbmV3IENlc2l1bS5Qb2ludEdyYXBoaWNzKHtcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgLy8gcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhlbmV0aXR5LnBvc2l0aW9uLl92YWx1ZS54LCBlbmV0aXR5LnBvc2l0aW9uLl92YWx1ZS55LCBlbmV0aXR5LnBvc2l0aW9uLl92YWx1ZS56KSwgLy8g54K555qE5L2N572uXHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGdldENvbG9yKGVuZXRpdHkucHJvcGVydGllcy5sZXZlbCkpLCAvLyDngrnnmoTpopzoibJcclxuICAgICAgICAgICAgcGl4ZWxTaXplOiAxMCwgLy8g54K555qE5aSn5bCPXHJcbiAgICAgICAgICAgIGhlaWdodFJlZmVyZW5jZTogQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkQsXHJcbiAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICAvLyDkuI3lupTnlKjmt7HluqbmtYvor5VcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvbHlnb24pIHtcclxuICAgICAgICAgIGVuZXRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IGZhbHNlXHJcbiAgICAgICAgICBlbmV0aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGdldENvbG9yKGVuZXRpdHkucHJvcGVydGllcy5sZXZlbCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvbHlsaW5lKSB7XHJcbiAgICAgICAgICBsZXQgY29sb3IgPSB0aGF0Lm9wdGlvbnMuY29sb3JcclxuICAgICAgICAgIGVuZXRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGdldENvbG9yKGVuZXRpdHkucHJvcGVydGllcy5sZXZlbCkpXHJcblxyXG4gICAgICAgICAgLy8gbGV0IHBvbHlsaW5lID0gbmV3IENlc2l1bS5Hcm91bmRQb2x5bGluZUdlb21ldHJ5KHtcclxuICAgICAgICAgIC8vICAgcG9zaXRpb25zOiBlbmV0aXR5LnBvbHlsaW5lLnBvc2l0aW9ucy5fdmFsdWUsXHJcbiAgICAgICAgICAvLyAgIHdpZHRoOiAyXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIC8vIEluc3RhbmNlcy5wdXNoKG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgICAvLyAgIGdlb21ldHJ5OiBwb2x5bGluZSxcclxuICAgICAgICAgIC8vICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgLy8gICAgIGNvbG9yOiBDZXNpdW0uQ29sb3JHZW9tZXRyeUluc3RhbmNlQXR0cmlidXRlLmZyb21Db2xvcihcclxuICAgICAgICAgIC8vICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJ3JnYmEoMCwyNTUsMTg0LDAuNSknKVxyXG4gICAgICAgICAgLy8gICAgIClcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSkpXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlbmV0aXR5LnBvbHlsaW5lKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLy8gbGV0IHByaW1pdGl2ZSA9IG5ldyBDZXNpdW0uR3JvdW5kUG9seWxpbmVQcmltaXRpdmUoe1xyXG4gICAgICAvLyAgIGdlb21ldHJ5SW5zdGFuY2VzOiBJbnN0YW5jZXMsXHJcbiAgICAgIC8vICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5Qb2x5bGluZUNvbG9yQXBwZWFyYW5jZSgpXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyB0aGF0LnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZChwcmltaXRpdmUpO1xyXG4gICAgICAvLyB0aGF0LnZpZXdlci56b29tVG8oZGF0YXNvdXJjZSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlSW1hZ2UodGhhdCkgey8vKHByaW1pdGl2ZeaXoOazlei0tOWcsD8pXHJcbiAgICB0aGF0LnJlbW92ZUltYWdlKClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLmltZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgICAgcmVjdGFuZ2xlOiB7XHJcbiAgICAgICAgICBjb29yZGluYXRlczogQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyh0aGF0LnJhbmdlLm1pbl94LCB0aGF0LnJhbmdlLm1pbl95LCB0aGF0LnJhbmdlLm1heF94LCB0aGF0LnJhbmdlLm1heF95KSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGF0Lm9wdGlvbnMuaW1nW2ldLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB0aGF0LmltZ0VudGl0eS5wdXNoKGVudGl0eSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiDorqHnrpdzaHDojIPlm7RcclxuICAgKi9cclxuICBzdGF0aWMgY2FsY3VsYXRpb25TY29wZSh0aGF0LCBkYXRhKSB7XHJcbiAgICBsZXQgcG9pbnRzID0gW11cclxuICAgIGlmIChkYXRhLnBvaW50cykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcG9pbnRzLnB1c2godHVyZi5wb2ludChbZGF0YS5wb2ludHNbaV0ucG9zaXRpb24ueCwgZGF0YS5wb2ludHNbaV0ucG9zaXRpb24ueV0pKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YS5wb2x5bGluZXMpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnBvbHlsaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhLnBvbHlsaW5lc1tpXS5wb3NpdGlvbnMpXHJcbiAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGRhdGEucG9seWxpbmVzW2ldLnBvc2l0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaCh0dXJmLnBvaW50KFtkYXRhLnBvbHlsaW5lc1tpXS5wb3NpdGlvbnNbbV0ueCwgZGF0YS5wb2x5bGluZXNbaV0ucG9zaXRpb25zW21dLnldKSlcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRhdGEucG9seWdvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnBvbHlnb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGEucG9seWdvbnNbaV0ucG9zaXRpb25zKVxyXG4gICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBkYXRhLnBvbHlnb25zW2ldLnBvc2l0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaCh0dXJmLnBvaW50KFtkYXRhLnBvbHlnb25zW2ldLnBvc2l0aW9uc1ttXS54LCBkYXRhLnBvbHlnb25zW2ldLnBvc2l0aW9uc1ttXS55XSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKHBvaW50cyk7XHJcbiAgICAgIGxldCBlbnZlbG9wZWQgPSB0dXJmLmVudmVsb3BlKGZlYXR1cmVzKTtcclxuICAgICAgaWYgKGVudmVsb3BlZCAmJiBlbnZlbG9wZWQuYmJveCAmJiBlbnZlbG9wZWQuYmJveC5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgIHRoYXQucmFuZ2UgPSB7XHJcbiAgICAgICAgICBtYXhfeDogZW52ZWxvcGVkLmJib3hbMl0sXHJcbiAgICAgICAgICBtYXhfeTogZW52ZWxvcGVkLmJib3hbM10sXHJcbiAgICAgICAgICBtaW5feDogZW52ZWxvcGVkLmJib3hbMF0sXHJcbiAgICAgICAgICBtaW5feTogZW52ZWxvcGVkLmJib3hbMV0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlUG9pbnRzKHRoYXQsIGRhdGEpIHtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBwb2ludHMgPSBuZXcgQ2VzaXVtLlBvaW50UHJpbWl0aXZlQ29sbGVjdGlvbih7XHJcbiAgICAgIHNjZW5lOiB0aGF0LnZpZXdlci5zY2VuZSAvLyDmjIflrprlnLrmma9cclxuICAgIH0pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRhdGFbaV0uYXR0ci5pZCB8fCAoZGF0YVtpXS5hdHRyLmlkID0gdGhhdC5yYW5kb21TdHJpbmcoKSlcclxuICAgICAgcG9pbnRzLmFkZCh7XHJcbiAgICAgICAgaWQ6IGRhdGFbaV0uYXR0ci5pZCxcclxuICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoZGF0YVtpXS54LCBkYXRhW2ldLnksIGRhdGFbaV0ueiksIC8vIOeCueeahOS9jee9rlxyXG4gICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuUkVELCAvLyDngrnnmoTpopzoibJcclxuICAgICAgICBwaXhlbFNpemU6IDEwLCAvLyDngrnnmoTlpKflsI9cclxuICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAgLy8g5LiN5bqU55So5rex5bqm5rWL6K+VXHJcbiAgICAgIH0pXHJcbiAgICAgIHJlZ0xlZnRDbGlja0NhbGxiYWNrKGRhdGFbaV0uYXR0ci5pZCwgdGhhdC5sZWZ0Q2xpY2tDQiwgdGhhdClcclxuICAgIH1cclxuICAgIHRoYXQuZW50aXR5LmFkZChwb2ludHMpXHJcbiAgfVxyXG4gIHN0YXRpYyBjcmVhdGVQb2x5bGluZXModGhhdCwgZGF0YSkge1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHBvbHlsaW5lSW5zdGFuY2UgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRhdGFbaV0uYXR0ci5pZCB8fCAoZGF0YVtpXS5hdHRyLmlkID0gdGhhdC5yYW5kb21TdHJpbmcoKSlcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IGRhdGFbaV0ucG9zaXRpb25zXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBwb3NpdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW21dLngsIHBvc2l0aW9uc1ttXS55LCBwb3NpdGlvbnNbbV0ueilcclxuICAgICAgfVxyXG4gICAgICBsZXQgcG9seWxpbmUgPSBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgICAgd2lkdGg6IDRcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBpbnN0YW5jZSA9IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgaWQ6IGRhdGFbaV0uYXR0ci5pZCxcclxuICAgICAgICBnZW9tZXRyeTogcG9seWxpbmUsXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvckdlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUuZnJvbUNvbG9yKFxyXG4gICAgICAgICAgICBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGRhdGFbaV0uQ09MT1IgfHwgJ3JnYmEoMCwyNTUsMTg0LDAuNSknKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNob3c6IG5ldyBDZXNpdW0uU2hvd0dlb21ldHJ5SW5zdGFuY2VBdHRyaWJ1dGUodHJ1ZSksIC8v5pi+56S65oiW6ICF6ZqQ6JePXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHBvbHlsaW5lSW5zdGFuY2UucHVzaChpbnN0YW5jZSlcclxuICAgICAgcmVnTGVmdENsaWNrQ2FsbGJhY2soZGF0YVtpXS5hdHRyLmlkLCB0aGF0LmxlZnRDbGlja0NCLCB0aGF0KVxyXG4gICAgfVxyXG4gICAgaWYgKHBvbHlsaW5lSW5zdGFuY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGF0LmVudGl0eS5hZGQoXHJcbiAgICAgICAgbmV3IENlc2l1bS5Hcm91bmRQb2x5bGluZVByaW1pdGl2ZSh7XHJcbiAgICAgICAgICBnZW9tZXRyeUluc3RhbmNlczogcG9seWxpbmVJbnN0YW5jZSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uUG9seWxpbmVDb2xvckFwcGVhcmFuY2UoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBjcmVhdGVQb2x5Z29ucyh0aGF0LCBkYXRhKSB7XHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcG9seWdvbkluc3RhbmNlID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkYXRhW2ldLmF0dHIuaWQgfHwgKGRhdGFbaV0uYXR0ci5pZCA9IHRoYXQucmFuZG9tU3RyaW5nKCkpXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSBkYXRhW2ldLnBvc2l0aW9uc1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgcG9zaXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1ttXS54LCBwb3NpdGlvbnNbbV0ueSwgcG9zaXRpb25zW21dLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBvbHlnb24gPSBuZXcgQ2VzaXVtLlBvbHlnb25HZW9tZXRyeSh7XHJcbiAgICAgICAgcG9seWdvbkhpZXJhcmNoeTogbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpKSxcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBpbnN0YW5jZSA9IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgaWQ6IGRhdGFbaV0uYXR0ci5pZCxcclxuICAgICAgICBnZW9tZXRyeTogcG9seWdvbixcclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoXHJcbiAgICAgICAgICAgIENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoZGF0YVtpXS5DT0xPUiB8fCAncmdiYSgwLDI1NSwxODQsMC41KScpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgc2hvdzogbmV3IENlc2l1bS5TaG93R2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZSh0cnVlKSwgLy/mmL7npLrmiJbogIXpmpDol49cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcG9seWdvbkluc3RhbmNlLnB1c2goaW5zdGFuY2UpXHJcbiAgICAgIHJlZ0xlZnRDbGlja0NhbGxiYWNrKGRhdGFbaV0uYXR0ci5pZCwgdGhhdC5sZWZ0Q2xpY2tDQiwgdGhhdClcclxuICAgIH1cclxuICAgIGlmIChwb2x5Z29uSW5zdGFuY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgcHJpbWl0aXZlID0gbmV3IENlc2l1bS5Hcm91bmRQcmltaXRpdmUoe1xyXG4gICAgICAgIGdlb21ldHJ5SW5zdGFuY2VzOiBwb2x5Z29uSW5zdGFuY2UsXHJcbiAgICAgICAgYXBwZWFyYW5jZTogbmV3IENlc2l1bS5QZXJJbnN0YW5jZUNvbG9yQXBwZWFyYW5jZSh7XHJcbiAgICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZSwgLy9mYWxzZeaXtumAj+aYjuW6puaXoOaViFxyXG4gICAgICAgICAgY2xvc2VkOiBmYWxzZSxcclxuICAgICAgICB9KSxcclxuICAgICAgfSlcclxuICAgICAgdGhhdC5lbnRpdHkuYWRkKHByaW1pdGl2ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBlZGl0KHN0YXR1cyA9IGZhbHNlLCBEaWFsb2dFdmVudCA9IHt9KSB7XHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXR1cykge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+e8lui+keWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5maWxlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmllbGQgPSB0aGlzLmZpZWxkXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgRGlhbG9nRXZlbnQuY29uZmlybUNhbGxCYWNrICYmIERpYWxvZ0V2ZW50LmNvbmZpcm1DYWxsQmFjayh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maWxlTmFtZSxcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpZWxkXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICBEaWFsb2dFdmVudC5jbG9zZUNhbGxCYWNrICYmIERpYWxvZ0V2ZW50LmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5paH5Lu25ZCN56ew77yaPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGZsaWUtbmFtZVwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensOWtl+autemAieaLqe+8mjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG5cclxuICAgICAgbGV0IG5hbWVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZsaWUtbmFtZScpWzBdXHJcbiAgICAgIG5hbWVFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMuZmlsZU5hbWVcclxuICAgICAgbmFtZUVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsZU5hbWUgPSBuYW1lRWxtLnZhbHVlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgc2VsZWN0RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QnKVswXVxyXG4gICAgICBsZXQgb3B0aW9uID0gJydcclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IG8gPSBgPG9wdGlvbiB2YWx1ZT1cIiR7a2V5fVwiPiR7a2V5fTwvb3B0aW9uPmBcclxuICAgICAgICBvcHRpb24gPSBvcHRpb24gKyBvXHJcbiAgICAgIH1cclxuICAgICAgc2VsZWN0RWxtLmlubmVySFRNTCA9IG9wdGlvblxyXG4gICAgICBzZWxlY3RFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMuZmllbGRcclxuICAgICAgc2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5maWVsZCA9IHNlbGVjdEVsbS52YWx1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5fZWxtcy5maWxlTmFtZSA9IG5hbWVFbG1cclxuICAgICAgdGhpcy5fZWxtcy5maWVsZCA9IHNlbGVjdEVsbVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGVkaXRCeUlkKHN0YXR1cyA9IGZhbHNlLCBub2RlSWQsIERpYWxvZ0V2ZW50ID0ge30pIHtcclxuICAgIC8vIG5vZGVJZCA9IHRoaXMuZGF0YUFycmF5WzBdLmF0dHIuaWRcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGxldCBjYW1lcmFOYW1lID0gJydcclxuICAgIGxldCBpbmRleFxyXG4gICAgaWYgKHN0YXR1cykge1xyXG4gICAgICBsZXQgb3B0aW9ucyA9IHt9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLmlkID09PSBub2RlSWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0uY29udGVudCkge1xyXG4gICAgICAgICAgICBvcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0uY29udGVudClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluZGV4ID0gaVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgb3B0aW9ucy5pZCA9IG9wdGlvbnMuaWQgfHwgbm9kZUlkXHJcbiAgICAgIG9wdGlvbnMubGluayB8fCAob3B0aW9ucy5saW5rID0ge30pXHJcbiAgICAgIG9wdGlvbnMubGluay5jb250ZW50IHx8IChvcHRpb25zLmxpbmsuY29udGVudCA9IFtdKVxyXG4gICAgICBvcHRpb25zLmNhbWVyYSB8fCAob3B0aW9ucy5jYW1lcmEgPSBbXSlcclxuICAgICAgb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgfHwgKG9wdGlvbnMucmljaFRleHRDb250ZW50ID0gJycpXHJcbiAgICAgIG9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIG9wdGlvbnMsIHtcclxuICAgICAgICB0aXRsZTogJ+e8lui+keWxnuaApycsIGxlZnQ6ICcxODBweCcsIHRvcDogJzEwMHB4JyxcclxuICAgICAgICBjb25maXJtQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLmdlb2pzb24uZmVhdHVyZXNbaW5kZXhdLmNvbnRlbnQgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUpXHJcbiAgICAgICAgICBEaWFsb2dFdmVudC5jb25maXJtQ2FsbEJhY2sgJiYgRGlhbG9nRXZlbnQuY29uZmlybUNhbGxCYWNrKHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIERpYWxvZ0V2ZW50LmNsb3NlQ2FsbEJhY2sgJiYgRGlhbG9nRXZlbnQuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmV2ZW50ID0gRGlhbG9nRXZlbnRcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZSA9IHRoaXMuZGVlcENvcHlPYmoob3B0aW9ucylcclxuICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5YaF5a6557G75Z6L77yaPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0IGF0dHJpYnV0ZS1zZWxlY3RcIiBzdHlsZT1cIndpZHRoOiAxMjBweDtcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmljaFRleHRcIj7lr4zmlofmnKw8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8IS0tPG9wdGlvbiB2YWx1ZT1cImxpbmtcIj7pk77mjqU8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY2FtZXJhXCI+5pGE5YOP5aS0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNlbnNvclwiPuS8oOaEn+WZqDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ2clwiPuWFqOaZr+Wbvjwvb3B0aW9uPi0tPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1saW5rXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGxpbmtfYWRkXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibGlua19hZGRfYnRuXCI+KzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1yaWNoVGV4dFwiPlxyXG4gICAgICAgICAgPHNwYW4+57yW6L6R5YaF5a6577yaPGJ1dHRvbiBjbGFzcz1cIm9wZW4tcmljaFRleHQtYnRuXCI+5omT5byA5paH5pys57yW6L6R5ZmoPC9idXR0b24+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1saW5rXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuWQjeensDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6ZO+5o6lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7mk43kvZw8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtZW1wdHlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaW1nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPHA+5pqC5peg5pWw5o2uPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1jYW1lcmFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nvJbovpHlhoXlrrnvvJo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGNhbWVyYS1uYW1lXCIgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbGVjdCBidG4gY2FtZXJhLXNlbGVjdFwiPuaQnOe0ojwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBjYW1lcmEtdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuaTjeS9nDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuiuvuWkh+WQjeensDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+6K6+5aSH57G75Z6LPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTI2cHg7IGZsZXg6IDAgMTI2cHg7bWluLXdpZHRoOiAxMjZweDtcIj7orr7lpIdJUDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+6K6+5aSH56uv5Y+jPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgZmxleDogMCA4MHB4O21pbi13aWR0aDogODBweDtcIj7nlKjmiLflkI08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7lr4bnoIE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+57uR5a6aPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuiuvuWkh+WQjeensDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuiuvuWkh+exu+WeizwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuiuvuWkh0lQPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+6K6+5aSH56uv5Y+jPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+55So5oi35ZCNPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+5a+G56CBPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lbXB0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+5pqC5peg5pWw5o2uPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwicm93PlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb25cIj48L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBgXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LnN0eWxlLndpZHRoID0gJzYwMHB4J1xyXG5cclxuICAgICAgbGV0IGF0dHJpYnV0ZVNlbGVjdEVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdXHJcbiAgICAgIGxldCBsaW5rQWRkQnRuRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZF9idG4nKVswXVxyXG4gICAgICBsZXQgb3BlblJpY2hUZXh0QnRuRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvcGVuLXJpY2hUZXh0LWJ0bicpWzBdXHJcblxyXG4gICAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoJ2F0dHJpYnV0ZS1jb250ZW50LScgKyB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUpID4gLTEpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUgPSBhdHRyaWJ1dGVTZWxlY3RFbG0udmFsdWVcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxpbmtBZGRCdG5FbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKG5vZGVJZCwgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgRGlhbG9nRXZlbnQuY2xpY2tBZGRMaW5rICYmIERpYWxvZ0V2ZW50LmNsaWNrQWRkTGluayhub2RlSWQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgb3BlblJpY2hUZXh0QnRuRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHJpY2hUZXh0Lm9wZW4obm9kZUlkLCBub2RlSWQsIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUucmljaFRleHRDb250ZW50KVxyXG4gICAgICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgY2FtZXJhTmFtZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FtZXJhLW5hbWUnKVswXVxyXG4gICAgICBsZXQgY2FtZXJhU2VsZWN0RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYW1lcmEtc2VsZWN0JylbMF1cclxuICAgICAgY2FtZXJhTmFtZUVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICBjYW1lcmFOYW1lID0gY2FtZXJhTmFtZUVsbS52YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdChjYW1lcmFOYW1lKVxyXG4gICAgICBjYW1lcmFTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoY2FtZXJhTmFtZSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGxldCBuYW1lRWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmbGllLW5hbWUnKVswXVxyXG4gICAgICAvLyBuYW1lRWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLmZpbGVOYW1lXHJcbiAgICAgIC8vIG5hbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKT0+e1xyXG4gICAgICAvLyAgIHRoaXMub3B0aW9ucy5maWxlTmFtZSA9IG5hbWVFbG0udmFsdWVcclxuICAgICAgLy8gfSlcclxuXHJcbiAgICAgIC8vIGxldCBzZWxlY3RFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdCcpWzBdXHJcbiAgICAgIC8vIGxldCBvcHRpb24gPSAnJ1xyXG4gICAgICAvLyBmb3IobGV0IGtleSBpbiB0aGlzLmRhdGFBcnJheVswXS5hdHRyKSB7XHJcbiAgICAgIC8vICAgbGV0IG8gPSBgPG9wdGlvbiB2YWx1ZT1cIiR7a2V5fVwiPiR7a2V5fTwvb3B0aW9uPmBcclxuICAgICAgLy8gICBvcHRpb24gPSBvcHRpb24gKyBvXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gc2VsZWN0RWxtLmlubmVySFRNTCA9IG9wdGlvblxyXG4gICAgICAvLyBzZWxlY3RFbG0udmFsdWUgPSB0aGlzLm9wdGlvbnMuZmllbGRcclxuICAgICAgLy8gc2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCk9PntcclxuICAgICAgLy8gICB0aGlzLm9wdGlvbnMuZmllbGQgPSBzZWxlY3RFbG0udmFsdWVcclxuICAgICAgLy8gfSlcclxuXHJcbiAgICAgIC8vIHRoaXMuX2VsbXMuZmlsZU5hbWUgPSBuYW1lRWxtXHJcbiAgICAgIC8vIHRoaXMuX2VsbXMuZmllbGQgPSBzZWxlY3RFbG1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0Q29udGVudEJ5SWQobm9kZUlkLCBjb250ZW50KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWQgPT09IG5vZGVJZCkge1xyXG4gICAgICAgIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5jb250ZW50ID0gY29udGVudFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpbGVOYW1lXHJcbiAgICB0aGlzLmZpZWxkID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmllbGRcclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZUxpbmtCeUlkKG5vZGVJZCwgbGluaywgaSkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlICYmIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUuaWQgPT0gbm9kZUlkKSB7XHJcbiAgICAgIGlmIChpIHx8IGkgPT09IDApIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVtpICsgMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXS52YWx1ZSA9IGxpbmtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgICAgdXJsOiBsaW5rXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKG5vZGVJZCwgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEF0dHJpYnV0ZUxpbmtCeUlkKG5vZGVJZCwgZGF0YSkge1xyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlICYmIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUuaWQgPT0gbm9kZUlkKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gZGF0YVxyXG4gICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgdHIgPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgbGV0IGZ1biA9IHtcclxuICAgICAgICBsaW5rRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKG5vZGVJZCwgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQpXHJcbiAgICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGZpbGUtc2VsZWN0XCIgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJmaWxlU2VsZWN0XCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS5uYW1lXHJcbiAgICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVMaW5rQnlJZChub2RlSWQsIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50KVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTGlua0J5SWQobm9kZUlkLCB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTGlua0J5SWQobm9kZUlkLCB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmV2ZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5ldmVudC5jbGlja0FkZExpbmsgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmV2ZW50LmNsaWNrQWRkTGluayhub2RlSWQsIGkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICBpZiAoIWJ0bltuXSB8fCFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBjb250aW51ZTsgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFBcnJheVtpXS5hdHRyLmlkID09PSBub2RlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhQXJyYXlbaV0uY29udGVudCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRfRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbE5vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhXHJcbiAgfVxyXG5cclxuICBvcGVuQWxsTm9kZUxpc3QoKSB7XHJcbiAgICBPcGVuQWxsTm9kZUxpc3QodGhpcylcclxuICB9XHJcbiAgb3Blbk5vZGVMaXN0QnlJZChpZCkge1xyXG4gICAgT3Blbk5vZGVMaXN0QnlJZCh0aGlzLCBpZClcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgY3JlYXRlVGFibGVDb250ZW50KHRoYXQpIHtcclxuICAgIGxldCB0cnNFbG0gPSAnJ1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LmN1cnJlbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ckVsbSA9ICc8dHIgY2xhc3M9XCJlbC10YWJsZV9fcm93XCI+J1xyXG4gICAgICBsZXQgdGRFbG0gPSAnJ1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhhdC5jdXJyZW50RGF0YVtpXS5hdHRyKSB7XHJcbiAgICAgICAgdGRFbG0gPSB0ZEVsbSArIGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke3RoYXQuY3VycmVudERhdGFbaV0uYXR0cltrZXldfTwvZGl2PjwvdGQ+YFxyXG4gICAgICB9XHJcbiAgICAgIHRyRWxtID0gdHJFbG0gKyB0ZEVsbSArICc8L3RyPidcclxuICAgICAgdHJzRWxtID0gdHJzRWxtICsgdHJFbG1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnNFbG1cclxuICB9XHJcblxyXG4gIGZseVRvKGlkLCBvcHRpb25zID0ge30pIHtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcy5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeS5yYW5nZVxyXG4gICAgICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgICAgICAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5SZWN0YW5nbGUuZnJvbURlZ3JlZXMocmFuZ2UubWluX3gsIHJhbmdlLm1pbl95LCByYW5nZS5tYXhfeCwgcmFuZ2UubWF4X3kpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XHJcbiAgICAgICAgc2V0QWN0aXZlVmlld2VyKDApXHJcbiAgICAgICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5SZWN0YW5nbGUuZnJvbURlZ3JlZXModGhpcy5yYW5nZS5taW5feCwgdGhpcy5yYW5nZS5taW5feSwgdGhpcy5yYW5nZS5tYXhfeCwgdGhpcy5yYW5nZS5tYXhfeSlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2hvdyhzdGF0dXMsIGlkKSB7XHJcbiAgICAvLyBsZXQgZW5ldGl0eSA9IHRoaXMuZW50aXR5LmVudGl0aWVzLmdldEJ5SWQoaWQpXHJcbiAgICAvLyBpZihlbmV0aXR5KSB7XHJcbiAgICAvLyAgIGVuZXRpdHkuc2hvdyA9IHN0YXR1c1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcblxyXG4gICAgLy8gfVxyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5pZCAmJiB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQuc3RhcnRzV2l0aChpZCkpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gc3RhdHVzXHJcbiAgICAgICAgICAvLyB0aGlzLmVudGl0eS5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc3RhdHVzXHJcbiAgICAgIC8vIHRoaXMuZW50aXR5LnNob3cgPSBzdGF0dXNcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uc2hvdyA9IHN0YXR1c1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTaG93SW1nKHN0YXR1cywgaW5kZXgpIHtcclxuICAgIGlmIChpbmRleCB8fCBpbmRleCA9PT0gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW1nRW50aXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHtcclxuICAgICAgICAgIHRoaXMuaW1nRW50aXR5W2ldLnNob3cgPSBzdGF0dXNcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmltZ0VudGl0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuaW1nRW50aXR5W2ldLnNob3cgPSBzdGF0dXNcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgLy8gdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmZvckVhY2goZW5ldGl0eSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUoZW5ldGl0eSlcclxuICAgIC8vIH0pXHJcbiAgICB0aGlzLnZpZXdlci5kYXRhU291cmNlcy5yZW1vdmUodGhpcy5lbnRpdHksIHRydWUpXHJcbiAgICB0aGlzLnJlbW92ZUltYWdlKClcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy5nZW9qc29uID0ge31cclxuICAgIHRoaXMuZGF0YSA9IHt9XHJcbiAgfVxyXG5cclxuICByZW1vdmVJbWFnZSgpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbWdFbnRpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmltZ0VudGl0eVtpXSlcclxuICAgIH1cclxuICAgIHRoaXMuaW1nRW50aXR5ID0gW11cclxuICB9XHJcblxyXG4gIGNhbWVyYVNlbGVjdChjYW1lcmFOYW1lLCBwYWdlKSB7XHJcbiAgICBjb25zdCB0eXBlID0ge1xyXG4gICAgICAnMSc6ICfmtbflurcnLFxyXG4gICAgICAnMic6ICflpKfljY4nXHJcbiAgICB9XHJcbiAgICBsZXQgaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hdGlvbkVsbSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BhZ2luYXRpb24nKVswXVxyXG4gICAgICBsZXQgYXR0cmlidXRlQ2FtZXJhRWxtID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtY2FtZXJhJylbMF1cclxuICAgICAgaWYgKCFwYWdpbmF0aW9uRWxtKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFhdHRyaWJ1dGVDYW1lcmFFbG0pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgMSwgMTAsIDEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHVybCA9IFwiXCJcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgY2FtZXJhTmFtZTogY2FtZXJhTmFtZSxcclxuICAgICAgcGFnZTogIXBhZ2UgfHwgdHlwZW9mIHBhZ2UgPT09ICdvYmplY3QnID8gMSA6IHBhZ2UsXHJcbiAgICAgIHBhZ2VTaXplOiA1XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcclxuICAgIGlmIChob3N0LmVuZHNXaXRoKFwieWplYXJ0aDQuMFwiKSlcclxuICAgICAgdXJsID0gYCR7aG9zdH0vYXBpL3YxL2NhbWVyYURhdGEvbGlzdD8ke3F1ZXJ5U3RyaW5nfWBcclxuICAgIGVsc2VcclxuICAgICAgdXJsID0gYCR7aG9zdH0veWplYXJ0aDQuMC9hcGkvdjEvY2FtZXJhRGF0YS9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgLy8gdXJsID0gdGhpcy5vcHRpb25zLnBhdGhcclxuICAgIGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBcInRva2VuXCI6IGdldFRva2VuKCksXHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgZ2V0VG9rZW4oKSxcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgcmVzcG9uc2UuanNvbigpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCB8fCBkYXRhLmNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcGFnaW5hdGlvbkVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BhZ2luYXRpb24nKVswXVxyXG4gICAgICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYW1lcmEtdGFibGUnKVswXVxyXG4gICAgICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0ICYmIGRhdGEuZGF0YS5saXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCBkYXRhLmRhdGEudG90YWwsIDEwLCAxLCAocGFnZUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KGNhbWVyYU5hbWUsIHBhZ2VJbmRleClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtZmxleCdcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5kYXRhLmxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHRyID0gYFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIiR7ZGF0YS5kYXRhLmxpc3RbaV0uSUR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPue7keWumjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+JHtkYXRhLmRhdGEubGlzdFtpXS5jYW1lcmFOYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgZmxleDogMCA4MHB4OyBtaW4td2lkdGg6IDgwcHg7XCI+JHt0eXBlW2RhdGEuZGF0YS5saXN0W2ldLnR5cGVdfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCIgc3R5bGU9XCJ3aWR0aDogMTI2cHg7IGZsZXg6IDAgMTI2cHg7bWluLXdpZHRoOiAxMjZweDtcIj4ke2RhdGEuZGF0YS5saXN0W2ldLmlwfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgZmxleDogMCA4MHB4O21pbi13aWR0aDogODBweDtcIj4ke2RhdGEuZGF0YS5saXN0W2ldLnBvcnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7bWluLXdpZHRoOiA4MHB4O1wiPiR7ZGF0YS5kYXRhLmxpc3RbaV0udXNlck5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2RhdGEuZGF0YS5saXN0W2ldLnBhc3NXb3JkfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IHRyRWxtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpXHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5jYW1lcmEucHVzaChkYXRhLmRhdGEubGlzdFtpXSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3QXJyYXkgPSB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYS5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uSUQgIT09IGRhdGEuZGF0YS5saXN0W2ldLklEXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5jYW1lcmEgPSBuZXdBcnJheVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG5cclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYS5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYVttXS5JRCA9PT0gZGF0YS5kYXRhLmxpc3RbaV0uSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhICYmIGRhdGEuZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIGRhdGEuZGF0YS50b3RhbCwgMTAsIDEsIChwYWdlSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoY2FtZXJhTmFtZSwgcGFnZUluZGV4KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCAxLCAxMCwgMSk7XHJcbiAgICAgICAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgICAgdGFibGVDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7fVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFNocFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQXRFQTtBQUFBO0FBQUE7QUFBQTtBQXdFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6SUE7QUFDQTtBQUNBO0FBeUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFwSkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF1SkE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNlBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFwQkE7QUFxQkE7QUFlQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBMUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBWEE7QUFZQTtBQUNBO0FBQ0E7QUFxRkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBdk5BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBME5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQ0E7QUFBQTtBQUFBO0FBb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQWo2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBd2NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF3TkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/Shp/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Shp/openAllNodeList.js": /*!*********************************************!*\ !*** ./src/Obj/Base/Shp/openAllNodeList.js ***! \*********************************************/ /*! exports provided: openAllNodeList */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openAllNodeList\", function() { return openAllNodeList; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _BaseDialog_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../BaseDialog/index */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Element_Pagination__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Element/Pagination */ \"./src/Obj/Element/Pagination.js\");\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\nvar _DialogObject;\nvar openAllNodeList = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(that) {\n var total, page, pageSize, currentData, createTableContent, dataArrayFilter, trsElm, box, searchElm, talbeElm, headerElm, hcolgroupElm, theadElm, bodyElm, bcolgroupElm, i, key, tbodyElm, emptyElm, emptyNode, headerWrapper, bodyWrapper, paginationElm, search;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n total = 0;\n page = 1;\n pageSize = 20;\n currentData = [];\n if (_DialogObject && !_DialogObject.isDestroy) {\n _DialogObject.close();\n _DialogObject = null;\n }\n createTableContent = function createTableContent() {\n var trsElm = '';\n for (var _i = 0; _i < currentData.length; _i++) {\n var trElm = '';\n var tdElm = '';\n if ('fid' in currentData[_i].properties) {\n tdElm = \"
    \").concat(currentData[_i].properties.fid, \"
    \");\n }\n for (var key in currentData[_i].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n tdElm = tdElm + \"
    \").concat(currentData[_i].properties[key], \"
    \");\n }\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n };\n _context.next = 8;\n return new _BaseDialog_index__WEBPACK_IMPORTED_MODULE_4__[\"default\"](that.viewer._container, {\n title: '',\n left: '17%',\n top: '100px'\n });\n case 8:\n _DialogObject = _context.sent;\n _context.next = 11;\n return _DialogObject.init();\n case 11:\n dataArrayFilter = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(that.geojson.features);\n total = dataArrayFilter.length;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n trsElm = createTableContent();\n box = document.createElement('div');\n box.style.height = '100%';\n searchElm = '
    ';\n talbeElm = '
    ';\n headerElm = '
    ';\n hcolgroupElm = '';\n theadElm = '';\n bodyElm = '
    ';\n bcolgroupElm = '';\n i = 1; // thead\n if ('fid' in that.geojson.features[0].properties) {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n for (key in that.geojson.features[0].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n }\n //tbody\n tbodyElm = '';\n tbodyElm = tbodyElm + trsElm + '';\n //empty\n emptyElm = '
    暂无数据
    ';\n hcolgroupElm = hcolgroupElm + '';\n bcolgroupElm = bcolgroupElm + '';\n theadElm = theadElm + '';\n headerElm = headerElm + hcolgroupElm + theadElm + '
    fid
    \").concat(key, \"
    ';\n bodyElm = bodyElm + bcolgroupElm + tbodyElm + '' + emptyElm + '
    ';\n talbeElm = talbeElm + headerElm + bodyElm + '';\n box.innerHTML = searchElm + talbeElm + '
    ';\n emptyNode = box.getElementsByClassName('el-table__empty-block')[0];\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n // this.viewer._container.appendChild(box)\n _DialogObject.contentAppChild(box);\n headerWrapper = box.getElementsByClassName('el-table__header-wrapper')[0];\n bodyWrapper = box.getElementsByClassName('el-table__body-wrapper')[0];\n bodyWrapper.addEventListener('scroll', function (e) {\n headerWrapper.scrollLeft = e.target.scrollLeft;\n });\n _DialogObject._element.title.style.height = '40px';\n _DialogObject._element.body.style.width = '65%';\n _DialogObject._element.body.style.height = '80%';\n _DialogObject._element.content.style.height = 'calc(100% - 40px)';\n _DialogObject._element.content.style.overflow = 'hidden';\n _DialogObject._element.foot.style.display = 'none';\n bodyWrapper.style.height = \"calc(100% - \".concat(headerWrapper.offsetHeight, \"px)\");\n paginationElm = box.getElementsByClassName('pagination')[0];\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_5__[\"generatePagination\"])(paginationElm, total, pageSize, page, function (pageIndex) {\n page = pageIndex;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n });\n search = function search() {\n var input = box.getElementsByClassName('search-box')[0].getElementsByTagName('input')[0];\n var array = [];\n for (var _i2 = 0; _i2 < that.geojson.features.length; _i2++) {\n for (var _key in that.geojson.features[_i2].properties) {\n var str = that.geojson.features[_i2].properties[_key] + '';\n if (str.indexOf(input.value) != -1) {\n array.push(that.geojson.features[_i2]);\n break;\n }\n }\n }\n dataArrayFilter = array;\n total = dataArrayFilter.length;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_5__[\"generatePagination\"])(paginationElm, total, pageSize, page, function (pageIndex) {\n page = pageIndex;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n });\n };\n box.getElementsByClassName('search')[0].addEventListener('click', function () {\n pageSize = 20;\n page = 1;\n search();\n });\n box.getElementsByClassName('export')[0].addEventListener('click', function () {\n var data = [];\n for (var _i3 = 0; _i3 < that.geojson.features.length; _i3++) {\n data.push(_objectSpread(_objectSpread({}, that.geojson.features[_i3].properties), {}, {\n 'positions': JSON.stringify(that.geojson.features[_i3].geometry.positions)\n }));\n }\n that.exportExcel(data);\n });\n case 55:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function openAllNodeList(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU2hwL29wZW5BbGxOb2RlTGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9TaHAvb3BlbkFsbE5vZGVMaXN0LmpzP2UyZDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpYWxvZyBmcm9tIFwiLi4vLi4vLi4vQmFzZURpYWxvZy9pbmRleFwiO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVBhZ2luYXRpb24gfSBmcm9tIFwiLi4vLi4vRWxlbWVudC9QYWdpbmF0aW9uXCI7XHJcblxyXG5sZXQgX0RpYWxvZ09iamVjdFxyXG5cclxuY29uc3Qgb3BlbkFsbE5vZGVMaXN0ID0gYXN5bmMgKHRoYXQpID0+IHtcclxuICBsZXQgdG90YWwgPSAwXHJcbiAgbGV0IHBhZ2UgPSAxXHJcbiAgbGV0IHBhZ2VTaXplID0gMjBcclxuICBsZXQgY3VycmVudERhdGEgPSBbXVxyXG5cclxuICBpZiAoX0RpYWxvZ09iamVjdCAmJiAhX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IGNyZWF0ZVRhYmxlQ29udGVudCA9ICgpID0+IHtcclxuICAgIGxldCB0cnNFbG0gPSAnJ1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHJFbG0gPSAnPHRyIGNsYXNzPVwiZWwtdGFibGVfX3Jvd1wiPidcclxuICAgICAgbGV0IHRkRWxtID0gJydcclxuICAgICAgaWYgKCdmaWQnIGluIGN1cnJlbnREYXRhW2ldLnByb3BlcnRpZXMpIHtcclxuICAgICAgICB0ZEVsbSA9IGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2N1cnJlbnREYXRhW2ldLnByb3BlcnRpZXMuZmlkfTwvZGl2PjwvdGQ+YFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ2lkJyAmJiBrZXkgIT09ICdJRCcgJiYga2V5ICE9PSAnZmlkJykge1xyXG4gICAgICAgICAgdGRFbG0gPSB0ZEVsbSArIGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2N1cnJlbnREYXRhW2ldLnByb3BlcnRpZXNba2V5XX08L2Rpdj48L3RkPmBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdHJFbG0gPSB0ckVsbSArIHRkRWxtICsgJzwvdHI+J1xyXG4gICAgICB0cnNFbG0gPSB0cnNFbG0gKyB0ckVsbVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyc0VsbVxyXG4gIH1cclxuXHJcbiAgX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgdGl0bGU6ICcnLCBsZWZ0OiAnMTclJywgdG9wOiAnMTAwcHgnXHJcbiAgfSlcclxuICBhd2FpdCBfRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gIGxldCBkYXRhQXJyYXlGaWx0ZXIgPSBbLi4udGhhdC5nZW9qc29uLmZlYXR1cmVzXVxyXG4gIHRvdGFsID0gZGF0YUFycmF5RmlsdGVyLmxlbmd0aFxyXG4gIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG5cclxuICBsZXQgdHJzRWxtID0gY3JlYXRlVGFibGVDb250ZW50KClcclxuXHJcbiAgbGV0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgYm94LnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIGxldCBzZWFyY2hFbG0gPSAnPGRpdiBjbGFzcz1cInNlYXJjaC1ib3hcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7bWFyZ2luLWJvdHRvbTogMTBweDtcIj48aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCLovpPlhaXlhbPplK7lrZfmkJzntKJcIiBzdHlsZT1cIndpZHRoOiAxODBweDsgbWFyZ2luLXJpZ2h0OiAxMHB4O1wiPjxidXR0b24gY2xhc3M9XCJidG4gc2VhcmNoXCI+5pCc57SiPC9idXR0b24+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6MjBweDtcIiBjbGFzcz1cImVsLWJ1dHRvbiBlbC1idXR0b24tLXByaW1hcnkgaXMtcGxhaW4gZXhwb3J0XCI+PHNwYW4+5a+85Ye6PC9zcGFuPjwvYnV0dG9uPjwvZGl2PidcclxuICBsZXQgdGFsYmVFbG0gPSAnPGRpdiBjbGFzcz1cImVsLXRhYmxlIGVsLXRhYmxlLS1maXQgZWwtdGFibGUtLWJvcmRlciBlbC10YWJsZS0tc2Nyb2xsYWJsZS14IGVsLXRhYmxlLS1zY3JvbGxhYmxlLXkgZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXIgZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvblwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpO1wiPidcclxuICBsZXQgaGVhZGVyRWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9faGVhZGVyLXdyYXBwZXJcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2hlYWRlclwiIHN0eWxlPVwid2lkdGg6IDEyMTNweDtcIj4nXHJcbiAgbGV0IGhjb2xncm91cEVsbSA9ICc8Y29sZ3JvdXA+J1xyXG4gIGxldCB0aGVhZEVsbSA9ICc8dGhlYWQgY2xhc3M9XCJoYXMtZ3V0dGVyXCI+PHRyPidcclxuICBsZXQgYm9keUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGVfX2JvZHktd3JhcHBlciBpcy1zY3JvbGxpbmctbm9uZVwiIHN0eWxlPVwiaGVpZ2h0OiA2MjBweDtcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2JvZHlcIiBzdHlsZT1cIndpZHRoOiAxMTg2cHg7XCI+J1xyXG4gIGxldCBiY29sZ3JvdXBFbG0gPSAnPGNvbGdyb3VwPidcclxuXHJcbiAgbGV0IGkgPSAxXHJcbiAgLy8gdGhlYWRcclxuICBpZiAoJ2ZpZCcgaW4gdGhhdC5nZW9qc29uLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMpIHtcclxuICAgIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICBiY29sZ3JvdXBFbG0gPSBiY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgdGhlYWRFbG0gPSB0aGVhZEVsbSArIGA8dGggY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgICAgaXMtbGVhZiBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+ZmlkPC9kaXY+PC90aD5gXHJcbiAgICBpKytcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAoa2V5ICE9PSAnaWQnICYmIGtleSAhPT0gJ0lEJyAmJiBrZXkgIT09ICdmaWQnKSB7XHJcbiAgICAgIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICAgIGJjb2xncm91cEVsbSA9IGJjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICAgIHRoZWFkRWxtID0gdGhlYWRFbG0gKyBgPHRoIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICAgIGlzLWxlYWYgZWwtdGFibGVfX2NlbGxcIj48ZGl2IGNsYXNzPVwiY2VsbFwiPiR7a2V5fTwvZGl2PjwvdGg+YFxyXG4gICAgICBpKytcclxuICAgIH1cclxuICB9XHJcbiAgLy90Ym9keVxyXG4gIGxldCB0Ym9keUVsbSA9ICc8dGJvZHk+J1xyXG4gIHRib2R5RWxtID0gdGJvZHlFbG0gKyB0cnNFbG0gKyAnPC90Ym9keT4nXHJcbiAgLy9lbXB0eVxyXG4gIGxldCBlbXB0eUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGVfX2VtcHR5LWJsb2NrXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+PHNwYW4gY2xhc3M9XCJlbC10YWJsZV9fZW1wdHktdGV4dFwiPuaaguaXoOaVsOaNrjwvc3Bhbj48L2Rpdj4nXHJcblxyXG4gIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArICc8Y29sIG5hbWU9XCJndXR0ZXJcIiB3aWR0aD1cIjE3XCI+PC9jb2xncm91cD4nXHJcbiAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgJzwvY29sZ3JvdXA+J1xyXG4gIHRoZWFkRWxtID0gdGhlYWRFbG0gKyAnPC90cj48L3RoZWFkPidcclxuICBoZWFkZXJFbG0gPSBoZWFkZXJFbG0gKyBoY29sZ3JvdXBFbG0gKyB0aGVhZEVsbSArICc8L3RhYmxlPjwvZGl2PidcclxuICBib2R5RWxtID0gYm9keUVsbSArIGJjb2xncm91cEVsbSArIHRib2R5RWxtICsgJzwvdGFibGU+JyArIGVtcHR5RWxtICsgJzwvZGl2PidcclxuICB0YWxiZUVsbSA9IHRhbGJlRWxtICsgaGVhZGVyRWxtICsgYm9keUVsbSArICc8L2Rpdj4nXHJcblxyXG5cclxuICBib3guaW5uZXJIVE1MID0gc2VhcmNoRWxtICsgdGFsYmVFbG0gKyAnPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIj48L2Rpdj4nXHJcbiAgbGV0IGVtcHR5Tm9kZSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlbC10YWJsZV9fZW1wdHktYmxvY2snKVswXVxyXG4gIGlmIChjdXJyZW50RGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBlbXB0eU5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gIH1cclxuICAvLyB0aGlzLnZpZXdlci5fY29udGFpbmVyLmFwcGVuZENoaWxkKGJveClcclxuICBfRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChib3gpXHJcbiAgbGV0IGhlYWRlcldyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2hlYWRlci13cmFwcGVyJylbMF1cclxuICBsZXQgYm9keVdyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2JvZHktd3JhcHBlcicpWzBdXHJcbiAgYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGhlYWRlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IGUudGFyZ2V0LnNjcm9sbExlZnRcclxuICB9KTtcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LnRpdGxlLnN0eWxlLmhlaWdodCA9ICc0MHB4J1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICc2NSUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICc4MCUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnN0eWxlLmhlaWdodCA9ICdjYWxjKDEwMCUgLSA0MHB4KSdcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcblxyXG4gIGJvZHlXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGBjYWxjKDEwMCUgLSAke2hlYWRlcldyYXBwZXIub2Zmc2V0SGVpZ2h0fXB4KWBcclxuICBsZXQgcGFnaW5hdGlvbkVsbSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwYWdpbmF0aW9uJylbMF1cclxuICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgdG90YWwsIHBhZ2VTaXplLCBwYWdlLCAocGFnZUluZGV4KSA9PiB7XHJcbiAgICBwYWdlID0gcGFnZUluZGV4XHJcbiAgICBjdXJyZW50RGF0YSA9IGRhdGFBcnJheUZpbHRlci5zbGljZShwYWdlU2l6ZSAqIChwYWdlIC0gMSksIHBhZ2VTaXplICogcGFnZSlcclxuICAgIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQoKVxyXG4gICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgaWYgKGN1cnJlbnREYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICB9KTtcclxuICBjb25zdCBzZWFyY2ggPSAoKSA9PiB7XHJcbiAgICBsZXQgaW5wdXQgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2VhcmNoLWJveCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IHN0ciA9IHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzW2tleV0gKyAnJ1xyXG4gICAgICAgIGlmIChzdHIuaW5kZXhPZihpbnB1dC52YWx1ZSkgIT0gLTEpIHtcclxuICAgICAgICAgIGFycmF5LnB1c2godGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRhdGFBcnJheUZpbHRlciA9IGFycmF5XHJcbiAgICB0b3RhbCA9IGRhdGFBcnJheUZpbHRlci5sZW5ndGhcclxuICAgIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG4gICAgaWYgKGN1cnJlbnREYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQoKVxyXG4gICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIHRvdGFsLCBwYWdlU2l6ZSwgcGFnZSwgKHBhZ2VJbmRleCkgPT4ge1xyXG4gICAgICBwYWdlID0gcGFnZUluZGV4XHJcbiAgICAgIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG4gICAgICBsZXQgdHJzRWxtID0gY3JlYXRlVGFibGVDb250ZW50KClcclxuICAgICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgICBpZiAoY3VycmVudERhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICBlbXB0eU5vZGUuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2VhcmNoJylbMF0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBwYWdlU2l6ZSA9IDIwXHJcbiAgICBwYWdlID0gMVxyXG4gICAgc2VhcmNoKClcclxuICB9KVxyXG4gIGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHBvcnQnKVswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgIGxldCBkYXRhID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRhdGEucHVzaCh7IC4uLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLCAncG9zaXRpb25zJzogSlNPTi5zdHJpbmdpZnkodGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LnBvc2l0aW9ucykgfSlcclxuICAgIH1cclxuICAgIHRoYXQuZXhwb3J0RXhjZWwoZGF0YSlcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgeyBvcGVuQWxsTm9kZUxpc3QgfSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXBLQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/Shp/openAllNodeList.js\n"); /***/ }), /***/ "./src/Obj/Base/Shp/openNodeListById.js": /*!**********************************************!*\ !*** ./src/Obj/Base/Shp/openNodeListById.js ***! \**********************************************/ /*! exports provided: openNodeListById */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openNodeListById\", function() { return openNodeListById; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _BaseDialog_index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../BaseDialog/index */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n\n\n\n\nvar _DialogObject;\nvar openNodeListById = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(that, id) {\n var currentData, createTableContent, flag, _i2, trsElm, box, talbeElm, headerElm, hcolgroupElm, theadElm, bodyElm, bcolgroupElm, i, key, tbodyElm, tabsElm, tabPaneElm, _i3, url, _tabPaneElm, tabsNode, tabContentPane, _i4, headerWrapper, bodyWrapper;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (_DialogObject && !_DialogObject.isDestroy) {\n _DialogObject.close();\n _DialogObject = null;\n }\n currentData = [];\n createTableContent = function createTableContent() {\n var trsElm = '';\n for (var _i = 0; _i < currentData.length; _i++) {\n var trElm = '';\n var tdElm = '';\n if ('fid' in currentData[_i].properties) {\n tdElm = \"
    \").concat(currentData[_i].properties.fid, \"
    \");\n }\n for (var key in currentData[_i].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n tdElm = tdElm + \"
    \").concat(currentData[_i].properties[key], \"
    \");\n }\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n };\n flag = false;\n _i2 = 0;\n case 5:\n if (!(_i2 < that.geojson.features.length)) {\n _context.next = 13;\n break;\n }\n if (!(that.geojson.features[_i2].properties.id && that.geojson.features[_i2].properties.id == id)) {\n _context.next = 10;\n break;\n }\n currentData = [that.geojson.features[_i2]];\n flag = true;\n return _context.abrupt(\"break\", 13);\n case 10:\n _i2++;\n _context.next = 5;\n break;\n case 13:\n if (flag) {\n _context.next = 16;\n break;\n }\n window.ELEMENT && window.ELEMENT.Message({\n message: '数据不存在!',\n type: 'warning',\n duration: 1500\n });\n return _context.abrupt(\"return\");\n case 16:\n _context.next = 18;\n return new _BaseDialog_index__WEBPACK_IMPORTED_MODULE_2__[\"default\"](that.viewer._container, {\n title: id,\n left: '17%',\n top: '100px'\n });\n case 18:\n _DialogObject = _context.sent;\n _context.next = 21;\n return _DialogObject.init();\n case 21:\n trsElm = createTableContent(that);\n box = document.createElement('div');\n box.style.height = '100%';\n talbeElm = '
    ';\n headerElm = '
    ';\n hcolgroupElm = '';\n theadElm = '';\n bodyElm = '
    ';\n bcolgroupElm = '';\n i = 1; // thead\n if ('fid' in that.geojson.features[0].properties) {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n for (key in that.geojson.features[0].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n }\n //tbody\n tbodyElm = '';\n tbodyElm = tbodyElm + trsElm + '';\n hcolgroupElm = hcolgroupElm + '';\n bcolgroupElm = bcolgroupElm + '';\n theadElm = theadElm + '';\n headerElm = headerElm + hcolgroupElm + theadElm + '
    fid
    \").concat(key, \"
    ';\n bodyElm = bodyElm + bcolgroupElm + tbodyElm + '
    ';\n talbeElm = talbeElm + headerElm + bodyElm + '';\n tabsElm = \"\\n \\n \\n \".concat(talbeElm + '
    ', \"\\n
    \\n \");\n if (currentData[0].content && currentData[0].content.richTextContent) {\n tabPaneElm = \"\\n \\n \".concat(currentData[0].content.richTextContent, \"\\n \\n \");\n tabsElm = tabsElm + tabPaneElm;\n }\n if (currentData[0].content && currentData[0].content.link && currentData[0].content.link.content && currentData[0].content.link.content.length > 0) {\n for (_i3 = 0; _i3 < currentData[0].content.link.content.length; _i3++) {\n url = currentData[0].content.link.content[_i3].url;\n _tabPaneElm = \"\\n \\n \\n \\n \");\n tabsElm = tabsElm + _tabPaneElm;\n }\n }\n tabsElm = tabsElm + '
    ';\n box.innerHTML = tabsElm;\n // that.viewer._container.appendChild(box)\n _DialogObject.contentAppChild(box);\n new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('shp-list-id-tabs');\n tabsNode = box.getElementsByClassName('DIV-cy-tabs')[0];\n tabsNode.style.height = '100%';\n tabsNode.style.display = 'flex';\n tabsNode.style.flexDirection = 'column';\n tabsNode.getElementsByClassName('DIV-cy-tab-content')[0].style.flex = '1';\n tabContentPane = tabsNode.getElementsByClassName('DIV-cy-tab-content-pane');\n for (_i4 = 0; _i4 < tabContentPane.length; _i4++) {\n tabContentPane[_i4].style.height = '100%';\n }\n headerWrapper = box.getElementsByClassName('el-table__header-wrapper')[0];\n bodyWrapper = box.getElementsByClassName('el-table__body-wrapper')[0];\n bodyWrapper.addEventListener('scroll', function (e) {\n headerWrapper.scrollLeft = e.target.scrollLeft;\n });\n _DialogObject._element.title.style.height = '40px';\n _DialogObject._element.body.style.width = '65%';\n _DialogObject._element.body.style.height = '80%';\n _DialogObject._element.content.style.height = 'calc(100% - 40px)';\n _DialogObject._element.foot.style.display = 'none';\n bodyWrapper.style.height = \"calc(100% - \".concat(headerWrapper.offsetHeight, \"px)\");\n case 64:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function openNodeListById(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU2hwL29wZW5Ob2RlTGlzdEJ5SWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvU2hwL29wZW5Ob2RlTGlzdEJ5SWQuanM/ZjNkMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlhbG9nIGZyb20gXCIuLi8uLi8uLi9CYXNlRGlhbG9nL2luZGV4XCI7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5cclxubGV0IF9EaWFsb2dPYmplY3RcclxuXHJcbmNvbnN0IG9wZW5Ob2RlTGlzdEJ5SWQgPSBhc3luYyAodGhhdCwgaWQpID0+IHtcclxuICBpZiAoX0RpYWxvZ09iamVjdCAmJiAhX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcbiAgbGV0IGN1cnJlbnREYXRhID0gW11cclxuICBjb25zdCBjcmVhdGVUYWJsZUNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICBsZXQgdHJzRWxtID0gJydcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyRWxtID0gJzx0ciBjbGFzcz1cImVsLXRhYmxlX19yb3dcIj4nXHJcbiAgICAgIGxldCB0ZEVsbSA9ICcnXHJcbiAgICAgIGlmICgnZmlkJyBpbiBjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdGRFbG0gPSBgPHRkIHJvd3NwYW49XCIxXCIgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+JHtjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzLmZpZH08L2Rpdj48L3RkPmBcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gY3VycmVudERhdGFbaV0ucHJvcGVydGllcykge1xyXG4gICAgICAgIGlmIChrZXkgIT09ICdpZCcgJiYga2V5ICE9PSAnSUQnICYmIGtleSAhPT0gJ2ZpZCcpIHtcclxuICAgICAgICAgIHRkRWxtID0gdGRFbG0gKyBgPHRkIHJvd3NwYW49XCIxXCIgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+JHtjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzW2tleV19PC9kaXY+PC90ZD5gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRyRWxtID0gdHJFbG0gKyB0ZEVsbSArICc8L3RyPidcclxuICAgICAgdHJzRWxtID0gdHJzRWxtICsgdHJFbG1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnNFbG1cclxuICB9XHJcbiAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAodGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWQgJiYgdGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWQgPT0gaWQpIHtcclxuICAgICAgY3VycmVudERhdGEgPSBbdGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldXVxyXG4gICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoIWZsYWcpIHtcclxuICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICBtZXNzYWdlOiAn5pWw5o2u5LiN5a2Y5Zyo77yBJyxcclxuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgdGl0bGU6IGlkLCBsZWZ0OiAnMTclJywgdG9wOiAnMTAwcHgnXHJcbiAgfSlcclxuICBhd2FpdCBfRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQodGhhdClcclxuXHJcbiAgbGV0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgYm94LnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIGxldCB0YWxiZUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGUgZWwtdGFibGUtLWZpdCBlbC10YWJsZS0tYm9yZGVyIGVsLXRhYmxlLS1zY3JvbGxhYmxlLXggZWwtdGFibGUtLXNjcm9sbGFibGUteSBlbC10YWJsZS0tZW5hYmxlLXJvdy1ob3ZlciBlbC10YWJsZS0tZW5hYmxlLXJvdy10cmFuc2l0aW9uXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPidcclxuICBsZXQgaGVhZGVyRWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9faGVhZGVyLXdyYXBwZXJcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2hlYWRlclwiIHN0eWxlPVwid2lkdGg6IDkzMHB4O1wiPidcclxuICBsZXQgaGNvbGdyb3VwRWxtID0gJzxjb2xncm91cD4nXHJcbiAgbGV0IHRoZWFkRWxtID0gJzx0aGVhZCBjbGFzcz1cImhhcy1ndXR0ZXJcIj48dHI+J1xyXG4gIGxldCBib2R5RWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9fYm9keS13cmFwcGVyIGlzLXNjcm9sbGluZy1ub25lXCIgc3R5bGU9XCJoZWlnaHQ6IDYyMHB4O1wiPjx0YWJsZSBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBib3JkZXI9XCIwXCIgY2xhc3M9XCJlbC10YWJsZV9fYm9keVwiIHN0eWxlPVwid2lkdGg6IDkxM3B4O1wiPidcclxuICBsZXQgYmNvbGdyb3VwRWxtID0gJzxjb2xncm91cD4nXHJcblxyXG4gIGxldCBpID0gMVxyXG4gIC8vIHRoZWFkXHJcbiAgaWYgKCdmaWQnIGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBoY29sZ3JvdXBFbG0gPSBoY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgYDxjb2wgbmFtZT1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX1cIiB3aWR0aD1cIjE1MFwiPmBcclxuICAgIHRoZWFkRWxtID0gdGhlYWRFbG0gKyBgPHRoIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICAgIGlzLWxlYWYgZWwtdGFibGVfX2NlbGxcIj48ZGl2IGNsYXNzPVwiY2VsbFwiPmZpZDwvZGl2PjwvdGg+YFxyXG4gICAgaSsrXHJcbiAgfVxyXG4gIGZvciAobGV0IGtleSBpbiB0aGF0Lmdlb2pzb24uZmVhdHVyZXNbMF0ucHJvcGVydGllcykge1xyXG4gICAgaWYgKGtleSAhPT0gJ2lkJyAmJiBrZXkgIT09ICdJRCcgJiYga2V5ICE9PSAnZmlkJykge1xyXG4gICAgICBoY29sZ3JvdXBFbG0gPSBoY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgICBiY29sZ3JvdXBFbG0gPSBiY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgICB0aGVhZEVsbSA9IHRoZWFkRWxtICsgYDx0aCBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCIgY2xhc3M9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9ICAgICBpcy1sZWFmIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2tleX08L2Rpdj48L3RoPmBcclxuICAgICAgaSsrXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vdGJvZHlcclxuICBsZXQgdGJvZHlFbG0gPSAnPHRib2R5PidcclxuICB0Ym9keUVsbSA9IHRib2R5RWxtICsgdHJzRWxtICsgJzwvdGJvZHk+J1xyXG4gIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArICc8Y29sIG5hbWU9XCJndXR0ZXJcIiB3aWR0aD1cIjE3XCI+PC9jb2xncm91cD4nXHJcbiAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgJzwvY29sZ3JvdXA+J1xyXG4gIHRoZWFkRWxtID0gdGhlYWRFbG0gKyAnPC90cj48L3RoZWFkPidcclxuICBoZWFkZXJFbG0gPSBoZWFkZXJFbG0gKyBoY29sZ3JvdXBFbG0gKyB0aGVhZEVsbSArICc8L3RhYmxlPjwvZGl2PidcclxuICBib2R5RWxtID0gYm9keUVsbSArIGJjb2xncm91cEVsbSArIHRib2R5RWxtICsgJzwvdGFibGU+PC9kaXY+J1xyXG4gIHRhbGJlRWxtID0gdGFsYmVFbG0gKyBoZWFkZXJFbG0gKyBib2R5RWxtICsgJzwvZGl2PidcclxuXHJcbiAgbGV0IHRhYnNFbG0gPSBgXHJcbiAgICA8RElWLWN5LXRhYnMgaWQ9XCJzaHAtbGlzdC1pZC10YWJzXCI+XHJcbiAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5YiX6KGoXCI+XHJcbiAgICAgICR7dGFsYmVFbG0gKyAnPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIj48L2Rpdj4nfVxyXG4gICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgYFxyXG4gIGlmIChjdXJyZW50RGF0YVswXS5jb250ZW50ICYmIGN1cnJlbnREYXRhWzBdLmNvbnRlbnQucmljaFRleHRDb250ZW50KSB7XHJcbiAgICBsZXQgdGFiUGFuZUVsbSA9IGBcclxuICAgICAgPERJVi1jeS10YWItcGFuZSBjbGFzcz1cImVkaXRvci1jb250ZW50LXZpZXdcIiBsYWJlbD1cIuWvjOaWh+acrOS/oeaBr1wiPlxyXG4gICAgICAke2N1cnJlbnREYXRhWzBdLmNvbnRlbnQucmljaFRleHRDb250ZW50fVxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIGBcclxuICAgIHRhYnNFbG0gPSB0YWJzRWxtICsgdGFiUGFuZUVsbVxyXG4gIH1cclxuICBpZiAoY3VycmVudERhdGFbMF0uY29udGVudCAmJiBjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsgJiYgY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnQgJiYgY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdXJsID0gY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnRbaV0udXJsXHJcbiAgICAgIGxldCB0YWJQYW5lRWxtID0gYFxyXG4gICAgICA8RElWLWN5LXRhYi1wYW5lIGNsYXNzPVwiZWRpdG9yLWNvbnRlbnQtdmlld1wiIGxhYmVsPVwiJHtjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsuY29udGVudFtpXS5uYW1lfVwiPlxyXG4gICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPlxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIGBcclxuICAgICAgdGFic0VsbSA9IHRhYnNFbG0gKyB0YWJQYW5lRWxtXHJcbiAgICB9XHJcbiAgfVxyXG4gIHRhYnNFbG0gPSB0YWJzRWxtICsgJzwvRElWLWN5LXRhYnM+J1xyXG4gIGJveC5pbm5lckhUTUwgPSB0YWJzRWxtXHJcbiAgLy8gdGhhdC52aWV3ZXIuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChib3gpXHJcbiAgX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoYm94KVxyXG4gIG5ldyBjeV90YWJzKCdzaHAtbGlzdC1pZC10YWJzJylcclxuICBsZXQgdGFic05vZGUgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnRElWLWN5LXRhYnMnKVswXVxyXG4gIHRhYnNOb2RlLnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIHRhYnNOb2RlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICB0YWJzTm9kZS5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XHJcbiAgdGFic05vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnRElWLWN5LXRhYi1jb250ZW50JylbMF0uc3R5bGUuZmxleCA9ICcxJ1xyXG4gIGxldCB0YWJDb250ZW50UGFuZSA9IHRhYnNOb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ0RJVi1jeS10YWItY29udGVudC1wYW5lJylcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvbnRlbnRQYW5lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB0YWJDb250ZW50UGFuZVtpXS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcclxuICB9XHJcbiAgbGV0IGhlYWRlcldyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2hlYWRlci13cmFwcGVyJylbMF1cclxuICBsZXQgYm9keVdyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2JvZHktd3JhcHBlcicpWzBdXHJcbiAgYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGhlYWRlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IGUudGFyZ2V0LnNjcm9sbExlZnRcclxuICB9KTtcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LnRpdGxlLnN0eWxlLmhlaWdodCA9ICc0MHB4J1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICc2NSUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICc4MCUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnN0eWxlLmhlaWdodCA9ICdjYWxjKDEwMCUgLSA0MHB4KSdcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmZvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG5cclxuICBib2R5V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtoZWFkZXJXcmFwcGVyLm9mZnNldEhlaWdodH1weClgXHJcbn1cclxuXHJcbmV4cG9ydCB7IG9wZW5Ob2RlTGlzdEJ5SWQgfSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXBJQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/Shp/openNodeListById.js\n"); /***/ }), /***/ "./src/Obj/Base/StraightArrowObject/_element.js": /*!******************************************************!*\ !*** ./src/Obj/Base/StraightArrowObject/_element.js ***! \******************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
    \\n
    \\n
    \\n \\u540D\\u79F0\\n \\n
    \\n
    \\n
    \\n
    \\n \\u6295\\u5F71\\u9762\\u79EF:\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u52A8\\u753B\\u65F6\\u957F\\n
    \\n \\n ms\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u52A8\\u753B\\n \\n
    \\n
    \\n \\u52A8\\u753B\\u91CD\\u590D\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n
    \\n
    \\n \\u9AD8\\u5EA6\\u6A21\\u5F0F\\n
    \\n
    \\n
    \\n Z\\u503C\\u7EDF\\u4E00\\u589E\\u52A0\\n
    \\n \\n m\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\u7ECF\\u5EA6\\uFF08X\\uFF09
    \\n
    \\u7EAC\\u5EA6\\uFF08Y\\uFF09
    \\n
    \\u9AD8\\u5EA6\\uFF08Z\\uFF09
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\u9762\\u989C\\u8272\\n
    \\n
    \\n
    \\n \\u8FB9\\u7EBF\\u989C\\u8272\\n
    \\n
    \\n
    \\n \\u8FB9\\u7EBF\\u5BBD\\u5EA6\\n
    \\n \\n px\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n
    \\n
    \\n
    \\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU3RyYWlnaHRBcnJvd09iamVjdC9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9TdHJhaWdodEFycm93T2JqZWN0L19lbGVtZW50LmpzPzgyNjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDYwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGlucHV0LXNlbGVjdC11bml0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIj7mipXlvbHpnaLnp686PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpbnB1dC10ZXh0XCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwiYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VsZWN0LXVuaXRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqjnlLvml7bplb88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBibHVyXCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiNTAwXCIgbWF4PVwiOTk5OTk5OVwiIEBtb2RlbD1cInNwcmVhZFRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgNjAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWKqOeUuzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cInNwcmVhZFN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5Yqo55S76YeN5aSNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibG9vcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxESVYtY3ktdGFicyBpZD1cImFzc2VtYmxlLW9iamVjdC1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLlsZ7mgKfkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuepuumXtOS/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBoZWlnaHQtbW9kZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA1NnB4O1wiPumrmOW6puaooeW8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWlnaHQtbW9kZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlrlgLznu5/kuIDlop7liqA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGhlaWdodFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmlybSBoZWlnaHQtY29uZmlybVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUgc3BhdGlhbC1pbmZvLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+57uP5bqm77yIWO+8iTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7nuqzluqbvvIhZ77yJPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumrmOW6pu+8iFrvvIk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIumdoumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPumdouminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui+uee6v+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovrnnur/lrr3luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTJcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5XCIgQG1vZGVsPVwibGluZVdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+azqOmjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTEoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+etvumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTIoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQTZHQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/StraightArrowObject/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/StraightArrowObject/index.js": /*!***************************************************!*\ !*** ./src/Obj/Base/StraightArrowObject/index.js ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/StraightArrowObject/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 直线箭头\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n// import EditParticle from \"../../ModelController/EditParticle\";\nvar StraightArrowObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 直线箭头\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.name {string} 名称\r\n * @param options.color='rgba(255, 0, 0, 0.5)' {string} 颜色\r\n * @param options.height {number} 高度\r\n * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式)\r\n * @param options.areaUnit='平方米' {string} 面积单位\r\n * @param options.line {object} 边框\r\n * @param options.line.width=2 {string} 边框宽\r\n * @param options.line.color=\"rgba(155, 155, 124, 0.89)\" {string} 边框颜色\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.spreadState=false {boolean} 动画\r\n * @param options.loop=false {loop} 动画重复\r\n * @param options.spreadTime=3000 {number} 动画持续时长(毫秒)\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param options.attribute.link={} {object} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function StraightArrowObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, StraightArrowObject);\n _this2 = _callSuper(this, StraightArrowObject, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"#ff000080\";\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.heightMode = options.heightMode || options.heightMode == 0 ? options.heightMode : 2;\n _this2.options.positions = options.positions || [];\n _this2.options.line = options.line || {};\n _this2.options.line.width = _this2.options.line.width || _this2.options.line.width === 0 ? _this2.options.line.width : 3;\n _this2.options.line.color = _this2.options.line.color || 'rgba(255, 0, 0, 1)';\n _this2.options['area-unit'] = options['area-unit'] || '平方米';\n _this2.entity;\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_this2.sdk);\n _this2.operate = {};\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n _this2.options.loop = options.loop || false;\n _this2.options.spreadState = options.spreadState || false;\n _this2.spreadTime = options.spreadTime;\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.nodePoints = [];\n if (!_this2.options.positions || _this2.options.positions.length < 2) {\n _this2._error = '直线箭头需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n if (!_this2.options.height && _this2.options.height !== 0) {\n var height = _this2.options.positions[0].alt;\n for (var i = 1; i < _this2.options.positions.length; i++) {\n if (height < _this2.options.positions[i].alt) {\n height = _this2.options.positions[i].alt;\n }\n }\n _this2.options.height = height;\n }\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n StraightArrowObject.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(StraightArrowObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(StraightArrowObject, [{\n key: \"type\",\n get: function get() {\n return 'StraightArrowObject';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || 'rgba(255, 0, 0, 0.5)';\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) {\n return;\n }\n var material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n this.entity.polygon.material = material;\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"heightMode\",\n get: function get() {\n return this.options.heightMode ? this.options.heightMode : 0;\n },\n set: function set(v) {\n var _this4 = this;\n this.entity.polygon.hierarchy = [];\n setTimeout(function () {\n _this4.options.heightMode = v || v == 0 ? v : 2;\n _this4.positionEditing = false;\n if (!_this4.entity) {\n return;\n }\n var heightModeName = '';\n StraightArrowObject.closeNodeEdit(_this4);\n var ground = false;\n var disabled = false;\n _this4.renewPositions();\n _this4.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this4.positionsH), [_this4.positionsH[0], _this4.positionsH[1]]);\n _this4.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this4.positionsH);\n switch (_this4.options.heightMode) {\n case '0':\n case 0:\n heightModeName = '海拔高度';\n break;\n case '1':\n case 1:\n heightModeName = '相对地表';\n break;\n case '2':\n case 2:\n ground = true;\n disabled = true;\n heightModeName = '依附模型';\n break;\n }\n _this4.label.ground = ground;\n _this4.entity.polyline.clampToGround = ground;\n _this4.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC, _this4.entity.polygon.perPositionHeight = !ground ? true : false;\n _this4._elms.heightMode && (_this4._elms.heightMode.value = heightModeName);\n _this4._elms.heightModeObject && _this4._elms.heightModeObject.legp_searchActive(heightModeName);\n if (disabled) {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.setAttribute('disabled', 'disabled');\n } else {\n _this4._elms.heightBox && (_this4._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n _this4._elms.heightConfirm && _this4._elms.heightConfirm.removeAttribute('disabled');\n }\n }, 50);\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this5 = this;\n if (!v || isNaN(Number(v))) {\n this.options.height = 0;\n } else {\n this.options.height = Number(Number(v).toFixed(2));\n }\n var ground;\n if (this.heightMode == 2) {\n ground = true;\n } else {\n ground = false;\n }\n this.renewPositions();\n setTimeout(function () {\n _this5.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(_this5.positionsH);\n _this5.entity.polygon.perPositionHeight = !ground ? true : false;\n _this5.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this5.positionsH), [_this5.positionsH[0], _this5.positionsH[1]]);\n _this5.entity.polyline.clampToGround = !ground ? false : true;\n _this5.entity.polyline.arcType = !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC;\n }, 0);\n this._elms.alt && this._elms.alt.forEach(function (item) {\n item.innerHTML = _this5.options.height;\n });\n }\n }, {\n key: \"lineColor\",\n get: function get() {\n return this.options.line.color;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.line.color = v;\n if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) {\n return;\n }\n this.entity.polyline.material = Cesium.Color.fromCssColorString(v);\n if (this._elms.lineColor) {\n this._elms.lineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this6.lineColor = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.lineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"lineWidth\",\n get: function get() {\n return this.options.line.width;\n },\n set: function set(v) {\n this.options.line.width = v;\n this.entity.polyline.width = v;\n this._elms.lineColor && this._elms.lineColor.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"area\",\n get: function get() {\n return this.options.area;\n },\n set: function set(v) {\n this.options.area = v;\n this._elms.area && this._elms.area.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"areaUnit\",\n get: function get() {\n return this.options['area-unit'];\n },\n set: function set(v) {\n this.options['area-unit'] = v;\n this._elms.areaUnit && this._elms.areaUnit.forEach(function (item) {\n item.value = v;\n });\n if (this.options.areaByMeter || this.options.areaByMeter == 0) {\n switch (v) {\n case '平方米':\n this.area = this.options.areaByMeter;\n break;\n case '平方千米':\n this.area = Number((this.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n this.area = Number((this.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n this.area = this.options.areaByMeter;\n }\n }\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this10 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this10.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this10._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this11 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
    \\n
    \" + this.options.attribute.link.content[i].name + \"
    \\n
    \" + this.options.attribute.link.content[i].url + \"
    \\n
    \\n \\n \\n
    \\n
    \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this11.options.attribute.link.content;\n case 2:\n _this11.attributeLink = _context3.sent;\n table = _this11._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this11.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this11.options.attribute.link.content.splice(i, 1);\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this11.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this11.attributeLink = _this11.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this12 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
    \\n
    \" + this.options.attribute.vr.content[i].name + \"
    \\n
    \" + this.options.attribute.vr.content[i].url + \"
    \\n
    \\n \\n \\n
    \\n
    \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this12.options.attribute.vr.content;\n case 2:\n _this12.attributeVr = _context6.sent;\n table = _this12._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this12.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this12.options.attribute.vr.content.splice(i, 1);\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this12.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this12.attributeVr = _this12.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3(state) {\n var _this13 = this;\n var _this, createSpatialInfoTableContent, contentElm, tabsElm, colorPicker, linecolorPicker, labelColorPicker, labellineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm, heightBoxElm, heightElm, heightConfirmElm, heightModeData, heightModeObject, heightModeDataLegpElm, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!this._error) {\n _context7.next = 2;\n break;\n }\n return _context7.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 61;\n break;\n }\n createSpatialInfoTableContent = function createSpatialInfoTableContent() {\n var tableElm = contentElm.getElementsByClassName('spatial-info-table')[0];\n var tBodyElm = tableElm.getElementsByClassName('table-body')[0];\n tBodyElm.innerHTML = '';\n _this._elms.lng = [];\n _this._elms.lngInput = [];\n _this._elms.lat = [];\n _this._elms.latInput = [];\n _this._elms.alt = [];\n _this._elms.altInput = [];\n var _loop9 = function _loop9(i) {\n var tr = document.createElement('div');\n tr.className = 'tr';\n tr.innerHTML = \"\\n
    \".concat(i + 1, \"
    \\n
    \\n
    \\n
    \\n \");\n var lngBox = tr.getElementsByClassName('lng')[0];\n var lng = document.createElement('span');\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n lngBox.appendChild(lng);\n var lngInput = document.createElement('input');\n lngInput.className = 'input';\n lngInput.type = 'number';\n lngInput.title = '';\n lngInput.min = -180;\n lngInput.max = 180;\n lngInput.value = _this.options.positions[i].lng.toFixed(8);\n var latBox = tr.getElementsByClassName('lat')[0];\n var lat = document.createElement('span');\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n latBox.appendChild(lat);\n var latInput = document.createElement('input');\n latInput.className = 'input';\n latInput.type = 'number';\n latInput.title = '';\n latInput.min = -90;\n latInput.max = 90;\n latInput.value = _this.options.positions[i].lat.toFixed(8);\n var altBox = tr.getElementsByClassName('alt')[0];\n var alt = document.createElement('span');\n alt.innerHTML = _this.height.toFixed(2);\n altBox.appendChild(alt);\n var altInput = document.createElement('input');\n altInput.className = 'input';\n altInput.type = 'number';\n altInput.title = '';\n altInput.min = -9999999;\n altInput.max = 999999999;\n altInput.value = _this.height.toFixed(2);\n lngBox.addEventListener('dblclick', function () {\n lngBox.innerHTML = '';\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.appendChild(lngInput);\n lngInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n StraightArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n lngInput.addEventListener('blur', function () {\n lngInput.value = Number(_this.options.positions[i].lng.toFixed(8));\n lngBox.innerHTML = '';\n lngBox.appendChild(lng);\n });\n lngInput.addEventListener('input', function () {\n _this.options.positions[i].lng = Number(Number(lngInput.value).toFixed(8));\n lng.innerHTML = _this.options.positions[i].lng.toFixed(8);\n _this.height = _this.height;\n });\n latBox.addEventListener('dblclick', function () {\n latBox.innerHTML = '';\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.appendChild(latInput);\n latInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n StraightArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n latInput.addEventListener('blur', function () {\n latInput.value = Number(_this.options.positions[i].lat.toFixed(8));\n latBox.innerHTML = '';\n latBox.appendChild(lat);\n });\n latInput.addEventListener('input', function () {\n _this.options.positions[i].lat = Number(Number(latInput.value).toFixed(8));\n lat.innerHTML = _this.options.positions[i].lat.toFixed(8);\n _this.height = _this.height;\n });\n altBox.addEventListener('dblclick', function () {\n if (_this.heightMode == 2) {\n return;\n }\n altBox.innerHTML = '';\n altInput.value = Number(_this.height.toFixed(2));\n altBox.appendChild(altInput);\n altInput.focus();\n if (_this.operate.positionEditing) {\n _this.positionEditing = false;\n }\n StraightArrowObject.closeNodeEdit(_this);\n _this.heightMode = _this.heightMode;\n });\n altInput.addEventListener('blur', function () {\n altInput.value = Number(_this.height.toFixed(2));\n altBox.innerHTML = '';\n altBox.appendChild(alt);\n });\n altInput.addEventListener('input', function () {\n _this.height = Number(Number(altInput.value).toFixed(2));\n alt.innerHTML = Number(_this.height.toFixed(2));\n });\n _this._elms.lng.push(lng);\n _this._elms.lngInput.push(lngInput);\n _this._elms.lat.push(lat);\n _this._elms.latInput.push(latInput);\n _this._elms.alt.push(alt);\n _this._elms.altInput.push(altInput);\n tBodyElm.appendChild(tr);\n };\n for (var i = 0; i < _this.options.positions.length; i++) {\n _loop9(i);\n }\n };\n _context7.next = 9;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '直线箭头属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this13.name = _this13.name.trim();\n if (!_this13.name) {\n _this13.name = '未命名对象';\n }\n _this13.options.label.position = {\n lng: _this13.label.position[0],\n lat: _this13.label.position[1],\n alt: _this13.label.position[2]\n };\n _this13.originalOptions = _this13.deepCopyObj(_this13.options);\n _this13._DialogObject.close();\n _this13.Dialog.confirmCallBack && _this13.Dialog.confirmCallBack(_this13.originalOptions);\n },\n resetCallBack: function resetCallBack() {\n _this13.reset();\n _this13.Dialog.resetCallBack && _this13.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this13.Dialog.removeCallBack && _this13.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n var spreadState = _this13.options.spreadState;\n _this13.positionEditing = false;\n setTimeout(function () {\n _this13.options.spreadState = spreadState;\n _this13.reset();\n }, 10);\n _this13.Dialog.closeCallBack && _this13.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this13.options.show = show;\n _this13.originalOptions.show = show;\n _this13.show = show;\n _this13.Dialog.showCallBack && _this13.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this13.positionEditing = !_this13.positionEditing;\n },\n // 二次编辑回调\n secondaryEditCallBack: function secondaryEditCallBack() {\n StraightArrowObject.nodeEdit(_this13, function () {\n createSpatialInfoTableContent();\n });\n }\n });\n case 9:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' assemble';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('assemble-object-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n linecolorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"lineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.lineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.lineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.lineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labellineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this13.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this13.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this13.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this13.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n StraightArrowObject.EventBinding(this, all_elm);\n this._elms.color = [colorPicker];\n this._elms.lineColor = [linecolorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [labellineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n heightElm = heightBoxElm.getElementsByClassName('height')[0];\n heightConfirmElm = this._DialogObject._element.content.getElementsByClassName('height-confirm')[0];\n heightElm.value = 10;\n if (this.heightMode == 2) {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box disabled');\n heightConfirmElm && heightConfirmElm.setAttribute('disabled', 'disabled');\n } else {\n heightBoxElm && (heightBoxElm.className = 'input-number input-number-unit-1 height-box');\n heightConfirmElm && heightConfirmElm.removeAttribute('disabled');\n }\n heightModeData = [{\n name: '海拔高度',\n value: '海拔高度',\n key: '0'\n }, {\n name: '相对地表',\n value: '相对地表',\n key: '1'\n }, {\n name: '依附模型',\n value: '依附模型',\n key: '2'\n }];\n heightModeObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(this._DialogObject._element.content.getElementsByClassName('height-mode-box')[0], '.height-mode');\n if (!heightModeObject) {\n _context7.next = 58;\n break;\n }\n heightModeObject.legp_search(heightModeData);\n heightModeDataLegpElm = this._DialogObject._element.content.getElementsByClassName('height-mode')[0].getElementsByTagName('input')[0];\n i = 0;\n case 42:\n if (!(i < heightModeData.length)) {\n _context7.next = 50;\n break;\n }\n if (!(heightModeData[i].key == this.heightMode)) {\n _context7.next = 47;\n break;\n }\n heightModeDataLegpElm.value = heightModeData[i].value;\n heightModeObject.legp_searchActive(heightModeData[i].value);\n return _context7.abrupt(\"break\", 50);\n case 47:\n i++;\n _context7.next = 42;\n break;\n case 50:\n heightModeDataLegpElm.addEventListener('input', function () {\n for (var _i5 = 0; _i5 < heightModeData.length; _i5++) {\n if (heightModeData[_i5].value === heightModeDataLegpElm.value) {\n _this13.heightMode = heightModeData[_i5].key;\n break;\n }\n }\n });\n heightElm.addEventListener('input', function () {\n switch (_this13.heightMode) {\n case 0:\n case '0':\n break;\n case 1:\n case '1':\n break;\n case 2:\n case '2':\n break;\n }\n });\n this._elms.height = heightElm;\n this._elms.heightBox = heightBoxElm;\n this._elms.heightMode = heightModeDataLegpElm;\n this._elms.heightConfirm = heightConfirmElm;\n this._elms.heightModeObject = heightModeObject;\n heightConfirmElm.addEventListener('click', function () {\n if (_this13.operate.positionEditing) {\n _this13.positionEditing = false;\n _this13.height = _this13.height + Number(heightElm.value);\n } else {\n StraightArrowObject.closeNodeEdit(_this13);\n _this13.heightMode = _this13.heightMode;\n setTimeout(function () {\n _this13.height = _this13.height + Number(heightElm.value);\n }, 100);\n }\n });\n case 58:\n setTimeout(function () {\n _this13.attributeLink = _this13.options.attribute.link.content;\n _this13.attributeVr = _this13.options.attribute.vr.content;\n _this13.cameraSelect && _this13.cameraSelect();\n _this13.goodsSelect && _this13.goodsSelect();\n var tagData = _this13.attributeSelect;\n var attributeElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0];\n if (attributeElm) {\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(attributeElm, \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeSelectElm = _this13._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this13.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this13.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n }\n createSpatialInfoTableContent();\n var unitData = [{\n name: '平方米',\n value: '平方米'\n }, {\n name: '平方千米',\n value: '平方千米'\n }, {\n name: '亩',\n value: '亩'\n }, {\n name: '公顷',\n value: '公顷'\n }];\n var unitDataLegpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('input-select-unit-box')[0], \".input-select-unit\");\n if (unitDataLegpObject) {\n unitDataLegpObject.legp_search(unitData);\n var unitDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('input-select-unit')[0].getElementsByTagName('input')[0];\n unitDataLegpElm.value = _this13.options['area-unit'];\n for (var _i8 = 0; _i8 < unitData.length; _i8++) {\n if (unitData[_i8].value === unitDataLegpElm.value) {\n unitDataLegpObject.legp_searchActive(unitData[_i8].value);\n break;\n }\n }\n unitDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < unitData.length; _i9++) {\n if (unitData[_i9].value === unitDataLegpElm.value) {\n _this13.areaUnit = unitData[_i9].value;\n break;\n }\n }\n });\n }\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this13._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this13._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this13.labelFontFamily].value;\n for (var _i10 = 0; _i10 < fontData.length; _i10++) {\n if (fontData[_i10].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i10].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i11 = 0; _i11 < fontData.length; _i11++) {\n if (fontData[_i11].value === fontDataLegpElm.value) {\n _this13.labelFontFamily = fontData[_i11].key;\n break;\n }\n }\n });\n _this13._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context7.next = 62;\n break;\n case 61:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 62:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this14 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.lineColor = this.originalOptions.line.color;\n this.lineWidth = this.originalOptions.line.width;\n this.area = this.originalOptions.area;\n this.areaUnit = this.originalOptions['area-unit'];\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.attributeLink = this.options.attribute.link.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n for (var i = 0; i < this.options.positions.length; i++) {\n if (this._elms.lng && this._elms.lng[i]) {\n this._elms.lng[i].innerHTML = this.options.positions[i].lng.toFixed(8);\n }\n if (this._elms.lat && this._elms.lat[i]) {\n this._elms.lat[i].innerHTML = this.options.positions[i].lat.toFixed(8);\n }\n if (this._elms.alt && this._elms.alt[i]) {\n this._elms.alt[i].innerHTML = Number(this.options.height.toFixed(2));\n }\n }\n this.heightMode = this.heightMode;\n for (var _i12 = 0; _i12 < this.nodePoints.length; _i12++) {\n this.sdk.viewer.entities.remove(this.nodePoints[_i12]);\n }\n this.previous = null;\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n var spreadState = this.options.spreadState;\n this.removeAnimate();\n setTimeout(function () {\n _this14.loop = _this14.options.loop;\n _this14.spreadState = spreadState;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this14.sdk, _this14.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this14.sdk, _this14.options.id);\n }, 200);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.removeAnimate();\n this.sdk.viewer.entities.remove(this.entity);\n this.label && this.label.remove();\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 9;\n return this.sdk.removeIncetance(this.options.id);\n case 9:\n _context8.next = 11;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 11:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0] && this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n\n /**\r\n * 飞到\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee5() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n ground,\n i,\n height,\n a,\n _i13,\n BoundingSphere,\n _args9 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n if (!this._error) {\n _context9.next = 3;\n break;\n }\n return _context9.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_21__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context9.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context9.next = 18;\n break;\n }\n _context9.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context9.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context9.next = 51;\n break;\n case 25:\n positionArray = [];\n _context9.t0 = this.heightMode;\n _context9.next = _context9.t0 === 0 ? 29 : _context9.t0 === '0' ? 29 : _context9.t0 === 1 ? 31 : _context9.t0 === '1' ? 31 : _context9.t0 === 2 ? 33 : _context9.t0 === '2' ? 33 : 35;\n break;\n case 29:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 31:\n ground = false;\n return _context9.abrupt(\"break\", 35);\n case 33:\n ground = true;\n return _context9.abrupt(\"break\", 35);\n case 35:\n if (!ground) {\n _context9.next = 48;\n break;\n }\n i = 0;\n case 37:\n if (!(i < this.options.positions.length)) {\n _context9.next = 46;\n break;\n }\n _context9.next = 40;\n return this.getClampToHeight(this.options.positions[i]);\n case 40:\n height = _context9.sent;\n a = Cesium.Cartesian3.fromDegrees(this.options.positions[i].lng, this.options.positions[i].lat, height);\n positionArray.push(a.x, a.y, a.z);\n case 43:\n i++;\n _context9.next = 37;\n break;\n case 46:\n _context9.next = 49;\n break;\n case 48:\n if (this.positionsH) {\n for (_i13 = 0; _i13 < this.positionsH.length; _i13++) {\n positionArray.push(this.positionsH[_i13].x, this.positionsH[_i13].y, this.positionsH[_i13].z);\n }\n }\n case 49:\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 51:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 打开富文本框\r\n */\n )\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this15 = this;\n // var ue = UE.getEditor('app');\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this15.options.richTextContent = content;\n };\n }\n\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this.operate.positionEditing;\n },\n set: function set(status) {\n var _this16 = this;\n if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this.removeAnimate();\n var _this = this;\n this.event && this.event.destroy();\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk);\n this.operate.positionEditing = status;\n if (status === true) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.label && (this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,0.9)\"));\n this.picking = false;\n var array = [];\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var center = Cesium.Cartesian3.fromDegrees((array[0][0] + array[1][0]) / 2, (array[0][1] + array[1][1]) / 2);\n for (var _i14 = 0; _i14 < positions.length; _i14++) {\n center.x - positions[_i14].x;\n disparity.push({\n x: center.x - positions[_i14].x,\n y: center.y - positions[_i14].y,\n z: center.z - positions[_i14].z\n });\n }\n var newpositions = [];\n this.event.mouse_move(function (movement, cartesian) {\n var position84 = _this16.cartesian3Towgs84(cartesian, _this16.sdk.viewer);\n newpositions = [];\n for (var _i15 = 0; _i15 < disparity.length; _i15++) {\n newpositions.push({\n x: cartesian.x - disparity[_i15].x,\n y: cartesian.y - disparity[_i15].y,\n z: cartesian.z - disparity[_i15].z\n });\n }\n // this.label.position = [position84.lng, position84.lat, position84.alt]\n _this16.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i16 = 0; _i16 < disparity.length; _i16++) {\n var pos3 = {\n x: cartesian.x - disparity[_i16].x,\n y: cartesian.y - disparity[_i16].y,\n z: cartesian.z - disparity[_i16].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i16] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i16]) {\n _this16._elms.lng[_i16].innerHTML = _this16.options.positions[_i16].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i16]) {\n _this16._elms.lat[_i16].innerHTML = _this16.options.positions[_i16].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this16.positions)\n };\n _this16.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this16.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this16.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this16.positionEditing = false;\n } else {\n _this16.event.mouse_move(function () {});\n _this16.event.mouse_left(function () {});\n _this16.event.mouse_right(function () {});\n _this16.event.gesture_pinck_start(function () {});\n newpositions = [];\n for (var _i17 = 0; _i17 < disparity.length; _i17++) {\n var pos3 = {\n x: cartesian.x - disparity[_i17].x,\n y: cartesian.y - disparity[_i17].y,\n z: cartesian.z - disparity[_i17].z\n };\n newpositions.push(pos3);\n _this16.options.positions[_i17] = _this16.cartesian3Towgs84(pos3, _this16.sdk.viewer);\n if (_this16._elms.lng && _this16._elms.lng[_i17]) {\n _this16._elms.lng[_i17].innerHTML = _this16.options.positions[_i17].lng.toFixed(8);\n }\n if (_this16._elms.lat && _this16._elms.lat[_i17]) {\n _this16._elms.lat[_i17].innerHTML = _this16.options.positions[_i17].lat.toFixed(8);\n }\n }\n _this16.positions = newpositions;\n _this16.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this16.positions)\n };\n _this16.positionEditing = false;\n }\n });\n });\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var position84 = [];\n if (newpositions.length > 0) {\n for (var _i18 = 0; _i18 < newpositions.length; _i18++) {\n position84.push(_this.cartesian3Towgs84(newpositions[_i18], _this.sdk.viewer));\n }\n } else {\n for (var _i19 = 0; _i19 < positions.length; _i19++) {\n position84.push(_this.cartesian3Towgs84(positions[_i19], _this.sdk.viewer));\n }\n }\n _this.renewPositions(position84);\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, false);\n } else {\n if (this.label && this.label.entity && this.label.entity.billboard) {\n this.label.entity.billboard.color = Cesium.Color.fromCssColorString(\"rgba(255,255,255,1)\");\n }\n this.picking = true;\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.destroy();\n }\n this.tip && this.tip.destroy();\n if (!this.previous) {\n this.previous = {\n positions: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions)\n };\n } else {\n this.positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.previous.positions);\n }\n var position84 = [];\n for (var _i20 = 0; _i20 < this.positions.length; _i20++) {\n position84.push(_this.cartesian3Towgs84(this.positions[_i20], _this.sdk.viewer));\n }\n this.renewPositions(position84);\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(_this.positionsH);\n }, true);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this.positionsH), [_this.positionsH[0], _this.positionsH[1]]);\n }, true);\n }\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(v) {\n var _Cesium$Cartesian;\n var cartesian = Cesium.Cartesian3.fromDegrees(v.position.lng, v.position.lat, v.position.alt);\n var positions = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positions);\n var array = [];\n var disparity = [];\n for (var i = 0; i < positions.length; i++) {\n var position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n array.push([position.lng, position.lat]);\n }\n var firstposition = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n array.push([firstposition.lng, firstposition.lat]);\n var polygon = turf.polygon([array]);\n var centroid = turf.centroid(polygon);\n var center = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(centroid.geometry.coordinates));\n for (var _i21 = 0; _i21 < positions.length; _i21++) {\n disparity.push({\n x: center.x - positions[_i21].x,\n y: center.y - positions[_i21].y,\n z: center.z - positions[_i21].z\n });\n }\n var newpositions = [];\n for (var _i22 = 0; _i22 < disparity.length; _i22++) {\n newpositions.push({\n x: cartesian.x - disparity[_i22].x,\n y: cartesian.y - disparity[_i22].y,\n z: cartesian.z - disparity[_i22].z\n });\n }\n this.label.position = [v.position.lng, v.position.lat, v.position.alt];\n var positions84 = [];\n if (newpositions.length > 0) {\n for (var _i23 = 0; _i23 < newpositions.length; _i23++) {\n positions84.push(this.cartesian3Towgs84(newpositions[_i23], this.sdk.viewer));\n }\n }\n var arr = this.computeStraightArrow(positions84);\n if (arr.length == 0) {\n return;\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _this17 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var positions = this.computeStraightArrow(this.options.positions);\n if (positions.length == 0) {\n return;\n }\n var points = [[]];\n for (var i = 0; i < positions.length; i++) {\n var _position = this.cartesian3Towgs84(positions[i], this.sdk.viewer);\n points[0].push([_position.lng, _position.lat]);\n }\n var position = this.cartesian3Towgs84(positions[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = Cesium.Cartesian3.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1]);\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this17.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }, {\n key: \"spreadTime\",\n get: function get() {\n return this.options.spreadTime;\n },\n set: function set(v) {\n var spreadTime = Number(v);\n if (isNaN(spreadTime)) {\n spreadTime = 3000;\n } else if (spreadTime < 500) {\n spreadTime = 500;\n } else if (spreadTime > 9999999) {\n spreadTime = 9999999;\n }\n this.options.spreadTime = spreadTime;\n if (this.spreadState) {\n this.setSpreadProgressByTime();\n }\n this._elms.spreadTime && this._elms.spreadTime.forEach(function (item) {\n item.value = spreadTime;\n });\n }\n }, {\n key: \"loop\",\n get: function get() {\n return this.options.loop;\n },\n set: function set(v) {\n this.options.loop = v;\n if (this.TweenAnimate) {\n if (v) {\n this.TweenAnimate.repeat(Infinity);\n } else {\n this.TweenAnimate.repeat();\n }\n }\n this._elms.loop && this._elms.loop.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"spreadState\",\n get: function get() {\n return this.options.spreadState;\n },\n set: function set(v) {\n this.options.spreadState = v;\n if (this.TweenAnimate) {\n if (v) {\n this.lineEdit = false;\n this.setSpreadProgressByTime(this.TweenAnimate._object.distance / this.TweenAnimate._valuesEnd.distance * this.spreadTime);\n } else {\n this.TweenAnimate.pause();\n }\n } else {\n if (v) {\n this.setSpreadProgressByTime();\n }\n }\n this._elms.spreadState && this._elms.spreadState.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"setSpreadProgressByTime\",\n value: function setSpreadProgressByTime() {\n var _this18 = this;\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (!this.entity) {\n return;\n }\n var that = this;\n for (var i = 0; i < this.nodePoints.length; i++) {\n this.sdk.viewer.entities.remove(this.nodePoints[i]);\n }\n this.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n }\n var _getSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"getSdk\"])(),\n sdkP = _getSdk.sdkP,\n sdkD = _getSdk.sdkD;\n var thatP;\n if (sdkD && sdkP) {\n if (this.sdk === sdkD) {\n thatP = sdkP.entityMap.get(this.options.id);\n if (thatP && thatP.entity && thatP.entity.polygon && thatP.positionsH) {\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(thatP.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(thatP.positionsH), [thatP.positionsH[0], thatP.positionsH[1]]);\n }, false);\n }\n return;\n }\n }\n\n // this.entity.polygon.hierarchy = arr\n // this.entity.polyline.positions = lineArr\n\n var linePos84 = [];\n for (var _i24 = 0; _i24 < that.options.positions.length; _i24++) {\n linePos84.push([that.options.positions[_i24].lng, that.options.positions[_i24].lat]);\n }\n var line = turf.lineString(linePos84);\n var distanceArray = [];\n for (var _i25 = 1; _i25 < linePos84.length; _i25++) {\n var from = turf.point(linePos84[_i25]);\n var to = turf.point(linePos84[_i25 - 1]);\n var d = turf.distance(from, to, {\n units: 'kilometers'\n });\n var od = distanceArray[distanceArray.length - 1] || 0;\n distanceArray.push(od + d);\n }\n var distance = turf.length(line, {\n units: 'kilometers'\n });\n var timeRatio = time / this.spreadTime;\n var m = 0;\n this.TweenAnimate = new TWEEN.Tween({\n distance: distance * timeRatio\n }).to({\n distance: distance\n }, this.spreadTime - time).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(function () {\n if (time) {\n _this18.setSpreadProgressByTime();\n } else {}\n }).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee6(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee6$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n if (!(_this18.TweenAnimate._duration == Infinity)) {\n _context10.next = 2;\n break;\n }\n return _context10.abrupt(\"return\");\n case 2:\n m++;\n if (_this18.sdk.viewer) {\n _context10.next = 6;\n break;\n }\n _this18.removeAnimate();\n return _context10.abrupt(\"return\");\n case 6:\n setSpread(r);\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee6);\n }));\n return function (_x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }()).onStart(function () {\n _this18.options.spreadState = true;\n _this18._elms.spreadState && _this18._elms.spreadState.forEach(function (item) {\n item.checked = true;\n });\n }).onComplete(function (d) {\n _this18.removeAnimate();\n });\n if (this.spreadState) {\n this.TweenAnimate.start();\n } else {\n setSpread({\n distance: distance * timeRatio\n });\n }\n function setSpread(_x6) {\n return _setSpread.apply(this, arguments);\n }\n function _setSpread() {\n _setSpread = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee7(v) {\n var index, _i26, positions, _i27, sliced, coordinates;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee7$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (that.show) {\n _context11.next = 2;\n break;\n }\n return _context11.abrupt(\"return\");\n case 2:\n index = 2;\n _i26 = distanceArray.length - 2;\n case 4:\n if (!(_i26 >= 0)) {\n _context11.next = 12;\n break;\n }\n if (!(v.distance >= distanceArray[_i26])) {\n _context11.next = 9;\n break;\n }\n index = index + _i26 + 1;\n if (index > that.options.positions.length - 1) {\n index = that.options.positions.length - 1;\n }\n return _context11.abrupt(\"break\", 12);\n case 9:\n _i26--;\n _context11.next = 4;\n break;\n case 12:\n positions = [];\n for (_i27 = 0; _i27 < index; _i27++) {\n positions[_i27] = _objectSpread({}, that.options.positions[_i27]);\n }\n if (v.distance) {\n _context11.next = 18;\n break;\n }\n positions[index] = {\n lng: positions[1].lng,\n lat: positions[1].lat\n };\n _context11.next = 24;\n break;\n case 18:\n _context11.next = 20;\n return turf.lineSliceAlong(line, 0, v.distance, {\n units: 'kilometers'\n });\n case 20:\n sliced = _context11.sent;\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]);\n positions[1].lng = coordinates[0];\n positions[1].lat = coordinates[1];\n case 24:\n // console.log('positions', positions)\n that.renewPositions(positions);\n case 25:\n case \"end\":\n return _context11.stop();\n }\n }, _callee7);\n }));\n return _setSpread.apply(this, arguments);\n }\n this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(that.positionsH);\n }, false);\n this.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]);\n }, false);\n }\n\n // 移除动画\n }, {\n key: \"removeAnimate\",\n value: function removeAnimate() {\n this.spreadState = false;\n if (this.TweenAnimate) {\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n this.renewPositions();\n this.entity.polygon.hierarchy = new Cesium.PolygonHierarchy(this.positionsH);\n this.entity.polyline.positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.positionsH), [this.positionsH[0], this.positionsH[1]]);\n }\n }\n\n // 更新坐标\n }, {\n key: \"renewPositions\",\n value: function renewPositions(position84) {\n var _this19 = this;\n if (this._error || !this.sdk.viewer) {\n return;\n }\n var ground = false;\n var array = [];\n var positions = this.options.positions;\n if (position84) {\n positions = position84;\n }\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = this.computeStraightArrow(positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n var pos84 = [];\n for (var _i28 = 0; _i28 < positionsA.length; _i28++) {\n var _position2 = this.cartesian3Towgs84(positionsA[_i28], this.sdk.viewer);\n pos84.push(_position2);\n points[0].push([_position2.lng, _position2.lat]);\n }\n var position = this.cartesian3Towgs84(positionsA[0], this.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var height = 0;\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n switch (this.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = this.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n var fromDegreesArray2 = [];\n if (!ground && this.nodePoints.length == 0) {\n for (var _i29 = 0; _i29 < points[0].length; _i29++) {\n fromDegreesArray2.push(points[0][_i29][0], points[0][_i29][1], this.height + height);\n }\n this.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n this.label && (this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.height + height]);\n } else {\n this.positionsH = positionsA;\n setTimeout(function () {\n if (!_this19.sdk.viewer) {\n return;\n }\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this19.sdk.viewer.entities.values);\n _this19.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n _this19.label && (_this19.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height]);\n });\n }, 100);\n }\n\n // 计算投影面积\n if (!this.spreadState) {\n this.options.areaByMeter = this.computeArea(pos84);\n this.areaUnit = this.areaUnit;\n }\n return fromDegreesArray;\n }\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n }\n that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n var positionsA = that.computeStraightArrow(that.options.positions);\n if (positionsA.length == 0) {\n return;\n }\n var points = [[]];\n for (var _i30 = 0; _i30 < positionsA.length; _i30++) {\n var _position3 = that.cartesian3Towgs84(positionsA[_i30], that.sdk.viewer);\n points[0].push([_position3.lng, _position3.lat]);\n }\n var position = that.cartesian3Towgs84(positionsA[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n // let centroid = turf.centroid(polygon);\n var centroid = turf.pointOnFeature(polygon);\n var ground;\n var height = 0;\n switch (that.options.heightMode) {\n case '0':\n case 0:\n ground = false;\n break;\n case '1':\n case 1:\n height = that.sdk.viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(centroid.geometry.coordinates[0], centroid.geometry.coordinates[1])) || 0;\n ground = false;\n break;\n case '2':\n case 2:\n ground = true;\n break;\n }\n if (!that.options.label.position) {\n that.options.label.position = {\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1],\n alt: that.height + height\n };\n }\n var fromDegreesArray2 = [];\n for (var _i31 = 0; _i31 < points[0].length; _i31++) {\n fromDegreesArray2.push(points[0][_i31][0], points[0][_i31][1], that.height + height);\n }\n var material = Cesium.Color.fromCssColorString(that.options.color);\n if (that.sdk.viewer.scene.mode === 2) {\n ground = false;\n material = new Cesium.CustomColorMaterialSource({\n color: that.options.color\n });\n }\n that.options.label.ground = ground;\n that.positionsH = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2);\n that.entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n id: that.options.id,\n polygon: {\n hierarchy: !ground ? new Cesium.PolygonHierarchy(that.positionsH) : new Cesium.PolygonHierarchy(positionsA),\n perPositionHeight: !ground ? true : false,\n material: material,\n zIndex: that.sdk._entityZIndex\n },\n polyline: {\n positions: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.positionsH), [that.positionsH[0], that.positionsH[1]]),\n width: that.options.line.width,\n material: Cesium.Color.fromCssColorString(that.options.line.color),\n clampToGround: !ground ? false : true,\n arcType: !ground ? Cesium.ArcType.NONE : Cesium.ArcType.GEODESIC,\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n StraightArrowObject.createLabel(that);\n var pos84 = [];\n for (var _i32 = 0; _i32 < positionsA.length; _i32++) {\n pos84.push(that.cartesian3Towgs84(positionsA[_i32], that.sdk.viewer));\n }\n that.options.areaByMeter = that.computeArea(pos84);\n switch (that.options['area-unit']) {\n case '平方米':\n that.options.area = that.options.areaByMeter;\n break;\n case '平方千米':\n that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8));\n break;\n case '亩':\n that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4));\n break;\n case '公顷':\n that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6));\n break;\n default:\n that.options.area = that.options.areaByMeter;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n that.spreadState = that.options.spreadState;\n }\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee8(that) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee8$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.label.position.lng, that.options.label.position.lat, that.options.label.position.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far,\n ground: that.options.label.ground\n });\n case 1:\n case \"end\":\n return _context12.stop();\n }\n }, _callee8);\n }));\n function createLabel(_x7) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"EventBinding\",\n value: function EventBinding(that, elements) {\n var _loop10 = function _loop10() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator5 = _createForOfIteratorHelper(elements[i].attributes),\n _step5;\n try {\n var _loop11 = function _loop11() {\n var m = _step5.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (that._elms[m.value]) {\n that._elms[m.value].push(elements[i]);\n } else {\n that._elms[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n _loop11();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop10()) continue;\n }\n }\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n that.positionEditing = false;\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var createNodePoints = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee9() {\n var objectsToExclude, _i34, height, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee9$(_context13) {\n while (1) switch (_context13.prev = _context13.next) {\n case 0:\n objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n _i34 = 0;\n case 2:\n if (!(_i34 < that.options.positions.length)) {\n _context13.next = 11;\n break;\n }\n _context13.next = 5;\n return that.getClampToHeight(that.options.positions[_i34], objectsToExclude);\n case 5:\n height = _context13.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i34,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i34].lng, that.options.positions[_i34].lat, height),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n case 8:\n _i34++;\n _context13.next = 2;\n break;\n case 11:\n case \"end\":\n return _context13.stop();\n }\n }, _callee9);\n }));\n return function createNodePoints() {\n return _ref2.apply(this, arguments);\n };\n }(); // for (let i = 0; i < that.options.positions.length; i++) {\n // let entity = that.sdk.viewer.entities.add({\n // name: 'node-secondary-edit-point',\n // index: i,\n // position: Cesium.Cartesian3.fromDegrees(that.options.positions[i].lng, that.options.positions[i].lat),\n // billboard: {\n // image: that.getSourceRootPath() + '/img/point.png',\n // width: 15,\n // height: 15,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // },\n // })\n // nodePoints.push(entity)\n // }\n that.removeAnimate();\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event_index__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var fromDegreesArray = [];\n for (var i = 0; i < that.options.positions.length; i++) {\n fromDegreesArray.push(that.options.positions[i].lng, that.options.positions[i].lat);\n }\n var moveEvent = function moveEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n that.renewPositions();\n }\n that.tip.setPosition(cartesian, movement.position ? movement.position.x : movement.endPosition.x, movement.position ? movement.position.y : movement.endPosition.y);\n };\n var leftEvent = function leftEvent(movement, cartesian) {\n moveEvent(movement, cartesian);\n var position84 = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n if (selectPoint) {\n var index = selectPoint.index;\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: index,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, position84.alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n selectPoint = null;\n that.tip.set_text('请选择一个顶点,右键取消');\n } else {\n var position = movement.position;\n if (!position) {\n position = {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n };\n }\n var pick = that.sdk.viewer.scene.pick(position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n originalPosition = that.cartesian3Towgs84(pick.id.position.getValue(), that.sdk.viewer);\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键确认,右键取消');\n }\n }\n that.renewPositions();\n };\n var rightEvent = function rightEvent() {\n that.event.mouse_move(function () {});\n that.event.mouse_left(function () {});\n that.event.mouse_right(function () {});\n that.event.gesture_pinck_start(function () {});\n if (selectPoint) {\n if (!originalPosition) {\n that.options.positions.pop();\n } else {\n that.options.positions[selectPoint.index] = originalPosition;\n }\n if (that._elms.lng && that._elms.lng[selectPoint.index]) {\n that._elms.lng[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lng.toFixed(8);\n }\n if (that._elms.lat && that._elms.lat[selectPoint.index]) {\n that._elms.lat[selectPoint.index].innerHTML = that.options.positions[selectPoint.index].lat.toFixed(8);\n }\n }\n that.heightMode = that.heightMode;\n that.previous = null;\n };\n that.entity.polyline.clampToGround = true;\n that.entity.polyline.arcType = Cesium.ArcType.GEODESIC;\n that.entity.polygon.perPositionHeight = false;\n that.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {\n var arr = that.computeStraightArrow(that.options.positions);\n return new Cesium.PolygonHierarchy(arr);\n }, false);\n that.entity.polyline.positions = new Cesium.CallbackProperty(function () {\n var arr = that.computeStraightArrow(that.options.positions);\n if (arr.length >= 3) {\n return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr), [arr[0], arr[1]]);\n } else {\n return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(arr);\n }\n }, false);\n setTimeout(function () {\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(moveEvent);\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n if (endTime - startTime >= 500) {\n rightEvent();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n var points = [[]];\n var pos84 = [];\n for (var _i33 = 0; _i33 < that.positionsH.length; _i33++) {\n var _position4 = that.cartesian3Towgs84(that.positionsH[_i33], that.sdk.viewer);\n pos84.push(_position4);\n points[0].push([_position4.lng, _position4.lat]);\n }\n var position = that.cartesian3Towgs84(that.positionsH[0], that.sdk.viewer);\n points[0].push([position.lng, position.lat]);\n var polygon = turf.polygon(points);\n var centroid = turf.pointOnFeature(polygon);\n var objectsToExclude = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(that.sdk.viewer.entities.values);\n that.getClampToHeight({\n lng: centroid.geometry.coordinates[0],\n lat: centroid.geometry.coordinates[1]\n }, objectsToExclude).then(function (height) {\n that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], height];\n });\n createNodePoints();\n }, 200);\n }\n }\n }, {\n key: \"closeNodeEdit\",\n value: function closeNodeEdit(that) {\n YJ.Measure.SetMeasureStatus(false);\n that.event && that.event.destroy();\n that.tip && that.tip.destroy();\n that.tip = null;\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n that.picking = true;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (StraightArrowObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvU3RyYWlnaHRBcnJvd09iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9TdHJhaWdodEFycm93T2JqZWN0L2luZGV4LmpzPzBhNGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOebtOe6v+eureWktFxyXG4gKi9cclxuaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSBcIi4uLy4uL0VsZW1lbnQvcmljaFRleHRcIjtcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgTGFiZWxPYmplY3QgZnJvbSAnLi4vTGFiZWxPYmplY3QnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIGdldFNkaywgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbi8vIGltcG9ydCBFZGl0UGFydGljbGUgZnJvbSBcIi4uLy4uL01vZGVsQ29udHJvbGxlci9FZGl0UGFydGljbGVcIjtcclxuXHJcbmNsYXNzIFN0cmFpZ2h0QXJyb3dPYmplY3QgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOebtOe6v+eureWktFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOWUr+S4gOagh+ivhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+56S6L+makOiXj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9J3JnYmEoMjU1LCAwLCAwLCAwLjUpJyB7c3RyaW5nfSDpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0TW9kZT0ye251bWJlcn0g6auY5bqm5qih5byP77yIMO+8mua1t+aLlOmrmOW6pu+8mzHvvJrnm7jlr7nlnLDooajvvJsy77ya5L6d6ZmE5qih5byP77yJXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXJlYVVuaXQ9J+W5s+aWueexsycge3N0cmluZ30g6Z2i56ev5Y2V5L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZSB7b2JqZWN0fSDovrnmoYZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5saW5lLndpZHRoPTIge3N0cmluZ30g6L655qGG5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGluZS5jb2xvcj1cInJnYmEoMTU1LCAxNTUsIDEyNCwgMC44OSlcIiB7c3RyaW5nfSDovrnmoYbpopzoibJcclxuICAgKiBAcGFyYW0ge0FycmF5LjxvYmplY3Q+fSBvcHRpb25zLnBvc2l0aW9ucyDlv4XloavvvIznu4/nuqzluqblkozpq5jluqbnmoTliJfooajvvIzlgLzkuqTmm78gW3tsb24sbGF0LGFsdH0sLi4uXVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNwcmVhZFN0YXRlPWZhbHNlIHtib29sZWFufSDliqjnlLtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sb29wPWZhbHNlIHtsb29wfSDliqjnlLvph43lpI1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcHJlYWRUaW1lPTMwMDAge251bWJlcn0g5Yqo55S75oyB57ut5pe26ZW/KOavq+enkilcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge3N0cmluZ30g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30ge29iamVjdH0g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucyA9IHt9LCBfRGlhbG9nID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCBcIiNmZjAwMDA4MFwiXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA9IChvcHRpb25zLmhlaWdodE1vZGUgfHwgb3B0aW9ucy5oZWlnaHRNb2RlID09IDApID8gb3B0aW9ucy5oZWlnaHRNb2RlIDogMlxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZSA9IG9wdGlvbnMubGluZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUud2lkdGggPSAoKHRoaXMub3B0aW9ucy5saW5lLndpZHRoIHx8IHRoaXMub3B0aW9ucy5saW5lLndpZHRoID09PSAwKSA/IHRoaXMub3B0aW9ucy5saW5lLndpZHRoIDogMylcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yID0gdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgfHwgJ3JnYmEoMjU1LCAwLCAwLCAxKSdcclxuICAgIHRoaXMub3B0aW9uc1snYXJlYS11bml0J10gPSBvcHRpb25zWydhcmVhLXVuaXQnXSB8fCAn5bmz5pa557GzJ1xyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgIHRoaXMub3BlcmF0ZSA9IHt9XHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMub3B0aW9ucy5sb29wID0gb3B0aW9ucy5sb29wIHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGUgPSBvcHRpb25zLnNwcmVhZFN0YXRlIHx8IGZhbHNlXHJcbiAgICB0aGlzLnNwcmVhZFRpbWUgPSBvcHRpb25zLnNwcmVhZFRpbWVcclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZSA9IG9wdGlvbnMuYXR0cmlidXRlIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucG9zaXRpb25zIHx8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLl9lcnJvciA9ICfnm7Tnur/nrq3lpLTpnIDopoHkuKTkuKrlnZDmoIfvvIEnXHJcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLl9lcnJvcilcclxuICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5fZXJyb3IsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmhlaWdodCAmJiB0aGlzLm9wdGlvbnMuaGVpZ2h0ICE9PSAwKSB7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGVpZ2h0IDwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcbiAgICAgIFN0cmFpZ2h0QXJyb3dPYmplY3QuY3JlYXRlKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnU3RyYWlnaHRBcnJvd09iamVjdCdcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHYgfHwgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJ1xyXG4gICAgaWYgKCF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyIHx8ICF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWdvbikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtYXRlcmlhbCA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodGhpcy5vcHRpb25zLmNvbG9yKVxyXG4gICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodE1vZGUgPyB0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSA6IDBcclxuICB9XHJcbiAgc2V0IGhlaWdodE1vZGUodikge1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBbXVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHRNb2RlID0gKHYgfHwgdiA9PSAwKSA/IHYgOiAyXHJcbiAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBoZWlnaHRNb2RlTmFtZSA9ICcnXHJcbiAgICAgIFN0cmFpZ2h0QXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdCh0aGlzKVxyXG4gICAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBvc2l0aW9uc0gsXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzBdLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFsxXVxyXG4gICAgICBdXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KFxyXG4gICAgICAgIHRoaXMucG9zaXRpb25zSFxyXG4gICAgICApXHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfmtbfmi5Tpq5jluqYnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGhlaWdodE1vZGVOYW1lID0gJ+ebuOWvueWcsOihqCdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICBoZWlnaHRNb2RlTmFtZSA9ICfkvp3pmYTmqKHlnosnXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFiZWwuZ3JvdW5kID0gZ3JvdW5kXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBncm91bmRcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGUudmFsdWUgPSBoZWlnaHRNb2RlTmFtZSlcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlT2JqZWN0ICYmICh0aGlzLl9lbG1zLmhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoXHJcbiAgICAgICAgaGVpZ2h0TW9kZU5hbWVcclxuICAgICAgKSlcclxuICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtICYmIHRoaXMuX2VsbXMuaGVpZ2h0Q29uZmlybS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gIH1cclxuXHJcbiAgc2V0IGhlaWdodCh2KSB7XHJcbiAgICBpZiAoIXYgfHwgaXNOYU4oTnVtYmVyKHYpKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gMFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBOdW1iZXIoTnVtYmVyKHYpLnRvRml4ZWQoMikpXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBpZiAodGhpcy5oZWlnaHRNb2RlID09IDIpIHtcclxuICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdW5kID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoaXMucG9zaXRpb25zSClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9ICFncm91bmQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucG9zaXRpb25zSCxcclxuICAgICAgICB0aGlzLnBvc2l0aW9uc0hbMF0sXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNIWzFdXHJcbiAgICAgIF1cclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9ICFncm91bmQgPyBmYWxzZSA6IHRydWVcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUuYXJjVHlwZSA9ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUNcclxuICAgIH0sIDApO1xyXG5cclxuICAgIHRoaXMuX2VsbXMuYWx0ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuY29sb3IgPSB2XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnNkay52aWV3ZXIgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLmVudGl0eS5wb2x5bGluZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHYsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUud2lkdGhcclxuICB9XHJcbiAgc2V0IGxpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS53aWR0aCA9IHZcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLndpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgJiYgdGhpcy5fZWxtcy5saW5lQ29sb3IuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hcmVhXHJcbiAgfVxyXG5cclxuICBzZXQgYXJlYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXJlYSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXJlYSAmJiB0aGlzLl9lbG1zLmFyZWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhcmVhVW5pdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddXHJcbiAgfVxyXG4gIHNldCBhcmVhVW5pdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnNbJ2FyZWEtdW5pdCddID0gdlxyXG4gICAgdGhpcy5fZWxtcy5hcmVhVW5pdCAmJiB0aGlzLl9lbG1zLmFyZWFVbml0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFyZWFCeU1ldGVyIHx8IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciA9PSAwKSB7XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+W5s+aWueWNg+exsyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwMDApLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICfkuqknOlxyXG4gICAgICAgICAgdGhpcy5hcmVhID0gTnVtYmVyKCh0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgLyA2NjYuNjY2NjY2NykudG9GaXhlZCg0KSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgICB0aGlzLmFyZWEgPSBOdW1iZXIoKHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuYXJlYSA9IHRoaXMub3B0aW9ucy5hcmVhQnlNZXRlclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgfVxyXG4gIHNldCBsYWJlbFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93ICYmICF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubGFiZWxTaG93ICYmIHRoaXMuX2VsbXMubGFiZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRGYW1pbHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbEZvbnRGYW1pbHkodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPSB2IHx8IDBcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvcltpXSA9IGxhYmVsQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZvbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZVxyXG4gIH1cclxuICBzZXQgbGFiZWxGb250U2l6ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbE5lYXIgJiYgdGhpcy5fZWxtcy5sYWJlbE5lYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gbmVhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEZhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZhcih2KSB7XHJcbiAgICBsZXQgZmFyID0gdlxyXG4gICAgaWYgKGZhciA8IHRoaXMubGFiZWxOZWFyKSB7XHJcbiAgICAgIGZhciA9IHRoaXMubGFiZWxOZWFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbExpbmVXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVXaWR0aCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoICYmIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFBpeGVsT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gIH1cclxuICBzZXQgbGFiZWxQaXhlbE9mZnNldCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0ICYmIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXQgbGFiZWxMaW5lQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgwLDI1NSwyNTUsMC41KSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3JbaV0gPSBsaW5lQ29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3YsIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0W2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXSA9IHZcclxuICAgIHRoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yID0gW3RoaXMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdLCB2XVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcbiAgc2V0IGF0dHJpYnV0ZUNhbWVyYSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB2ckRlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldID0gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WQjeensOaIlumTvuaOpeS4jeiDveS4uuepuu+8gScsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVHb29kcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVHb29kcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKHRoYXQpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgIH1cclxuICAgIHRoYXQucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgbGV0IHBvc2l0aW9uc0EgPSB0aGF0LmNvbXB1dGVTdHJhaWdodEFycm93KHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICBpZiAocG9zaXRpb25zQS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnNBLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVtpXSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNBWzBdLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9pbnRzKTtcclxuICAgIC8vIGxldCBjZW50cm9pZCA9IHR1cmYuY2VudHJvaWQocG9seWdvbik7XHJcbiAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pO1xyXG5cclxuXHJcbiAgICBsZXQgZ3JvdW5kXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG5cclxuICAgIHN3aXRjaCAodGhhdC5vcHRpb25zLmhlaWdodE1vZGUpIHtcclxuICAgICAgY2FzZSAnMCc6XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzEnOlxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaGVpZ2h0ID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmdldEhlaWdodChDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSkpIHx8IDBcclxuICAgICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJzInOlxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZ3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmxhYmVsLnBvc2l0aW9uID0geyBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBsYXQ6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLCBhbHQ6IHRoYXQuaGVpZ2h0ICsgaGVpZ2h0IH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHNbMF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChcclxuICAgICAgICBwb2ludHNbMF1baV1bMF0sXHJcbiAgICAgICAgcG9pbnRzWzBdW2ldWzFdLFxyXG4gICAgICAgIHRoYXQuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgIGlmICh0aGF0LnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMikge1xyXG4gICAgICBncm91bmQgPSBmYWxzZVxyXG4gICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5jb2xvclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmxhYmVsLmdyb3VuZCA9IGdyb3VuZFxyXG4gICAgdGhhdC5wb3NpdGlvbnNIID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheTIpXHJcblxyXG4gICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHBvbHlnb246IHtcclxuICAgICAgICBoaWVyYXJjaHk6ICFncm91bmQgPyBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkodGhhdC5wb3NpdGlvbnNIKSA6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShwb3NpdGlvbnNBKSxcclxuICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogIWdyb3VuZCA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBbLi4udGhhdC5wb3NpdGlvbnNILCB0aGF0LnBvc2l0aW9uc0hbMF0sIHRoYXQucG9zaXRpb25zSFsxXV0sXHJcbiAgICAgICAgd2lkdGg6IHRoYXQub3B0aW9ucy5saW5lLndpZHRoLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5saW5lLmNvbG9yKSxcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiAhZ3JvdW5kID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIGFyY1R5cGU6ICFncm91bmQgPyBDZXNpdW0uQXJjVHlwZS5OT05FIDogQ2VzaXVtLkFyY1R5cGUuR0VPREVTSUMsXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICBTdHJhaWdodEFycm93T2JqZWN0LmNyZWF0ZUxhYmVsKHRoYXQpXHJcblxyXG4gICAgbGV0IHBvczg0ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zQS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3M4NC5wdXNoKHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zQVtpXSwgdGhhdC5zZGsudmlld2VyKSlcclxuICAgIH1cclxuICAgIHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciA9IHRoYXQuY29tcHV0ZUFyZWEocG9zODQpO1xyXG4gICAgc3dpdGNoICh0aGF0Lm9wdGlvbnNbJ2FyZWEtdW5pdCddKSB7XHJcbiAgICAgIGNhc2UgJ+W5s+aWueexsyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSB0aGF0Lm9wdGlvbnMuYXJlYUJ5TWV0ZXJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5bmz5pa55Y2D57GzJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gMTAwMDAwMCkudG9GaXhlZCg4KSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAn5LqpJzpcclxuICAgICAgICB0aGF0Lm9wdGlvbnMuYXJlYSA9IE51bWJlcigodGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyIC8gNjY2LjY2NjY2NjcpLnRvRml4ZWQoNCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ+WFrOmhtyc6XHJcbiAgICAgICAgdGhhdC5vcHRpb25zLmFyZWEgPSBOdW1iZXIoKHRoYXQub3B0aW9ucy5hcmVhQnlNZXRlciAvIDEwMDAwKS50b0ZpeGVkKDYpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoYXQub3B0aW9ucy5hcmVhID0gdGhhdC5vcHRpb25zLmFyZWFCeU1ldGVyXHJcbiAgICB9XHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuXHJcbiAgICB0aGF0LnNwcmVhZFN0YXRlID0gdGhhdC5vcHRpb25zLnNwcmVhZFN0YXRlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgLy8g5qCH562+XHJcbiAgICB0aGF0LmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IFt0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCB0aGF0Lm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXIsXHJcbiAgICAgIGdyb3VuZDogdGhhdC5vcHRpb25zLmxhYmVsLmdyb3VuZCxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVTcGF0aWFsSW5mb1RhYmxlQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgdGFibGVFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NwYXRpYWwtaW5mby10YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRCb2R5RWxtID0gdGFibGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgdEJvZHlFbG0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBfdGhpcy5fZWxtcy5sbmcgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxuZ0lucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5sYXQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmxhdElucHV0ID0gW11cclxuICAgICAgICBfdGhpcy5fZWxtcy5hbHQgPSBbXVxyXG4gICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0ID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF90aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgICAgdHIuY2xhc3NOYW1lID0gJ3RyJ1xyXG4gICAgICAgICAgdHIuaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+JHtpICsgMX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBsbmcgYWxpZ24tY2VudGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgbGF0IGFsaWduLWNlbnRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGFsdCBhbGlnbi1jZW50ZXJcIj48L2Rpdj5cclxuICAgICAgICBgXHJcbiAgICAgICAgICBsZXQgbG5nQm94ID0gdHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbG5nJylbMF1cclxuICAgICAgICAgIGxldCBsbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgIGxuZy5pbm5lckhUTUwgPSAoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpXHJcbiAgICAgICAgICBsbmdCb3guYXBwZW5kQ2hpbGQobG5nKVxyXG4gICAgICAgICAgbGV0IGxuZ0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG4gICAgICAgICAgbG5nSW5wdXQuY2xhc3NOYW1lID0gJ2lucHV0J1xyXG4gICAgICAgICAgbG5nSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgICBsbmdJbnB1dC50aXRsZSA9ICcnXHJcbiAgICAgICAgICBsbmdJbnB1dC5taW4gPSAtMTgwXHJcbiAgICAgICAgICBsbmdJbnB1dC5tYXggPSAxODBcclxuICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZykudG9GaXhlZCg4KVxyXG5cclxuICAgICAgICAgIGxldCBsYXRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYXQnKVswXVxyXG4gICAgICAgICAgbGV0IGxhdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgbGF0LmlubmVySFRNTCA9IChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLnRvRml4ZWQoOClcclxuICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXQpXHJcbiAgICAgICAgICBsZXQgbGF0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBsYXRJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBsYXRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGxhdElucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGxhdElucHV0Lm1pbiA9IC05MFxyXG4gICAgICAgICAgbGF0SW5wdXQubWF4ID0gOTBcclxuICAgICAgICAgIGxhdElucHV0LnZhbHVlID0gKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KVxyXG5cclxuICAgICAgICAgIGxldCBhbHRCb3ggPSB0ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbHQnKVswXVxyXG4gICAgICAgICAgbGV0IGFsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgICAgYWx0LmlubmVySFRNTCA9IChfdGhpcy5oZWlnaHQpLnRvRml4ZWQoMilcclxuICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgICBsZXQgYWx0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBhbHRJbnB1dC5jbGFzc05hbWUgPSAnaW5wdXQnXHJcbiAgICAgICAgICBhbHRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgICAgICAgIGFsdElucHV0LnRpdGxlID0gJydcclxuICAgICAgICAgIGFsdElucHV0Lm1pbiA9IC05OTk5OTk5XHJcbiAgICAgICAgICBhbHRJbnB1dC5tYXggPSA5OTk5OTk5OTlcclxuICAgICAgICAgIGFsdElucHV0LnZhbHVlID0gKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKVxyXG5cclxuICAgICAgICAgIGxuZ0JveC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgbG5nQm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxuZ0lucHV0LnZhbHVlID0gTnVtYmVyKChfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxuZ0JveC5hcHBlbmRDaGlsZChsbmdJbnB1dClcclxuICAgICAgICAgICAgbG5nSW5wdXQuZm9jdXMoKVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFN0cmFpZ2h0QXJyb3dPYmplY3QuY2xvc2VOb2RlRWRpdChfdGhpcylcclxuICAgICAgICAgICAgX3RoaXMuaGVpZ2h0TW9kZSA9IF90aGlzLmhlaWdodE1vZGVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsbmdJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nKS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsbmdCb3guaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgbG5nQm94LmFwcGVuZENoaWxkKGxuZylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nID0gTnVtYmVyKE51bWJlcihsbmdJbnB1dC52YWx1ZSkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbG5nLmlubmVySFRNTCA9IF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodCA9IF90aGlzLmhlaWdodFxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBsYXRCb3guYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxhdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBsYXRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KS50b0ZpeGVkKDgpKVxyXG4gICAgICAgICAgICBsYXRCb3guYXBwZW5kQ2hpbGQobGF0SW5wdXQpXHJcbiAgICAgICAgICAgIGxhdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBTdHJhaWdodEFycm93T2JqZWN0LmNsb3NlTm9kZUVkaXQoX3RoaXMpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodE1vZGUgPSBfdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgICAgbGF0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCkudG9GaXhlZCg4KSlcclxuICAgICAgICAgICAgbGF0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGxhdEJveC5hcHBlbmRDaGlsZChsYXQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCA9IE51bWJlcihOdW1iZXIobGF0SW5wdXQudmFsdWUpLnRvRml4ZWQoOCkpXHJcbiAgICAgICAgICAgIGxhdC5pbm5lckhUTUwgPSBfdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgICBfdGhpcy5oZWlnaHQgPSBfdGhpcy5oZWlnaHRcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgYWx0Qm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuaGVpZ2h0TW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsdEJveC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBhbHRJbnB1dC52YWx1ZSA9IE51bWJlcigoX3RoaXMuaGVpZ2h0KS50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICBhbHRCb3guYXBwZW5kQ2hpbGQoYWx0SW5wdXQpXHJcbiAgICAgICAgICAgIGFsdElucHV0LmZvY3VzKClcclxuICAgICAgICAgICAgaWYgKF90aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBTdHJhaWdodEFycm93T2JqZWN0LmNsb3NlTm9kZUVkaXQoX3RoaXMpXHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodE1vZGUgPSBfdGhpcy5oZWlnaHRNb2RlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcclxuICAgICAgICAgICAgYWx0SW5wdXQudmFsdWUgPSBOdW1iZXIoKF90aGlzLmhlaWdodCkudG9GaXhlZCgyKSlcclxuICAgICAgICAgICAgYWx0Qm94LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGFsdEJveC5hcHBlbmRDaGlsZChhbHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgYWx0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmhlaWdodCA9IE51bWJlcihOdW1iZXIoYWx0SW5wdXQudmFsdWUpLnRvRml4ZWQoMikpXHJcbiAgICAgICAgICAgIGFsdC5pbm5lckhUTUwgPSBOdW1iZXIoX3RoaXMuaGVpZ2h0LnRvRml4ZWQoMikpXHJcbiAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sbmcucHVzaChsbmcpXHJcbiAgICAgICAgICBfdGhpcy5fZWxtcy5sbmdJbnB1dC5wdXNoKGxuZ0lucHV0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMubGF0LnB1c2gobGF0KVxyXG4gICAgICAgICAgX3RoaXMuX2VsbXMubGF0SW5wdXQucHVzaChsYXRJbnB1dClcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmFsdC5wdXNoKGFsdClcclxuICAgICAgICAgIF90aGlzLl9lbG1zLmFsdElucHV0LnB1c2goYWx0SW5wdXQpXHJcbiAgICAgICAgICB0Qm9keUVsbS5hcHBlbmRDaGlsZCh0cilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn55u057q/566t5aS05bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhpcy5sYWJlbC5wb3NpdGlvblswXSwgbGF0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzFdLCBhbHQ6IHRoaXMubGFiZWwucG9zaXRpb25bMl0gfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIGxldCBzcHJlYWRTdGF0ZSA9IHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZVxyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZSA9IHNwcmVhZFN0YXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uRWRpdGluZyA9ICF0aGlzLnBvc2l0aW9uRWRpdGluZ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5LqM5qyh57yW6L6R5Zue6LCDXHJcbiAgICAgICAgc2Vjb25kYXJ5RWRpdENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBTdHJhaWdodEFycm93T2JqZWN0Lm5vZGVFZGl0KHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgY3JlYXRlU3BhdGlhbEluZm9UYWJsZUNvbnRlbnQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgYXNzZW1ibGUnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG5cclxuICAgICAgLy8g5Yib5bu65qCH562+6aG1XHJcbiAgICAgIGxldCB0YWJzRWxtID0gbmV3IGN5X3RhYnMoJ2Fzc2VtYmxlLW9iamVjdC1lZGl0LXRhYnMnLCB1bmRlZmluZWQsIHRoaXMuc2RrKVxyXG4gICAgICAvLyDpopzoibLnu4Tku7ZcclxuICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbExpbmVDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLFxyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgU3RyYWlnaHRBcnJvd09iamVjdC5FdmVudEJpbmRpbmcodGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtjb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5saW5lQ29sb3IgPSBbbGluZWNvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsYWJlbGxpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcblxyXG4gICAgICBsZXQgaGVpZ2h0Qm94RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LWJveCcpWzBdXHJcbiAgICAgIGxldCBoZWlnaHRFbG0gPSBoZWlnaHRCb3hFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0JylbMF1cclxuICAgICAgbGV0IGhlaWdodENvbmZpcm1FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtY29uZmlybScpWzBdXHJcbiAgICAgIGhlaWdodEVsbS52YWx1ZSA9IDEwXHJcbiAgICAgIGlmICh0aGlzLmhlaWdodE1vZGUgPT0gMikge1xyXG4gICAgICAgIGhlaWdodEJveEVsbSAmJiAoaGVpZ2h0Qm94RWxtLmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbSAmJiBoZWlnaHRDb25maXJtRWxtLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBoZWlnaHRCb3hFbG0gJiYgKGhlaWdodEJveEVsbS5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICAgIGhlaWdodENvbmZpcm1FbG0gJiYgaGVpZ2h0Q29uZmlybUVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGhlaWdodE1vZGVEYXRhID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAgdmFsdWU6ICfmtbfmi5Tpq5jluqYnLFxyXG4gICAgICAgICAga2V5OiAnMCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIHZhbHVlOiAn55u45a+55Zyw6KGoJyxcclxuICAgICAgICAgIGtleTogJzEnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S+nemZhOaooeWeiycsXHJcbiAgICAgICAgICBrZXk6ICcyJyxcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgICAgbGV0IGhlaWdodE1vZGVPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnaGVpZ2h0LW1vZGUtYm94J1xyXG4gICAgICAgIClbMF0sXHJcbiAgICAgICAgJy5oZWlnaHQtbW9kZSdcclxuICAgICAgKVxyXG4gICAgICBpZiAoaGVpZ2h0TW9kZU9iamVjdCkge1xyXG4gICAgICAgIGhlaWdodE1vZGVPYmplY3QubGVncF9zZWFyY2goaGVpZ2h0TW9kZURhdGEpXHJcbiAgICAgICAgbGV0IGhlaWdodE1vZGVEYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGVpZ2h0LW1vZGUnKVswXVxyXG4gICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHRNb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLmtleSA9PSB0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZURhdGFMZWdwRWxtLnZhbHVlID0gaGVpZ2h0TW9kZURhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgaGVpZ2h0TW9kZU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShcclxuICAgICAgICAgICAgICBoZWlnaHRNb2RlRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhlaWdodE1vZGVEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0TW9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGVEYXRhW2ldLnZhbHVlID09PSBoZWlnaHRNb2RlRGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodE1vZGUgPSBoZWlnaHRNb2RlRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaGVpZ2h0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLmhlaWdodE1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLl9lbG1zLmhlaWdodCA9IGhlaWdodEVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ID0gaGVpZ2h0Qm94RWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRNb2RlID0gaGVpZ2h0TW9kZURhdGFMZWdwRWxtXHJcbiAgICAgICAgdGhpcy5fZWxtcy5oZWlnaHRDb25maXJtID0gaGVpZ2h0Q29uZmlybUVsbVxyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0TW9kZU9iamVjdCA9IGhlaWdodE1vZGVPYmplY3RcclxuXHJcbiAgICAgICAgaGVpZ2h0Q29uZmlybUVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGUucG9zaXRpb25FZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCArIE51bWJlcihoZWlnaHRFbG0udmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgU3RyYWlnaHRBcnJvd09iamVjdC5jbG9zZU5vZGVFZGl0KHRoaXMpXHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0TW9kZSA9IHRoaXMuaGVpZ2h0TW9kZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgTnVtYmVyKGhlaWdodEVsbS52YWx1ZSlcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgICAgICBsZXQgdGFnRGF0YSA9IHRoaXMuYXR0cmlidXRlU2VsZWN0XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZUVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1zZWxlY3QtYm94JylbMF1cclxuICAgICAgICBpZiAoYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgICBsZXQgbGVncE9iamVjdCA9IGxlZ3AoYXR0cmlidXRlRWxtLCBcIi5hdHRyaWJ1dGUtc2VsZWN0XCIpXHJcbiAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0ua2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSkge1xyXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSA9IHRhZ0RhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHRhZ0RhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGFnRGF0YVtpXS52YWx1ZSA9PT0gYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0YWdEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNyZWF0ZVNwYXRpYWxJbmZvVGFibGVDb250ZW50KClcclxuXHJcbiAgICAgICAgbGV0IHVuaXREYXRhID0gW3tcclxuICAgICAgICAgIG5hbWU6ICflubPmlrnnsbMnLFxyXG4gICAgICAgICAgdmFsdWU6ICflubPmlrnnsbMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAn5bmz5pa55Y2D57GzJyxcclxuICAgICAgICAgIHZhbHVlOiAn5bmz5pa55Y2D57GzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ+S6qScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+S6qSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICflhazpobcnLFxyXG4gICAgICAgICAgdmFsdWU6ICflhazpobcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IHVuaXREYXRhTGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQtc2VsZWN0LXVuaXQtYm94JylbMF0sIFwiLmlucHV0LXNlbGVjdC11bml0XCIpXHJcbiAgICAgICAgaWYgKHVuaXREYXRhTGVncE9iamVjdCkge1xyXG4gICAgICAgICAgdW5pdERhdGFMZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoKHVuaXREYXRhKVxyXG4gICAgICAgICAgbGV0IHVuaXREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdC11bml0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIHVuaXREYXRhTGVncEVsbS52YWx1ZSA9IHRoaXMub3B0aW9uc1snYXJlYS11bml0J11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB1bml0RGF0YUxlZ3BPYmplY3QubGVncF9zZWFyY2hBY3RpdmUodW5pdERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdW5pdERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVuaXREYXRhW2ldLnZhbHVlID09PSB1bml0RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJlYVVuaXQgPSB1bml0RGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udERhdGEgPSBnZXRGb250TGlzdCgpXHJcbiAgICAgICAgbGV0IGZvbnRPYmplY3QgPSBsZWdwKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2ZvbnQtc2VsZWN0LWJveCdcclxuICAgICAgICAgIClbMF0sXHJcbiAgICAgICAgICAnLmZvbnQtc2VsZWN0J1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmxpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUuY29sb3JcclxuICAgIHRoaXMubGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS53aWR0aFxyXG4gICAgdGhpcy5hcmVhID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuYXJlYVxyXG4gICAgdGhpcy5hcmVhVW5pdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zWydhcmVhLXVuaXQnXVxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVDYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmdbaV0pIHtcclxuICAgICAgICB0aGlzLl9lbG1zLmxuZ1tpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0W2ldKSB7XHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYXRbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9lbG1zLmFsdCAmJiB0aGlzLl9lbG1zLmFsdFtpXSkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuYWx0W2ldLmlubmVySFRNTCA9IE51bWJlcih0aGlzLm9wdGlvbnMuaGVpZ2h0LnRvRml4ZWQoMikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhlaWdodE1vZGUgPSB0aGlzLmhlaWdodE1vZGVcclxuXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzID0gbnVsbFxyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG5cclxuICAgIGxldCBzcHJlYWRTdGF0ZSA9IHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZVxyXG4gICAgdGhpcy5yZW1vdmVBbmltYXRlKClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvb3AgPSB0aGlzLm9wdGlvbnMubG9vcFxyXG4gICAgICB0aGlzLnNwcmVhZFN0YXRlID0gc3ByZWFkU3RhdGVcclxuICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlQW5pbWF0ZSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLnJlbW92ZSgpXHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0gJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGlua19hZGQnKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRMaW5rICYmIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluaygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rKGxpbmspIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn6ZO+5o6lJyxcclxuICAgICAgdXJsOiBsaW5rXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIF9hZGRScigpIHtcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2cl9hZGQnKVswXS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+WFqOaZr+WbvicgLFxyXG4gICAgICAgIHVybDogdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5EaWFsb2cuY2xpY2tBZGRWciAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZFZyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF0dHJpYnV0ZVJyKHZyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgdXJsOiB2clxyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiDpo57liLBcclxuKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLl9lcnJvcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgbGV0IGdyb3VuZFxyXG4gICAgICBzd2l0Y2ggKHRoaXMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgIGdyb3VuZCA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyb3VuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldKVxyXG4gICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LFxyXG4gICAgICAgICAgICBoZWlnaHRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHBvc2l0aW9uQXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnNIKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zaXRpb25zSC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbkFycmF5LnB1c2godGhpcy5wb3NpdGlvbnNIW2ldLngsIHRoaXMucG9zaXRpb25zSFtpXS55LCB0aGlzLnBvc2l0aW9uc0hbaV0ueilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIC8vIHZhciB1ZSA9IFVFLmdldEVkaXRvcignYXBwJyk7XHJcbiAgICByaWNoVGV4dC5vcGVuKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLm5hbWUsIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQpXHJcbiAgICByaWNoVGV4dC5wcmltYXJ5Q2FsbEJhY2sgPSAoY29udGVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50ID0gY29udGVudFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSB8fCAhdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5vcGVyYXRlLnBvc2l0aW9uRWRpdGluZyA9IHN0YXR1c1xyXG5cclxuICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5wcmV2aW91cyA9IHtcclxuICAgICAgICBwb3NpdGlvbnM6IFsuLi50aGlzLnBvc2l0aW9uc11cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+eCueWHu+m8oOagh+W3pumUruehruiupO+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LDAuOSlgKSlcclxuICAgICAgdGhpcy5waWNraW5nID0gZmFsc2VcclxuICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFsuLi50aGlzLnBvc2l0aW9uc11cclxuICAgICAgbGV0IGRpc3Bhcml0eSA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICBhcnJheS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcygoYXJyYXlbMF1bMF0gKyBhcnJheVsxXVswXSkgLyAyLCAoYXJyYXlbMF1bMV0gKyBhcnJheVsxXVsxXSkgLyAyKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNlbnRlci54IC0gcG9zaXRpb25zW2ldLnhcclxuICAgICAgICBkaXNwYXJpdHkucHVzaCh7XHJcbiAgICAgICAgICB4OiBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54LFxyXG4gICAgICAgICAgeTogY2VudGVyLnkgLSBwb3NpdGlvbnNbaV0ueSxcclxuICAgICAgICAgIHo6IGNlbnRlci56IC0gcG9zaXRpb25zW2ldLnosXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3cG9zaXRpb25zID0gW11cclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgIG5ld3Bvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMubGFiZWwucG9zaXRpb24gPSBbcG9zaXRpb244NC5sbmcsIHBvc2l0aW9uODQubGF0LCBwb3NpdGlvbjg0LmFsdF1cclxuICAgICAgICB0aGlzLnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmV2ZW50Lm1vdXNlX2xlZnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzcGFyaXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgcG9zMyA9IHtcclxuICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICAgICAgejogY2FydGVzaWFuLnogLSBkaXNwYXJpdHlbaV0ueixcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5ld3Bvc2l0aW9ucy5wdXNoKHBvczMpXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBpZiAodGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmdbaV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZWxtcy5sbmdbaV0uaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcudG9GaXhlZCg4KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0W2ldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsbXMubGF0W2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0LnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBuZXdwb3NpdGlvbnNcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3Bhcml0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBwb3MzID0ge1xyXG4gICAgICAgICAgICAgICAgeDogY2FydGVzaWFuLnggLSBkaXNwYXJpdHlbaV0ueCxcclxuICAgICAgICAgICAgICAgIHk6IGNhcnRlc2lhbi55IC0gZGlzcGFyaXR5W2ldLnksXHJcbiAgICAgICAgICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdwb3NpdGlvbnMucHVzaChwb3MzKVxyXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvczMsIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmdbaV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VsbXMubG5nW2ldLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsbXMubGF0ICYmIHRoaXMuX2VsbXMubGF0W2ldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbG1zLmxhdFtpXS5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3cG9zaXRpb25zXHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uODQgPSBbXVxyXG4gICAgICAgIGlmIChuZXdwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb244NC5wdXNoKF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KG5ld3Bvc2l0aW9uc1tpXSwgX3RoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb244NC5wdXNoKF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1tpXSwgX3RoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLnJlbmV3UG9zaXRpb25zKHBvc2l0aW9uODQpXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShfdGhpcy5wb3NpdGlvbnNIKVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gWy4uLl90aGlzLnBvc2l0aW9uc0gsIF90aGlzLnBvc2l0aW9uc0hbMF0sIF90aGlzLnBvc2l0aW9uc0hbMV1dXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuZW50aXR5ICYmIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWwuZW50aXR5LmJpbGxib2FyZC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoYHJnYmEoMjU1LDI1NSwyNTUsMSlgKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGlja2luZyA9IHRydWVcclxuICAgICAgaWYgKHRoaXMuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICBpZiAoIXRoaXMucHJldmlvdXMpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICAgICAgcG9zaXRpb25zOiBbLi4udGhpcy5wb3NpdGlvbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gWy4uLnRoaXMucHJldmlvdXMucG9zaXRpb25zXVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpdGlvbjg0ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uODQucHVzaChfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGlzLnBvc2l0aW9uc1tpXSwgX3RoaXMuc2RrLnZpZXdlcikpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMocG9zaXRpb244NClcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoX3RoaXMucG9zaXRpb25zSClcclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5lbnRpdHkucG9seWxpbmUucG9zaXRpb25zID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gWy4uLl90aGlzLnBvc2l0aW9uc0gsIF90aGlzLnBvc2l0aW9uc0hbMF0sIF90aGlzLnBvc2l0aW9uc0hbMV1dXHJcbiAgICAgIH0sIHRydWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zaXRpb25FZGl0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0ZS5wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIHN0YXRpYyBFdmVudEJpbmRpbmcodGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgPT0gJ0lNRycpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnNyYyA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoYXQuX2VsbXNbbS52YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGF0Ll9lbG1zW20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5fZWxtc1ttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjaGFuZ2UnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInICYmIHZhbHVlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlc1ttXSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVtb3ZlTmFtZS5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKHJlbW92ZU5hbWVbbl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0V2ZW50KSB7XHJcbiAgICAgICAgbGV0IHZlbnRUeXBlID0gJ2lucHV0J1xyXG4gICAgICAgIGlmIChlbGVtZW50c1tpXS50YWdOYW1lICE9ICdJTlBVVCcgfHwgZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICB2ZW50VHlwZSA9ICdjaGFuZ2UnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRzW2ldLmFkZEV2ZW50TGlzdGVuZXIodmVudFR5cGUsIChlKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IEV2ZW50Lmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgIEV2ZW50W3RdKGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBub2RlRWRpdCh0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gICAgdGhhdC5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhhdC5yZW1vdmVBbmltYXRlKClcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAgICAgbGV0IG9yaWdpbmFsUG9zaXRpb25cclxuICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2godGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbW92ZUV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgIGlmICh0aGF0Ll9lbG1zLmxuZyAmJiB0aGF0Ll9lbG1zLmxuZ1tzZWxlY3RQb2ludC5pbmRleF0pIHtcclxuICAgICAgICAgICAgdGhhdC5fZWxtcy5sbmdbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxuZy50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhhdC5fZWxtcy5sYXQgJiYgdGhhdC5fZWxtcy5sYXRbc2VsZWN0UG9pbnQuaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoYXQuX2VsbXMubGF0W3NlbGVjdFBvaW50LmluZGV4XS5pbm5lckhUTUwgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQudG9GaXhlZCg4KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24gPyBtb3ZlbWVudC5wb3NpdGlvbi54IDogbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uID8gbW92ZW1lbnQucG9zaXRpb24ueSA6IG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIG1vdmVFdmVudChtb3ZlbWVudCwgY2FydGVzaWFuKVxyXG4gICAgICAgIGxldCBwb3NpdGlvbjg0ID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIGxldCBpbmRleCA9IHNlbGVjdFBvaW50LmluZGV4XHJcbiAgICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQsIHBvc2l0aW9uODQuYWx0KSxcclxuICAgICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMuc3BsaWNlKHNlbGVjdFBvaW50LmluZGV4LCAwLCBlbnRpdHkpXHJcbiAgICAgICAgICBzZWxlY3RQb2ludCA9IG51bGxcclxuXHJcbiAgICAgICAgICB0aGF0LnRpcC5zZXRfdGV4dCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb24gPSBtb3ZlbWVudC5wb3NpdGlvblxyXG4gICAgICAgICAgaWYgKCFwb3NpdGlvbikge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocGljay5pZC5wb3NpdGlvbi5nZXRWYWx1ZSgpLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoYXQubm9kZVBvaW50cy5zcGxpY2UocGljay5pZC5pbmRleCwgMSlcclxuICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZShwaWNrLmlkKVxyXG4gICAgICAgICAgICB0aGF0LnRpcC5zZXRfdGV4dCgn5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5yZW5ld1Bvc2l0aW9ucygpXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJpZ2h0RXZlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgoKSA9PiB7IH0pXHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICBpZiAoIW9yaWdpbmFsUG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gb3JpZ2luYWxQb3NpdGlvblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQuX2VsbXMubG5nICYmIHRoYXQuX2VsbXMubG5nW3NlbGVjdFBvaW50LmluZGV4XSkge1xyXG4gICAgICAgICAgICB0aGF0Ll9lbG1zLmxuZ1tzZWxlY3RQb2ludC5pbmRleF0uaW5uZXJIVE1MID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLnRvRml4ZWQoOClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGF0Ll9lbG1zLmxhdCAmJiB0aGF0Ll9lbG1zLmxhdFtzZWxlY3RQb2ludC5pbmRleF0pIHtcclxuICAgICAgICAgICAgdGhhdC5fZWxtcy5sYXRbc2VsZWN0UG9pbnQuaW5kZXhdLmlubmVySFRNTCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxhdC50b0ZpeGVkKDgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuaGVpZ2h0TW9kZSA9IHRoYXQuaGVpZ2h0TW9kZVxyXG4gICAgICAgIHRoYXQucHJldmlvdXMgPSBudWxsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSB0cnVlXHJcbiAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lLmFyY1R5cGUgPSBDZXNpdW0uQXJjVHlwZS5HRU9ERVNJQ1xyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5Z29uLnBlclBvc2l0aW9uSGVpZ2h0ID0gZmFsc2VcclxuICAgICAgdGhhdC5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBhcnIgPSB0aGF0LmNvbXB1dGVTdHJhaWdodEFycm93KHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShhcnIpXHJcbiAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB0aGF0LmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBhcnIgPSB0aGF0LmNvbXB1dGVTdHJhaWdodEFycm93KHRoYXQub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBbLi4uYXJyXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZmFsc2UpXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX2xlZnQobGVmdEV2ZW50KVxyXG5cclxuICAgICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcblxyXG4gICAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZShtb3ZlRXZlbnQpXHJcblxyXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogKG1vdmVtZW50LnBvc2l0aW9uMS54ICsgbW92ZW1lbnQucG9zaXRpb24yLngpIC8gMixcclxuICAgICAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRFdmVudCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICBsZXQgcG9pbnRzID0gW1tdXVxyXG4gICAgICAgIGxldCBwb3M4NCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LnBvc2l0aW9uc0gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQodGhhdC5wb3NpdGlvbnNIW2ldLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBwb3M4NC5wdXNoKHBvc2l0aW9uKVxyXG4gICAgICAgICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGF0LnBvc2l0aW9uc0hbMF0sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICBwb2ludHNbMF0ucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cylcclxuICAgICAgICBsZXQgY2VudHJvaWQgPSB0dXJmLnBvaW50T25GZWF0dXJlKHBvbHlnb24pXHJcbiAgICAgICAgbGV0IG9iamVjdHNUb0V4Y2x1ZGUgPSBbLi4udGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnZhbHVlc11cclxuICAgICAgICB0aGF0XHJcbiAgICAgICAgICAuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgIGxuZzogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgIGxhdDogY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1cclxuICAgICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICAudGhlbihoZWlnaHQgPT4ge1xyXG4gICAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW1xyXG4gICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdLFxyXG4gICAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGNyZWF0ZU5vZGVQb2ludHMoKVxyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVOb2RlUG9pbnRzKCkge1xyXG4gICAgICAgIGxldCBvYmplY3RzVG9FeGNsdWRlID0gWy4uLnRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy52YWx1ZXNdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0ID0gYXdhaXQgdGhhdC5nZXRDbGFtcFRvSGVpZ2h0KHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0sIG9iamVjdHNUb0V4Y2x1ZGUpXHJcbiAgICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsIGhlaWdodCksXHJcbiAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnB1c2goZW50aXR5KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIC8vICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgIC8vICAgICBpbmRleDogaSxcclxuICAgICAgLy8gICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQpLFxyXG4gICAgICAvLyAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgIC8vICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAvLyAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgIC8vICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgIC8vICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAvLyAgICAgfSxcclxuICAgICAgLy8gICB9KVxyXG4gICAgICAvLyAgIG5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjbG9zZU5vZGVFZGl0KHRoYXQpIHtcclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoYXQuZXZlbnQgJiYgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgIHRoYXQudGlwICYmIHRoYXQudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhhdC50aXAgPSBudWxsXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lm5vZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICB9XHJcbiAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhhdC5waWNraW5nID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24odikge1xyXG4gICAgbGV0IGNhcnRlc2lhbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHYucG9zaXRpb24ubG5nLCB2LnBvc2l0aW9uLmxhdCwgdi5wb3NpdGlvbi5hbHQpXHJcbiAgICBsZXQgcG9zaXRpb25zID0gWy4uLnRoaXMucG9zaXRpb25zXVxyXG4gICAgbGV0IGFycmF5ID0gW11cclxuICAgIGxldCBkaXNwYXJpdHkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgICAgYXJyYXkucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXRdKVxyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0cG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgYXJyYXkucHVzaChbZmlyc3Rwb3NpdGlvbi5sbmcsIGZpcnN0cG9zaXRpb24ubGF0XSlcclxuICAgIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFthcnJheV0pO1xyXG4gICAgdmFyIGNlbnRyb2lkID0gdHVyZi5jZW50cm9pZChwb2x5Z29uKTtcclxuICAgIGxldCBjZW50ZXIgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5jZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlcylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRpc3Bhcml0eS5wdXNoKHtcclxuICAgICAgICB4OiBjZW50ZXIueCAtIHBvc2l0aW9uc1tpXS54LFxyXG4gICAgICAgIHk6IGNlbnRlci55IC0gcG9zaXRpb25zW2ldLnksXHJcbiAgICAgICAgejogY2VudGVyLnogLSBwb3NpdGlvbnNbaV0ueixcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGxldCBuZXdwb3NpdGlvbnMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXNwYXJpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbmV3cG9zaXRpb25zLnB1c2goe1xyXG4gICAgICAgIHg6IGNhcnRlc2lhbi54IC0gZGlzcGFyaXR5W2ldLngsXHJcbiAgICAgICAgeTogY2FydGVzaWFuLnkgLSBkaXNwYXJpdHlbaV0ueSxcclxuICAgICAgICB6OiBjYXJ0ZXNpYW4ueiAtIGRpc3Bhcml0eVtpXS56LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFt2LnBvc2l0aW9uLmxuZywgdi5wb3NpdGlvbi5sYXQsIHYucG9zaXRpb24uYWx0XVxyXG5cclxuICAgIGxldCBwb3NpdGlvbnM4NCA9IFtdXHJcbiAgICBpZiAobmV3cG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwb3NpdGlvbnM4NC5wdXNoKHRoaXMuY2FydGVzaWFuM1Rvd2dzODQobmV3cG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgYXJyID0gdGhpcy5jb21wdXRlU3RyYWlnaHRBcnJvdyhwb3NpdGlvbnM4NClcclxuICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoYXJyKVxyXG4gICAgfSwgZmFsc2UpXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5hcnIsIGFyclswXSwgYXJyWzFdXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbLi4uYXJyXVxyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmNvbXB1dGVTdHJhaWdodEFycm93KHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpXHJcbiAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHBvaW50cyA9IFtbXV1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgIHBvaW50c1swXS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc1swXSwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgcG9pbnRzWzBdLnB1c2goW3Bvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0XSlcclxuICAgIGxldCBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKHBvaW50cyk7XHJcbiAgICAvLyBsZXQgY2VudHJvaWQgPSB0dXJmLmNlbnRyb2lkKHBvbHlnb24pO1xyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKTtcclxuICAgIGxldCBzaXRlSW5mb0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuZG9taWQpXHJcbiAgICBsZXQgc2l0ZUluZm9Qb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSlcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNwcmVhZFRpbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwcmVhZFRpbWVcclxuICB9XHJcblxyXG4gIHNldCBzcHJlYWRUaW1lKHYpIHtcclxuICAgIGxldCBzcHJlYWRUaW1lID0gTnVtYmVyKHYpXHJcbiAgICBpZiAoaXNOYU4oc3ByZWFkVGltZSkpIHtcclxuICAgICAgc3ByZWFkVGltZSA9IDMwMDBcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHNwcmVhZFRpbWUgPCA1MDApIHtcclxuICAgICAgc3ByZWFkVGltZSA9IDUwMFxyXG4gICAgfSBlbHNlIGlmIChzcHJlYWRUaW1lID4gOTk5OTk5OSkge1xyXG4gICAgICBzcHJlYWRUaW1lID0gOTk5OTk5OVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnNwcmVhZFRpbWUgPSBzcHJlYWRUaW1lXHJcbiAgICBpZiAodGhpcy5zcHJlYWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNldFNwcmVhZFByb2dyZXNzQnlUaW1lKClcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuc3ByZWFkVGltZSAmJiB0aGlzLl9lbG1zLnNwcmVhZFRpbWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gc3ByZWFkVGltZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsb29wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sb29wXHJcbiAgfVxyXG4gIHNldCBsb29wKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sb29wID0gdlxyXG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucmVwZWF0KEluZmluaXR5KVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnJlcGVhdCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubG9vcCAmJiB0aGlzLl9lbG1zLmxvb3AuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNwcmVhZFN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zcHJlYWRTdGF0ZVxyXG4gIH1cclxuICBzZXQgc3ByZWFkU3RhdGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwcmVhZFN0YXRlID0gdlxyXG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5saW5lRWRpdCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZSh0aGlzLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlIC8gdGhpcy5Ud2VlbkFuaW1hdGUuX3ZhbHVlc0VuZC5kaXN0YW5jZSAqIHRoaXMuc3ByZWFkVGltZSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5wYXVzZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMuc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnNwcmVhZFN0YXRlICYmIHRoaXMuX2VsbXMuc3ByZWFkU3RhdGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2V0U3ByZWFkUHJvZ3Jlc3NCeVRpbWUodGltZSA9IDApIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG5cclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBUV0VFTi5yZW1vdmUodGhpcy5Ud2VlbkFuaW1hdGUpXHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGxldCB7IHNka1AsIHNka0QgfSA9IGdldFNkaygpXHJcbiAgICBsZXQgdGhhdFBcclxuICAgIGlmIChzZGtEICYmIHNka1ApIHtcclxuICAgICAgaWYgKHRoaXMuc2RrID09PSBzZGtEKSB7XHJcbiAgICAgICAgdGhhdFAgPSBzZGtQLmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIGlmICh0aGF0UCAmJiB0aGF0UC5lbnRpdHkgJiYgdGhhdFAuZW50aXR5LnBvbHlnb24gJiYgdGhhdFAucG9zaXRpb25zSCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkucG9seWdvbi5oaWVyYXJjaHkgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KHRoYXRQLnBvc2l0aW9uc0gpXHJcbiAgICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhhdFAucG9zaXRpb25zSCwgdGhhdFAucG9zaXRpb25zSFswXSwgdGhhdFAucG9zaXRpb25zSFsxXV1cclxuICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gYXJyXHJcbiAgICAvLyB0aGlzLmVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMgPSBsaW5lQXJyXHJcblxyXG4gICAgbGV0IGxpbmVQb3M4NCA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGluZVBvczg0LnB1c2goW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcobGluZVBvczg0KTtcclxuXHJcbiAgICBsZXQgZGlzdGFuY2VBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVQb3M4NC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZnJvbSA9IHR1cmYucG9pbnQobGluZVBvczg0W2ldKTtcclxuICAgICAgbGV0IHRvID0gdHVyZi5wb2ludChsaW5lUG9zODRbaSAtIDFdKTtcclxuICAgICAgbGV0IGQgPSB0dXJmLmRpc3RhbmNlKGZyb20sIHRvLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgIGxldCBvZCA9IGRpc3RhbmNlQXJyYXlbZGlzdGFuY2VBcnJheS5sZW5ndGggLSAxXSB8fCAwXHJcbiAgICAgIGRpc3RhbmNlQXJyYXkucHVzaChvZCArIGQpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpc3RhbmNlID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgbGV0IHRpbWVSYXRpbyA9IHRpbWUgLyB0aGlzLnNwcmVhZFRpbWVcclxuICAgIGxldCBtID0gMFxyXG4gICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBuZXcgVFdFRU4uVHdlZW4oeyBkaXN0YW5jZTogZGlzdGFuY2UgKiB0aW1lUmF0aW8gfSkudG8oeyBkaXN0YW5jZTogZGlzdGFuY2UgfSwgdGhpcy5zcHJlYWRUaW1lIC0gdGltZSkuZWFzaW5nKFRXRUVOLkVhc2luZy5MaW5lYXIuTm9uZSkucmVwZWF0KHRoaXMub3B0aW9ucy5sb29wID8gSW5maW5pdHkgOiAwKS5vblJlcGVhdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTcHJlYWRQcm9ncmVzc0J5VGltZSgpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KS5vblVwZGF0ZShhc3luYyAociwgYSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUuX2R1cmF0aW9uID09IEluZmluaXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbSsrXHJcbiAgICAgIGlmICghdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbmltYXRlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBzZXRTcHJlYWQocilcclxuICAgIH0pLm9uU3RhcnQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc3ByZWFkU3RhdGUgPSB0cnVlXHJcbiAgICAgIHRoaXMuX2VsbXMuc3ByZWFkU3RhdGUgJiYgdGhpcy5fZWxtcy5zcHJlYWRTdGF0ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgfSkub25Db21wbGV0ZSgoZCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZUFuaW1hdGUoKVxyXG4gICAgfSlcclxuICAgIGlmICh0aGlzLnNwcmVhZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnN0YXJ0KClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZXRTcHJlYWQoeyBkaXN0YW5jZTogZGlzdGFuY2UgKiB0aW1lUmF0aW8gfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRTcHJlYWQodikge1xyXG4gICAgICBpZiAoIXRoYXQuc2hvdykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbmRleCA9IDJcclxuICAgICAgZm9yIChsZXQgaSA9IGRpc3RhbmNlQXJyYXkubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAodi5kaXN0YW5jZSA+PSBkaXN0YW5jZUFycmF5W2ldKSB7XHJcbiAgICAgICAgICBpbmRleCA9IGluZGV4ICsgaSArIDFcclxuICAgICAgICAgIGlmIChpbmRleCA+IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xyXG4gICAgICAgIHBvc2l0aW9uc1tpXSA9IHsgLi4udGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXSB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2LmRpc3RhbmNlKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSA9IHtcclxuICAgICAgICAgIGxuZzogcG9zaXRpb25zWzFdLmxuZyxcclxuICAgICAgICAgIGxhdDogcG9zaXRpb25zWzFdLmxhdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc2xpY2VkID0gYXdhaXQgdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lLCAwLCB2LmRpc3RhbmNlLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgICAgbGV0IGNvb3JkaW5hdGVzID0gWy4uLnNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1dXHJcbiAgICAgICAgcG9zaXRpb25zWzFdLmxuZyA9IGNvb3JkaW5hdGVzWzBdXHJcbiAgICAgICAgcG9zaXRpb25zWzFdLmxhdCA9IGNvb3JkaW5hdGVzWzFdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdwb3NpdGlvbnMnLCBwb3NpdGlvbnMpXHJcbiAgICAgIHRoYXQucmVuZXdQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5LnBvbHlnb24uaGllcmFyY2h5ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGF0LnBvc2l0aW9uc0gpXHJcbiAgICB9LCBmYWxzZSlcclxuICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBbLi4udGhhdC5wb3NpdGlvbnNILCB0aGF0LnBvc2l0aW9uc0hbMF0sIHRoYXQucG9zaXRpb25zSFsxXV1cclxuICAgIH0sIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgLy8g56e76Zmk5Yqo55S7XHJcbiAgcmVtb3ZlQW5pbWF0ZSgpIHtcclxuICAgIHRoaXMuc3ByZWFkU3RhdGUgPSBmYWxzZVxyXG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlKSB7XHJcbiAgICAgIFRXRUVOLnJlbW92ZSh0aGlzLlR3ZWVuQW5pbWF0ZSlcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBudWxsXHJcbiAgICAgIHRoaXMucmVuZXdQb3NpdGlvbnMoKVxyXG4gICAgICB0aGlzLmVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeSA9IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeSh0aGlzLnBvc2l0aW9uc0gpXHJcbiAgICAgIHRoaXMuZW50aXR5LnBvbHlsaW5lLnBvc2l0aW9ucyA9IFsuLi50aGlzLnBvc2l0aW9uc0gsIHRoaXMucG9zaXRpb25zSFswXSwgdGhpcy5wb3NpdGlvbnNIWzFdXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdQb3NpdGlvbnMocG9zaXRpb244NCkge1xyXG4gICAgaWYgKHRoaXMuX2Vycm9yIHx8ICF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgZ3JvdW5kID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGlmIChwb3NpdGlvbjg0KSB7XHJcbiAgICAgIHBvc2l0aW9ucyA9IHBvc2l0aW9uODRcclxuICAgIH1cclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgfVxyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgbGV0IHBvc2l0aW9uc0EgPSB0aGlzLmNvbXB1dGVTdHJhaWdodEFycm93KHBvc2l0aW9ucylcclxuICAgIGlmIChwb3NpdGlvbnNBLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHBvaW50cyA9IFtbXV1cclxuICAgIGxldCBwb3M4NCA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uc0EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNBW2ldLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgIHBvczg0LnB1c2gocG9zaXRpb24pXHJcbiAgICAgIHBvaW50c1swXS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uc0FbMF0sIHRoaXMuc2RrLnZpZXdlcilcclxuICAgIHBvaW50c1swXS5wdXNoKFtwb3NpdGlvbi5sbmcsIHBvc2l0aW9uLmxhdF0pXHJcbiAgICBsZXQgaGVpZ2h0ID0gMFxyXG4gICAgbGV0IHBvbHlnb24gPSB0dXJmLnBvbHlnb24ocG9pbnRzKVxyXG4gICAgbGV0IGNlbnRyb2lkID0gdHVyZi5wb2ludE9uRmVhdHVyZShwb2x5Z29uKVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaGVpZ2h0TW9kZSkge1xyXG4gICAgICBjYXNlICcwJzpcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUuZ2xvYmUuZ2V0SGVpZ2h0KENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoY2VudHJvaWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdKSkgfHwgMFxyXG4gICAgICAgIGdyb3VuZCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnMic6XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBncm91bmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgaWYgKCFncm91bmQgJiYgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzWzBdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChcclxuICAgICAgICAgIHBvaW50c1swXVtpXVswXSxcclxuICAgICAgICAgIHBvaW50c1swXVtpXVsxXSxcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ICsgaGVpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zaXRpb25zSCA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkyKVxyXG5cclxuICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtcclxuICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1swXSxcclxuICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICB0aGlzLmhlaWdodCArIGhlaWdodFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3NpdGlvbnNIID0gcG9zaXRpb25zQVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNkay52aWV3ZXIpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb2JqZWN0c1RvRXhjbHVkZSA9IFsuLi50aGlzLnNkay52aWV3ZXIuZW50aXRpZXMudmFsdWVzXVxyXG4gICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICBsbmc6IGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgbGF0OiBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXVxyXG4gICAgICAgIH0sIG9iamVjdHNUb0V4Y2x1ZGUpLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbXHJcbiAgICAgICAgICAgIGNlbnRyb2lkLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICBjZW50cm9pZC5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sIDEwMClcclxuICAgIH1cclxuXHJcbiAgICAvLyDorqHnrpfmipXlvbHpnaLnp69cclxuICAgIGlmICghdGhpcy5zcHJlYWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXJlYUJ5TWV0ZXIgPSB0aGlzLmNvbXB1dGVBcmVhKHBvczg0KVxyXG4gICAgICB0aGlzLmFyZWFVbml0ID0gdGhpcy5hcmVhVW5pdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyb21EZWdyZWVzQXJyYXlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0cmFpZ2h0QXJyb3dPYmplY3RcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUF1QkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTJJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekhBO0FBQUE7QUFBQTtBQTBIQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBM0NBO0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBemVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMmVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFVQTtBQUFBO0FBUEE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBcEdBO0FBQUE7QUFBQTtBQUFBO0FBc0dBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFBQTtBQXdMQTtBQUNBO0FBQUE7QUFuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFnVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE5dERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNDZCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJFQTtBQUFBO0FBQUE7QUFxRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVGQTtBQUFBO0FBS0E7QUF3RkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFxS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBO0FBbEJBO0FBQUE7QUFBQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBa0NBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUEwWUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/StraightArrowObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/TextBox/index.js": /*!***************************************!*\ !*** ./src/Obj/Base/TextBox/index.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * 文本框\r\n */\n\n\n\nvar TextBox = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 文本框\r\n * @param options {object} 属性\r\n * @param options.id=id\r\n * @param options.position=[]位置\r\n * @param options.text=文本框内容\r\n * @param options.show=true {boolean}是否显示\r\n * @param callback=方法回调\r\n * @param Dialog {object} 弹框对象\r\n * @param Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function TextBox(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, TextBox);\n // this.sdk = { ...sdk }\n // this.options = { ...options }\n _this = _callSuper(this, TextBox, [sdk, options]);\n _this.options.position = options.position || [];\n _this.options.text = options.text || '';\n _this.options.show = options.show || options.show === false ? options.show : true;\n _this.clickTextDom = undefined;\n _this.handler = undefined;\n _this.textDom = undefined;\n _this.create(_this);\n _this.sdk.addIncetance(_this.options.id, _this);\n _this.callback = callback;\n\n // syncData(this.sdk, this.options.id)\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(TextBox, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(TextBox, [{\n key: \"type\",\n get: function get() {\n return 'TextBox';\n }\n }, {\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(that) {\n var viewer, dom, textarea, posi;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n viewer = that.sdk.viewer; // 创建div元素\n dom = document.createElement('span');\n dom.id = that.options.id;\n dom.className = 'popup-textarea';\n dom.style.zIndex = 1;\n // 创建textarea元素\n textarea = document.createElement('textarea');\n textarea.className = 'textarea';\n textarea.value = that.options.text;\n // 设置textarea的属性,例如行数和列数\n textarea.rows = 6;\n textarea.style.resize = 'none';\n // 将textarea添加到div中\n dom.appendChild(textarea);\n !that.options.show && (dom.style.display = 'none');\n // 将div添加到body中\n // document.body.appendChild(dom);\n\n // 配置CSS样式和内容结构\n viewer.cesiumWidget.container.appendChild(dom);\n posi = Cesium.Cartesian3.fromDegrees(that.options.position.lng, that.options.position.lat, that.options.position.alt);\n that.handler = function () {\n var position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, posi);\n if (position) {\n var width = dom.clientWidth * 1;\n var height = dom.clientHeight * 1;\n dom.style.left = \"\".concat(position.x - width / 2, \"px\");\n dom.style.top = \"\".concat(position.y - height, \"px\");\n }\n };\n viewer.scene.postRender.addEventListener(that.handler);\n that.textDom = dom;\n case 17:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function create(_x) {\n return _create.apply(this, arguments);\n }\n return create;\n }()\n }, {\n key: \"isClick\",\n value: function () {\n var _isClick = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(posi, id) {\n var params;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n params = [{\n position: posi\n }, id, null];\n this.clickCallBack({\n position: posi\n }, id, null);\n case 2:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function isClick(_x2, _x3) {\n return _isClick.apply(this, arguments);\n }\n return isClick;\n }()\n }, {\n key: \"setHandeler\",\n value: function () {\n var _setHandeler = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3(data) {\n var that, cartesian, ray, cartographic, longitude, latitude, height, posi;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n that = this;\n cartesian = this.sdk.viewer.scene.pickPosition(new Cesium.Cartesian2(data.x, data.y)); //屏幕坐标转为笛卡尔空间坐标\n // if (!cartesian) return;\n // let c = Cesium.Cartographic.fromCartesian(position);\n if (!cartesian) {\n ray = this.sdk.viewer.camera.getPickRay(new Cesium.Cartesian2(data.x, data.y));\n cartesian = this.sdk.viewer.scene.globe.pick(ray, this.sdk.viewer.scene);\n }\n if (!Cesium.defined(cartesian)) {\n _context3.next = 15;\n break;\n }\n that.sdk.viewer.scene.postRender.removeEventListener(that.handler);\n cartographic = Cesium.Cartographic.fromCartesian(cartesian);\n longitude = Cesium.Math.toDegrees(cartographic.longitude);\n latitude = Cesium.Math.toDegrees(cartographic.latitude);\n _context3.next = 10;\n return that.getClampToHeight({\n lng: longitude,\n lat: latitude\n });\n case 10:\n height = _context3.sent;\n that.position = {\n lng: longitude,\n lat: latitude,\n alt: cartographic.height\n // alt: height\n };\n posi = Cesium.Cartesian3.fromDegrees(longitude, latitude, cartographic.height);\n that.handler = function () {\n var position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(that.sdk.viewer.scene, posi);\n if (position) {\n var width = that.textDom.clientWidth * 1;\n var _height = that.textDom.clientHeight * 1;\n that.textDom.style.left = \"\".concat(position.x - width / 2, \"px\");\n that.textDom.style.top = \"\".concat(position.y - _height, \"px\");\n }\n };\n that.sdk.viewer.scene.postRender.addEventListener(that.handler);\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function setHandeler(_x4) {\n return _setHandeler.apply(this, arguments);\n }\n return setHandeler;\n }()\n }, {\n key: \"getwords\",\n value: function () {\n var _getwords = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4(words) {\n var _getSdk, sdkP;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n this.options.text = words;\n this.callback(this.options);\n _getSdk = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__[\"getSdk\"])(), sdkP = _getSdk.sdkP;\n if (this.sdk === sdkP && sdkP) {\n //三维\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__[\"syncData\"])(this.sdk, this.options.id);\n } else if (sdkP) {\n //二维\n sdkP.entityMap.get(this.options.id).text = words;\n sdkP.entityMap.get(this.options.id).twoToThree(this.options.position);\n } else if (!sdkP) {\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__[\"syncData\"])(this.sdk, this.options.id);\n }\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function getwords(_x5) {\n return _getwords.apply(this, arguments);\n }\n return getwords;\n }()\n }, {\n key: \"twoToThree\",\n value: function () {\n var _twoToThree = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5(position) {\n var that, posi;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n that = this;\n that.sdk.viewer.scene.postRender.removeEventListener(that.handler);\n posi = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt);\n that.handler = function () {\n var position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(that.sdk.viewer.scene, posi);\n if (position) {\n var width = that.textDom.clientWidth * 1;\n var height = that.textDom.clientHeight * 1;\n that.textDom.style.left = \"\".concat(position.x - width / 2, \"px\");\n that.textDom.style.top = \"\".concat(position.y - height, \"px\");\n }\n };\n that.sdk.viewer.scene.postRender.addEventListener(that.handler);\n case 5:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function twoToThree(_x6) {\n return _twoToThree.apply(this, arguments);\n }\n return twoToThree;\n }()\n }, {\n key: \"returnFun\",\n value: function () {\n var _returnFun = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee6() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n return _context6.abrupt(\"return\", this.handler);\n case 1:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, this);\n }));\n function returnFun() {\n return _returnFun.apply(this, arguments);\n }\n return returnFun;\n }()\n }, {\n key: \"text\",\n get: function get() {\n return this.options.text;\n },\n set: function set(val) {\n this.options.text = val;\n this.textDom.querySelector('textarea').value = val;\n this.callback(this.options);\n }\n }, {\n key: \"onClick\",\n get: function get() {\n return this.clickCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n this.clickCallBack = val;\n }\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.options.show = v;\n this.textDom && (this.textDom.style.display = v ? 'block' : 'none');\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_9__[\"syncData\"])(this.sdk, this.options.id);\n }\n }, {\n key: \"position\",\n get: function get() {\n return this.options.position;\n },\n set: function set(v) {\n this.options.position = v;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee7() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n positionArray,\n a,\n BoundingSphere,\n _args7 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n options = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_10__[\"closeViewFollow\"])(this.sdk);\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.position) {\n position = _objectSpread({}, this.options.position[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n // if (!position.hasOwnProperty('alt')) {\n // position.alt = await this.getClampToHeight(position)\n // }\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n } else {\n positionArray = [];\n a = Cesium.Cartesian3.fromDegrees(this.position.lng, this.position.lat, this.position.alt);\n positionArray.push(a.x, a.y, a.z);\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-20.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n case 5:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee8() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n if (this.handler) {\n this.sdk.viewer.scene.postRender.removeEventListener(this.handler);\n this.handler = undefined;\n }\n if (this.textDom && this.textDom.parentNode) {\n this.sdk.viewer.cesiumWidget.container.removeChild(this.textDom);\n }\n _context8.next = 4;\n return this.sdk.removeIncetance(this.options.id);\n case 4:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TextBox);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVGV4dEJveC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9UZXh0Qm94L2luZGV4LmpzPzk4ZjYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOaWh+acrOahhlxyXG4gKi9cclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHN5bmNEYXRhLCBnZXRTZGsgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbmNsYXNzIFRleHRCb3ggZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOaWh+acrOahhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkPWlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb249W13kvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0PeaWh+acrOahhuWGheWuuVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn3mmK/lkKbmmL7npLpcclxuICAgKiBAcGFyYW0gY2FsbGJhY2s95pa55rOV5Zue6LCDXHJcbiAgICogQHBhcmFtIERpYWxvZyB7b2JqZWN0fSDlvLnmoYblr7nosaFcclxuICAgKiBAcGFyYW0gRGlhbG9nLmNvbmZpcm1DYWxsQmFjayB7ZnVuY3Rpb259IOW8ueahhuehruiupOaXtueahOWbnuiwg1xyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIGNhbGxiYWNrID0gbnVsbCkge1xyXG4gICAgLy8gdGhpcy5zZGsgPSB7IC4uLnNkayB9XHJcbiAgICAvLyB0aGlzLm9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfVxyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKVxyXG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLnRleHQgPSBvcHRpb25zLnRleHQgfHwgJydcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMuY2xpY2tUZXh0RG9tID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLmhhbmRsZXIgPSB1bmRlZmluZWRcclxuICAgIHRoaXMudGV4dERvbSA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5jcmVhdGUodGhpcylcclxuICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXHJcblxyXG4gICAgLy8gc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnVGV4dEJveCdcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICBsZXQgdmlld2VyID0gdGhhdC5zZGsudmlld2VyXHJcbiAgICAvLyDliJvlu7pkaXblhYPntKBcclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICBkb20uaWQgPSB0aGF0Lm9wdGlvbnMuaWRcclxuICAgIGRvbS5jbGFzc05hbWUgPSAncG9wdXAtdGV4dGFyZWEnXHJcbiAgICBkb20uc3R5bGUuekluZGV4ID0gMVxyXG4gICAgLy8g5Yib5bu6dGV4dGFyZWHlhYPntKBcclxuICAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICB0ZXh0YXJlYS5jbGFzc05hbWUgPSAndGV4dGFyZWEnXHJcbiAgICB0ZXh0YXJlYS52YWx1ZSA9IHRoYXQub3B0aW9ucy50ZXh0O1xyXG4gICAgLy8g6K6+572udGV4dGFyZWHnmoTlsZ7mgKfvvIzkvovlpoLooYzmlbDlkozliJfmlbBcclxuICAgIHRleHRhcmVhLnJvd3MgPSA2O1xyXG4gICAgdGV4dGFyZWEuc3R5bGUucmVzaXplID0gJ25vbmUnXHJcbiAgICAvLyDlsIZ0ZXh0YXJlYea3u+WKoOWIsGRpduS4rVxyXG4gICAgZG9tLmFwcGVuZENoaWxkKHRleHRhcmVhKTtcclxuICAgICghdGhhdC5vcHRpb25zLnNob3cpICYmIChkb20uc3R5bGUuZGlzcGxheSA9ICdub25lJylcclxuICAgIC8vIOWwhmRpdua3u+WKoOWIsGJvZHnkuK1cclxuICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tKTtcclxuXHJcbiAgICAvLyDphY3nva5DU1PmoLflvI/lkozlhoXlrrnnu5PmnoRcclxuICAgIHZpZXdlci5jZXNpdW1XaWRnZXQuY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbSk7XHJcbiAgICBsZXQgcG9zaSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbi5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbi5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbi5hbHQpXHJcbiAgICB0aGF0LmhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gQ2VzaXVtLlNjZW5lVHJhbnNmb3Jtcy53Z3M4NFRvV2luZG93Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgdmlld2VyLnNjZW5lLCBwb3NpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChwb3NpdGlvbikge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IGRvbS5jbGllbnRXaWR0aCAqIDFcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gZG9tLmNsaWVudEhlaWdodCAqIDFcclxuICAgICAgICBkb20uc3R5bGUubGVmdCA9IGAke3Bvc2l0aW9uLnggLSB3aWR0aCAvIDJ9cHhgO1xyXG4gICAgICAgIGRvbS5zdHlsZS50b3AgPSBgJHtwb3NpdGlvbi55IC0gaGVpZ2h0fXB4YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmlld2VyLnNjZW5lLnBvc3RSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGF0LmhhbmRsZXIpO1xyXG4gICAgdGhhdC50ZXh0RG9tID0gZG9tO1xyXG5cclxuICB9XHJcbiAgYXN5bmMgaXNDbGljayhwb3NpLCBpZCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpXHJcbiAgICAgIH0sXHJcbiAgICAgIGlkLFxyXG4gICAgICBudWxsXHJcbiAgICBdXHJcblxyXG4gICAgdGhpcy5jbGlja0NhbGxCYWNrKHsgcG9zaXRpb246IHBvc2kgfSwgaWQsIG51bGwpXHJcbiAgfVxyXG4gIGFzeW5jIHNldEhhbmRlbGVyKGRhdGEpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG5cclxuICAgIGxldCBjYXJ0ZXNpYW4gPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGlja1Bvc2l0aW9uKG5ldyBDZXNpdW0uQ2FydGVzaWFuMihkYXRhLngsIGRhdGEueSkpOyAvL+Wxj+W5leWdkOagh+i9rOS4uuesm+WNoeWwlOepuumXtOWdkOagh1xyXG4gICAgLy8gaWYgKCFjYXJ0ZXNpYW4pIHJldHVybjtcclxuXHJcbiAgICAvLyBsZXQgYyA9IENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwb3NpdGlvbik7XHJcbiAgICBpZiAoIWNhcnRlc2lhbikge1xyXG4gICAgICBjb25zdCByYXkgPSB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmdldFBpY2tSYXkobmV3IENlc2l1bS5DYXJ0ZXNpYW4yKGRhdGEueCwgZGF0YS55KSk7XHJcbiAgICAgIGNhcnRlc2lhbiA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5nbG9iZS5waWNrKHJheSwgdGhpcy5zZGsudmlld2VyLnNjZW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ2VzaXVtLmRlZmluZWQoY2FydGVzaWFuKSkge1xyXG4gICAgICB0aGF0LnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5yZW1vdmVFdmVudExpc3RlbmVyKHRoYXQuaGFuZGxlcik7XHJcblxyXG4gICAgICB2YXIgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tQ2FydGVzaWFuKGNhcnRlc2lhbik7XHJcbiAgICAgIHZhciBsb25naXR1ZGUgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FydG9ncmFwaGljLmxvbmdpdHVkZSk7XHJcbiAgICAgIHZhciBsYXRpdHVkZSA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYXJ0b2dyYXBoaWMubGF0aXR1ZGUpO1xyXG5cclxuICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoYXQuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogbG9uZ2l0dWRlLCBsYXQ6IGxhdGl0dWRlIH0pXHJcbiAgICAgIHRoYXQucG9zaXRpb24gPSB7XHJcbiAgICAgICAgbG5nOiBsb25naXR1ZGUsXHJcbiAgICAgICAgbGF0OiBsYXRpdHVkZSxcclxuICAgICAgICBhbHQ6IGNhcnRvZ3JhcGhpYy5oZWlnaHRcclxuICAgICAgICAvLyBhbHQ6IGhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG9uZ2l0dWRlLCBsYXRpdHVkZSwgY2FydG9ncmFwaGljLmhlaWdodClcclxuXHJcbiAgICAgIHRoYXQuaGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IENlc2l1bS5TY2VuZVRyYW5zZm9ybXMud2dzODRUb1dpbmRvd0Nvb3JkaW5hdGVzKFxyXG4gICAgICAgICAgdGhhdC5zZGsudmlld2VyLnNjZW5lLCBwb3NpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocG9zaXRpb24pIHtcclxuICAgICAgICAgIGxldCB3aWR0aCA9IHRoYXQudGV4dERvbS5jbGllbnRXaWR0aCAqIDFcclxuICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGF0LnRleHREb20uY2xpZW50SGVpZ2h0ICogMVxyXG4gICAgICAgICAgdGhhdC50ZXh0RG9tLnN0eWxlLmxlZnQgPSBgJHtwb3NpdGlvbi54IC0gd2lkdGggLyAyfXB4YDtcclxuICAgICAgICAgIHRoYXQudGV4dERvbS5zdHlsZS50b3AgPSBgJHtwb3NpdGlvbi55IC0gaGVpZ2h0fXB4YDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhhdC5zZGsudmlld2VyLnNjZW5lLnBvc3RSZW5kZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGF0LmhhbmRsZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBnZXR3b3Jkcyh3b3Jkcykge1xyXG4gICAgdGhpcy5vcHRpb25zLnRleHQgPSB3b3Jkc1xyXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm9wdGlvbnMpXHJcbiAgICBsZXQgeyBzZGtQIH0gPSBnZXRTZGsoKVxyXG4gICAgaWYgKHRoaXMuc2RrID09PSBzZGtQICYmIHNka1ApIHsvL+S4iee7tFxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2RrUCkgey8v5LqM57u0XHJcbiAgICAgIHNka1AuZW50aXR5TWFwLmdldCh0aGlzLm9wdGlvbnMuaWQpLnRleHQgPSB3b3Jkc1xyXG4gICAgICBzZGtQLmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKS50d29Ub1RocmVlKHRoaXMub3B0aW9ucy5wb3NpdGlvbilcclxuICAgIH0gZWxzZSBpZiAoIXNka1ApIHtcclxuICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgdHdvVG9UaHJlZShwb3NpdGlvbikge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICB0aGF0LnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5yZW1vdmVFdmVudExpc3RlbmVyKHRoYXQuaGFuZGxlcik7XHJcbiAgICBsZXQgcG9zaSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uLmxuZywgcG9zaXRpb24ubGF0LCBwb3NpdGlvbi5hbHQpXHJcblxyXG4gICAgdGhhdC5oYW5kbGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IENlc2l1bS5TY2VuZVRyYW5zZm9ybXMud2dzODRUb1dpbmRvd0Nvb3JkaW5hdGVzKFxyXG4gICAgICAgIHRoYXQuc2RrLnZpZXdlci5zY2VuZSwgcG9zaVxyXG4gICAgICApO1xyXG4gICAgICBpZiAocG9zaXRpb24pIHtcclxuICAgICAgICBsZXQgd2lkdGggPSB0aGF0LnRleHREb20uY2xpZW50V2lkdGggKiAxXHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoYXQudGV4dERvbS5jbGllbnRIZWlnaHQgKiAxXHJcbiAgICAgICAgdGhhdC50ZXh0RG9tLnN0eWxlLmxlZnQgPSBgJHtwb3NpdGlvbi54IC0gd2lkdGggLyAyfXB4YDtcclxuICAgICAgICB0aGF0LnRleHREb20uc3R5bGUudG9wID0gYCR7cG9zaXRpb24ueSAtIGhlaWdodH1weGA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoYXQuc2RrLnZpZXdlci5zY2VuZS5wb3N0UmVuZGVyLmFkZEV2ZW50TGlzdGVuZXIodGhhdC5oYW5kbGVyKTtcclxuICB9XHJcbiAgYXN5bmMgcmV0dXJuRnVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlclxyXG4gIH1cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dFxyXG4gIH1cclxuICBzZXQgdGV4dCh2YWwpIHtcclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gdmFsXHJcbiAgICB0aGlzLnRleHREb20ucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKS52YWx1ZSA9IHZhbFxyXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIGdldCBvbkNsaWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpY2tDYWxsQmFja1xyXG4gIH1cclxuICBzZXQgb25DbGljayh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCd2YWw6JywgdmFsLCAn5LiN5piv5LiA5LiqZnVuY3Rpb24nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbGlja0NhbGxCYWNrID0gdmFsXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdlxyXG4gICAgdGhpcy50ZXh0RG9tICYmICh0aGlzLnRleHREb20uc3R5bGUuZGlzcGxheSA9IHYgPyAnYmxvY2snIDogJ25vbmUnKTtcclxuICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgfVxyXG4gIGdldCBwb3NpdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb25cclxuICB9XHJcbiAgc2V0IHBvc2l0aW9uKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IHZcclxuICB9XHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvblswXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsbmcnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubG5nID0gdGhpcy5vcHRpb25zLmxuZ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdsYXQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24ubGF0ID0gdGhpcy5vcHRpb25zLmxhdFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdhbHQnKSkge1xyXG4gICAgICAgICAgcG9zaXRpb24uYWx0ID0gdGhpcy5vcHRpb25zLmFsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInpq5jluqblgLzvvIzliJnojrflj5bntKfotLTpq5jluqborqHnrpdcclxuICAgICAgLy8gaWYgKCFwb3NpdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgLy8gICBwb3NpdGlvbi5hbHQgPSBhd2FpdCB0aGlzLmdldENsYW1wVG9IZWlnaHQocG9zaXRpb24pXHJcbiAgICAgIC8vIH1cclxuICAgICAgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmcgKyBwb3NpdGlvbi5sbmdcclxuICAgICAgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQgKyBwb3NpdGlvbi5sYXRcclxuICAgICAgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQgKyBwb3NpdGlvbi5hbHRcclxuICAgICAgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHBvc2l0aW9uQXJyYXkgPSBbXVxyXG4gICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgIHRoaXMucG9zaXRpb24ubG5nLFxyXG4gICAgICAgIHRoaXMucG9zaXRpb24ubGF0LFxyXG4gICAgICAgIHRoaXMucG9zaXRpb24uYWx0XHJcbiAgICAgIClcclxuICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcblxyXG4gICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9uQXJyYXkpXHJcbiAgICAgIHRoaXMudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKEJvdW5kaW5nU3BoZXJlLCB7XHJcbiAgICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTIwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFuZGxlcikge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuaGFuZGxlcik7XHJcbiAgICAgIHRoaXMuaGFuZGxlciA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGV4dERvbSAmJiB0aGlzLnRleHREb20ucGFyZW50Tm9kZSkge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2VzaXVtV2lkZ2V0LmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnRleHREb20pO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dEJveFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFyQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXpDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMENBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFqQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXpFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TextBox/index.js\n"); /***/ }), /***/ "./src/Obj/Base/TextObject/GroundText/_element.js": /*!********************************************************!*\ !*** ./src/Obj/Base/TextObject/GroundText/_element.js ***! \********************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
    \\n
    \\n
    \\n \\u540D\\u79F0\\n \\n
    \\n
    \\n \\u989C\\u8272\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u7ECF\\u5EA6\\n \\n
    \\n
    \\n \\u7EAC\\u5EA6\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u65CB\\u8F6C\\u89D2\\u5EA6\\n \\n
    \\n \\n \\xB0\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u8C03\\u6574\\u5927\\u5C0F\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u6EDA\\u52A8\\u901F\\u5EA6\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9Hcm91bmRUZXh0L19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1RleHRPYmplY3QvR3JvdW5kVGV4dC9fZWxlbWVudC5qcz80NWRiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBAbW9kZWw9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nu4/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi0xODBcIiBtYXg9XCIxODBcIiBAbW9kZWw9XCJsbmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nuqzluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05MFwiIG1heD1cIjkwXCIgQG1vZGVsPVwibGF0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5peL6L2s6KeS5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1heD1cIjM2MFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImFuZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7ZmxleDogMCAwIDEwMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjM2MFwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwiYW5nbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj7CsDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuiwg+aVtOWkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIxMDAwMDBcIiBtaW49XCIwXCIgc3RlcD1cIjAuMDFcIiBAbW9kZWw9XCJzY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlclwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O2ZsZXg6IDAgMCAxMDBweDttYXJnaW4tbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCIxMDAwMDBcIiBzdGVwPVwiMC4wMVwiIEBtb2RlbD1cInNjYWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mu5rliqjpgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWF4PVwiMTAwXCIgbWluPVwiMFwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwic3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXJcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtmbGV4OiAwIDAgMTAwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiMTAwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBK0RBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/TextObject/GroundText/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/TextObject/GroundText/index.js": /*!*****************************************************!*\ !*** ./src/Obj/Base/TextObject/GroundText/index.js ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/TextObject/GroundText/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\nvar GroundText = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 贴地文字\r\n * @param options {object} 属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显示/隐藏\r\n * @param options.text {string} 文字\r\n * @param options.angle=0 {number} 旋转角度\r\n * @param options.scale=1 {number} 缩放比例\r\n * @param options.speed=1 {number} 文字滚动速度\r\n * @param {object} options.position 位置\r\n * @param {number} options.position.lng 经度\r\n * @param {number} options.position.lat 纬度\r\n * @param {object} options.positions 坐标集[{lon,lat}]仅在未定义 position 时有效\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function GroundText(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, GroundText);\n _this2 = _callSuper(this, GroundText, [sdk, options]);\n _this2.options.text = options.text || '未命名对象';\n var textArray = _this2.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n }\n _this2.options.text = textArray.join('\\n');\n _this2.options.name = _this2.options.text;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.angle = options.angle || 0;\n _this2.options.scale = options.scale || options.scale === 0 ? options.scale : 1;\n _this2.options.fontSize = options.fontSize || 20;\n _this2.options.duration = options.duration || options.duration === 0 ? options.duration : 50000;\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 1;\n _this2.options.color = options.color || '#FFC107';\n _this2.options.position = options.position;\n if (!_this2.options.position && _this2.options.positions) {\n // 计算两点与x轴正方向的夹角(弧度)\n var calculateAngle = function calculateAngle(pointA, pointB) {\n var dx = pointB[0] - pointA[0];\n var dy = pointB[1] - pointA[1];\n return Math.atan2(dy, dx);\n };\n _this2.options.position = {\n lng: (_this2.options.positions[0].lng + _this2.options.positions[1].lng) / 2,\n lat: (_this2.options.positions[0].lat + _this2.options.positions[1].lat) / 2\n };\n var point1 = turf.point([_this2.options.positions[0].lng, _this2.options.positions[0].lat]);\n var point2 = turf.point([_this2.options.positions[1].lng, _this2.options.positions[1].lat]);\n var _options = {\n units: 'miles'\n };\n var distance1 = turf.rhumbDistance(point1, point2, _options);\n var angleRadians = calculateAngle([_this2.options.positions[0].lng, _this2.options.positions[0].lat], [_this2.options.positions[1].lng, _this2.options.positions[1].lat]);\n _this2.options.angle = (360 + Cesium.Math.toDegrees(angleRadians)) % 360;\n var gap = Math.abs(Math.cos(Math.PI / 180 * _this2.options.position.lat)) * 0.0001;\n var canvas = _this2.getcanvas();\n var ratio = canvas.height / canvas.width;\n var lng1 = _this2.options.position.lng - 0.0001 / ratio;\n var lat1 = _this2.options.position.lat - gap;\n var lng2 = _this2.options.position.lng + 0.0001 / ratio;\n var lat2 = _this2.options.position.lat + gap;\n var lng = (lng1 + lng2) / 2;\n var lat = (lat1 + lat2) / 2;\n var from = turf.point([lng1, lat]);\n var to = turf.point([lng2, lat]);\n var distance2 = turf.rhumbDistance(from, to, _options);\n var latRadians = Cesium.Math.toRadians(_this2.options.position.lat);\n distance2 = distance2 * (1 + Math.abs(Math.sin(angleRadians) * Math.tan(latRadians) * Math.sin(latRadians) * Math.sin(latRadians)));\n _this2.options.scale = distance1 / distance2;\n }\n _this2.entity;\n _this2._positionEditing = false;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n _this2._elms = {};\n _this2.previous = {\n position: _objectSpread({}, _this2.options.position)\n };\n _this2.event = new _Event_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this2.sdk);\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.create();\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(GroundText, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(GroundText, [{\n key: \"lng\",\n get: function get() {\n return this.options.position.lng;\n },\n set: function set(v) {\n this.options.position.lng = v;\n this._elms.lng && this._elms.lng.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"lat\",\n get: function get() {\n return this.options.position.lat;\n },\n set: function set(v) {\n this.options.position.lat = v;\n this._elms.lat && this._elms.lat.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"text\",\n get: function get() {\n return this.options.text;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.text = v;\n var textArray = this.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n var _error = '行超过80个字符,请按回车(Enter)后,继续输入';\n window.ELEMENT && window.ELEMENT.Message({\n message: _error,\n type: 'warning',\n duration: 1000\n });\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n var _error2 = '超过最大输入字符';\n window.ELEMENT && window.ELEMENT.Message({\n message: _error2,\n type: 'warning',\n duration: 1000\n });\n }\n this.options.text = textArray.join('\\n');\n if (this.entity) {\n var canvas = this.getcanvas();\n var ratio = canvas.height / canvas.width;\n this.entity.rectangle.material = new Cesium.CustomMaterialSource({\n image: canvas.toDataURL('image/png'),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1.0, 1.0),\n duration: this.options.duration / this.options.speed,\n fltr: false,\n is2D: this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE2D ? true : false\n });\n this.entity.rectangle.coordinates = new Cesium.CallbackProperty(function () {\n var _Cesium$Rectangle;\n var gap = Math.abs(Math.cos(Math.PI / 180 * _this3.options.position.lat)) * (0.0001 * _this3.options.scale);\n var fromDegreesArray = [_this3.options.position.lng - 0.0001 * _this3.options.scale / ratio, _this3.options.position.lat - gap, _this3.options.position.lng + 0.0001 * _this3.options.scale / ratio, _this3.options.position.lat + gap];\n return (_Cesium$Rectangle = Cesium.Rectangle).fromDegrees.apply(_Cesium$Rectangle, fromDegreesArray);\n }, false);\n }\n this._elms.text && this._elms.text.forEach(function (item) {\n item.value = _this3.options.text;\n });\n }\n }, {\n key: \"angle\",\n get: function get() {\n return this.options.angle;\n },\n set: function set(v) {\n this.options.angle = v;\n this._elms.angle && this._elms.angle.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.options.scale;\n },\n set: function set(v) {\n this.options.scale = v;\n this._elms.scale && this._elms.scale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"duration\",\n get: function get() {\n return this.options.duration;\n },\n set: function set(v) {\n this.options.duration = v;\n var canvas = this.getcanvas();\n this.entity.rectangle.material = new Cesium.CustomMaterialSource({\n image: canvas.toDataURL('image/png'),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1.0, 1.0),\n duration: this.options.duration / this.options.speed,\n fltr: false,\n is2D: this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE2D ? true : false\n });\n this._elms.duration && this._elms.duration.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n var canvas = this.getcanvas();\n this.entity.rectangle.material = new Cesium.CustomMaterialSource({\n image: canvas.toDataURL('image/png'),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1.0, 1.0),\n duration: this.options.duration / this.options.speed,\n fltr: false,\n is2D: this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE2D ? true : false\n });\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.color = v;\n var canvas = this.getcanvas();\n this.entity.rectangle.material = new Cesium.CustomMaterialSource({\n image: canvas.toDataURL('image/png'),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1.0, 1.0),\n duration: this.options.duration / this.options.speed,\n fltr: false,\n is2D: this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE2D ? true : false\n });\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this4.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"create\",\n value: function create() {\n var _this5 = this;\n // let gap = Math.abs(Math.cos(Math.PI/180 * this.options.position.lat)) * (0.0001*this.options.scale)\n // let fromDegreesArray = [\n // this.options.position.lng - 0.05, this.options.position.lat - 0.05,\n // this.options.position.lng + 0.05, this.options.position.lat - 0.05,\n // this.options.position.lng + 0.05, this.options.position.lat + 0.05,\n // this.options.position.lng - 0.05, this.options.position.lat + 0.05,\n // ]\n var canvas = this.getcanvas();\n var ratio = canvas.height / canvas.width;\n this.entity = this.sdk.viewer.entities.add({\n id: this.options.id,\n show: this.options.show,\n rectangle: {\n coordinates: new Cesium.CallbackProperty(function () {\n var _Cesium$Rectangle2;\n var gap = Math.abs(Math.cos(Math.PI / 180 * _this5.options.position.lat)) * (0.0001 * _this5.options.scale);\n var fromDegreesArray = [_this5.options.position.lng - 0.0001 * _this5.options.scale / ratio, _this5.options.position.lat - gap,\n // this.options.position.lng + 0.05, this.options.position.lat - 0.05,\n _this5.options.position.lng + 0.0001 * _this5.options.scale / ratio, _this5.options.position.lat + gap\n // this.options.position.lng - 0.05, this.options.position.lat + 0.05,\n ];\n return (_Cesium$Rectangle2 = Cesium.Rectangle).fromDegrees.apply(_Cesium$Rectangle2, fromDegreesArray);\n }, false),\n material: new Cesium.CustomMaterialSource({\n image: canvas.toDataURL('image/png'),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1.0, 1.0),\n duration: this.options.duration / this.options.speed,\n fltr: false,\n is2D: this.sdk.viewer.scene.mode === Cesium.SceneMode.SCENE2D ? true : false\n }),\n rotation: new Cesium.CallbackProperty(function () {\n return Cesium.Math.toRadians(_this5.options.angle);\n }, false),\n stRotation: new Cesium.CallbackProperty(function () {\n return Cesium.Math.toRadians(_this5.options.angle);\n }, false)\n }\n });\n if (this.sdk.viewer._element.className === 'cesium-viewer 2d') {\n this.entity.rectangle.height = 10;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n if (this.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"setSplitDirection\"])(0, this.options.id);\n }\n }\n\n // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(state) {\n var _this6 = this;\n var _this, contentElm, all_elm, colorPicker;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 18;\n break;\n }\n _context.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.originalOptions, {\n title: '贴地文字属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this6.text = _this6.text.trim();\n if (!_this6.text) {\n _this6.text = '未命名对象';\n }\n _this6.originalOptions = _this6.deepCopyObj(_this6.options);\n _this6._DialogObject.close();\n _this6.Dialog.confirmCallBack && _this6.Dialog.confirmCallBack(_this6.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(_this6.sdk, _this6.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_16__[\"syncSplitData\"])(_this6.sdk, _this6.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this6.reset();\n _this6.Dialog.resetCallBack && _this6.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this6.Dialog.removeCallBack && _this6.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this6.reset();\n _this6.positionEditing = false;\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this6.Dialog.closeCallBack && _this6.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this6.show = show;\n _this6.Dialog.showCallBack && _this6.Dialog.showCallBack();\n },\n translationalCallBack: function translationalCallBack() {\n _this6.positionEditing = !_this6.positionEditing;\n }\n }, true);\n case 6:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' ground-text';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName('*');\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n\n // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName('color')[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n this._elms.color = [colorPicker];\n _context.next = 19;\n break;\n case 18:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 19:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n /**@desc 打开平移功能\r\n *\r\n * @memberOf Source\r\n * @param status {boolean}\r\n *\r\n * */\n }, {\n key: \"positionEditing\",\n get: function get() {\n return this._positionEditing;\n }\n\n /**\r\n * 飞到\r\n */,\n set: function set(status) {\n var _this7 = this;\n if (!this.sdk || !this.sdk.viewer || !this.entity) {\n return;\n }\n this._positionEditing = status;\n this.previous = {\n position: _objectSpread({}, this.options.position)\n };\n if (status === true) {\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('点击鼠标左键确认,右键取消', this.sdk);\n this.event.mouse_move(function (movement, cartesian) {\n var position = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.lng = position.lng;\n _this7.lat = position.lat;\n _this7.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.mouse_left(function (movement, cartesian) {\n var position = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.lng = position.lng;\n _this7.lat = position.lat;\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n });\n this.event.mouse_right(function (movement, cartesian) {\n _this7.lng = _this7.previous.position.lng;\n _this7.lat = _this7.previous.position.lat;\n _this7.positionEditing = false;\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n _this7.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this7.lng = _this7.previous.position.lng;\n _this7.lat = _this7.previous.position.lat;\n _this7.positionEditing = false;\n } else {\n var position = _this7.cartesian3Towgs84(cartesian, _this7.sdk.viewer);\n _this7.lng = position.lng;\n _this7.lat = position.lat;\n _this7.event.mouse_move(function () {});\n _this7.event.mouse_left(function () {});\n _this7.event.mouse_right(function () {});\n _this7.event.gesture_pinck_start(function () {});\n _this7.event.gesture_pinck_end(function () {});\n _this7.positionEditing = false;\n }\n });\n });\n } else {\n if (this.event) {\n this.event.mouse_move(function () {});\n this.event.mouse_left(function () {});\n this.event.mouse_right(function () {});\n this.event.gesture_pinck_start(function () {});\n this.event.gesture_pinck_end(function () {});\n }\n this.tip && this.tip.destroy();\n }\n }\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2() {\n var options,\n canvas,\n ratio,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n gap,\n fromDegreesArray,\n height,\n positionArray,\n i,\n _Cesium$Cartesian,\n a,\n BoundingSphere,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n canvas = this.getcanvas();\n ratio = canvas.height / canvas.width;\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_17__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 34;\n break;\n case 25:\n gap = Math.abs(Math.cos(Math.PI / 180 * this.options.position.lat)) * (0.0001 * this.options.scale);\n fromDegreesArray = [[this.options.position.lng - 0.0001 * this.options.scale / ratio, this.options.position.lat - gap], [this.options.position.lng + 0.0001 * this.options.scale / ratio, this.options.position.lat + gap]];\n _context2.next = 29;\n return this.getClampToHeight(this.options.position);\n case 29:\n height = _context2.sent;\n positionArray = [];\n for (i = 0; i < fromDegreesArray.length; i++) {\n a = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(fromDegreesArray[i]).concat([height]));\n positionArray.push(a.x, a.y, a.z);\n }\n BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray);\n this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 34:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.text = this.originalOptions.text;\n this.angle = this.originalOptions.angle;\n this.scale = this.originalOptions.scale;\n this.color = this.originalOptions.color;\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context3.next = 7;\n return this.sdk.removeIncetance(this.options.id);\n case 7:\n _context3.next = 9;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"getcanvas\",\n value: function getcanvas() {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var textArray = this.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n }\n this.options.text = textArray.join('\\n');\n var maxWidth = 0;\n for (var _i = 0; _i < textArray.length; _i++) {\n ctx.font = 200 + 'px serif';\n var width = ctx.measureText(textArray[_i]).width;\n if (maxWidth < width) {\n maxWidth = width;\n }\n }\n canvas.width = maxWidth;\n canvas.height = 220 * textArray.length;\n for (var _i2 = 0; _i2 < textArray.length; _i2++) {\n ctx.font = 200 + 'px serif';\n ctx.fillStyle = 'rgba(255, 255, 255, 0)';\n ctx.fillRect(0, 0, maxWidth + 30, 210);\n ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n ctx.font = '200px serif';\n ctx.fillText(textArray[_i2], 0, 210 * (_i2 + 1));\n }\n return canvas;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (GroundText);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9Hcm91bmRUZXh0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1RleHRPYmplY3QvR3JvdW5kVGV4dC9pbmRleC5qcz8xY2E2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWFsb2cgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cnXHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJ1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnLi9fZWxlbWVudCdcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vLi4vaW5kZXgnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uLy4uL0V2ZW50L2luZGV4J1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBHcm91bmRUZXh0IGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDotLTlnLDmloflrZdcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvuekui/pmpDol49cclxuICAgKiBAcGFyYW0gb3B0aW9ucy50ZXh0IHtzdHJpbmd9IOaWh+Wtl1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFuZ2xlPTAge251bWJlcn0g5peL6L2s6KeS5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc2NhbGU9MSB7bnVtYmVyfSDnvKnmlL7mr5TkvotcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zcGVlZD0xIHtudW1iZXJ9IOaWh+Wtl+a7muWKqOmAn+W6plxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLnBvc2l0aW9uIOS9jee9rlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnBvc2l0aW9uLmxuZyDnu4/luqZcclxuICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5wb3NpdGlvbi5sYXQg57qs5bqmXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMucG9zaXRpb25zIOWdkOagh+mbhlt7bG9uLGxhdH1d5LuF5Zyo5pyq5a6a5LmJIHBvc2l0aW9uIOaXtuacieaViFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IG9wdGlvbnMudGV4dCB8fCAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgbGV0IHRleHRBcnJheSA9IHRoaXMub3B0aW9ucy50ZXh0LnNwbGl0KCdcXG4nKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRleHRBcnJheVtpXS5sZW5ndGggPiA4MCkge1xyXG4gICAgICAgIHRleHRBcnJheVtpXSA9IHRleHRBcnJheVtpXS5zbGljZSgwLCA4MCAtIHRleHRBcnJheVtpXS5sZW5ndGgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0ZXh0QXJyYXkubGVuZ3RoID4gNzApIHtcclxuICAgICAgdGV4dEFycmF5LnNwbGljZSg3MCAtIHRleHRBcnJheS5sZW5ndGgpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHRleHRBcnJheS5qb2luKCdcXG4nKVxyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLm9wdGlvbnMudGV4dFxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPVxyXG4gICAgICBvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5hbmdsZSA9IG9wdGlvbnMuYW5nbGUgfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLnNjYWxlID1cclxuICAgICAgb3B0aW9ucy5zY2FsZSB8fCBvcHRpb25zLnNjYWxlID09PSAwID8gb3B0aW9ucy5zY2FsZSA6IDFcclxuICAgIHRoaXMub3B0aW9ucy5mb250U2l6ZSA9IG9wdGlvbnMuZm9udFNpemUgfHwgMjBcclxuICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9XHJcbiAgICAgIG9wdGlvbnMuZHVyYXRpb24gfHwgb3B0aW9ucy5kdXJhdGlvbiA9PT0gMCA/IG9wdGlvbnMuZHVyYXRpb24gOiA1MDAwMFxyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID1cclxuICAgICAgb3B0aW9ucy5zcGVlZCB8fCBvcHRpb25zLnNwZWVkID09PSAwID8gb3B0aW9ucy5zcGVlZCA6IDFcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgJyNGRkMxMDcnXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uXHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLnBvc2l0aW9ucykge1xyXG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSB7IGxuZzogKHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nICsgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1sxXS5sbmcpIC8gMiwgbGF0OiAodGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxhdCkgLyAyIH1cclxuICAgICAgbGV0IHBvaW50MSA9IHR1cmYucG9pbnQoW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdF0pO1xyXG4gICAgICBsZXQgcG9pbnQyID0gdHVyZi5wb2ludChbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1sxXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMV0ubGF0XSk7XHJcblxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHsgdW5pdHM6ICdtaWxlcycgfTtcclxuICAgICAgbGV0IGRpc3RhbmNlMSA9IHR1cmYucmh1bWJEaXN0YW5jZShwb2ludDEsIHBvaW50Miwgb3B0aW9ucyk7XHJcbiAgICAgIFxyXG5cclxuICAgICAgLy8g6K6h566X5Lik54K55LiOeOi9tOato+aWueWQkeeahOWkueinku+8iOW8p+W6pu+8iVxyXG4gICAgICBmdW5jdGlvbiBjYWxjdWxhdGVBbmdsZShwb2ludEEsIHBvaW50Qikge1xyXG4gICAgICAgIGxldCBkeCA9IHBvaW50QlswXSAtIHBvaW50QVswXTtcclxuICAgICAgICBsZXQgZHkgPSBwb2ludEJbMV0gLSBwb2ludEFbMV07XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoZHksIGR4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGFuZ2xlUmFkaWFucyA9IGNhbGN1bGF0ZUFuZ2xlKFt0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXRdLCBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1sxXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMV0ubGF0XSk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hbmdsZSA9ICgzNjArQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGFuZ2xlUmFkaWFucykpJTM2MFxyXG5cclxuICAgICAgbGV0IGdhcCA9XHJcbiAgICAgICAgTWF0aC5hYnMoTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCkpICpcclxuICAgICAgICAwLjAwMDFcclxuICAgICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgICAgbGV0IHJhdGlvID0gY2FudmFzLmhlaWdodCAvIGNhbnZhcy53aWR0aFxyXG4gICAgICBsZXQgbG5nMSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAwLjAwMDEgLyByYXRpb1xyXG4gICAgICBsZXQgbGF0MSA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgLSBnYXBcclxuICAgICAgbGV0IGxuZzIgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgMC4wMDAxIC8gcmF0aW9cclxuICAgICAgbGV0IGxhdDIgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ICsgZ2FwXHJcbiAgICAgIGxldCBsbmcgPSAobG5nMSArIGxuZzIpIC8gMlxyXG4gICAgICBsZXQgbGF0ID0gKGxhdDEgKyBsYXQyKSAvIDJcclxuXHJcbiAgICAgIGxldCBmcm9tID0gdHVyZi5wb2ludChbbG5nMSwgbGF0XSk7XHJcbiAgICAgIGxldCB0byA9IHR1cmYucG9pbnQoW2xuZzIsIGxhdF0pO1xyXG4gICAgICBsZXQgZGlzdGFuY2UyID0gdHVyZi5yaHVtYkRpc3RhbmNlKGZyb20sIHRvLCBvcHRpb25zKTtcclxuICAgICAgbGV0IGxhdFJhZGlhbnMgPSBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdClcclxuICAgICAgZGlzdGFuY2UyID0gZGlzdGFuY2UyICogKDErKE1hdGguYWJzKE1hdGguc2luKGFuZ2xlUmFkaWFucykqTWF0aC50YW4obGF0UmFkaWFucykqTWF0aC5zaW4obGF0UmFkaWFucykqTWF0aC5zaW4obGF0UmFkaWFucykpKSlcclxuICAgICAgdGhpcy5vcHRpb25zLnNjYWxlID0gZGlzdGFuY2UxIC8gZGlzdGFuY2UyXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMuX3Bvc2l0aW9uRWRpdGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX0V2ZW50QmluZGluZyA9IG5ldyBFdmVudEJpbmRpbmcoKVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9XHJcbiAgICB0aGlzLnByZXZpb3VzID0ge1xyXG4gICAgICBwb3NpdGlvbjogeyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgdGhpcy5zZGsuYWRkSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZCwgdGhpcylcclxuICAgIHRoaXMuY3JlYXRlKClcclxuICB9XHJcblxyXG4gIGdldCBsbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZ1xyXG4gIH1cclxuXHJcbiAgc2V0IGxuZyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sbmcgJiYgdGhpcy5fZWxtcy5sbmcuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdFxyXG4gIH1cclxuXHJcbiAgc2V0IGxhdCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYXQgJiYgdGhpcy5fZWxtcy5sYXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50ZXh0XHJcbiAgfVxyXG5cclxuICBzZXQgdGV4dCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHZcclxuICAgIGxldCB0ZXh0QXJyYXkgPSB0aGlzLm9wdGlvbnMudGV4dC5zcGxpdCgnXFxuJylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0ZXh0QXJyYXlbaV0ubGVuZ3RoID4gODApIHtcclxuICAgICAgICBsZXQgX2Vycm9yID0gJ+ihjOi2hei/hzgw5Liq5a2X56ymLOivt+aMieWbnui9pu+8iEVudGVy77yJ5ZCO77yM57un57ut6L6T5YWlJ1xyXG4gICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbWVzc2FnZTogX2Vycm9yLFxyXG4gICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgZHVyYXRpb246IDEwMDBcclxuICAgICAgICB9KTtcclxuICAgICAgICB0ZXh0QXJyYXlbaV0gPSB0ZXh0QXJyYXlbaV0uc2xpY2UoMCwgODAgLSB0ZXh0QXJyYXlbaV0ubGVuZ3RoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dEFycmF5Lmxlbmd0aCA+IDcwKSB7XHJcbiAgICAgIHRleHRBcnJheS5zcGxpY2UoNzAgLSB0ZXh0QXJyYXkubGVuZ3RoKVxyXG4gICAgICBsZXQgX2Vycm9yID0gJ+i2hei/h+acgOWkp+i+k+WFpeWtl+espidcclxuICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgbWVzc2FnZTogX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTAwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gdGV4dEFycmF5LmpvaW4oJ1xcbicpXHJcbiAgICBpZiAodGhpcy5lbnRpdHkpIHtcclxuICAgICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgICAgbGV0IHJhdGlvID0gY2FudmFzLmhlaWdodCAvIGNhbnZhcy53aWR0aFxyXG4gICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUubWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbU1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyksXHJcbiAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgICByZXBlYXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxLjAsIDEuMCksXHJcbiAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIHRoaXMub3B0aW9ucy5zcGVlZCxcclxuICAgICAgICBmbHRyOiBmYWxzZSxcclxuICAgICAgICBpczJEOiB0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gQ2VzaXVtLlNjZW5lTW9kZS5TQ0VORTJEID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5jb29yZGluYXRlcyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGdhcCA9XHJcbiAgICAgICAgICBNYXRoLmFicyhNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0KSkgKlxyXG4gICAgICAgICAgKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSAvIHJhdGlvLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIGdhcCxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgKyAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSAvIHJhdGlvLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIGdhcFxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyguLi5mcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICB9LCBmYWxzZSlcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMudGV4dCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLnRleHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5vcHRpb25zLnRleHRcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYW5nbGVcclxuICB9XHJcblxyXG4gIHNldCBhbmdsZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYW5nbGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmFuZ2xlICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuYW5nbGUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zY2FsZVxyXG4gIH1cclxuXHJcbiAgc2V0IHNjYWxlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuc2NhbGUgJiZcclxuICAgICAgdGhpcy5fZWxtcy5zY2FsZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uXHJcbiAgfVxyXG5cclxuICBzZXQgZHVyYXRpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLmR1cmF0aW9uID0gdlxyXG4gICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyksXHJcbiAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgIHJlcGVhdDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEuMCwgMS4wKSxcclxuICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIHRoaXMub3B0aW9ucy5zcGVlZCxcclxuICAgICAgZmx0cjogZmFsc2UsXHJcbiAgICAgIGlzMkQ6IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSBDZXNpdW0uU2NlbmVNb2RlLlNDRU5FMkQgPyB0cnVlIDogZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLl9lbG1zLmR1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuZHVyYXRpb24uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdlxyXG4gICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyksXHJcbiAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgIHJlcGVhdDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEuMCwgMS4wKSxcclxuICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIHRoaXMub3B0aW9ucy5zcGVlZCxcclxuICAgICAgZmx0cjogZmFsc2UsXHJcbiAgICAgIGlzMkQ6IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSBDZXNpdW0uU2NlbmVNb2RlLlNDRU5FMkQgPyB0cnVlIDogZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLl9lbG1zLnNwZWVkICYmXHJcbiAgICAgIHRoaXMuX2VsbXMuc3BlZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuICBzZXQgY29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gdlxyXG4gICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgIHRoaXMuZW50aXR5LnJlY3RhbmdsZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyksXHJcbiAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgIHJlcGVhdDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEuMCwgMS4wKSxcclxuICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIHRoaXMub3B0aW9ucy5zcGVlZCxcclxuICAgICAgZmx0cjogZmFsc2UsXHJcbiAgICAgIGlzMkQ6IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSBDZXNpdW0uU2NlbmVNb2RlLlNDRU5FMkQgPyB0cnVlIDogZmFsc2VcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5fZWxtcy5jb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywgLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLCAvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLCAvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogYyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LCAvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSAvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IGNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGUoKSB7XHJcbiAgICAvLyBsZXQgZ2FwID0gTWF0aC5hYnMoTWF0aC5jb3MoTWF0aC5QSS8xODAgKiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0KSkgKiAoMC4wMDAxKnRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgIC8vIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW1xyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIDAuMDUsXHJcbiAgICAvLyAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgKyAwLjA1LCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gMC4wNSxcclxuICAgIC8vICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyArIDAuMDUsIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgKyAwLjA1LFxyXG4gICAgLy8gICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nIC0gMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCArIDAuMDUsXHJcbiAgICAvLyBdXHJcbiAgICBsZXQgY2FudmFzID0gdGhpcy5nZXRjYW52YXMoKVxyXG4gICAgbGV0IHJhdGlvID0gY2FudmFzLmhlaWdodCAvIGNhbnZhcy53aWR0aFxyXG5cclxuICAgIHRoaXMuZW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoaXMub3B0aW9ucy5zaG93LFxyXG4gICAgICByZWN0YW5nbGU6IHtcclxuICAgICAgICBjb29yZGluYXRlczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIGxldCBnYXAgPVxyXG4gICAgICAgICAgICBNYXRoLmFicyhNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0KSkgKlxyXG4gICAgICAgICAgICAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSAvIHJhdGlvLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gZ2FwLFxyXG4gICAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgMC4wNSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCAtIDAuMDUsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgKyAoMC4wMDAxICogdGhpcy5vcHRpb25zLnNjYWxlKSAvIHJhdGlvLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ICsgZ2FwXHJcbiAgICAgICAgICAgIC8vIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sbmcgLSAwLjA1LCB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ICsgMC4wNSxcclxuICAgICAgICAgIF1cclxuICAgICAgICAgIHJldHVybiBDZXNpdW0uUmVjdGFuZ2xlLmZyb21EZWdyZWVzKC4uLmZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkN1c3RvbU1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgIGltYWdlOiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSxcclxuICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICByZXBlYXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxLjAsIDEuMCksXHJcbiAgICAgICAgICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gdGhpcy5vcHRpb25zLnNwZWVkLFxyXG4gICAgICAgICAgZmx0cjogZmFsc2UsXHJcbiAgICAgICAgICBpczJEOiB0aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gQ2VzaXVtLlNjZW5lTW9kZS5TQ0VORTJEID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcm90YXRpb246IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5hbmdsZSlcclxuICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgc3RSb3RhdGlvbjogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmFuZ2xlKVxyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHRoaXMuc2RrLnZpZXdlci5fZWxlbWVudC5jbGFzc05hbWUgPT09ICdjZXNpdW0tdmlld2VyIDJkJykge1xyXG4gICAgICB0aGlzLmVudGl0eS5yZWN0YW5nbGUuaGVpZ2h0ID0gMTBcclxuICAgIH1cclxuICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3cpIHtcclxuXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2coXHJcbiAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6ICfotLTlnLDmloflrZflsZ7mgKcnLFxyXG4gICAgICAgICAgbGVmdDogJzE4MHB4JyxcclxuICAgICAgICAgIHRvcDogJzEwMHB4JyxcclxuICAgICAgICAgIGNvbmZpcm1DYWxsQmFjazogb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC50cmltKClcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRleHQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRleHQgPSAn5pyq5ZG95ZCN5a+56LGhJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayh0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAgIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjaygpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgLy8gdGhpcy5lbnRpdHkuc3R5bGUgPSBuZXcgQ2VzaXVtLkNlc2l1bTNEVGlsZVN0eWxlKHtcclxuICAgICAgICAgICAgLy8gICBjb2xvcjogXCJjb2xvcigncmdiYSgyNTUsMjU1LDI1NSxcIiArIHRoaXMubmV3RGF0YS50cmFuc3BhcmVuY3kgKyBcIiknKVwiLFxyXG4gICAgICAgICAgICAvLyAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHNob3dDYWxsQmFjazogc2hvdyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNsYXRpb25hbENhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gIXRoaXMucG9zaXRpb25FZGl0aW5nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBncm91bmQtdGV4dCdcclxuICAgICAgbGV0IGNvbnRlbnRFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29sb3InKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsIC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsIC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsIC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogY29sb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwgLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0gLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtjb2xvclBpY2tlcl1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqQGRlc2Mg5omT5byA5bmz56e75Yqf6IO9XHJcbiAgICpcclxuICAgKiBAbWVtYmVyT2YgU291cmNlXHJcbiAgICogQHBhcmFtIHN0YXR1cyB7Ym9vbGVhbn1cclxuICAgKlxyXG4gICAqICovXHJcbiAgc2V0IHBvc2l0aW9uRWRpdGluZyhzdGF0dXMpIHtcclxuICAgIGlmICghdGhpcy5zZGsgfHwgIXRoaXMuc2RrLnZpZXdlciB8fCAhdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLl9wb3NpdGlvbkVkaXRpbmcgPSBzdGF0dXNcclxuICAgIHRoaXMucHJldmlvdXMgPSB7XHJcbiAgICAgIHBvc2l0aW9uOiB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbiB9XHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn54K55Ye76byg5qCH5bem6ZSu56Gu6K6k77yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbi5sbmdcclxuICAgICAgICB0aGlzLmxhdCA9IHBvc2l0aW9uLmxhdFxyXG4gICAgICAgIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgdGhpcy5sbmcgPSBwb3NpdGlvbi5sbmdcclxuICAgICAgICB0aGlzLmxhdCA9IHBvc2l0aW9uLmxhdFxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMucG9zaXRpb25FZGl0aW5nID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy5wcmV2aW91cy5wb3NpdGlvbi5sbmdcclxuICAgICAgICB0aGlzLmxhdCA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubGF0XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5ldmVudC5nZXN0dXJlX3BpbmNrX3N0YXJ0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPj0gNTAwKSB7XHJcbiAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICB0aGlzLmxuZyA9IHRoaXMucHJldmlvdXMucG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIHRoaXMubGF0ID0gdGhpcy5wcmV2aW91cy5wb3NpdGlvbi5sYXRcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIHRoaXMubG5nID0gcG9zaXRpb24ubG5nXHJcbiAgICAgICAgICAgIHRoaXMubGF0ID0gcG9zaXRpb24ubGF0XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnQubW91c2VfcmlnaHQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkVkaXRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5ldmVudCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbW92ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9sZWZ0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX3JpZ2h0KCgpID0+IHsgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKCkgPT4geyB9KVxyXG4gICAgICAgIHRoaXMuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4geyB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc2l0aW9uRWRpdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbkVkaXRpbmdcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmjnuWIsFxyXG4gICAqL1xyXG4gIGFzeW5jIGZseVRvKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgbGV0IGNhbnZhcyA9IHRoaXMuZ2V0Y2FudmFzKClcclxuICAgIGxldCByYXRpbyA9IGNhbnZhcy5oZWlnaHQgLyBjYW52YXMud2lkdGhcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBnYXAgPVxyXG4gICAgICAgIE1hdGguYWJzKE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQpKSAqXHJcbiAgICAgICAgKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSlcclxuICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxuZyAtICgwLjAwMDEgKiB0aGlzLm9wdGlvbnMuc2NhbGUpIC8gcmF0aW8sXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0IC0gZ2FwXHJcbiAgICAgICAgXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG5nICsgKDAuMDAwMSAqIHRoaXMub3B0aW9ucy5zY2FsZSkgLyByYXRpbyxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbi5sYXQgKyBnYXBcclxuICAgICAgICBdXHJcbiAgICAgIF1cclxuICAgICAgbGV0IGhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh0aGlzLm9wdGlvbnMucG9zaXRpb24pXHJcbiAgICAgIGxldCBwb3NpdGlvbkFycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRGVncmVlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5mcm9tRGVncmVlc0FycmF5W2ldLCBoZWlnaHQpXHJcbiAgICAgICAgcG9zaXRpb25BcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgIH1cclxuICAgICAgbGV0IEJvdW5kaW5nU3BoZXJlID0gQ2VzaXVtLkJvdW5kaW5nU3BoZXJlLmZyb21WZXJ0aWNlcyhwb3NpdGlvbkFycmF5KVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvQm91bmRpbmdTcGhlcmUoQm91bmRpbmdTcGhlcmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMudGV4dCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnRleHRcclxuICAgIHRoaXMuYW5nbGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hbmdsZVxyXG4gICAgdGhpcy5zY2FsZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNjYWxlXHJcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuY29sb3JcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmVudGl0eSlcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiAhdGhpcy5fRGlhbG9nT2JqZWN0LmlzRGVzdHJveSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIGdldGNhbnZhcygpIHtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG5cclxuICAgIGxldCB0ZXh0QXJyYXkgPSB0aGlzLm9wdGlvbnMudGV4dC5zcGxpdCgnXFxuJylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0ZXh0QXJyYXlbaV0ubGVuZ3RoID4gODApIHtcclxuICAgICAgICB0ZXh0QXJyYXlbaV0gPSB0ZXh0QXJyYXlbaV0uc2xpY2UoMCwgODAgLSB0ZXh0QXJyYXlbaV0ubGVuZ3RoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dEFycmF5Lmxlbmd0aCA+IDcwKSB7XHJcbiAgICAgIHRleHRBcnJheS5zcGxpY2UoNzAgLSB0ZXh0QXJyYXkubGVuZ3RoKVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnRleHQgPSB0ZXh0QXJyYXkuam9pbignXFxuJylcclxuICAgIGxldCBtYXhXaWR0aCA9IDBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0eC5mb250ID0gMjAwICsgJ3B4IHNlcmlmJ1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0ZXh0QXJyYXlbaV0pLndpZHRoXHJcbiAgICAgIGlmIChtYXhXaWR0aCA8IHdpZHRoKSB7XHJcbiAgICAgICAgbWF4V2lkdGggPSB3aWR0aFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYW52YXMud2lkdGggPSBtYXhXaWR0aFxyXG4gICAgY2FudmFzLmhlaWdodCA9IDIyMCAqIHRleHRBcnJheS5sZW5ndGhcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0eC5mb250ID0gMjAwICsgJ3B4IHNlcmlmJ1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMCknXHJcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBtYXhXaWR0aCArIDMwLCAyMTApXHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSdcclxuICAgICAgY3R4LmZvbnQgPSAnMjAwcHggc2VyaWYnXHJcbiAgICAgIGN0eC5maWxsVGV4dCh0ZXh0QXJyYXlbaV0sIDAsIDIxMCAqIChpICsgMSkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhc1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgR3JvdW5kVGV4dFxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFTQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQVVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUE1Q0E7QUE2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFwRkE7QUFBQTtBQUFBO0FBQUE7QUFzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUFBO0FBZ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFHQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXJGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFYQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TextObject/GroundText/index.js\n"); /***/ }), /***/ "./src/Obj/Base/TextObject/StandText/_element.js": /*!*******************************************************!*\ !*** ./src/Obj/Base/TextObject/StandText/_element.js ***! \*******************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html(that) {\n return \"\\n \\n
    \\n
    \\n
    \\n \\u540D\\u79F0\\n \\n
    \\n
    \\n \\u989C\\u8272\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u6EDA\\u52A8\\u901F\\u5EA6\\n \\n \\n
    \\n
    \\n
    \\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9TdGFuZFRleHQvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9TdGFuZFRleHQvX2VsZW1lbnQuanM/NWU2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBAbW9kZWw9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mu5rliqjpgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWF4PVwiMTAwXCIgbWluPVwiMFwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwic3BlZWRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDt3aWR0aDogMTAwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiIEBtb2RlbD1cInNwZWVkXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBodG1sIH1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQTBCQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TextObject/StandText/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/TextObject/StandText/index.js": /*!****************************************************!*\ !*** ./src/Obj/Base/TextObject/StandText/index.js ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/TextObject/StandText/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\n\n\nvar StandText = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 立体文字\r\n * @param options {object}\r\n * @param options.id {string} 唯一标识\r\n * @param options.text {string} 文字\r\n * @param options.color=\"#FFC107\" {string} 颜色\r\n * @param options.speed=1 {number} 文字移动速度\r\n * @param {Array.} positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function StandText(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, StandText);\n _this2 = _callSuper(this, StandText, [sdk, options]);\n _this2.options.text = options.text || \"未命名对象\";\n var textArray = _this2.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n }\n _this2.options.text = textArray.join('\\n');\n _this2.options.color = options.color || \"#FFC107\";\n // this.options.cornerType = options.cornerType || 'MITERED'\n _this2.options.positions = options.positions;\n // this.options.material = Number(options.material) || 0\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 1;\n // this.options.duration = (options.duration || options.duration === 0) ? options.duration : 50000\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.nodePoints = [];\n _this2.entity;\n _this2.options.instruct = options.instruct || \"\";\n _this2.options.operatingPoint = options.operatingPoint || \"\";\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.extrudedHeight;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n StandText.create(_this2);\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(StandText, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(StandText, [{\n key: \"text\",\n get: function get() {\n return this.options.text;\n },\n set: function set(v) {\n this.options.text = v;\n var textArray = this.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n var _error = '行超过80个字符,请按回车(Enter)后,继续输入';\n window.ELEMENT && window.ELEMENT.Message({\n message: _error,\n type: 'warning',\n duration: 1000\n });\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n var _error2 = '超过最大输入字符';\n window.ELEMENT && window.ELEMENT.Message({\n message: _error2,\n type: 'warning',\n duration: 1000\n });\n }\n this.options.text = textArray.join('\\n');\n if (this.entity) {\n var positions = this.options.positions;\n var fromDegreesArray = [];\n var minimumHeights = [];\n var maximumHeights = [];\n var material = this.getMaterial();\n var width = this.computeDistance2(positions);\n var extrudedHeight = this.aspectRatio ? width / this.aspectRatio : 0;\n for (var _i = 0; _i < positions.length; _i++) {\n fromDegreesArray.push(positions[_i].lng, positions[_i].lat);\n minimumHeights.push(positions[_i].alt);\n maximumHeights.push(positions[_i].alt + extrudedHeight);\n }\n this.entity.wall.material = material;\n this.entity.wall.maximumHeights = maximumHeights;\n this.entity.wall.minimumHeights = minimumHeights;\n }\n this._elms.text && this._elms.text.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n this.entity.wall.material = this.getMaterial();\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n\n // get material() {\n // return this.options.material\n // }\n // set material(v) {\n // this.options.material = Number(v)\n // this.entity.wall.material = this.getMaterial()\n // this._elms.material && this._elms.material.forEach((item) => {\n // item.value = v\n // })\n // }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n this.options.speed = v;\n this.entity.wall.material = this.getMaterial();\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n }\n\n // get attributeLink() {\n // return this.options.attribute.link.content\n // }\n\n // set attributeLink(v) {\n // this.options.attribute.link.content = v\n // if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content) {\n // return\n // }\n // let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // tableContent.innerHTML = ''\n // if (this.options.attribute.link.content.length > 0) {\n // table.getElementsByClassName('table-empty')[0].style.display = 'none'\n // }\n // else {\n // table.getElementsByClassName('table-empty')[0].style.display = 'flex'\n // }\n // for (let i = 0; i < this.options.attribute.link.content.length; i++) {\n // let tr = `\n //
    \n //
    ` + this.options.attribute.link.content[i].name + `
    \n //
    ` + this.options.attribute.link.content[i].url + `
    \n //
    \n // \n // \n //
    \n //
    `\n // let trElm = document.createRange().createContextualFragment(tr)\n // tableContent.appendChild(trElm)\n // }\n // let item = tableContent.getElementsByClassName('tr')\n // let fun = {\n // linkEdit: async (index) => {\n // this.attributeLink = await this.options.attribute.link.content\n // let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]\n // let tableContent = table.getElementsByClassName('table-body')[0]\n // let item = tableContent.getElementsByClassName('tr')\n // for (let i = 0; i < item.length; i++) {\n // if (index === i) {\n // let html = `\n //
    \n // \n //
    \n //
    \n //
    \n // \n // \n // \n //
    \n //
    \n //
    \n // \n // \n //
    `\n // item[i].innerHTML = html\n // let td = item[i].getElementsByClassName('td')\n // td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name\n // td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', (e) => {\n // if (typeof (fun[m.value]) === 'function') {\n // fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i)\n // }\n // });\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // break\n // }\n // }\n // },\n // linkDelete: (i) => {\n // this.options.attribute.link.content.splice(i, 1)\n // this.attributeLink = this.options.attribute.link.content\n // },\n\n // confirmEdit: (value, i) => {\n // this.options.attribute.link.content[i] = value\n // this.attributeLink = this.options.attribute.link.content\n // },\n // cancelEdit: () => {\n // this.attributeLink = this.options.attribute.link.content\n // },\n // fileSelect: (value, i) => {\n // let fileElm = item[i].getElementsByClassName('file-select')[0]\n // fileElm.click()\n // fileElm.removeEventListener('change', fileSelect)\n // fileElm.addEventListener('change', fileSelect)\n // }\n // }\n // let fileSelect = (event) => {\n // if (event.target.value) {\n // let td = item[event.target.getAttribute('index')].getElementsByClassName('td')\n // td[1].getElementsByClassName('input')[0].value = event.target.value\n // event.target.value = null\n // }\n // }\n // for (let i = 0; i < item.length; i++) {\n // let btn = item[i].getElementsByTagName('button')\n // for (let n = 0; n < btn.length; n++) {\n // for (let m of btn[n].attributes) {\n // if (m.name === '@click') {\n // btn[n].addEventListener('click', (e) => {\n // if (typeof (fun[m.value]) === 'function') {\n // fun[m.value](i)\n // }\n // });\n // btn[n].attributes.removeNamedItem(m.name)\n // break\n // }\n // }\n // }\n // }\n\n // }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera;\n },\n set: function set(v) {\n this.options.attribute.camera = v;\n }\n\n //创建\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee(state) {\n var _this4 = this;\n var _this, contentElm, colorPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 20;\n break;\n }\n _context.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"](this.sdk, this.options, {\n title: '立体文字属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.text = _this4.text.trim();\n if (!_this4.text) {\n _this4.text = '未命名对象';\n }\n _this4.originalOptions = _this4.deepCopyObj(_this4.options);\n _this4._DialogObject.close();\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_this4.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(_this4.sdk, _this4.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_17__[\"syncSplitData\"])(_this4.sdk, _this4.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this4.reset();\n _this4.Dialog.resetCallBack && _this4.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n for (var i = 0; i < _this4.nodePoints.length; i++) {\n _this4.sdk.viewer.entities.remove(_this4.nodePoints[i]);\n }\n _this4.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n _this4.event && _this4.event.destroy();\n _this4.tip && _this4.tip.destroy();\n },\n showCallBack: function showCallBack(show) {\n _this4.options.show = show;\n _this4.originalOptions.show = show;\n _this4.show = show;\n _this4.Dialog.showCallBack && _this4.Dialog.showCallBack();\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n StandText.nodeEdit(_this4);\n }\n });\n case 6:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' stand-text';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera;\n // setTimeout(() => {\n // this.attributeLink = this.options.attribute.link.content\n // this.cameraSelect()\n // }, 500);\n\n // 创建标签页\n // let tabsElm = new cy_tabs('radar-scan-edit-tabs')\n // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this4.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [colorPicker];\n _context.next = 21;\n break;\n case 20:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 21:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit(_x) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.text = this.originalOptions.text;\n this.color = this.originalOptions.color;\n this.speed = this.originalOptions.speed;\n var positions = this.options.positions;\n var fromDegreesArray = [];\n var minimumHeights = [];\n var maximumHeights = [];\n var width = this.computeDistance2(positions);\n var extrudedHeight = this.aspectRatio ? width / this.aspectRatio : 0;\n // aspectRatio\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n minimumHeights.push(positions[i].alt);\n maximumHeights.push(positions[i].alt + extrudedHeight);\n }\n this.entity.wall.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee2() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context2.next = 7;\n return this.sdk.removeIncetance(this.options.id);\n case 7:\n _context2.next = 9;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(this.sdk, this.options.id);\n case 9:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"getMaterial\",\n value: function getMaterial() {\n var material;\n var canvas = this.getcanvas();\n material = new Cesium.CustomMaterialSource({\n image: canvas.toDataURL(\"image/png\"),\n color: this.options.color,\n repeat: new Cesium.Cartesian2(1, 1.0),\n duration: 50000 / this.options.speed,\n fltr: false\n });\n return material;\n }\n }, {\n key: \"getcanvas\",\n value: function getcanvas() {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var textArray = this.options.text.split('\\n');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].length > 80) {\n textArray[i] = textArray[i].slice(0, 80 - textArray[i].length);\n }\n }\n if (textArray.length > 70) {\n textArray.splice(70 - textArray.length);\n }\n this.options.text = textArray.join('\\n');\n var maxWidth = 0;\n for (var _i2 = 0; _i2 < textArray.length; _i2++) {\n ctx.font = 200 + \"px serif\";\n var width = ctx.measureText(textArray[_i2]).width;\n if (maxWidth < width) {\n maxWidth = width;\n }\n }\n canvas.width = maxWidth;\n canvas.height = 220 * textArray.length;\n for (var _i3 = 0; _i3 < textArray.length; _i3++) {\n ctx.font = 200 + \"px serif\";\n ctx.fillStyle = 'rgba(255, 255, 255, 0)';\n ctx.fillRect(0, 0, maxWidth + 30, 210);\n ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n ctx.font = \"200px serif\";\n ctx.fillText(textArray[_i3], 0, 210 * (_i3 + 1));\n }\n this.aspectRatio = this.options.text ? canvas.width / canvas.height : 0;\n return canvas;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this5 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_10__[\"default\"].open(this.options.id, this.options.text, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_10__[\"default\"].primaryCallBack = function (content) {\n _this5.options.richTextContent = content;\n };\n }\n }], [{\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee3(that) {\n var positions, fromDegreesArray, minimumHeights, maximumHeights, material, width, extrudedHeight, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n // console.log(new Cesium.CustomMaterialSource(), new Cesium.PolylineTrailLinkMaterialProperty())\n positions = that.options.positions;\n fromDegreesArray = [];\n minimumHeights = [];\n maximumHeights = [];\n material = that.getMaterial();\n width = that.computeDistance2(positions);\n extrudedHeight = that.aspectRatio ? width / that.aspectRatio : 0; // aspectRatio\n for (i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n minimumHeights.push(positions[i].alt);\n maximumHeights.push(positions[i].alt + extrudedHeight);\n }\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n wall: {\n positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),\n cornerType: Cesium.CornerType.MITERED,\n maximumHeights: maximumHeights,\n minimumHeights: minimumHeights,\n material: material\n }\n // wall: {\n // positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n // maximumHeights: maximumHeights,\n // minimumHeights: minimumHeights,\n // material: new Cesium.PolylineTrailLinkMaterialProperty({duration: 1500}),\n // outline: true,\n // outlineColor: Cesium.Color.BLACK,\n // }\n });\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_16__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_17__[\"setSplitDirection\"])(0, that.options.id);\n }\n case 11:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function create(_x2) {\n return _create.apply(this, arguments);\n }\n return create;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var positions = that.options.positions;\n var fromDegreesArray = [];\n var minimumHeights = [];\n var maximumHeights = [];\n var width = that.computeDistance2(positions);\n var extrudedHeight = that.aspectRatio ? width / that.aspectRatio : 0;\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n minimumHeights.push(positions[i].alt);\n maximumHeights.push(positions[i].alt + extrudedHeight);\n }\n var isAdd = false;\n var leftEvent = function leftEvent(movement, cartesian) {\n if (selectPoint) {\n isAdd = true;\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, [that.entity]);\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n originalPosition = that.options.positions[selectPoint.index];\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, that.options.positions[selectPoint.index].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n var _positions = that.options.positions;\n fromDegreesArray = [];\n minimumHeights = [];\n maximumHeights = [];\n width = that.computeDistance2(_positions);\n extrudedHeight = that.aspectRatio ? width / that.aspectRatio : 0;\n for (var _i4 = 0; _i4 < _positions.length; _i4++) {\n fromDegreesArray.push(_positions[_i4].lng, _positions[_i4].lat);\n minimumHeights.push(_positions[_i4].alt);\n maximumHeights.push(_positions[_i4].alt + extrudedHeight);\n }\n that.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键开始,右键结束,CTRL+右键撤销');\n originalPosition = that.cartesian3Towgs84(cartesian, that.sdk.viewer);\n that.entity.wall.positions = new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n }, false);\n that.entity.wall.maximumHeights = new Cesium.CallbackProperty(function () {\n return maximumHeights;\n }, false);\n that.entity.wall.minimumHeights = new Cesium.CallbackProperty(function () {\n return minimumHeights;\n }, false);\n }\n }\n };\n var rightEvent = function rightEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = originalPosition;\n if (isAdd) {\n that.options.positions.splice(selectPoint.index, 1);\n }\n cb(null, that.options.positions);\n }\n var positions = that.options.positions;\n fromDegreesArray = [];\n minimumHeights = [];\n maximumHeights = [];\n width = that.computeDistance2(positions);\n extrudedHeight = that.aspectRatio ? width / that.aspectRatio : 0;\n for (var _i5 = 0; _i5 < positions.length; _i5++) {\n fromDegreesArray.push(positions[_i5].lng, positions[_i5].lat);\n minimumHeights.push(positions[_i5].alt);\n maximumHeights.push(positions[_i5].alt + extrudedHeight);\n }\n that.entity.wall.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n for (var _i6 = 0; _i6 < that.nodePoints.length; _i6++) {\n that.sdk.viewer.entities.remove(that.nodePoints[_i6]);\n }\n that.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n };\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, [that.entity]);\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n var _positions2 = that.options.positions;\n fromDegreesArray = [];\n minimumHeights = [];\n maximumHeights = [];\n width = that.computeDistance2(_positions2);\n extrudedHeight = that.aspectRatio ? width / that.aspectRatio : 0;\n for (var _i7 = 0; _i7 < _positions2.length; _i7++) {\n fromDegreesArray.push(_positions2[_i7].lng, _positions2[_i7].lat);\n minimumHeights.push(_positions2[_i7].alt);\n maximumHeights.push(_positions2[_i7].alt + extrudedHeight);\n }\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n that.options.positions.pop();\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n that.nodePoints.pop();\n if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = 0;\n }\n }\n }\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n for (var _i8 = 0; _i8 < that.options.positions.length; _i8++) {\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i8,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i8].lng, that.options.positions[_i8].lat, that.options.positions[_i8].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n }\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (StandText);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9TdGFuZFRleHQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvVGV4dE9iamVjdC9TdGFuZFRleHQvaW5kZXguanM/ZDk1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgY3lfdGFicyBmcm9tIFwiLi4vLi4vLi4vRWxlbWVudC9jeV9odG1sX3RhYnNcIjtcclxuaW1wb3J0IHJpY2hUZXh0IGZyb20gXCIuLi8uLi8uLi9FbGVtZW50L3JpY2hUZXh0XCI7XHJcbmltcG9ydCB7IGh0bWwgfSBmcm9tIFwiLi9fZWxlbWVudFwiO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vaW5kZXhcIjtcclxuaW1wb3J0IExhYmVsT2JqZWN0IGZyb20gJy4uLy4uL0xhYmVsT2JqZWN0J1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi8uLi9FdmVudCdcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgeyBzeW5jRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5cclxuY2xhc3MgU3RhbmRUZXh0IGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDnq4vkvZPmloflrZdcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOWUr+S4gOagh+ivhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnRleHQge3N0cmluZ30g5paH5a2XXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9XCIjRkZDMTA3XCIge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuc3BlZWQ9MSB7bnVtYmVyfSDmloflrZfnp7vliqjpgJ/luqZcclxuICAgKiBAcGFyYW0ge0FycmF5LjxvYmplY3Q+fSBwb3NpdGlvbnMg57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucywgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLnRleHQgPSBvcHRpb25zLnRleHQgfHwgXCLmnKrlkb3lkI3lr7nosaFcIlxyXG4gICAgbGV0IHRleHRBcnJheSA9IHRoaXMub3B0aW9ucy50ZXh0LnNwbGl0KCdcXG4nKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRleHRBcnJheVtpXS5sZW5ndGggPiA4MCkge1xyXG4gICAgICAgIHRleHRBcnJheVtpXSA9IHRleHRBcnJheVtpXS5zbGljZSgwLCA4MC10ZXh0QXJyYXlbaV0ubGVuZ3RoKVxyXG4gICAgICB9IFxyXG4gICAgfVxyXG4gICAgaWYgKHRleHRBcnJheS5sZW5ndGggPiA3MCkge1xyXG4gICAgICB0ZXh0QXJyYXkuc3BsaWNlKDcwIC0gdGV4dEFycmF5Lmxlbmd0aClcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy50ZXh0ID0gdGV4dEFycmF5LmpvaW4oJ1xcbicpXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8IFwiI0ZGQzEwN1wiXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuY29ybmVyVHlwZSA9IG9wdGlvbnMuY29ybmVyVHlwZSB8fCAnTUlURVJFRCdcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMgPSBvcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgLy8gdGhpcy5vcHRpb25zLm1hdGVyaWFsID0gTnVtYmVyKG9wdGlvbnMubWF0ZXJpYWwpIHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IChvcHRpb25zLnNwZWVkIHx8IG9wdGlvbnMuc3BlZWQgPT09IDApID8gb3B0aW9ucy5zcGVlZCA6IDFcclxuICAgIC8vIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9IChvcHRpb25zLmR1cmF0aW9uIHx8IG9wdGlvbnMuZHVyYXRpb24gPT09IDApID8gb3B0aW9ucy5kdXJhdGlvbiA6IDUwMDAwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLm5vZGVQb2ludHMgPSBbXVxyXG4gICAgdGhpcy5lbnRpdHlcclxuICAgIHRoaXMub3B0aW9ucy5pbnN0cnVjdCA9IG9wdGlvbnMuaW5zdHJ1Y3QgfHwgXCJcIlxyXG4gICAgdGhpcy5vcHRpb25zLm9wZXJhdGluZ1BvaW50ID0gb3B0aW9ucy5vcGVyYXRpbmdQb2ludCB8fCBcIlwiXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluayB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSBvcHRpb25zLmF0dHJpYnV0ZVR5cGUgfHwgJ3JpY2hUZXh0J1xyXG4gICAgdGhpcy5leHRydWRlZEhlaWdodFxyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcbiAgICBTdGFuZFRleHQuY3JlYXRlKHRoaXMpXHJcbiAgfVxyXG5cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGV4dFxyXG4gIH1cclxuXHJcbiAgc2V0IHRleHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnRleHQgPSB2XHJcbiAgICBsZXQgdGV4dEFycmF5ID0gdGhpcy5vcHRpb25zLnRleHQuc3BsaXQoJ1xcbicpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGV4dEFycmF5W2ldLmxlbmd0aCA+IDgwKSB7XHJcbiAgICAgICAgbGV0IF9lcnJvciA9ICfooYzotoXov4c4MOS4quWtl+espizor7fmjInlm57ovabvvIhFbnRlcu+8ieWQju+8jOe7p+e7rei+k+WFpSdcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IF9lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGV4dEFycmF5W2ldID0gdGV4dEFycmF5W2ldLnNsaWNlKDAsIDgwLXRleHRBcnJheVtpXS5sZW5ndGgpXHJcbiAgICAgIH0gXHJcbiAgICB9XHJcbiAgICBpZiAodGV4dEFycmF5Lmxlbmd0aCA+IDcwKSB7XHJcbiAgICAgIHRleHRBcnJheS5zcGxpY2UoNzAgLSB0ZXh0QXJyYXkubGVuZ3RoKVxyXG4gICAgICBsZXQgX2Vycm9yID0gJ+i2hei/h+acgOWkp+i+k+WFpeWtl+espidcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVCAmJiB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IF9lcnJvcixcclxuICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAxMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHRleHRBcnJheS5qb2luKCdcXG4nKVxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgbGV0IG1pbmltdW1IZWlnaHRzID0gW11cclxuICAgICAgbGV0IG1heGltdW1IZWlnaHRzID0gW11cclxuICAgICAgbGV0IG1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCgpXHJcbiAgICAgIGxldCB3aWR0aCA9IHRoaXMuY29tcHV0ZURpc3RhbmNlMihwb3NpdGlvbnMpXHJcbiAgICAgIGxldCBleHRydWRlZEhlaWdodCA9IHRoaXMuYXNwZWN0UmF0aW8gPyAod2lkdGggLyB0aGlzLmFzcGVjdFJhdGlvKSA6IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgICBtaW5pbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgICAgbWF4aW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0ICsgZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbnRpdHkud2FsbC5tYXRlcmlhbCA9IG1hdGVyaWFsXHJcbiAgICAgIHRoaXMuZW50aXR5LndhbGwubWF4aW11bUhlaWdodHMgPSBtYXhpbXVtSGVpZ2h0c1xyXG4gICAgICB0aGlzLmVudGl0eS53YWxsLm1pbmltdW1IZWlnaHRzID0gbWluaW11bUhlaWdodHNcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMudGV4dCAmJiB0aGlzLl9lbG1zLnRleHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHZcclxuICAgIHRoaXMuZW50aXR5LndhbGwubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKClcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBtYXRlcmlhbCgpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF0ZXJpYWxcclxuICAvLyB9XHJcbiAgLy8gc2V0IG1hdGVyaWFsKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5tYXRlcmlhbCA9IE51bWJlcih2KVxyXG4gIC8vICAgdGhpcy5lbnRpdHkud2FsbC5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwoKVxyXG4gIC8vICAgdGhpcy5fZWxtcy5tYXRlcmlhbCAmJiB0aGlzLl9lbG1zLm1hdGVyaWFsLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAvLyAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICBnZXQgc3BlZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNwZWVkXHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdlxyXG4gICAgdGhpcy5lbnRpdHkud2FsbC5tYXRlcmlhbCA9IHRoaXMuZ2V0TWF0ZXJpYWwoKVxyXG4gICAgdGhpcy5fZWxtcy5zcGVlZCAmJiB0aGlzLl9lbG1zLnNwZWVkLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gIC8vICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAvLyAgICAgcmV0dXJuXHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gIC8vICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gIC8vICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgLy8gICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAvLyAgIH1cclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgbGV0IHRyID0gYFxyXG4gIC8vICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAvLyAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gIC8vICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAvLyAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gIC8vICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0XCIgQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGV4dFwiIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAvLyAgICAgICAgIDwvZGl2PlxyXG4gIC8vICAgICA8L2Rpdj5gXHJcbiAgLy8gICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gIC8vICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgLy8gICBsZXQgZnVuID0ge1xyXG4gIC8vICAgICBsaW5rRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAvLyAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gIC8vICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAvLyAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAvLyAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgLy8gICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgLy8gICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgLy8gICAgICAgICAgICAgPC9kaXY+XHJcbiAgLy8gICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgLy8gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAvLyAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDE0MHB4O1wiPlxyXG4gIC8vICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIubXA0LCAucGRmXCIgY2xhc3M9XCJmaWxlLXNlbGVjdFwiIGluZGV4PVwiYCsgaSArIGBcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxyXG4gIC8vICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImZpbGVTZWxlY3RcIj4uLi48L2J1dHRvbj5cclxuICAvLyAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gIC8vICAgICAgICAgICAgIDwvZGl2PlxyXG4gIC8vICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gIC8vICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGV4dFwiIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgLy8gICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0XCIgQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gIC8vICAgICAgICAgICAgIDwvZGl2PmBcclxuICAvLyAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgLy8gICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gIC8vICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAvLyAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAvLyAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgLy8gICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgLy8gICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gIC8vICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAvLyAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gIC8vICAgICAgICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICBicmVha1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAvLyAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIC8vICAgICB9LFxyXG5cclxuICAvLyAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldID0gdmFsdWVcclxuICAvLyAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgLy8gICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAvLyAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAvLyAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgLy8gICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gIC8vICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgLy8gICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgLy8gICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gIC8vICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gIC8vICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gIC8vICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAvLyAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgLy8gICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gIC8vICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAvLyAgICAgICAgICAgYnJlYWtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhXHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhID0gdlxyXG4gIH1cclxuXHJcbiAgLy/liJvlu7pcclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHRoYXQpIHtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhuZXcgQ2VzaXVtLkN1c3RvbU1hdGVyaWFsU291cmNlKCksIG5ldyBDZXNpdW0uUG9seWxpbmVUcmFpbExpbmtNYXRlcmlhbFByb3BlcnR5KCkpXHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgbGV0IG1pbmltdW1IZWlnaHRzID0gW11cclxuICAgIGxldCBtYXhpbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSB0aGF0LmdldE1hdGVyaWFsKClcclxuICAgIGxldCB3aWR0aCA9IHRoYXQuY29tcHV0ZURpc3RhbmNlMihwb3NpdGlvbnMpXHJcbiAgICBsZXQgZXh0cnVkZWRIZWlnaHQgPSB0aGF0LmFzcGVjdFJhdGlvID8gKHdpZHRoIC8gdGhhdC5hc3BlY3RSYXRpbykgOiAwXHJcbiAgICAvLyBhc3BlY3RSYXRpb1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICAgIG1pbmltdW1IZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgbWF4aW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0ICsgZXh0cnVkZWRIZWlnaHQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgIHdhbGw6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgICAgY29ybmVyVHlwZTogQ2VzaXVtLkNvcm5lclR5cGUuTUlURVJFRCxcclxuICAgICAgICBtYXhpbXVtSGVpZ2h0czogbWF4aW11bUhlaWdodHMsXHJcbiAgICAgICAgbWluaW11bUhlaWdodHM6IG1pbmltdW1IZWlnaHRzLFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgfSxcclxuICAgICAgLy8gd2FsbDoge1xyXG4gICAgICAvLyAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgIC8vICAgbWF4aW11bUhlaWdodHM6IG1heGltdW1IZWlnaHRzLFxyXG4gICAgICAvLyAgIG1pbmltdW1IZWlnaHRzOiBtaW5pbXVtSGVpZ2h0cyxcclxuICAgICAgLy8gICBtYXRlcmlhbDogbmV3IENlc2l1bS5Qb2x5bGluZVRyYWlsTGlua01hdGVyaWFsUHJvcGVydHkoe2R1cmF0aW9uOiAxNTAwfSksXHJcbiAgICAgIC8vICAgb3V0bGluZTogdHJ1ZSxcclxuICAgICAgLy8gICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5CTEFDSyxcclxuICAgICAgLy8gfVxyXG4gICAgfSlcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZih0aGF0Lm9wdGlvbnMuc2hvdykge1xyXG4gICAgICAgXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn56uL5L2T5paH5a2X5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy50ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWNvbmRhcnlFZGl0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIFN0YW5kVGV4dC5ub2RlRWRpdCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBzdGFuZC10ZXh0J1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwodGhpcylcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChjb250ZW50RWxtKVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhXHJcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIC8vICAgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgICAvLyB9LCA1MDApO1xyXG5cclxuICAgICAgLy8g5Yib5bu65qCH562+6aG1XHJcbiAgICAgIC8vIGxldCB0YWJzRWxtID0gbmV3IGN5X3RhYnMoJ3JhZGFyLXNjYW4tZWRpdC10YWJzJylcclxuICAgICAgLy8g6aKc6Imy57uE5Lu2XHJcbiAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuY29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFtjb2xvclBpY2tlcl1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUoKVxyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9yaWdpbmFsT3B0aW9ucylcclxuICAgIHRoaXMudGV4dCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnRleHRcclxuICAgIHRoaXMuY29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5jb2xvclxyXG4gICAgdGhpcy5zcGVlZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNwZWVkXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGxldCBtaW5pbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICBsZXQgbWF4aW11bUhlaWdodHMgPSBbXVxyXG4gICAgbGV0IHdpZHRoID0gdGhpcy5jb21wdXRlRGlzdGFuY2UyKHBvc2l0aW9ucylcclxuICAgIGxldCBleHRydWRlZEhlaWdodCA9IHRoaXMuYXNwZWN0UmF0aW8gPyAod2lkdGggLyB0aGlzLmFzcGVjdFJhdGlvKSA6IDBcclxuICAgIC8vIGFzcGVjdFJhdGlvXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgbWluaW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICBtYXhpbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQgKyBleHRydWRlZEhlaWdodClcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5LndhbGwucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TWF0ZXJpYWwoKSB7XHJcbiAgICBsZXQgbWF0ZXJpYWxcclxuICAgIGxldCBjYW52YXMgPSB0aGlzLmdldGNhbnZhcygpXHJcbiAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKSxcclxuICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgcmVwZWF0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMSwgMS4wKSxcclxuICAgICAgZHVyYXRpb246IDUwMDAwIC8gdGhpcy5vcHRpb25zLnNwZWVkLFxyXG4gICAgICBmbHRyOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHJldHVybiBtYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgZ2V0Y2FudmFzKCkge1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG5cclxuICAgIGxldCB0ZXh0QXJyYXkgPSB0aGlzLm9wdGlvbnMudGV4dC5zcGxpdCgnXFxuJylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0ZXh0QXJyYXlbaV0ubGVuZ3RoID4gODApIHtcclxuICAgICAgICB0ZXh0QXJyYXlbaV0gPSB0ZXh0QXJyYXlbaV0uc2xpY2UoMCwgODAtdGV4dEFycmF5W2ldLmxlbmd0aClcclxuICAgICAgfSBcclxuICAgIH1cclxuICAgIGlmICh0ZXh0QXJyYXkubGVuZ3RoID4gNzApIHtcclxuICAgICAgdGV4dEFycmF5LnNwbGljZSg3MCAtIHRleHRBcnJheS5sZW5ndGgpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IHRleHRBcnJheS5qb2luKCdcXG4nKVxyXG4gICAgbGV0IG1heFdpZHRoID0gMFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY3R4LmZvbnQgPSAyMDAgKyBcInB4IHNlcmlmXCI7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KHRleHRBcnJheVtpXSkud2lkdGg7XHJcbiAgICAgIGlmKG1heFdpZHRoPHdpZHRoKSB7XHJcbiAgICAgICAgbWF4V2lkdGggPSB3aWR0aFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYW52YXMud2lkdGggPSBtYXhXaWR0aFxyXG4gICAgY2FudmFzLmhlaWdodCA9IDIyMCAqIHRleHRBcnJheS5sZW5ndGhcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0eC5mb250ID0gMjAwICsgXCJweCBzZXJpZlwiO1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMCknXHJcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBtYXhXaWR0aCArIDMwLCAyMTApXHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7XHJcbiAgICAgIGN0eC5mb250ID0gXCIyMDBweCBzZXJpZlwiO1xyXG4gICAgICBjdHguZmlsbFRleHQodGV4dEFycmF5W2ldLCAwLCAyMTAgKiAoaSsxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hc3BlY3RSYXRpbyA9IHRoaXMub3B0aW9ucy50ZXh0ID8gKGNhbnZhcy53aWR0aCAvIGNhbnZhcy5oZWlnaHQpIDogMFxyXG4gICAgcmV0dXJuIGNhbnZhc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMudGV4dCwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9kZUVkaXQodGhhdCwgY2IgPSAoKSA9PiB7IH0pIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgIGxldCBtaW5pbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICAgIGxldCBtYXhpbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICAgIGxldCB3aWR0aCA9IHRoYXQuY29tcHV0ZURpc3RhbmNlMihwb3NpdGlvbnMpXHJcbiAgICAgIGxldCBleHRydWRlZEhlaWdodCA9IHRoYXQuYXNwZWN0UmF0aW8gPyAod2lkdGggLyB0aGF0LmFzcGVjdFJhdGlvKSA6IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgICBtaW5pbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgICAgbWF4aW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0ICsgZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpc0FkZCA9IGZhbHNlXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgaXNBZGQgPSB0cnVlXHJcbiAgICAgICAgICBsZXQgcG9zMyA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KGNhcnRlc2lhbiwgW3RoYXQuZW50aXR5XSlcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdCksXHJcbiAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdKVxyXG5cclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgIG1pbmltdW1IZWlnaHRzID0gW11cclxuICAgICAgICAgIG1heGltdW1IZWlnaHRzID0gW11cclxuICAgICAgICAgIHdpZHRoID0gdGhhdC5jb21wdXRlRGlzdGFuY2UyKHBvc2l0aW9ucylcclxuICAgICAgICAgIGV4dHJ1ZGVkSGVpZ2h0ID0gdGhhdC5hc3BlY3RSYXRpbyA/ICh3aWR0aCAvIHRoYXQuYXNwZWN0UmF0aW8pIDogMFxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICAgICAgICAgIG1pbmltdW1IZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgICAgICAgbWF4aW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0ICsgZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0LnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbi54LFxyXG4gICAgICAgICAgICBtb3ZlbWVudC5wb3NpdGlvbi55XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShwaWNrLmlkLmluZGV4LCAxKVxyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCflt6bplK7lvIDlp4vvvIzlj7PplK7nu5PmnZ/vvIxDVFJMK+WPs+mUruaSpOmUgCcpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICB0aGF0LmVudGl0eS53YWxsLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICAgIHRoYXQuZW50aXR5LndhbGwubWF4aW11bUhlaWdodHMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXhpbXVtSGVpZ2h0c1xyXG4gICAgICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICAgICAgdGhhdC5lbnRpdHkud2FsbC5taW5pbXVtSGVpZ2h0cyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1pbmltdW1IZWlnaHRzXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmlnaHRFdmVudCA9IChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IG9yaWdpbmFsUG9zaXRpb25cclxuICAgICAgICAgIGlmKGlzQWRkKSB7XHJcbiAgICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMuc3BsaWNlKHNlbGVjdFBvaW50LmluZGV4LCAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2IobnVsbCwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICBtaW5pbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICAgICAgbWF4aW11bUhlaWdodHMgPSBbXVxyXG4gICAgICAgIHdpZHRoID0gdGhhdC5jb21wdXRlRGlzdGFuY2UyKHBvc2l0aW9ucylcclxuICAgICAgICBleHRydWRlZEhlaWdodCA9IHRoYXQuYXNwZWN0UmF0aW8gPyAod2lkdGggLyB0aGF0LmFzcGVjdFJhdGlvKSA6IDBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQpXHJcbiAgICAgICAgICBtaW5pbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgICAgICBtYXhpbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQgKyBleHRydWRlZEhlaWdodClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5lbnRpdHkud2FsbC5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgICAgICB0aGF0LnRpcC5kZXN0cm95KClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9sZWZ0KGxlZnRFdmVudClcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQocmlnaHRFdmVudClcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgbGV0IHBvczMgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUuY2xhbXBUb0hlaWdodChjYXJ0ZXNpYW4sIFt0aGF0LmVudGl0eV0pXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zMywgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgICAgbWluaW11bUhlaWdodHMgPSBbXVxyXG4gICAgICAgICAgbWF4aW11bUhlaWdodHMgPSBbXVxyXG4gICAgICAgICAgd2lkdGggPSB0aGF0LmNvbXB1dGVEaXN0YW5jZTIocG9zaXRpb25zKVxyXG4gICAgICAgICAgZXh0cnVkZWRIZWlnaHQgPSB0aGF0LmFzcGVjdFJhdGlvID8gKHdpZHRoIC8gdGhhdC5hc3BlY3RSYXRpbykgOiAwXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdClcclxuICAgICAgICAgICAgbWluaW11bUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICAgICAgICBtYXhpbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQgKyBleHRydWRlZEhlaWdodClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi54LFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHRfa2V5Ym9hcmRfY3RybCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5wb3AoKVxyXG4gICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbdGhhdC5ub2RlUG9pbnRzLmxlbmd0aCAtIDFdKVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnBvcCgpXHJcbiAgICAgICAgICBpZiAoc2VsZWN0UG9pbnQuaW5kZXggPT09IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXSkge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gdGhhdC5ub2RlUG9pbnRzW3NlbGVjdFBvaW50LmluZGV4IC0gMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWxlY3RQb2ludC5pbmRleCA9IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19zdGFydCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgIHk6IChtb3ZlbWVudC5wb3NpdGlvbjEueSArIG1vdmVtZW50LnBvc2l0aW9uMi55KSAvIDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5ldmVudC5nZXN0dXJlX3BpbmNrX2VuZCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKClcclxuICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAvLyDplb/mjInlj5bmtohcclxuICAgICAgICAgICAgcmlnaHRFdmVudChwb3MsIGNhcnRlc2lhbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIG5hbWU6ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50JyxcclxuICAgICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdCwgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5hbHQpLFxyXG4gICAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoYXQubm9kZVBvaW50cy5wdXNoKGVudGl0eSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhbmRUZXh0XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE0Q0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF6RkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXRPQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBekNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TextObject/StandText/index.js\n"); /***/ }), /***/ "./src/Obj/Base/TrajectoryMotion/_element.js": /*!***************************************************!*\ !*** ./src/Obj/Base/TrajectoryMotion/_element.js ***! \***************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
    \\n
    \\n
    \\n \\u540D\\u79F0\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u8D77\\u59CB\\u70B9\\u9AD8\\u5EA6\\n
    \\n \\n m\\n \\n
    \\n
    \\n
    \\n \\u6A21\\u578B\\u500D\\u6570\\n
    \\n \\n \\u500D\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u8FD0\\u884C\\u901F\\u5EA6\\n
    \\n \\n m/s\\n \\n
    \\n
    \\n
    \\n \\u5EF6\\u8FDF\\u8FD0\\u52A8\\n
    \\n \\n ms\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u66F4\\u6362\\u6A21\\u578B\\n \\n
    \\n
    \\n \\u6A21\\u578B\\u65B9\\u5411\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u8DEF\\u5F84\\u663E\\u9690\\n \\n
    \\n
    \\n \\u6A21\\u578B\\u663E\\u9690\\n \\n
    \\n
    \\n \\u5B9E\\u65F6\\u8DEF\\u5F84\\n \\n
    \\n
    \\n
    \\n
    \\n \\u7F16\\u8F91\\n \\n
    \\n
    \\n \\u8DEF\\u5F84\\u5706\\u6ED1\\n \\n
    \\n
    \\n \\u73AF\\u7EBF\\n \\n
    \\n
    \\n
    \\n
    \\n \\u8F68\\u8FF9\\u8D34\\u5730\\n \\n
    \\n
    \\n \\u8F68\\u8FF9\\u5FAA\\u73AF\\n \\n
    \\n
    \\n \\u8F68\\u8FF9\\u52A8\\u753B\\n \\n
    \\n
    \\n
    \\n
    \\n \\u8DEF\\u5F84\\u65B9\\u5411\\n \\n
    \\n
    \\n \\u89C6\\u89D2\\u8DDF\\u968F\\n \\n
    \\n
    \\n \\u6A21\\u578B\\u52A8\\u753B\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u6587\\u5B57\\u5F00\\u5173\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u5B57\\u4F53\\u989C\\u8272\\n
    \\n
    \\n
    \\n \\u5B57\\u4F53\\u9009\\u62E9\\n
    \\n
    \\n
    \\n \\u5B57\\u4F53\\u5927\\u5C0F\\n
    \\n \\n px\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
    \\n
    \\n \\u6700\\u8FD1\\u8DDD\\u79BB\\n
    \\n \\n m\\n \\n
    \\n
    \\n
    \\n \\u6700\\u8FDC\\u8DDD\\u79BB\\n
    \\n \\n m\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\u6CB9\\u8017\\n
    \\n \\n L/100km\\n \\n
    \\n
    \\n
    \\n \\u603B\\u6CB9\\u8017\\n \\n
    \\n
    \\n
    \\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVHJhamVjdG9yeU1vdGlvbi9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9UcmFqZWN0b3J5TW90aW9uL19lbGVtZW50LmpzPzE2YWYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaHRtbCgpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgc3R5bGU9XCJmbGV4OiAwIDAgNzBweDtcIj7lkI3np7A8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG1heGxlbmd0aD1cIjQwXCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJuYW1lXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDcwcHg7XCI+6LW35aeL54K56auY5bqmPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xIGhlaWdodC1ib3hcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCItOTk5OTk5OVwiIG1heD1cIjk5OTk5OTk5OVwiIEBtb2RlbD1cImhlaWdodFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaooeWei+WAjeaVsDwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OVwiIHN0ZXA9XCIxXCIgQG1vZGVsPVwic2NhbGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+5YCNPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogMCAwIDcwcHg7XCI+6L+Q6KGM6YCf5bqmPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OTk5XCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJzcGVlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tL3M8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5bu26L+f6L+Q5YqoPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0zXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OTlcIiBAbW9kZWw9XCJkZWxheVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tczwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IDAgMCA3MHB4O1wiPuabtOaNouaooeWeizwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBAY2xpY2s9XCJjbGlja0NoYW5nZU1vZGVsXCI+6YCJ5oupPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaooeWei+aWueWQkTwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gbW9kZWwtcm90YXRlLWJ0blwiIEBjbGljaz1cIm1vZGVsUm90YXRlXCI+5byA5aeL6LCD5pW0PC9idXR0b24+XHJcbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiaWNvbi1ydWJyaWNcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi1ydWJyaWNcIj48L3VzZT48L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogNXB4IDAgMCA1cHg7XCIgbmFtZT1cImZpcnN0UGVyc29uXCJcclxuICAgICAgICAgICAgICBkYXRhLXN0YXRlPVwidHJ1ZVwiPjxzcGFuPuesrOS4gOinhuinkjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7XCIgbmFtZT1cImZpcnN0UGVyc29uXCJcclxuICAgICAgICAgICAgICBkYXRhLXN0YXRlPVwiZmFsc2VcIj48c3Bhbj7nrKzkuInop4bop5I8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbSBkaXYtaXRlbS1zd2l0Y2hcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ot6/lvoTmmL7pmpA8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibGluZVNob3dcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5qih5Z6L5pi+6ZqQPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cIm1vZGVsU2hvd1wiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lrp7ml7bot6/lvoQ8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwicmVhbFRpbWVSb3V0ZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nvJbovpE8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibGluZUVkaXRcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6Lev5b6E5ZyG5ruRPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cInNtb290aFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7njq/nur88L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibm9zZVRvVGFpbFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ovajov7notLTlnLA8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwiZ3JvdW5kXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui9qOi/ueW+queOrzwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJsb29wXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPui9qOi/ueWKqOeUuzwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJzdGF0ZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7ot6/lvoTmlrnlkJE8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwicm91dGVEaXJlY3Rpb25cIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDMzcHg7XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6KeG6KeS6Lef6ZqPPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cInZpZXdGb2xsb3dcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW46IDBweDtcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mqKHlnovliqjnlLs8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0IG1vZGVsLWFuaW1hdGUtc2VsZWN0XCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5paH5a2X5byA5YWzPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cImxhYmVsU2hvd1wiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDE0cHg7XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5a2X5L2T6aKc6ImyPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29sb3JcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvbnQtc2VsZWN0LWJveFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwiZmxleDogbm9uZTtcIj7lrZfkvZPpgInmi6k8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQgaW5wdXQtc2VsZWN0IGZvbnQtc2VsZWN0XCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWtl+S9k+Wkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiIHN0eWxlPVwid2lkdGg6IDgycHg7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5XCIgQG1vZGVsPVwibGFiZWxGb250U2l6ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7op4bph47nvKnmlL48L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibGFiZWxTY2FsZUJ5RGlzdGFuY2VcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pyA6L+R6Led56a7PC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCIgc3R5bGU9XCJ3aWR0aDogODJweDtcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5OTk5OTlcIiBAbW9kZWw9XCJsYWJlbE5lYXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnIDov5zot53nprs8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIiBzdHlsZT1cIndpZHRoOiA4MnB4O1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjFcIiBtYXg9XCI5OTk5OTk5OVwiIEBtb2RlbD1cImxhYmVsRmFyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7msrnogJc8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTZcIiBzdHlsZT1cIndpZHRoOiAxNzBweDtcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5OTk5OTlcIiBAbW9kZWw9XCJ1bml0RnVlbENvbnN1bXB0aW9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPkwvMTAwa208L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJmbGV4OiAwIDAgMDtcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mgLvmsrnogJc8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwiZnVlbFNob3dcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBeU1BOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/TrajectoryMotion/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/TrajectoryMotion/index.js": /*!************************************************!*\ !*** ./src/Obj/Base/TrajectoryMotion/index.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/TrajectoryMotion/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _ModelController_EditGltf__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../ModelController/EditGltf */ \"./src/Obj/ModelController/EditGltf.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../Obj/Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _timeoutEventObject = /*#__PURE__*/new WeakMap();\nvar _lineEdit = /*#__PURE__*/new WeakMap();\nvar _requestAnimationFrameEventId = /*#__PURE__*/new WeakMap();\nvar _requestAnimationFrameEventId2 = /*#__PURE__*/new WeakMap();\nvar _mouseRightevent = /*#__PURE__*/new WeakMap();\nvar _firstPersonViewEvent = /*#__PURE__*/new WeakMap();\nvar TrajectoryMotion = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 轨迹运动\r\n * @param sdk\r\n * @param options {object}\r\n * @param options.id {string} 唯一标识\r\n * @param options.name {string} 名称\r\n * @param options.speed=1 {number} 运行速度\r\n * @param options.delay=0 {number} 运动延迟时间(毫秒)\r\n * @param options.loop=true {boolean} 循环\r\n * @param options.height {number} 起始点高度\r\n * @param options.ground=false {boolean} 贴地\r\n * @param options.state=true {boolean} 模型运动\r\n * @param options.routeDirection=true {boolean} 路径方向\r\n * @param options.viewFollow=false {boolean} 视角跟随\r\n * @param options.realTimeRoute=false {boolean} 实时路径\r\n * @param options.model {object} 模型参数\r\n * @param options.model.show=true {boolean} 模型显隐\r\n * @param options.model.url {string} 模型地址\r\n * @param options.model.pixelSize=70 {number} 模型像素大小\r\n * @param options.model.heading=0 {number} 模型航向角\r\n * @param options.model.pitch=0 {number} 模型俯仰角\r\n * @param options.model.roll=0 {number} 模型翻滚角\r\n * @param options.model.scale=1 {number} 模型比例\r\n * @param options.model.animate {string} 模型动画\r\n * @param options.line {object} 路径参数\r\n * @param options.line.show=true {boolean} 路径显隐\r\n * @param options.line.smooth=false {boolean} 路径圆滑\r\n * @param options.line.noseToTail=false {boolean} 路径首尾相联\r\n * @param {Array.} options.line.positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * */\n function TrajectoryMotion(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, TrajectoryMotion);\n _this2 = _callSuper(this, TrajectoryMotion, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _timeoutEventObject, null);\n _classPrivateFieldInitSpec(_this2, _lineEdit, false);\n _classPrivateFieldInitSpec(_this2, _requestAnimationFrameEventId, void 0);\n _classPrivateFieldInitSpec(_this2, _requestAnimationFrameEventId2, void 0);\n _classPrivateFieldInitSpec(_this2, _mouseRightevent, void 0);\n _classPrivateFieldInitSpec(_this2, _firstPersonViewEvent, void 0);\n _this2.options.name = options.name || '';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 1;\n if (_this2.options.speed <= 0) {\n _this2.options.speed = 0.01;\n }\n _this2.options.delay = options.delay || 0;\n _this2.options.loop = options.loop || options.loop === false ? options.loop : true;\n _this2.options.model = options.model = options.model || {};\n _this2.options.line = options.line = options.line || {};\n _this2.options.line.positions = options.line.positions || [];\n // this.options.height = (options.height || options.height === 0) ? options.height : (this.options.line.positions[0] ? this.options.line.positions[0].alt : 0)\n _this2.options.height = _this2.options.line.positions[0] ? _this2.options.line.positions[0].alt : 0;\n _this2.options.height = Number(_this2.options.height.toFixed(2));\n _this2.options.line.show = options.line.show || options.line.show === false ? options.line.show : true;\n _this2.options.model.show = options.model.show || options.model.show === false ? options.model.show : true;\n _this2.options.model.url = options.model.url || '';\n _this2.options.model.pixelSize = options.model.pixelSize || 70;\n _this2.options.model.heading = options.model.heading || 0;\n _this2.options.model.pitch = options.model.pitch || 0;\n _this2.options.model.roll = options.model.roll || 0;\n _this2.options.model.scale = options.model.scale || options.model.scale === 0 ? options.model.scale : 1;\n _this2.options.model.animate = options.model.animate || '无';\n _this2.options.line.smooth = options.line.smooth ? options.line.smooth : false;\n _this2.options.line.noseToTail = options.line.noseToTail ? options.line.noseToTail : false;\n _this2.positions_smooth = [];\n _this2.options.unitFuelConsumption = options.unitFuelConsumption || 0;\n _this2.options.ground = options.ground || false;\n _this2.options.state = options.state || options.state === false ? options.state : true;\n _this2.options.routeDirection = options.routeDirection || options.routeDirection === false ? options.routeDirection : true;\n _this2.keyPoints = [];\n _this2.realTimePositions = [];\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n _this2.realTimeRouteArray = [];\n // this.options.firstPerson = false\n _this2.distance;\n // this.addModel()\n\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n if (_this2.options.line.positions.length < 2) {\n _this2._error = '最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_this2.sdk);\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_11__[\"default\"]();\n _this2.options.viewFollow = false;\n _this2.options.firstPersonView = false;\n TrajectoryMotion.addLine(_this2);\n _this2.firstPersonView = false;\n\n // this.options.viewFollowOrientation = options.viewFollowOrientation\n }\n\n // animateUpdate()\n // function animateUpdate() {\n // requestAnimationFrame(animateUpdate);\n // TWEEN.update();\n // }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(TrajectoryMotion, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(TrajectoryMotion, [{\n key: \"type\",\n get: function get() {\n return 'TrajectoryMotion';\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n if (this.originalOptions) {\n this.originalOptions.show = v;\n }\n }\n if (this.options.show) {\n if (this.firstPersonView) {\n this.model.show = false;\n } else {\n this.model.show = !this.showView || this.showView == 3 || !sdkD ? this.modelShow : false;\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n this.line.polyline.material = this.lineShow ? new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff'),\n dashLength: 20\n }) : new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff00'),\n dashLength: 20\n });\n } else {\n this.line.polyline.material = new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff00'),\n dashLength: 20\n });\n }\n for (var i = 0; i < this.keyPoints.length; i++) {\n this.keyPoints[i].show = !this.showView || this.showView == 3 || !sdkD ? this.keyPointShow : false;\n }\n if (this.realTimeRoute) {\n this.realTimeLine && (this.realTimeLine.show = !this.showView || this.showView == 3 || !sdkD ? true : false);\n }\n this.label && (this.label.show = !this.showView || this.showView == 3 ? this.options.label.show : false);\n this.fuelLabel && (this.fuelLabel.show = !this.showView || this.showView == 3 ? this.options.fuelShow : false);\n } else {\n this.model.show = !this.showView || this.showView == 3 || !sdkD ? this.options.show : false;\n var show = this.options.show;\n if (!this.showView || this.showView == 3 || !sdkD) {\n show = this.options.show;\n } else {\n show = false;\n }\n this.realTimeLine && (this.realTimeLine.show = false);\n this.line.polyline.material = show ? new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff'),\n dashLength: 20\n }) : new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff00'),\n dashLength: 20\n });\n for (var _i = 0; _i < this.keyPoints.length; _i++) {\n this.keyPoints[_i].show = !this.showView || this.showView == 3 ? show : false;\n }\n this.label && (this.label.show = false);\n this.fuelLabel && (this.fuelLabel.show = false);\n this.viewFollow = false;\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this3 = this;\n if (this.ground) {\n return;\n }\n var difference = this.options.height - Number(v.toFixed(2));\n this.options.height = Number(v.toFixed(2));\n if (this.line) {\n if (this.ground) {} else {\n var dvalue = this.options.height - this.options.line.positions[0].alt;\n this.line.polyline.clampToGround = false;\n for (var i = 0; i < this.keyPoints.length; i++) {\n this.options.line.positions[i].alt += dvalue;\n this.keyPoints[i].position = Cesium.Cartesian3.fromDegrees(this.options.line.positions[i].lng, this.options.line.positions[i].lat, this.options.line.positions[i].alt);\n }\n }\n }\n if (this.model && this.model.position) {\n var heading = this.model.heading;\n var pitch = this.model.pitch;\n var roll = this.model.roll;\n if (isNaN(heading) || isNaN(pitch) || isNaN(roll)) {\n return;\n }\n var matrix = Cesium.Transforms.eastNorthUpToFixedFrame(this.model.position);\n Cesium.Matrix4.multiplyByTranslation(matrix, new Cesium.Cartesian3(0, 0, -difference), matrix);\n Cesium.Matrix4.getTranslation(matrix, this.model.position);\n Cesium.Matrix4.multiplyByMatrix3(matrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll)), this.entity.modelMatrix);\n\n // Cesium.Matrix4.multiplyByTranslation(this.model.modelMatrix, new Cesium.Cartesian3(0, 0, -difference), this.model.modelMatrix)\n // Cesium.Matrix4.getTranslation(this.model.modelMatrix, this.model.position)\n this.label && (this.label.show = this.label.show);\n this.fuelLabel && (this.fuelLabel.show = this.fuelLabel.show);\n if (this.options.label.position) {\n setTimeout(function () {\n if (_this3.options.label.position.alt) {\n _this3.label && (_this3.label.position = [_this3.options.label.position.lng, _this3.options.label.position.lat, _this3.options.label.position.alt]);\n _this3.fuelLabel && (_this3.fuelLabel.position = [_this3.options.label.position.lng, _this3.options.label.position.lat, _this3.options.label.position.alt]);\n } else {\n _this3.getClampToHeight({\n lng: _this3.options.label.position.lng,\n lat: _this3.options.label.position.lat\n }).then(function (height) {\n _this3.label && (_this3.label.position = [_this3.options.label.position.lng, _this3.options.label.position.lat, height]);\n _this3.fuelLabel && (_this3.fuelLabel.position = [_this3.options.label.position.lng, _this3.options.label.position.lat, height]);\n });\n }\n }, 0);\n }\n }\n var positions_smooth = this.renewLinePositions(this.options.line.positions);\n this.line.polyline.positions = positions_smooth;\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = Number(v.toFixed(2));\n });\n }\n }, {\n key: \"ground\",\n get: function get() {\n return this.options.ground;\n },\n set: function set(v) {\n var _this4 = this;\n this.lineEdit = false;\n this.options.ground = v;\n this.realTimeLine.polyline.clampToGround = v;\n this.height = this.options.height;\n if (this.line) {\n if (v) {\n this.line.polyline.clampToGround = true;\n var _loop = function _loop(i) {\n _this4.sdk.viewer.scene.clampToHeightMostDetailed([new Cesium.Cartesian3.fromDegrees(_this4.options.line.positions[i].lng, _this4.options.line.positions[i].lat)]).then(function (result) {\n _this4.keyPoints[i].position = result[0];\n });\n };\n for (var i = 0; i < this.keyPoints.length; i++) {\n _loop(i);\n }\n }\n }\n setTimeout(function () {\n if (_this4.TweenAnimate && _this4.TweenAnimate._isPlaying) {\n _this4.setMovePositionByDistance(_this4.TweenAnimate._object.distance);\n } else {\n _this4.setMovePositionByDistance(0);\n }\n }, 200);\n\n // let _this = this\n\n // let positions = this.renewLinePositions(this.options.line.positions)\n // let startDistance = this.TweenAnimate._object.distance\n // let lineString = []\n // for (let i = 0; i < positions.length; i++) {\n // let position = this.cartesian3Towgs84(positions[i], _this.sdk.viewer)\n // lineString.push([position.lng, position.lat, position.alt])\n // }\n // let line = turf.lineString(lineString);\n // this.distance = turf.length(line, { units: 'kilometers' });\n // setPosition(startDistance)\n\n // async function setPosition(distance) {\n // let start = 0;\n // let stop = distance;\n // let coordinates\n // let sliced = line\n // if (stop) {\n // sliced = await turf.lineSliceAlong(line, start, stop, { units: 'kilometers' });\n // // _this.realTimeRouteArray = sliced+\n // coordinates = [...sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]]\n // }\n // else {\n // coordinates = [...line.geometry.coordinates[0]]\n // }\n // let position\n // let positionCamera\n\n // if (_this.ground) {\n // // if (viewer.terrainProvider.availability) {\n // // let result = await new Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(coordinates[0], coordinates[1])]);\n // // position = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], result[0].height)\n // // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], result[0].height + 1)\n // // }\n // // else {\n // // position = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1])\n // // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], 1)\n // // }\n // let filterEntitys = []\n // // for (let [key, value] of _this.sdk.entityMap) {\n // // if (!value.type || (value.type !== 'glb' && value.type!== 'bim' && value.type!== 'tileset' && value.type!== 'TrajectoryMotion' && value.entity)) {\n // // console.log(value.entity)\n // // filterEntitys.push(value.entity.id)\n // // }\n // // }\n // // console.log('8888888888',_this.model, ...filterEntitys)\n\n // let result\n // let sdk2D = get2DView()\n // if (sdk2D && _this.sdk == sdk2D) {\n // result = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1])\n // position = result\n // }\n // else {\n // result = await _this.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]), [_this.model, ...filterEntitys])\n // position = result\n // }\n // if (!result) {\n // position = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1])\n // }\n // let pos3 = _this.cartesian3Towgs84(position, _this.sdk.viewer);\n // let height2 = 0\n // try {\n // let position2 = await Cesium.sampleTerrainMostDetailed(\n // _this.sdk.viewer.scene.terrainProvider,\n // [Cesium.Cartographic.fromDegrees(pos3.lng, pos3.lat)]\n // )\n // height2 = position2[0].height\n // } catch (error) {\n // height2 = 0\n // }\n // if (pos3.alt < height2) {\n // pos3.alt = height2\n // }\n // pos3.alt = Number(pos3.alt.toFixed(1))\n // position = Cesium.Cartesian3.fromDegrees(pos3.lng, pos3.lat, pos3.alt)\n // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], _this.cartesian3Towgs84(position, _this.sdk.viewer).alt + 1.8)\n // let fromDegreesArray = []\n\n // for (let i = 0; i < sliced.geometry.coordinates.length; i++) {\n // fromDegreesArray.push(sliced.geometry.coordinates[i][0], sliced.geometry.coordinates[i][1])\n // }\n // _this.realTimePositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)\n // // _this.realTimeLine.polyline.positions = \n // }\n // else {\n // let cartesian3 = _this.spline.evaluate(distance / _this.distance)\n // if (!cartesian3) {\n // return\n // }\n // coordinates = _this.cartesian3Towgs84(cartesian3, _this.sdk.viewer);\n // position = cartesian3\n // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates.lng, coordinates.lat, coordinates.alt + 1.8)\n // let positions_smooth = []\n // for (let i = 0; i <= 1000; i++) {\n // if ((i / 1000) > (distance / _this.distance)) {\n // break\n // }\n // let cartesian3 = _this.spline.evaluate(i / 1000);\n // positions_smooth.push(cartesian3);\n // }\n // positions_smooth.push(cartesian3)\n // _this.realTimePositions = positions_smooth\n // }\n\n // HeadingPitchRoll = getHeadingPitchRoll(_this.model.position, position)\n // if (previous && previous.position) {\n // HeadingPitchRoll2 = getHeadingPitchRoll(previous.position, position)\n // HeadingPitchRoll.pitch = HeadingPitchRoll2.pitch\n // }\n // previous.position = _this.model.position\n // let modeHeadingPitchRoll = Cesium.HeadingPitchRoll.fromDegrees(_this.options.model.heading, _this.options.model.pitch, _this.options.model.roll)\n // let heading = 0\n // let pitch = 0\n // let roll = 0\n\n // let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position)\n // if (_this.options.routeDirection && !_this.lineEdit) {\n // heading = (HeadingPitchRoll.heading) * (180 / Math.PI) - 90 - _this.options.model.heading\n // pitch = (HeadingPitchRoll.pitch) * (180 / Math.PI) - _this.options.model.pitch\n // roll = _this.options.model.roll\n // if (isNaN(heading) || isNaN(pitch) || isNaN(roll)) {\n // return\n // }\n // _this.model.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(matrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll)), _this.model.modelMatrix)\n // }\n // else {\n // if (_this.entity) {\n // heading = _this.options.model.heading\n // pitch = _this.options.model.pitch\n // roll = _this.options.model.roll\n // if (isNaN(heading) || isNaN(pitch) || isNaN(roll)) {\n // return\n // }\n // // 旋转\n // let mx = Cesium.Matrix3.fromRotationX(\n // Cesium.Math.toRadians(roll)\n // )\n // let my = Cesium.Matrix3.fromRotationY(\n // Cesium.Math.toRadians(pitch)\n // )\n // let mz = Cesium.Matrix3.fromRotationZ(\n // Cesium.Math.toRadians(heading)\n // )\n // let rotationX = Cesium.Matrix4.fromRotationTranslation(mx)\n // let rotationY = Cesium.Matrix4.fromRotationTranslation(my)\n // let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz)\n // let originalMatrix = new Cesium.Matrix4()\n // Cesium.Matrix4.multiply(matrix, rotationX, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix)\n // Cesium.Matrix4.multiply(originalMatrix, rotationZ, _this.entity.modelMatrix)\n // }\n // }\n // // console.log((HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI))\n\n // _this.model.position = position\n // if (!position) {\n // return\n // }\n // let labelPosition = _this.cartesian3Towgs84(position, _this.sdk.viewer)\n // _this.label.position = [labelPosition.lng, labelPosition.lat, labelPosition.alt]\n // lastDistance = distance\n // // console.log(position)\n // _this.realTimeRouteArray.push(position)\n // if (_this.viewFollow) {\n // // console.log(Cesium.Math.toDegrees(_this.sdk.viewer.camera.pitch))\n // if (_this.options.firstPersonView) {\n // _this.sdk.viewer.camera.setView({\n // destination: positionCamera,\n // orientation: {\n // heading: Cesium.Math.toRadians(heading + 90 + _this.firstPersonHeadingPitch.heading),\n // pitch: Cesium.Math.toRadians(_this.firstPersonHeadingPitch.pitch),\n // roll: 0\n // }\n // })\n // }\n // else {\n // if (_this.sdk.viewer.scene.mode === 3) {\n // if (_this.sdk.viewer.trackedEntity) {\n // _this.sdk.viewer.trackedEntity.position = position\n // // _this.sdk.viewer.camera.position = position\n // }\n // }\n // else {\n // if (_this.sdk.viewer.trackedEntity) {\n // _this.sdk.viewer.camera.setView({\n // destination: Cesium.Cartesian3.fromDegrees(coordinates.lng, coordinates.lat, _this.sdk.viewer.camera.positionCartographic.height),\n // orientation: {\n // heading: Cesium.Math.toRadians(-90),\n // pitch: 0,\n // roll: 0\n // }\n // })\n // }\n // }\n // }\n // }\n // }\n\n if (v) {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n } else {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n }\n this._elms.ground && this._elms.ground.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"modelPixelSize\",\n get: function get() {\n return this.options.model.pixelSize;\n },\n set: function set(v) {\n this.options.model.pixelSize = v;\n if (this.model) {\n this.model.minimumPixelSize = v;\n }\n this._elms.modelPixelSize && this._elms.modelPixelSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"scale\",\n get: function get() {\n return this.options.model.scale;\n },\n set: function set(v) {\n this.options.model.scale = Number(v);\n if (this.model) {\n this.model.scale = v;\n this.model.customScale = {\n x: this.options.model.scale,\n y: this.options.model.scale,\n z: this.options.model.scale\n };\n }\n this._elms.scale && this._elms.scale.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n if (v <= 0) {\n v = 0.01;\n }\n this.options.speed = v;\n if (this.state && this.TweenAnimate && this.TweenAnimate._isPlaying) {\n this.setMovePositionByDistance(this.TweenAnimate._object.distance);\n }\n\n // let totalTime = (this.distance * 1000) / this.options.speed * 1000\n // // this.TweenAnimate._object.distance/this.TweenAnimate._valuesEnd.distance\n // this.TweenAnimate._duration = totalTime\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"smooth\",\n get: function get() {\n return this.options.line.smooth;\n },\n set: function set(v) {\n this.lineEdit = false;\n this.options.line.smooth = v;\n var positions = this.renewLinePositions(this.options.line.positions);\n this.line.polyline.positions = positions;\n this.model.position = positions[0];\n this.modelMove(positions);\n this._elms.smooth && this._elms.smooth.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"delay\",\n get: function get() {\n return this.options.delay;\n },\n set: function set(v) {\n this.options.delay = v;\n if (this.TweenAnimate && this.TweenAnimate._isPlaying) {\n this.TweenAnimate.delay(this.delay);\n }\n this._elms.delay && this._elms.delay.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"state\",\n get: function get() {\n return this.options.state;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.state = v;\n cancelAnimationFrame(_classPrivateFieldGet(_requestAnimationFrameEventId, this));\n if (this.editObj) {\n this.editObj.destroy();\n this.editObj = null;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '开始调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn';\n }\n }\n if (this.TweenAnimate && this.TweenAnimate._isPlaying) {\n clearTimeout(this.TweenAnimate.timeout);\n if (v) {\n this.lineEdit = false;\n if (this.TweenAnimate.isPlaying()) {\n this.TweenAnimate.timeout = setTimeout(function () {\n _this5.TweenAnimate.resume();\n }, this.options.delay);\n } else {\n this.TweenAnimate.delay(this.delay).start();\n }\n this.speed = this.speed;\n } else {\n var positionCamera = _objectSpread({}, this.sdk.viewer.camera._position);\n var _this = this;\n _classPrivateFieldSet(_requestAnimationFrameEventId, this, requestAnimationFrame(function fn() {\n if (_this.firstPersonView) {\n _this.sdk.viewer.camera.setView({\n destination: _objectSpread({}, positionCamera),\n orientation: {\n heading: _this.sdk.viewer.camera.heading,\n pitch: _this.sdk.viewer.camera.pitch,\n roll: _this.sdk.viewer.camera.roll\n }\n });\n }\n _classPrivateFieldSet(_requestAnimationFrameEventId, _this, requestAnimationFrame(fn));\n }));\n this.TweenAnimate.pause();\n setTimeout(function () {\n _this.model && (_this.model.isMove = false);\n }, 200);\n }\n } else {\n if (v) {\n var positions = this.renewLinePositions(this.options.line.positions);\n this.modelMove(positions);\n }\n }\n this._elms.state && this._elms.state.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"modelShow\",\n get: function get() {\n return this.options.model.show;\n },\n set: function set(v) {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n this.options.model.show = v;\n var show = v;\n if (this.show && (!this.showView || this.showView == 3 || !sdkD)) {\n show = v;\n } else {\n show = false;\n }\n if (this.model && this.show) {\n this.model.show = show;\n }\n this._elms.modelShow && this._elms.modelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"modelAnimate\",\n get: function get() {\n return this.options.model.animate;\n },\n set: function set(v) {\n this.options.model.animate = v;\n if (!this.model || !this.model.loader.components) {\n return;\n }\n var animations = this.model.loader.components.animations;\n this.model.activeAnimations.removeAll();\n if (animations && animations.length > 0) {\n for (var i = 0; i < animations.length; i++) {\n if (animations[i].name == v) {\n this.model.activeAnimations.add({\n index: i,\n loop: Cesium.ModelAnimationLoop.REPEAT,\n speedup: 1,\n reverse: false\n });\n break;\n }\n }\n }\n this._elms.modelAnimate && this._elms.modelAnimate.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options.line.noseToTail;\n },\n set: function set(v) {\n this.lineEdit = false;\n this.options.line.noseToTail = v;\n var fromDegreesArrayHeights = [];\n for (var i = 0; i < this.options.line.positions.length; i++) {\n fromDegreesArrayHeights.push(this.options.line.positions[i].lng, this.options.line.positions[i].lat, this.options.line.positions[i].alt);\n }\n var nosmooth = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights);\n if (this.line) {\n var positions_smooth = this.renewLinePositions(this.options.line.positions);\n this.line.polyline.positions = positions_smooth;\n this.model.position = positions_smooth[0];\n this.modelMove(positions_smooth);\n }\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"lineShow\",\n get: function get() {\n return this.options.line.show;\n },\n set: function set(v) {\n if (v) {\n this.realTimeRoute = false;\n }\n this.options.line.show = v;\n var show = v;\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n if (!this.showView || this.showView == 3 || !sdkD) {\n show = v;\n } else {\n show = false;\n }\n if (this.line && this.show) {\n this.line.polyline.material = show ? new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff'),\n dashLength: 20 //短划线长度\n }) : new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff00'),\n dashLength: 20 //短划线长度\n });\n }\n this._elms.lineShow && this._elms.lineShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"realTimeRoute\",\n get: function get() {\n return this.options.realTimeRoute;\n },\n set: function set(v) {\n if (v) {\n this.lineShow = false;\n this.keyPointShow = false;\n }\n this.options.realTimeRoute = v;\n if (this.realTimeLine && this.show) {\n this.realTimeLine.show = v;\n }\n this._elms.realTimeRoute && this._elms.realTimeRoute.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"keyPointShow\",\n get: function get() {\n return this.options.line.keyPoint;\n },\n set: function set(v) {\n this.options.line.keyPoint = v;\n for (var i = 0; i < this.keyPoints.length; i++) {\n if (this.show) {\n this.keyPoints[i].show = v;\n }\n }\n this._elms.keyPointShow && this._elms.keyPointShow.forEach(function (item) {\n item.checked = v;\n });\n if (!v && this.lineEdit) {\n // 关闭线编辑\n _classPrivateFieldSet(_lineEdit, this, v);\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.ControllerObject && this.ControllerObject.destroy();\n this.tip && this.tip.destroy();\n this.tip = null;\n this._elms.lineEdit && this._elms.lineEdit.forEach(function (item) {\n item.checked = v;\n });\n }\n }\n }, {\n key: \"lineEdit\",\n get: function get() {\n return _classPrivateFieldGet(_lineEdit, this);\n },\n set: function set(v) {\n var _this6 = this;\n var linePositions = [];\n var computePositionsSmooth = function computePositionsSmooth(positions) {\n linePositions = _this6.renewLinePositions(positions);\n _this6.model.position = linePositions[0];\n _this6.modelMove(linePositions);\n };\n if (v) {\n this.viewFollow = false;\n if (YJ.Measure.GetMeasureStatus()) {\n console.warn('上一次测量未结束');\n this.lineEdit = false;\n return;\n } else {\n this.ground = false;\n this.smooth = false;\n this.state = false;\n YJ.Measure.SetMeasureStatus(true);\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('请选择一个顶点,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](this.sdk);\n var selectPoint;\n computePositionsSmooth(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(this.options.line.positions));\n var leftEvent = function leftEvent(movement, cartesian) {\n var pick = _this6.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n for (var i = 0; i < _this6.keyPoints.length; i++) {\n if (_this6.keyPoints[i].id === pick.id.id) {\n // this.keyPoints[i].show = false\n selectPoint = pick.id;\n _this6.ControllerObject.position = _this6.options.line.positions[selectPoint.index];\n _this6.ControllerObject.editTranslational();\n _this6.tip && _this6.tip.destroy();\n _this6.tip = null;\n _this6.ControllerObject.controllerCallBack = function (params) {\n // console.log('params', params)\n _this6.options.line.positions[selectPoint.index] = params.position;\n if (selectPoint.index === 0) {\n _this6.options.height = _this6.options.line.positions[selectPoint.index].alt;\n _this6._elms.height && _this6._elms.height.forEach(function (item) {\n item.value = Number(_this6.options.height.toFixed(2));\n });\n }\n selectPoint.position = Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt);\n computePositionsSmooth(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(_this6.options.line.positions));\n };\n break;\n }\n }\n // originalPosition = this.cartesian3Towgs84(cartesian, this.sdk.viewer)\n }\n };\n this.event.mouse_left(leftEvent);\n this.event.mouse_right(function (movement, cartesian) {\n _this6.keyPointShow = false;\n YJ.Measure.SetMeasureStatus(false);\n _this6.event.destroy();\n _this6.tip && _this6.tip.destroy();\n _this6.tip = null;\n _this6.ControllerObject.destroy();\n });\n this.event.mouse_move(function (movement, cartesian) {\n _this6.tip && _this6.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n _this6.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n _this6.keyPointShow = false;\n YJ.Measure.SetMeasureStatus(false);\n _this6.event.destroy();\n _this6.tip && _this6.tip.destroy();\n _this6.tip = null;\n _this6.ControllerObject.destroy();\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n this.line.polyline.positions = new Cesium.CallbackProperty(function () {\n return linePositions;\n }, false);\n }\n // 显示关键点\n this.keyPointShow = v;\n } else {\n if (this.lineEdit) {\n YJ.Measure.SetMeasureStatus(false);\n this.event.destroy();\n this.tip && this.tip.destroy();\n this.tip = null;\n }\n // 隐藏关键点\n this.keyPointShow = v;\n this.ControllerObject.destroy();\n }\n _classPrivateFieldSet(_lineEdit, this, v);\n this._elms.lineEdit && this._elms.lineEdit.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"routeDirection\",\n get: function get() {\n return this.options.routeDirection;\n },\n set: function set(v) {\n this.options.routeDirection = v;\n this._elms.routeDirection && this._elms.routeDirection.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"loop\",\n get: function get() {\n return this.options.loop;\n },\n set: function set(v) {\n this.options.loop = v;\n if (this.TweenAnimate && this.TweenAnimate._isPlaying) {\n if (v) {\n this.TweenAnimate.repeat(Infinity);\n } else {\n this.TweenAnimate.repeat();\n }\n }\n this._elms.loop && this._elms.loop.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"firstPersonView\",\n get: function get() {\n return this.options.firstPersonView;\n },\n set: function set(v) {\n var _this7 = this;\n // this.state = true\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n var splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n if (Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])() || splitSdk.sdkD || !this.show) {\n v = false;\n }\n cancelAnimationFrame(_classPrivateFieldGet(_requestAnimationFrameEventId, this));\n _classPrivateFieldGet(_firstPersonViewEvent, this) && _classPrivateFieldGet(_firstPersonViewEvent, this).destroy();\n this.sdk.viewer._firstPersonView = v;\n this.options.firstPersonView = v;\n if (this.options.firstPersonView) {\n this.viewFollow = true;\n this.firstPersonHeadingPitch = {\n heading: 0,\n pitch: -10\n };\n this.state = true;\n this.model && (this.model.show = false);\n if (this._DialogObject && this._DialogObject._element.content) {\n var e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n e_firstPerson[0].className = 'btn is-active';\n e_firstPerson[1].className = 'btn';\n }\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"CameraController\"])(this.sdk, false);\n var _splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n var targetSdk;\n if (this.sdk === _splitSdk.sdkP) {\n targetSdk = _splitSdk.sdkD;\n } else {\n targetSdk = _splitSdk.sdkP;\n }\n var targetEntity = targetSdk ? targetSdk.entityMap.get(this.options.id) : undefined;\n if (this.sdk) _classPrivateFieldSet(_firstPersonViewEvent, this, new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](this.sdk));\n _classPrivateFieldGet(_firstPersonViewEvent, this).mouse_right_down(function (movement, cartesian) {\n var startPosition = _objectSpread({}, movement.position);\n _classPrivateFieldGet(_firstPersonViewEvent, _this7).mouse_move(function (movement2, cartesian2) {\n _this7.firstPersonHeadingPitch.heading = _this7.firstPersonHeadingPitch.heading + (movement2.endPosition.x - startPosition.x) / 20;\n _this7.firstPersonHeadingPitch.pitch = _this7.firstPersonHeadingPitch.pitch + (startPosition.y - movement2.endPosition.y) / 10;\n targetEntity && (targetEntity.firstPersonHeadingPitch = _objectSpread({}, _this7.firstPersonHeadingPitch));\n startPosition = _objectSpread({}, movement2.endPosition);\n }, true);\n }, true);\n _classPrivateFieldGet(_firstPersonViewEvent, this).mouse_right_up(function (movement, cartesian) {\n _classPrivateFieldGet(_firstPersonViewEvent, _this7).mouse_move(function () {});\n }, true);\n } else {\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"CameraController\"])(this.sdk, true);\n if (this.model && this.modelShow && this.show) {\n var show = true;\n if (this.show && (!this.showView || this.showView == 3 || !sdkD)) {\n show = true;\n } else {\n show = false;\n }\n this.model.show = show;\n }\n if (this._DialogObject && this._DialogObject._element.content) {\n var _e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n if (_e_firstPerson[0] && _e_firstPerson[1]) {\n _e_firstPerson[0].className = 'btn';\n _e_firstPerson[1].className = 'btn is-active';\n }\n }\n if (this.viewFollow && this.show) {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n }\n if (this.sdk.viewer.scene.mode === 3) {\n var pointEntity = this.sdk.viewer.entities.add({\n // show: false,\n position: this.positions_smooth[0],\n // position of the point\n point: {\n color: Cesium.Color.RED.withAlpha(0),\n // color of the point\n pixelSize: 0\n }\n });\n this.sdk.viewer.trackedEntity = pointEntity;\n }\n this.viewFollow = this.viewFollow;\n }\n }\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(this.sdk, this.options.id);\n }\n }, {\n key: \"viewFollow\",\n get: function get() {\n return this.options.viewFollow;\n },\n set: function set(v) {\n var splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n // if (sdk2D || splitSdk.sdkD) {\n // v = false\n // }\n if (!this.show) {\n v = false;\n }\n this.options.viewFollow = v;\n if (!this.options.viewFollow) {\n this.firstPersonView = false;\n } else {\n if (this.editObj) {\n this.editObj.destroy();\n this.editObj = null;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '开始调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn';\n }\n }\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"closeRotateAround\"])(this.sdk);\n this.lineEdit = false;\n }\n if (this.options.firstPersonView) {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n if (this._DialogObject && this._DialogObject._element.content) {\n var e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n if (e_firstPerson[0] && e_firstPerson[1]) {\n e_firstPerson[0].className = 'btn';\n e_firstPerson[1].className = 'btn is-active';\n }\n }\n } else {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n if (v && this.show && this.model) {\n var pointEntity = this.sdk.viewer.entities.add({\n // show: false,\n position: this.model.position,\n // position of the point\n point: {\n color: Cesium.Color.RED.withAlpha(0),\n // color of the point\n pixelSize: 0\n }\n });\n this.sdk.viewer.trackedEntity = pointEntity;\n }\n }\n var sdk3D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get3DView\"])();\n if (sdk3D) {\n if (this.sdk != sdk3D) {\n var that3D = sdk3D.entityMap.get(this.options.id);\n if (that3D && that3D.viewFollow != v) {\n that3D.viewFollow = v;\n }\n } else {\n if (sdk2D) {\n var that2D = sdk2D.entityMap.get(this.options.id);\n if (that2D && that2D.viewFollow != v) {\n that2D.viewFollow = v;\n if (this.TweenAnimate && this.TweenAnimate._isPlaying) {\n that2D.setMovePositionByDistance(this.TweenAnimate._object.distance);\n }\n }\n }\n }\n }\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(this.sdk, this.options.id);\n this._elms.viewFollow && this._elms.viewFollow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.show = v;\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n var show = v;\n if (this.show && (!this.showView || this.showView == 3 || !sdkD)) {\n show = v;\n } else {\n show = false;\n }\n if (this.show) {\n if (this.label) {\n this.label.show = show;\n this.label.pixelOffset = this.options.label.pixelOffset + (this.fuelShow ? this.labelFontSize + 20 : 0);\n if (this.options.label.position) {\n setTimeout(function () {\n if (_this8.options.label.position.alt) {\n _this8.label && (_this8.label.position = [_this8.options.label.position.lng, _this8.options.label.position.lat, _this8.options.label.position.alt]);\n } else {\n _this8.getClampToHeight({\n lng: _this8.options.label.position.lng,\n lat: _this8.options.label.position.lat\n }).then(function (height) {\n _this8.label && (_this8.label.position = [_this8.options.label.position.lng, _this8.options.label.position.lat, height]);\n });\n }\n }, 0);\n }\n }\n } else {\n this.label && (this.label.show = false);\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n this.fuelLabel && (this.fuelLabel.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_22__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.label.color = v;\n this.label && (this.label.color = v);\n this.fuelLabel && (this.fuelLabel.color = v);\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this9.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this9.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this9.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this9._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label && (this.label.fontSize = v);\n if (this.fuelLabel) {\n this.fuelLabel.fontSize = v;\n this.label.pixelOffset = this.options.label.pixelOffset + v + 20;\n } else {\n this.label.pixelOffset = this.options.label.pixelOffset;\n }\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label && (this.label.scaleByDistance = v);\n this.fuelLabel && (this.fuelLabel.scaleByDistance = v);\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label && (this.label.near = near);\n this.fuelLabel && (this.fuelLabel.near = near);\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label && (this.label.far = far);\n this.fuelLabel && (this.fuelLabel.far = far);\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"unitFuelConsumption\",\n get: function get() {\n return this.options.unitFuelConsumption;\n },\n set: function set(v) {\n this.options.unitFuelConsumption = v;\n this._elms.unitFuelConsumption && this._elms.unitFuelConsumption.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"fuelShow\",\n get: function get() {\n return this.options.fuelShow;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.fuelShow = v;\n var show = v;\n if (this.show && (!this.showView || this.showView == 3)) {\n show = v;\n } else {\n show = false;\n }\n if (this.show) {\n if (this.fuelLabel) {\n this.fuelLabel.show = show;\n this.label.pixelOffset = this.options.label.pixelOffset + (show ? this.labelFontSize + 20 : 0);\n } else {\n this.label.pixelOffset = this.options.label.pixelOffset;\n }\n if (this.options.label.position) {\n setTimeout(function () {\n if (_this10.options.label.position.alt) {\n _this10.fuelLabel && (_this10.fuelLabel.position = [_this10.options.label.position.lng, _this10.options.label.position.lat, _this10.options.label.position.alt]);\n } else {\n _this10.getClampToHeight({\n lng: _this10.options.label.position.lng,\n lat: _this10.options.label.position.lat\n }).then(function (height) {\n _this10.fuelLabel && (_this10.fuelLabel.position = [_this10.options.label.position.lng, _this10.options.label.position.lat, height]);\n });\n }\n }, 0);\n }\n } else {\n this.fuelLabel && (this.fuelLabel.show = false);\n this.label.pixelOffset = this.options.label.pixelOffset;\n }\n this._elms.fuelShow && this._elms.fuelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n\n // 创建路径\n }, {\n key: \"modelMove\",\n value: // 模型移动\n function () {\n var _modelMove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3(positions) {\n var _this11 = this;\n var option,\n _this,\n time,\n startDistance,\n viewer,\n lineString,\n i,\n position,\n line,\n totalTime,\n lastDistance,\n motionArray,\n HeadingPitchRoll,\n HeadingPitchRoll2,\n previous,\n m,\n _animateUpdate,\n setPosition,\n _setPosition,\n getHeadingPitchRoll,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n getHeadingPitchRoll = function _getHeadingPitchRoll(pointA, pointB) {\n // console.log(distance, _this.cartesian3Towgs84(pointA, viewer), _this.cartesian3Towgs84(pointB, viewer))\n //建立以点A为原点,X轴为east,Y轴为north,Z轴朝上的坐标系\n var transform = Cesium.Transforms.eastNorthUpToFixedFrame(pointA);\n //向量AB\n if (!pointB) {\n return;\n }\n var positionvector = Cesium.Cartesian3.subtract(pointB, pointA, new Cesium.Cartesian3());\n //因transform是将A为原点的eastNorthUp坐标系中的点转换到世界坐标系的矩阵\n //AB为世界坐标中的向量\n //因此将AB向量转换为A原点坐标系中的向量,需乘以transform的逆矩阵。\n var vector = Cesium.Matrix4.multiplyByPointAsVector(Cesium.Matrix4.inverse(transform, new Cesium.Matrix4()), positionvector, new Cesium.Cartesian3());\n //归一化\n var direction = Cesium.Cartesian3.normalize(vector, new Cesium.Cartesian3());\n // console.log(direction)\n //heading\n var heading = Math.atan2(direction.y, direction.x) - Cesium.Math.PI_OVER_TWO;\n var pitch = Cesium.Math.PI_OVER_TWO - Cesium.Math.acosClamped(direction.z);\n // console.log(pitch * (180 / Math.PI))\n var roll = Cesium.Math.fastApproximateAtan2(direction.x, direction.z);\n // console.log({heading: heading * (180 / Math.PI), pitch: pitch * (180 / Math.PI), roll: roll * (180 / Math.PI)})\n return {\n heading: Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading),\n pitch: pitch,\n roll: roll\n };\n };\n _setPosition = function _setPosition3() {\n _setPosition = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(distance) {\n var sdk2D, splitSdk, start, stop, coordinates, sliced, position, positionCamera, filterEntitys, _iterator, _step, _step$value, key, value, result, _sdk2D, pos3, height2, position2, fromDegreesArray, _i2, cartesian3, pos84, positions_smooth, _i3, _cartesian, modeHeadingPitchRoll, heading, pitch, roll, matrix, that3D, mx, my, mz, rotationX, rotationY, rotationZ, originalMatrix, labelPosition;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _this.totalFuelConsumption = Number((distance / 100 * _this.unitFuelConsumption).toFixed(2));\n _this.fuelLabel.text = '总油耗:' + _this.totalFuelConsumption + ' L';\n _this.model.isMove = true;\n sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n if (!(!_this.sdk.viewer || !_this.sdk.viewer.scene)) {\n _context2.next = 8;\n break;\n }\n _this.removeModelAnimate();\n return _context2.abrupt(\"return\");\n case 8:\n start = 0;\n stop = distance;\n sliced = line;\n if (!stop) {\n _context2.next = 18;\n break;\n }\n _context2.next = 14;\n return turf.lineSliceAlong(line, start, stop, {\n units: 'kilometers'\n });\n case 14:\n sliced = _context2.sent;\n // _this.realTimeRouteArray = sliced+\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]);\n _context2.next = 19;\n break;\n case 18:\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(line.geometry.coordinates[0]);\n case 19:\n if (!_this.ground) {\n _context2.next = 59;\n break;\n }\n // if (viewer.terrainProvider.availability) {\n // let result = await new Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [Cesium.Cartographic.fromDegrees(coordinates[0], coordinates[1])]);\n // position = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], result[0].height)\n // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], result[0].height + 1)\n // }\n // else {\n // position = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1])\n // positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], 1)\n // }\n filterEntitys = [];\n _iterator = _createForOfIteratorHelper(_this.sdk.entityMap);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2), key = _step$value[0], value = _step$value[1];\n if (!value.type || value.type !== 'glb' && value.type !== 'bim' && value.type !== 'tileset' && value.type !== 'TrajectoryMotion' && value.type !== 'ParticleEffects' && value.entity) {\n // if(value.type === 'ParticleEffects') {\n // for (let i = 0; i < value.entity._particles.length; i++) {\n // filterEntitys.push(value.entity._particles[i]._billboard)\n // }\n // }\n filterEntitys.push(value.entity);\n if (value.label && value.label.entity) {\n filterEntitys.push(value.label.entity);\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (_this.label && _this.label.entity) {\n filterEntitys.push(_this.label.entity);\n }\n\n // let point1 = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], -10000);\n // let point2 = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], 10000000000);\n // let direction = Cesium.Cartesian3.subtract(point2, point1, new Cesium.Cartesian3());\n // let c = Cesium.Cartesian3.normalize(direction, direction);\n // console.log('射线方向:', c);\n // let ray = new Cesium.Ray(point1, c);\n // let pickedObjects = this.sdk.viewer.scene.pickFromRay(ray);\n // console.log('pickedObjects', pickedObjects)\n // console.log('height', Cesium.Cartographic.fromCartesian(pickedObjects.position).height)\n _sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n if (!(_sdk2D && _this.sdk == _sdk2D)) {\n _context2.next = 30;\n break;\n }\n result = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]);\n position = result;\n _context2.next = 34;\n break;\n case 30:\n _context2.next = 32;\n return _this.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]), [_this.model].concat(filterEntitys));\n case 32:\n result = _context2.sent;\n position = result;\n case 34:\n if (!result) {\n position = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]);\n }\n pos3 = _this.cartesian3Towgs84(position, viewer);\n height2 = 0;\n _context2.prev = 37;\n _context2.next = 40;\n return Cesium.sampleTerrainMostDetailed(_this.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(pos3.lng, pos3.lat)]);\n case 40:\n position2 = _context2.sent;\n height2 = position2[0].height;\n _context2.next = 47;\n break;\n case 44:\n _context2.prev = 44;\n _context2.t0 = _context2[\"catch\"](37);\n height2 = 0;\n case 47:\n if (pos3.alt < height2) {\n pos3.alt = height2;\n }\n pos3.alt = Number(pos3.alt.toFixed(1));\n position = Cesium.Cartesian3.fromDegrees(pos3.lng, pos3.lat, pos3.alt);\n if (!(!_this.sdk.viewer || !_this.sdk.viewer.scene)) {\n _context2.next = 53;\n break;\n }\n _this.removeModelAnimate();\n return _context2.abrupt(\"return\");\n case 53:\n positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], _this.cartesian3Towgs84(position, _this.sdk.viewer).alt + 1.8);\n fromDegreesArray = [];\n for (_i2 = 0; _i2 < sliced.geometry.coordinates.length; _i2++) {\n fromDegreesArray.push(sliced.geometry.coordinates[_i2][0], sliced.geometry.coordinates[_i2][1]);\n }\n _this.realTimePositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n // _this.realTimeLine.polyline.positions = \n _context2.next = 78;\n break;\n case 59:\n cartesian3 = _this.spline.evaluate(distance / _this.distance);\n if (cartesian3) {\n _context2.next = 62;\n break;\n }\n return _context2.abrupt(\"return\");\n case 62:\n pos84 = _this.cartesian3Towgs84(cartesian3, viewer);\n coordinates = [pos84.lng, pos84.lat, pos84.alt + 1.8];\n position = cartesian3;\n positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2]);\n positions_smooth = [];\n _i3 = 0;\n case 68:\n if (!(_i3 <= 1000)) {\n _context2.next = 76;\n break;\n }\n if (!(_i3 / 1000 > distance / _this.distance)) {\n _context2.next = 71;\n break;\n }\n return _context2.abrupt(\"break\", 76);\n case 71:\n _cartesian = _this.spline.evaluate(_i3 / 1000);\n positions_smooth.push(_cartesian);\n case 73:\n _i3++;\n _context2.next = 68;\n break;\n case 76:\n positions_smooth.push(cartesian3);\n _this.realTimePositions = positions_smooth;\n case 78:\n HeadingPitchRoll = getHeadingPitchRoll(_this.model.position, position);\n if (previous && previous.position) {\n HeadingPitchRoll2 = getHeadingPitchRoll(previous.position, position);\n HeadingPitchRoll.pitch = HeadingPitchRoll2.pitch;\n }\n previous.position = _this.model.position;\n modeHeadingPitchRoll = Cesium.HeadingPitchRoll.fromDegrees(_this.options.model.heading, _this.options.model.pitch, _this.options.model.roll);\n heading = 0;\n pitch = 0;\n roll = 0;\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n if (!(_this.options.routeDirection && !_this.lineEdit)) {\n _context2.next = 98;\n break;\n }\n heading = HeadingPitchRoll.heading * (180 / Math.PI) - 90 - _this.options.model.heading;\n pitch = HeadingPitchRoll.pitch * (180 / Math.PI) - _this.options.model.pitch;\n roll = _this.options.model.roll;\n if (Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get3DView\"])()) {\n that3D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get3DView\"])().entityMap.get(_this.options.id);\n } else {\n that3D = splitSdk.sdkP && splitSdk.sdkP.entityMap.get(_this.options.id);\n }\n if (!_this.state) {\n if (that3D && (sdk2D && sdk2D === _this.sdk || splitSdk.sdkD && splitSdk.sdkD === _this.sdk)) {\n heading = that3D.model.heading;\n pitch = that3D.model.pitch;\n roll = that3D.model.roll;\n }\n }\n if (!(isNaN(heading) || isNaN(pitch) || isNaN(roll))) {\n _context2.next = 94;\n break;\n }\n return _context2.abrupt(\"return\");\n case 94:\n if (!_this.state) {\n if (that3D && (sdk2D && sdk2D === _this.sdk || splitSdk.sdkD && splitSdk.sdkD === _this.sdk)) {\n heading = that3D.model.heading;\n pitch = that3D.model.pitch;\n roll = that3D.model.roll;\n } else {\n heading = _this.model.heading || _this.model.heading === 0 ? _this.model.heading : _this.options.model.heading;\n pitch = _this.model.pitch || _this.model.pitch === 0 ? _this.model.pitch : _this.options.model.pitch;\n roll = _this.model.roll || _this.model.roll === 0 ? _this.model.roll : _this.options.model.roll;\n }\n }\n _this.model.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(matrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll)), _this.model.modelMatrix);\n _context2.next = 114;\n break;\n case 98:\n if (!_this.entity) {\n _context2.next = 114;\n break;\n }\n heading = _this.options.model.heading;\n pitch = _this.options.model.pitch;\n roll = _this.options.model.roll;\n if (!(isNaN(heading) || isNaN(pitch) || isNaN(roll))) {\n _context2.next = 104;\n break;\n }\n return _context2.abrupt(\"return\");\n case 104:\n // 旋转\n mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(roll));\n my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(pitch));\n mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(heading));\n rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.multiply(matrix, rotationX, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationZ, _this.entity.modelMatrix);\n case 114:\n // console.log((HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI))\n\n _this.model.position = position;\n _this.model.roll = roll;\n _this.model.pitch = pitch;\n _this.model.heading = heading;\n if (position) {\n _context2.next = 120;\n break;\n }\n return _context2.abrupt(\"return\");\n case 120:\n labelPosition = _this.cartesian3Towgs84(position, _this.sdk.viewer);\n _this.label.position = [labelPosition.lng, labelPosition.lat, labelPosition.alt];\n _this.fuelLabel.position = [labelPosition.lng, labelPosition.lat, labelPosition.alt];\n lastDistance = distance;\n // console.log(position)\n _this.realTimeRouteArray.push(position);\n if (_this.viewFollow) {\n // console.log(Cesium.Math.toDegrees(_this.sdk.viewer.camera.pitch))\n if (_this.options.firstPersonView) {\n _this.sdk.viewer.camera.setView({\n destination: positionCamera,\n orientation: {\n heading: Cesium.Math.toRadians(heading + 90 + _this.firstPersonHeadingPitch.heading),\n pitch: Cesium.Math.toRadians(_this.firstPersonHeadingPitch.pitch),\n roll: 0\n }\n });\n } else {\n if (_this.sdk.viewer.scene.mode === 3) {\n if (_this.sdk.viewer.trackedEntity) {\n _this.sdk.viewer.trackedEntity.position = position;\n // _this.sdk.viewer.camera.position = position\n }\n } else {\n if (_this.sdk.viewer.trackedEntity) {\n _this.sdk.viewer.camera.setView({\n destination: Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], _this.sdk.viewer.camera.positionCartographic.height),\n orientation: {\n heading: Cesium.Math.toRadians(-90),\n pitch: 0,\n roll: 0\n }\n });\n }\n }\n }\n }\n case 126:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[37, 44]]);\n }));\n return _setPosition.apply(this, arguments);\n };\n setPosition = function _setPosition2(_x4) {\n return _setPosition.apply(this, arguments);\n };\n option = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {\n time: 0\n };\n cancelAnimationFrame(_classPrivateFieldGet(_requestAnimationFrameEventId, this));\n _this = this;\n time = option.time || 0;\n startDistance = option.distance;\n viewer = this.sdk.viewer;\n if (!(!this.model || !this.sdk || !this.sdk.viewer)) {\n _context3.next = 11;\n break;\n }\n return _context3.abrupt(\"return\");\n case 11:\n this.removeModelAnimate();\n lineString = [];\n for (i = 0; i < positions.length; i++) {\n position = this.cartesian3Towgs84(positions[i], viewer);\n lineString.push([position.lng, position.lat, position.alt]);\n }\n // console.log(lineString)\n line = turf.lineString(lineString);\n this.distance = turf.length(line, {\n units: 'kilometers'\n });\n totalTime = this.distance * 1000 / this.options.speed; // 总耗时(秒)\n if (!startDistance && startDistance !== 0) {\n startDistance = 0.000001;\n if (time) {\n if (time > totalTime) {\n time = totalTime;\n }\n startDistance = time / totalTime * this.distance;\n }\n } else {\n if (startDistance > this.distance) {\n startDistance = this.distance;\n }\n time = startDistance / this.distance * totalTime;\n }\n // console.log(totalTime)\n lastDistance = 0;\n motionArray = [];\n previous = {};\n m = 0;\n this.TweenAnimate = new TWEEN.Tween({\n distance: startDistance\n }).to({\n distance: this.distance\n }, (totalTime - time) * 1000).delay(this.delay).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(function () {\n if (time || startDistance) {\n _this11.modelMove(positions);\n }\n }).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(_this11.TweenAnimate._duration == Infinity)) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n m++;\n if (_this11.sdk.viewer) {\n _context.next = 6;\n break;\n }\n _this11.removeModelAnimate();\n return _context.abrupt(\"return\");\n case 6:\n if (!isNaN(r.distance)) {\n setPosition(r.distance);\n }\n case 7:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n }()).onEveryStart(function () {\n _this11.realTimeRouteArray = [];\n }).onComplete(function (d) {\n _this11.state = false;\n // this.removeModelAnimate()\n // let runtimeAnimation = this.model._activeAnimations._runtimeAnimations\n // // let animations = await this.model.readyPromise\n // for (let i = runtimeAnimation.length - 1; i >= 0; i--) {\n // switch (runtimeAnimation[i].name) {\n // case '跑':\n // this.model.activeAnimations.remove(runtimeAnimation[i])\n // break;\n // default:\n // }\n // }\n });\n if (this.state) {\n this.TweenAnimate.start();\n } else {\n _animateUpdate = function animateUpdate() {\n _classPrivateFieldSet(_requestAnimationFrameEventId2, _this, requestAnimationFrame(_animateUpdate));\n if (_this.options.firstPersonView) {\n var positionCamera = _objectSpread({}, _this.sdk.viewer.camera._position);\n _this.sdk.viewer.camera.setView({\n destination: positionCamera,\n orientation: {\n heading: Cesium.Math.toRadians(_this.model.heading + 90 + _this.firstPersonHeadingPitch.heading),\n pitch: Cesium.Math.toRadians(_this.firstPersonHeadingPitch.pitch),\n roll: 0\n }\n });\n }\n };\n setPosition(startDistance);\n setTimeout(function () {\n _this.model.isMove = false;\n }, 1000);\n _animateUpdate();\n }\n\n // function executeAnimate() {\n // }\n // setTimeout(() => {\n // let i = 0\n // function animate() {\n // if (i < motionArray.length) {\n // let result = motionArray[i].result;\n // console.log(result)\n // result.then((res) => {\n // let position = Cesium.Cartesian3.fromDegrees(motionArray[i].lng, motionArray[i].lat, res[0].height)\n\n // let HeadingPitchRoll = getHeadingPitchRoll(_this.model.position, position)\n // let modeHeadingPitchRoll = Cesium.HeadingPitchRoll.fromDegrees(_this.options.model.heading, _this.options.model.pitch, _this.options.model.roll)\n // let heading = 0\n // let pitch = 0\n // let roll = 0\n // if (_this.options.routeDirection) {\n // heading = (HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI) - 90\n // pitch = (HeadingPitchRoll.pitch - modeHeadingPitchRoll.pitch) * (180 / Math.PI)\n // }\n // else {\n // heading = - _this.options.model.heading\n // pitch = - _this.options.model.pitch\n // }\n // roll = - _this.options.model.roll\n // // console.log(heading)\n // let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position)\n // _this.model.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(matrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll)), _this.model.modelMatrix)\n // _this.model.position = position\n // if (_this.sdk.viewer.trackedEntity) {\n // _this.sdk.viewer.trackedEntity.position = position\n // }\n // i++\n // requestAnimationFrame(animate);\n // })\n\n // }\n\n // }\n // animate();\n // }, 2000);\n\n // 根据两个坐标点,获取Heading(朝向)\n case 24:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function modelMove(_x) {\n return _modelMove.apply(this, arguments);\n }\n return modelMove;\n }()\n }, {\n key: \"setMovePositionByDistance\",\n value: function setMovePositionByDistance(distance) {\n var positions_smooth = this.renewLinePositions(this.options.line.positions);\n this.modelMove(positions_smooth, {\n distance: distance\n });\n }\n }, {\n key: \"setMovePositionByTime\",\n value: function setMovePositionByTime(time) {\n var positions_smooth = this.renewLinePositions(this.options.line.positions);\n this.modelMove(positions_smooth, {\n time: time\n });\n }\n\n // 编辑框\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4(state) {\n var _this12 = this;\n var _this, contentElm, labelColorPicker, heightBoxElm, all_elm, getAnimationsList, e_firstPerson, rubricElm, iconRubric;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!this._error) {\n _context4.next = 2;\n break;\n }\n return _context4.abrupt(\"return\");\n case 2:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context4.next = 45;\n break;\n }\n _context4.next = 8;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this.sdk, this.options, {\n title: '轨迹运动属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this12.name = _this12.name.trim();\n if (!_this12.name) {\n _this12.name = '未命名对象';\n }\n _this12.originalOptions = _this12.deepCopyObj(_this12.options);\n // this.options.viewFollowOrientation = {}\n // this.options.viewFollowOrientation.heading = Cesium.Math.toDegrees(this.sdk.viewer.camera.heading)\n // this.options.viewFollowOrientation.pitch = Cesium.Math.toDegrees(this.sdk.viewer.camera.pitch)\n // this.options.viewFollowOrientation.roll = Cesium.Math.toDegrees(this.sdk.viewer.camera.roll)\n // this.options.viewFollowOrientation.direction = this.sdk.viewer.camera.direction\n _this12._DialogObject.close();\n var cdoptions = _this12.deepCopyObj(_this12.options);\n cdoptions.host = '';\n _this12.Dialog.confirmCallBack && _this12.Dialog.confirmCallBack(cdoptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"syncData\"])(_this12.sdk, _this12.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(_this12.sdk, _this12.options.id);\n },\n removeCallBack: function removeCallBack() {\n if (_this12.sdk.viewer.trackedEntity) {\n _this12.sdk.viewer.entities.remove(_this12.sdk.viewer.trackedEntity);\n _this12.sdk.viewer.trackedEntity = null;\n }\n _this12.Dialog.removeCallBack && _this12.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this12._DialogObject = null;\n _this12.reset();\n _this12.Dialog.closeCallBack && _this12.Dialog.closeCallBack();\n if (_this12.editObj) {\n _this12.editObj.destroy();\n _this12.editObj = null;\n }\n _this12.keyPointShow = false;\n _this12.event && _this12.event.destroy();\n _this12.tip && _this12.tip.destroy();\n _this12.tip = null;\n _this12.ControllerObject.destroy();\n if (_this12.firstPersonView !== _this12.originalOptions.firstPersonView) {\n _this12.firstPersonView = _this12.originalOptions.firstPersonView;\n }\n if (_this12.firstPersonView && _this12.modelShow) {\n _this12.model && (_this12.model.show = false);\n }\n },\n showCallBack: function showCallBack(show) {\n _this12.show = show;\n _this12.Dialog.showCallBack && _this12.Dialog.showCallBack();\n // this.options.show = show\n // this.model && (this.model.show = show)\n // this.line && (this.line.show = show)\n }\n });\n case 8:\n this._DialogObject = _context4.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' trajectory-motion';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n if (this.editObj) {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '结束调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn is-active';\n } else {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '开始调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn';\n }\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this12.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this12.labelColor = '';\n } //点击清空按钮事件回调\n });\n heightBoxElm = this._DialogObject._element.content.getElementsByClassName('height-box')[0];\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.heightBox = heightBoxElm;\n this._elms.labelColor = [labelColorPicker];\n if (this.model) {\n getAnimationsList = function getAnimationsList() {\n var animations = _this12.model.loader.components.animations;\n if (_this12._DialogObject) {\n if (animations) {\n var tagData = [{\n name: '无',\n value: '无'\n }];\n for (var i = 0; i < animations.length; i++) {\n tagData.push({\n name: animations[i].name,\n value: animations[i].name\n });\n }\n Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_21__[\"legp\"])(_this12._DialogObject._element.content, \".model-animate-select\").legp_search(tagData);\n }\n var selectElm = contentElm.getElementsByClassName('model-animate-select')[0].getElementsByTagName('input')[0];\n selectElm.value = _this12.modelAnimate;\n selectElm.addEventListener('input', function (e, c) {\n _this12.modelAnimate = selectElm.value;\n });\n }\n };\n if (Number(Cesium.VERSION.split('.')[1]) >= 107) {\n if (this.model.ready) {\n getAnimationsList();\n } else {\n this.model.readyEvent.addEventListener(function () {\n getAnimationsList();\n });\n }\n } else {\n this.model.readyPromise.then(function (entity) {\n getAnimationsList();\n });\n }\n }\n if (this.ground) {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box disabled');\n } else {\n this._elms.heightBox && (this._elms.heightBox.className = 'input-number input-number-unit-1 height-box');\n }\n e_firstPerson = contentElm.querySelectorAll(\"button[name='firstPerson']\");\n e_firstPerson[0].addEventListener('click', function (e) {\n var splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n if (!Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])() && !splitSdk.sdkD) {\n if (!_this12.firstPersonView) {\n _this12.viewFollow = true;\n }\n _this12.firstPersonView = true;\n }\n });\n e_firstPerson[1].addEventListener('click', function (e) {\n if (_this12.firstPersonView) {\n _this12.viewFollow = true;\n }\n _this12.firstPersonView = false;\n });\n if (this.options.firstPersonView) {\n e_firstPerson[0].className = 'btn is-active';\n e_firstPerson[1].className = 'btn';\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n } else {\n e_firstPerson[0].className = 'btn';\n e_firstPerson[1].className = 'btn is-active';\n }\n rubricElm = document.createElement('div');\n rubricElm.className = 'custom-rubric-box';\n rubricElm.style.transformOrigin = 'center bottom';\n rubricElm.style.position = 'absolute';\n rubricElm.style.top = '180px';\n rubricElm.style.right = '3px';\n rubricElm.style.padding = '5px 10px';\n rubricElm.style.backgroundColor = '#3e4249';\n rubricElm.style.borderRadius = '5px';\n rubricElm.style.fontSize = '12px';\n rubricElm.style.color = '#ff5733';\n rubricElm.style.display = 'none';\n rubricElm.innerHTML = \"\\u573A\\u666F\\u6B63\\u4E1C\\u65B9\\u5411\\u4E3A\\u8F68\\u8FF9\\u524D\\u8FDB\\u6B63\\u65B9\\u5411
    \";\n iconRubric = contentElm.getElementsByClassName('icon-rubric')[0];\n iconRubric.addEventListener('mouseenter', function (e) {\n rubricElm.style.display = 'block';\n });\n document.addEventListener('mousemove', function (event) {\n // 检查点击的元素是否在模态框内容区域之外\n if (!iconRubric.contains(event.target)) {\n rubricElm.style.display = 'none';\n }\n });\n this._DialogObject._element.content.appendChild(rubricElm);\n setTimeout(function () {\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_22__[\"getFontList\"])();\n var fontObject = Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_21__[\"legp\"])(_this12._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this12._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this12.labelFontFamily].value;\n for (var i = 0; i < fontData.length; i++) {\n if (fontData[i].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[i].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i4 = 0; _i4 < fontData.length; _i4++) {\n if (fontData[_i4].value === fontDataLegpElm.value) {\n _this12.labelFontFamily = fontData[_i4].key;\n break;\n }\n }\n });\n _this12._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n case 45:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function edit(_x5) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"flyTo\",\n value: function flyTo() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_19__[\"closeRotateAround\"])(this.sdk);\n if (this.options.customView) {\n this.sdk.viewer.camera.flyTo({\n destination: this.options.customView.position,\n orientation: this.options.customView.orientation\n });\n } else {\n this.line && this.sdk.viewer.flyTo(this.line, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n }\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee5() {\n var i, sdk2D;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.scene.primitives.remove(this.model);\n this.sdk.viewer.entities.remove(this.line);\n this.sdk.viewer.entities.remove(this.realTimeLine);\n this.label && this.label.remove();\n this.fuelLabel && this.fuelLabel.remove();\n for (i = 0; i < this.keyPointShow.length; i++) {\n this.sdk.viewer.entities.remove(this.keyPointShow[i]);\n }\n this.line = null;\n this.realTimeLine = null;\n this.model = null;\n this.label = null;\n this.fuelLabel = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (_classPrivateFieldGet(_mouseRightevent, this)) {\n _classPrivateFieldGet(_mouseRightevent, this).destroy();\n }\n this.removeModelAnimate();\n sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"get2DView\"])();\n if (!sdk2D || sdk2D !== this.sdk) {\n this.viewFollow = false;\n }\n cancelAnimationFrame(_classPrivateFieldGet(_requestAnimationFrameEventId, this));\n _context5.next = 21;\n return this.sdk.removeIncetance(this.options.id);\n case 21:\n _context5.next = 23;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"syncData\"])(this.sdk, this.options.id);\n case 23:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"reset\",\n value: function () {\n var _reset = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee6() {\n var _this13 = this;\n var positions;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n this.options.model.url !== this.originalOptions.model.url && this.changeModelUrl(this.originalOptions.model.url);\n this.name = this.originalOptions.name;\n if (JSON.stringify(this.options.line.positions) !== JSON.stringify(this.originalOptions.line.positions)) {\n this.options.line.positions = this.deepCopyObj(this.originalOptions.line.positions);\n positions = this.renewLinePositions(this.options.line.positions);\n this.line.polyline.positions = positions;\n setTimeout(function () {\n _this13.model.position = positions[0];\n _this13.modelMove(positions);\n }, 0);\n }\n this.modelShow = this.originalOptions.model.show;\n this.noseToTail !== this.originalOptions.line.noseToTail && (this.noseToTail = this.originalOptions.line.noseToTail);\n this.height !== this.originalOptions.height && (this.height = this.originalOptions.height);\n this.lineShow !== this.originalOptions.line.show && (this.lineShow = this.originalOptions.line.show);\n this.keyPointShow = this.originalOptions.line.keyPoint;\n this.routeDirection = this.originalOptions.routeDirection;\n this.scale = this.originalOptions.model.scale;\n this.loop !== this.originalOptions.loop && (this.loop = this.originalOptions.loop);\n this.viewFollow = this.originalOptions.viewFollow;\n this.state = this.originalOptions.state;\n this.speed = this.originalOptions.speed;\n this.smooth !== this.originalOptions.line.smooth && (this.smooth = this.originalOptions.line.smooth);\n this.realTimeRoute = this.originalOptions.realTimeRoute;\n this.modelAnimate = this.originalOptions.model.animate;\n this.delay = this.originalOptions.delay;\n this.ground !== this.originalOptions.ground && (this.ground = this.originalOptions.ground);\n if (this.firstPersonView !== this.originalOptions.firstPersonView) {\n this.firstPersonView = this.originalOptions.firstPersonView;\n }\n if (this.firstPersonView && this.modelShow) {\n this.model && (this.model.show = false);\n }\n this.labelShow = this.originalOptions.label.show;\n this.fuelLabelShow = this.originalOptions.fuelShow;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.options = this.deepCopyObj(this.originalOptions);\n case 35:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, this);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }() // viewFollow(e) {\n // if (e.target.checked) {\n // var pointEntity = this.sdk.viewer.entities.add({\n // // show: false,\n // position: this.positions_smooth[0], // position of the point\n // point: {\n // color: Cesium.Color.RED.withAlpha(0), // color of the point\n // pixelSize: 0\n // }\n // });\n // this.sdk.viewer.trackedEntity = pointEntity;\n // }\n // else {\n // this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity)\n // this.sdk.viewer.trackedEntity = null\n // }\n // }\n }, {\n key: \"modelRotate\",\n value: function modelRotate() {\n if (this.editObj) {\n this.editObj.destroy();\n this.editObj = null;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '开始调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn';\n }\n } else {\n if (this.viewFollow) {\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: '关闭视角跟随后可调整模型方向!',\n type: 'warning',\n duration: 1500\n });\n console.warn('关闭视角跟随后可调整模型方向!');\n }\n } else {\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '结束调整';\n this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn is-active';\n }\n this.state = false;\n this.editObj = new _ModelController_EditGltf__WEBPACK_IMPORTED_MODULE_15__[\"default\"](this.sdk, this.model);\n this.editObj.editRtation();\n this.editObj.transformCallBack = this.rotationEditingCallBack;\n this.routeDirection = false;\n var heading = this.options.model.heading;\n var pitch = this.options.model.pitch;\n var roll = this.options.model.roll;\n if (isNaN(heading) || isNaN(pitch) || isNaN(roll)) {\n return;\n }\n var matrix = Cesium.Transforms.eastNorthUpToFixedFrame(this.model.position);\n // 旋转\n var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(roll));\n var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(pitch));\n var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(heading));\n var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);\n var rotationY = Cesium.Matrix4.fromRotationTranslation(my);\n var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);\n var originalMatrix = new Cesium.Matrix4();\n Cesium.Matrix4.multiply(matrix, rotationX, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix);\n Cesium.Matrix4.multiply(originalMatrix, rotationZ, this.entity.modelMatrix);\n }\n }\n }\n }, {\n key: \"clickChangeModel\",\n value: function clickChangeModel() {\n this.Dialog.changeModelCallBack && this.Dialog.changeModelCallBack();\n }\n\n //旋转时,坐标信息变化的回调\n }, {\n key: \"rotationEditingCallBack\",\n get: function get() {\n var _this14 = this;\n return function (params) {\n _this14.options.model.heading = params.rz;\n _this14.options.model.pitch = params.ry;\n _this14.options.model.roll = params.rx;\n _this14._rotationEditingCallBack && _this14._rotationEditingCallBack(_this14.editObj._params);\n _this14.entity && (_this14.entity.isMove = true);\n clearTimeout(_classPrivateFieldGet(_timeoutEventObject, _this14));\n _classPrivateFieldSet(_timeoutEventObject, _this14, setTimeout(function () {\n _this14.entity && (_this14.entity.isMove = false);\n }, 500));\n };\n },\n set: function set(callback) {\n this._rotationEditingCallBack = callback;\n }\n }, {\n key: \"changeModelUrl\",\n value: function () {\n var _changeModelUrl = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee7(url) {\n var _this15 = this;\n var matrix, position, options, getAnimationsList;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n this.sdk.viewer.scene.primitives.remove(this.model);\n this.options.model.url = this.replaceHost(url, this.options.host);\n matrix = this.model.modelMatrix;\n position = this.model.position;\n options = {\n id: this.options.id,\n url: this.options.model.url,\n show: this.options.model.show,\n scale: this.options.model.scale\n // minimumPixelSize: this.options.model.pixelSize,\n // maximumScale: 100000,\n };\n getAnimationsList = function getAnimationsList() {\n if (_this15.options.model.url === _this15.originalOptions.model.url) {\n _this15.modelAnimate = _this15.originalOptions.model.animate;\n } else {\n _this15.options.model.animate = '无';\n }\n var animations = _this15.model.loader.components.animations;\n if (_this15._DialogObject) {\n if (animations) {\n var tagData = [{\n name: '无',\n value: '无'\n }];\n for (var i = 0; i < animations.length; i++) {\n tagData.push({\n name: animations[i].name,\n value: animations[i].name\n });\n }\n Object(_Obj_Element_datalist__WEBPACK_IMPORTED_MODULE_21__[\"legp\"])(_this15._DialogObject._element.content, \".model-animate-select\").legp_search(tagData);\n }\n var selectElm = _this15._DialogObject._element.content.getElementsByClassName('model-animate-select')[0].getElementsByTagName('input')[0];\n selectElm.value = _this15.modelAnimate;\n selectElm.addEventListener('input', function (e, c) {\n _this15.modelAnimate = selectElm.value;\n });\n }\n };\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context7.next = 15;\n break;\n }\n _context7.next = 9;\n return Cesium.Model.fromGltfAsync(options);\n case 9:\n this.model = _context7.sent;\n this.model.position = position;\n this.sdk.viewer.scene.primitives.add(this.model);\n this.model.readyEvent.addEventListener(function () {\n getAnimationsList();\n _this15.model.modelMatrix = matrix;\n });\n _context7.next = 18;\n break;\n case 15:\n this.model = this.sdk.viewer.scene.primitives.add(Cesium.Model.fromGltf(options));\n this.model.position = position;\n this.model.readyPromise.then(function (entity) {\n getAnimationsList();\n _this15.model.modelMatrix = matrix;\n });\n case 18:\n this.model.imageBasedLighting.luminanceAtZenith = 0.6;\n case 19:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, this);\n }));\n function changeModelUrl(_x6) {\n return _changeModelUrl.apply(this, arguments);\n }\n return changeModelUrl;\n }() // 移除动画\n }, {\n key: \"removeModelAnimate\",\n value: function removeModelAnimate() {\n if (this.TweenAnimate) {\n clearTimeout(this.TweenAnimate.timeout);\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n }\n // if (modelPrimitive && modelPrimitive._activeAnimations && modelPrimitive._activeAnimations._runtimeAnimations) {\n // let runtimeAnimation = modelPrimitive._activeAnimations._runtimeAnimations\n // for (let i = runtimeAnimation.length - 1; i >= 0; i--) {\n // switch (runtimeAnimation[i].name) {\n // case '跑':\n // modelPrimitive.activeAnimations.remove(runtimeAnimation[i])\n // break;\n // default:\n // }\n // }\n // }\n }\n }, {\n key: \"controllerCallBack\",\n get: function get() {\n return function (params) {};\n }\n\n // 更新坐标\n ,\n set: function set(callback) {\n this._controllerCallBack = callback;\n }\n }, {\n key: \"renewLinePositions\",\n value: function renewLinePositions(pos) {\n var positions = pos;\n if (this.noseToTail) {\n positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2___default()(pos), [pos[0]]);\n }\n var fromDegreesArrayHeights = [];\n var time = [];\n var positions_smooth = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n time.push(i / (positions.length - 1));\n }\n if (this.smooth) {\n this.spline = new Cesium.CatmullRomSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n } else {\n this.spline = new Cesium.LinearSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n }\n for (var _i5 = 0; _i5 <= 1000; _i5++) {\n var cartesian3 = this.spline.evaluate(_i5 / 1000);\n positions_smooth.push(cartesian3);\n }\n this.positions_smooth = positions_smooth;\n return positions_smooth;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"addLine\",\n value: function addLine(that) {\n var positions_smooth = that.renewLinePositions(that.options.line.positions);\n var show;\n if (that.options.show) {\n show = that.options.line.show;\n } else {\n show = false;\n }\n that.sdk.viewer.entities.removeById(that.options.id + '-2');\n that.sdk.viewer.entities.removeById(that.options.id + '-3');\n that.line = that.sdk.viewer.entities.add({\n id: that.options.id + '-2',\n polyline: {\n positions: positions_smooth,\n width: 2,\n clampToGround: that.ground,\n material: show ? new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff'),\n dashLength: 20 //短划线长度\n }) : new Cesium.PolylineDashMaterialProperty({\n color: new Cesium.Color.fromCssColorString('#00ffff00'),\n dashLength: 20 //短划线长度\n }),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.realTimeLine = that.sdk.viewer.entities.add({\n id: that.options.id + '-3',\n show: that.options.realTimeRoute ? that.options.realTimeRoute : false,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.realTimePositions;\n }, false),\n width: 2,\n clampToGround: that.ground,\n material: Cesium.Color.fromCssColorString('#ff0000'),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.sdk._entityZIndex++;\n if (_classPrivateFieldGet(_mouseRightevent, that)) {\n _classPrivateFieldGet(_mouseRightevent, that).destroy();\n }\n _classPrivateFieldSet(_mouseRightevent, that, new _Event_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk));\n _classPrivateFieldGet(_mouseRightevent, that).mouse_right(function (movement, cartesian) {\n var splitSdk = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"getSdk\"])();\n var targetSdk;\n if (that.sdk === splitSdk.sdkP) {\n targetSdk = splitSdk.sdkD;\n } else {\n targetSdk = splitSdk.sdkP;\n }\n var targetEntity = targetSdk ? targetSdk.entityMap.get(that.options.id) : undefined;\n targetEntity && (targetEntity.viewFollow = false);\n that.viewFollow = false;\n }, true);\n TrajectoryMotion.addModel(that);\n TrajectoryMotion.addKeyPoint(that);\n that.noseToTail = that.options.line.noseToTail;\n that.smooth = that.options.line.smooth;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_20__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n // 创建模型\n }, {\n key: \"addModel\",\n value: function () {\n var _addModel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee8(that) {\n var url, options, matrix, positions, fromDegreesArrayHeights, i, pos;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n url = that.replaceHost(that.options.model.url, that.options.host);\n options = {\n id: that.options.id,\n url: url,\n show: that.options.show ? that.options.model.show : false,\n scale: that.options.model.scale\n // minimumPixelSize: that.options.model.pixelSize,\n // maximumScale: 100000,\n // allowPicking: false\n };\n if (!(Number(Cesium.VERSION.split('.')[1]) >= 107)) {\n _context8.next = 11;\n break;\n }\n _context8.next = 5;\n return Cesium.Model.fromGltfAsync(options);\n case 5:\n that.model = _context8.sent;\n that.model.originalBoundingSphereRadius = 0;\n that.sdk.viewer.scene.primitives.add(that.model);\n that.model.readyEvent.addEventListener(function () {\n that.model.originalBoundingSphereRadius = that.model.boundingSphere.radius;\n that.modelAnimate = that.options.model.animate;\n });\n _context8.next = 14;\n break;\n case 11:\n that.model = that.sdk.viewer.scene.primitives.add(Cesium.Model.fromGltf(options));\n that.model.originalBoundingSphereRadius = 0;\n that.model.readyPromise.then(function () {\n that.model.originalBoundingSphereRadius = that.model.boundingSphere.radius;\n that.modelAnimate = that.options.model.animate;\n });\n case 14:\n that.model.imageBasedLighting.luminanceAtZenith = 0.6;\n // 设置模型的旋转角度,使其水平放置于地面\n matrix = Cesium.Transforms.eastNorthUpToFixedFrame(that.positions_smooth[0]);\n that.model.modelMatrix = matrix;\n that.model.position = that.positions_smooth[0];\n that.model.customScale = {\n x: that.options.model.scale,\n y: that.options.model.scale,\n z: that.options.model.scale\n };\n // 模型大小比例\n // Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(0.1, 0.1, 0.1), this.entity.modelMatrix)\n positions = that.options.line.positions;\n fromDegreesArrayHeights = [];\n for (i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n pos = that.smooth ? that.positions_smooth : Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights);\n TrajectoryMotion.createLabel(that);\n TrajectoryMotion.createFuelLabel(that);\n that.modelMove(pos);\n that.entity = that.model;\n case 27:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8);\n }));\n function addModel(_x7) {\n return _addModel.apply(this, arguments);\n }\n return addModel;\n }()\n }, {\n key: \"createLabel\",\n value: function () {\n var _createLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee9(that) {\n var labelPosition;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n labelPosition = that.cartesian3Towgs84(that.model.position, that.sdk.viewer);\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_18__[\"default\"](that.sdk, {\n show: that.options.show ? that.options.label.show ? true : false : false,\n position: [labelPosition.lng, labelPosition.lat, labelPosition.alt],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: that.options.label.pixelOffset + (that.options.fuelShow ? that.options.label.fontSize + 20 : 0),\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n }, that.model);\n case 2:\n case \"end\":\n return _context9.stop();\n }\n }, _callee9);\n }));\n function createLabel(_x8) {\n return _createLabel.apply(this, arguments);\n }\n return createLabel;\n }()\n }, {\n key: \"createFuelLabel\",\n value: function () {\n var _createFuelLabel = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee10(that) {\n var labelPosition;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n labelPosition = that.cartesian3Towgs84(that.model.position, that.sdk.viewer);\n that.fuelLabel = new _LabelObject__WEBPACK_IMPORTED_MODULE_18__[\"default\"](that.sdk, {\n show: that.options.show ? that.options.fuelShow ? true : false : false,\n // show: true,\n position: [labelPosition.lng, labelPosition.lat, labelPosition.alt],\n text: '总油耗:',\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n pixelOffset: 0,\n backgroundColor: ['#6e6e6e', '#6e6e6e'],\n lineColor: '#00ffff00',\n lineWidth: 0,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n }, that.model);\n case 2:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10);\n }));\n function createFuelLabel(_x9) {\n return _createFuelLabel.apply(this, arguments);\n }\n return createFuelLabel;\n }() // 创建关键点\n }, {\n key: \"addKeyPoint\",\n value: function () {\n var _addKeyPoint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee11(that) {\n var i, height, result, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n i = 0;\n case 1:\n if (!(i < that.options.line.positions.length)) {\n _context11.next = 13;\n break;\n }\n _context11.next = 4;\n return that.getClampToHeight(that.options.line.positions[i]);\n case 4:\n height = _context11.sent;\n _context11.next = 7;\n return Cesium.Cartesian3.fromDegrees(that.options.line.positions[i].lng, that.options.line.positions[i].lat, height);\n case 7:\n result = _context11.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n show: that.options.line.keyPoint || false,\n position: that.ground ? result : Cesium.Cartesian3.fromDegrees(that.options.line.positions[i].lng, that.options.line.positions[i].lat, that.options.line.positions[i].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.keyPoints.push(entity);\n case 10:\n i++;\n _context11.next = 1;\n break;\n case 13:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11);\n }));\n function addKeyPoint(_x10) {\n return _addKeyPoint.apply(this, arguments);\n }\n return addKeyPoint;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TrajectoryMotion);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVHJhamVjdG9yeU1vdGlvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9UcmFqZWN0b3J5TW90aW9uL2luZGV4LmpzP2Y3YWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgTW91c2VFdmVudCBmcm9tICcuLi8uLi8uLi9FdmVudC9pbmRleCdcclxuaW1wb3J0IEVkaXRHbHRmIGZyb20gXCIuLi8uLi9Nb2RlbENvbnRyb2xsZXIvRWRpdEdsdGZcIjtcclxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xsZXIvaW5kZXhcIjtcclxuaW1wb3J0IE1vdXNlVGlwIGZyb20gJy4uLy4uLy4uL01vdXNlVGlwJ1xyXG5pbXBvcnQgTGFiZWxPYmplY3QgZnJvbSAnLi4vTGFiZWxPYmplY3QnXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgQ2FtZXJhQ29udHJvbGxlciwgY2xvc2VSb3RhdGVBcm91bmQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvZ2xvYmFsJ1xyXG5pbXBvcnQgeyBzeW5jRGF0YSwgZ2V0MkRWaWV3LCBnZXQzRFZpZXcgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi8uLi9PYmovRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkLCBnZXRTZGsgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcblxyXG5jbGFzcyBUcmFqZWN0b3J5TW90aW9uIGV4dGVuZHMgQmFzZSB7XHJcbiAgI3RpbWVvdXRFdmVudE9iamVjdCA9IG51bGxcclxuICAjbGluZUVkaXQgPSBmYWxzZVxyXG4gICNfcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZFxyXG4gICNfcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZDJcclxuICAjbW91c2VSaWdodGV2ZW50XHJcbiAgI2ZpcnN0UGVyc29uVmlld0V2ZW50XHJcbiAgLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZGVzY3JpcHRpb24g6L2o6L+56L+Q5YqoXHJcbiAqIEBwYXJhbSBzZGtcclxuICogQHBhcmFtIG9wdGlvbnMge29iamVjdH1cclxuICogQHBhcmFtIG9wdGlvbnMuaWQge3N0cmluZ30g5ZSv5LiA5qCH6K+GXHJcbiAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAqIEBwYXJhbSBvcHRpb25zLnNwZWVkPTEge251bWJlcn0g6L+Q6KGM6YCf5bqmXHJcbiAqIEBwYXJhbSBvcHRpb25zLmRlbGF5PTAge251bWJlcn0g6L+Q5Yqo5bu26L+f5pe26Ze0KOavq+enkilcclxuICogQHBhcmFtIG9wdGlvbnMubG9vcD10cnVlIHtib29sZWFufSDlvqrnjq9cclxuICogQHBhcmFtIG9wdGlvbnMuaGVpZ2h0IHtudW1iZXJ9IOi1t+Wni+eCuemrmOW6plxyXG4gKiBAcGFyYW0gb3B0aW9ucy5ncm91bmQ9ZmFsc2Uge2Jvb2xlYW59IOi0tOWcsFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5zdGF0ZT10cnVlIHtib29sZWFufSDmqKHlnovov5DliqhcclxuICogQHBhcmFtIG9wdGlvbnMucm91dGVEaXJlY3Rpb249dHJ1ZSB7Ym9vbGVhbn0g6Lev5b6E5pa55ZCRXHJcbiAqIEBwYXJhbSBvcHRpb25zLnZpZXdGb2xsb3c9ZmFsc2Uge2Jvb2xlYW59IOinhuinkui3n+maj1xyXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFsVGltZVJvdXRlPWZhbHNlIHtib29sZWFufSDlrp7ml7bot6/lvoRcclxuICogQHBhcmFtIG9wdGlvbnMubW9kZWwge29iamVjdH0g5qih5Z6L5Y+C5pWwXHJcbiAqIEBwYXJhbSBvcHRpb25zLm1vZGVsLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5qih5Z6L5pi+6ZqQXHJcbiAqIEBwYXJhbSBvcHRpb25zLm1vZGVsLnVybCB7c3RyaW5nfSDmqKHlnovlnLDlnYBcclxuICogQHBhcmFtIG9wdGlvbnMubW9kZWwucGl4ZWxTaXplPTcwIHtudW1iZXJ9IOaooeWei+WDj+e0oOWkp+Wwj1xyXG4gKiBAcGFyYW0gb3B0aW9ucy5tb2RlbC5oZWFkaW5nPTAge251bWJlcn0g5qih5Z6L6Iiq5ZCR6KeSXHJcbiAqIEBwYXJhbSBvcHRpb25zLm1vZGVsLnBpdGNoPTAge251bWJlcn0g5qih5Z6L5L+v5Luw6KeSXHJcbiAqIEBwYXJhbSBvcHRpb25zLm1vZGVsLnJvbGw9MCB7bnVtYmVyfSDmqKHlnovnv7vmu5rop5JcclxuICogQHBhcmFtIG9wdGlvbnMubW9kZWwuc2NhbGU9MSB7bnVtYmVyfSDmqKHlnovmr5TkvotcclxuICogQHBhcmFtIG9wdGlvbnMubW9kZWwuYW5pbWF0ZSB7c3RyaW5nfSDmqKHlnovliqjnlLtcclxuICogQHBhcmFtIG9wdGlvbnMubGluZSB7b2JqZWN0fSDot6/lvoTlj4LmlbBcclxuICogQHBhcmFtIG9wdGlvbnMubGluZS5zaG93PXRydWUge2Jvb2xlYW59IOi3r+W+hOaYvumakFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5saW5lLnNtb290aD1mYWxzZSB7Ym9vbGVhbn0g6Lev5b6E5ZyG5ruRXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxpbmUubm9zZVRvVGFpbD1mYWxzZSB7Ym9vbGVhbn0g6Lev5b6E6aaW5bC+55u46IGUXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMubGluZS5wb3NpdGlvbnMg57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sYXQge251bWJlcn0g57qs5bqmXHJcbiAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbiB7b2JqZWN0fSDmoIfnrb7kvY3nva5cclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5jb2xvcj0jZmZmZmZmIHtzdHJpbmd9IOWtl+S9k+minOiJslxyXG4gKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQ9MjAge251bWJlcn0g5a2X5L2T5YGP56e7KOW8lee6v+mVv+W6pilcclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLm5lYXI9MjAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5Hot53nprtcclxuICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJydcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IChvcHRpb25zLnNwZWVkIHx8IG9wdGlvbnMuc3BlZWQgPT09IDApID8gb3B0aW9ucy5zcGVlZCA6IDFcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3BlZWQgPD0gMCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSAwLjAxXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuZGVsYXkgPSBvcHRpb25zLmRlbGF5IHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5sb29wID0gb3B0aW9ucy5sb29wIHx8IG9wdGlvbnMubG9vcCA9PT0gZmFsc2UgPyBvcHRpb25zLmxvb3AgOiB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwgPSBvcHRpb25zLm1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUgPSBvcHRpb25zLmxpbmUgPSBvcHRpb25zLmxpbmUgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucyA9IG9wdGlvbnMubGluZS5wb3NpdGlvbnMgfHwgW11cclxuICAgIC8vIHRoaXMub3B0aW9ucy5oZWlnaHQgPSAob3B0aW9ucy5oZWlnaHQgfHwgb3B0aW9ucy5oZWlnaHQgPT09IDApID8gb3B0aW9ucy5oZWlnaHQgOiAodGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdID8gdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdLmFsdCA6IDApXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdID8gdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdLmFsdCA6IDBcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBOdW1iZXIodGhpcy5vcHRpb25zLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuc2hvdyA9IG9wdGlvbnMubGluZS5zaG93IHx8IG9wdGlvbnMubGluZS5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMubGluZS5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLnNob3cgPSBvcHRpb25zLm1vZGVsLnNob3cgfHwgb3B0aW9ucy5tb2RlbC5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMubW9kZWwuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5tb2RlbC51cmwgPSBvcHRpb25zLm1vZGVsLnVybCB8fCAnJ1xyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLnBpeGVsU2l6ZSA9IG9wdGlvbnMubW9kZWwucGl4ZWxTaXplIHx8IDcwXHJcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZyA9IG9wdGlvbnMubW9kZWwuaGVhZGluZyB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwucGl0Y2ggPSBvcHRpb25zLm1vZGVsLnBpdGNoIHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5tb2RlbC5yb2xsID0gb3B0aW9ucy5tb2RlbC5yb2xsIHx8IDBcclxuICAgIHRoaXMub3B0aW9ucy5tb2RlbC5zY2FsZSA9IChvcHRpb25zLm1vZGVsLnNjYWxlIHx8IG9wdGlvbnMubW9kZWwuc2NhbGUgPT09IDApID8gb3B0aW9ucy5tb2RlbC5zY2FsZSA6IDFcclxuICAgIHRoaXMub3B0aW9ucy5tb2RlbC5hbmltYXRlID0gb3B0aW9ucy5tb2RlbC5hbmltYXRlIHx8ICfml6AnXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5zbW9vdGggPSBvcHRpb25zLmxpbmUuc21vb3RoID8gb3B0aW9ucy5saW5lLnNtb290aCA6IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5ub3NlVG9UYWlsID0gb3B0aW9ucy5saW5lLm5vc2VUb1RhaWwgPyBvcHRpb25zLmxpbmUubm9zZVRvVGFpbCA6IGZhbHNlXHJcbiAgICB0aGlzLnBvc2l0aW9uc19zbW9vdGggPSBbXVxyXG4gICAgdGhpcy5vcHRpb25zLnVuaXRGdWVsQ29uc3VtcHRpb24gPSBvcHRpb25zLnVuaXRGdWVsQ29uc3VtcHRpb24gfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLmdyb3VuZCA9IG9wdGlvbnMuZ3JvdW5kIHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhdGUgPSAob3B0aW9ucy5zdGF0ZSB8fCBvcHRpb25zLnN0YXRlID09PSBmYWxzZSkgPyBvcHRpb25zLnN0YXRlIDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLnJvdXRlRGlyZWN0aW9uID0gKG9wdGlvbnMucm91dGVEaXJlY3Rpb24gfHwgb3B0aW9ucy5yb3V0ZURpcmVjdGlvbiA9PT0gZmFsc2UpID8gb3B0aW9ucy5yb3V0ZURpcmVjdGlvbiA6IHRydWVcclxuICAgIHRoaXMua2V5UG9pbnRzID0gW11cclxuICAgIHRoaXMucmVhbFRpbWVQb3NpdGlvbnMgPSBbXVxyXG4gICAgdGhpcy5fZWxtcyA9IHt9O1xyXG4gICAgdGhpcy5EaWFsb2cgPSBfRGlhbG9nXHJcbiAgICB0aGlzLnJlYWxUaW1lUm91dGVBcnJheSA9IFtdXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMuZmlyc3RQZXJzb24gPSBmYWxzZVxyXG4gICAgdGhpcy5kaXN0YW5jZVxyXG4gICAgLy8gdGhpcy5hZGRNb2RlbCgpXHJcblxyXG4gICAgb3B0aW9ucy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IHtcclxuICAgICAgdGV4dDogdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIHNob3c6IG9wdGlvbnMubGFiZWwuc2hvdyB8fCBmYWxzZSxcclxuICAgICAgZm9udFNpemU6IChvcHRpb25zLmxhYmVsLmZvbnRTaXplIHx8IG9wdGlvbnMubGFiZWwuZm9udFNpemUgPT09IDApID8gb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA6IDIwLFxyXG4gICAgICBmb250RmFtaWx5OiBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgPyBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkgOiAwLFxyXG4gICAgICBjb2xvcjogb3B0aW9ucy5sYWJlbC5jb2xvciB8fCAnI2ZmZmZmZicsXHJcbiAgICAgIGxpbmVXaWR0aDogKG9wdGlvbnMubGFiZWwubGluZVdpZHRoIHx8IG9wdGlvbnMubGFiZWwubGluZVdpZHRoID09PSAwKSA/IG9wdGlvbnMubGFiZWwubGluZVdpZHRoIDogNCxcclxuICAgICAgcGl4ZWxPZmZzZXQ6IChvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IHx8IG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgPT09IDApID8gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA6IDIwLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yIHx8IFsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddLFxyXG4gICAgICBsaW5lQ29sb3I6IG9wdGlvbnMubGFiZWwubGluZUNvbG9yIHx8ICcjMDBmZmZmODAnLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHx8IGZhbHNlLFxyXG4gICAgICBuZWFyOiAob3B0aW9ucy5sYWJlbC5uZWFyIHx8IG9wdGlvbnMubGFiZWwubmVhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLm5lYXIgOiAyMDAwLFxyXG4gICAgICBmYXI6IChvcHRpb25zLmxhYmVsLmZhciB8fCBvcHRpb25zLmxhYmVsLmZhciA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZhciA6IDEwMDAwMCxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn5pyA5bCR6ZyA6KaB5Lik5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgPSBuZXcgQ29udHJvbGxlcih0aGlzLnNkaylcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICAgIHRoaXMub3B0aW9ucy52aWV3Rm9sbG93ID0gZmFsc2VcclxuICAgICAgdGhpcy5vcHRpb25zLmZpcnN0UGVyc29uVmlldyA9IGZhbHNlXHJcbiAgICAgIFRyYWplY3RvcnlNb3Rpb24uYWRkTGluZSh0aGlzKVxyXG4gICAgICB0aGlzLmZpcnN0UGVyc29uVmlldyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyB0aGlzLm9wdGlvbnMudmlld0ZvbGxvd09yaWVudGF0aW9uID0gb3B0aW9ucy52aWV3Rm9sbG93T3JpZW50YXRpb25cclxuICAgIH1cclxuXHJcbiAgICAvLyBhbmltYXRlVXBkYXRlKClcclxuICAgIC8vIGZ1bmN0aW9uIGFuaW1hdGVVcGRhdGUoKSB7XHJcbiAgICAvLyAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlVXBkYXRlKTtcclxuICAgIC8vICAgVFdFRU4udXBkYXRlKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiAnVHJhamVjdG9yeU1vdGlvbidcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvdyh2KSB7XHJcbiAgICBpZiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGxldCBzZGtEID0gZ2V0MkRWaWV3KClcclxuICAgICAgaWYgKCF0aGlzLmlzU2hvd1ZpZXcgfHwgIXNka0QpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHZcclxuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbE9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSB2XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdykge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5zaG93ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLnNob3cgPSAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSA/IHRoaXMubW9kZWxTaG93IDogZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSkge1xyXG4gICAgICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLm1hdGVyaWFsID0gdGhpcy5saW5lU2hvdyA/IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGNvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmZmZicpLFxyXG4gICAgICAgICAgICBkYXNoTGVuZ3RoOiAyMCxcclxuICAgICAgICAgIH0pIDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZmZmMDAnKSxcclxuICAgICAgICAgICAgZGFzaExlbmd0aDogMjAsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubGluZS5wb2x5bGluZS5tYXRlcmlhbCA9IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGNvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmZmZjAwJyksXHJcbiAgICAgICAgICAgIGRhc2hMZW5ndGg6IDIwLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmtleVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5rZXlQb2ludHNbaV0uc2hvdyA9ICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpID8gdGhpcy5rZXlQb2ludFNob3cgOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZWFsVGltZVJvdXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlYWxUaW1lTGluZSAmJiAodGhpcy5yZWFsVGltZUxpbmUuc2hvdyA9ICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpID8gdHJ1ZSA6IGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnNob3cgPSAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSA/IHRoaXMub3B0aW9ucy5sYWJlbC5zaG93IDogZmFsc2UpXHJcbiAgICAgICAgdGhpcy5mdWVsTGFiZWwgJiYgKHRoaXMuZnVlbExhYmVsLnNob3cgPSAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSA/IHRoaXMub3B0aW9ucy5mdWVsU2hvdyA6IGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubW9kZWwuc2hvdyA9ICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpID8gdGhpcy5vcHRpb25zLnNob3cgOiBmYWxzZVxyXG4gICAgICAgIGxldCBzaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICBpZiAoKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMyB8fCAhc2RrRCkpIHtcclxuICAgICAgICAgIHNob3cgPSB0aGlzLm9wdGlvbnMuc2hvd1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlYWxUaW1lTGluZSAmJiAodGhpcy5yZWFsVGltZUxpbmUuc2hvdyA9IGZhbHNlKVxyXG4gICAgICAgIHRoaXMubGluZS5wb2x5bGluZS5tYXRlcmlhbCA9IHNob3cgPyBuZXcgQ2VzaXVtLlBvbHlsaW5lRGFzaE1hdGVyaWFsUHJvcGVydHkoe1xyXG4gICAgICAgICAgY29sb3I6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZmZmJyksXHJcbiAgICAgICAgICBkYXNoTGVuZ3RoOiAyMCxcclxuICAgICAgICB9KSA6IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBjb2xvcjogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmZmYwMCcpLFxyXG4gICAgICAgICAgZGFzaExlbmd0aDogMjAsXHJcbiAgICAgICAgfSlcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMua2V5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLmtleVBvaW50c1tpXS5zaG93ID0gKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykgPyBzaG93IDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgdGhpcy5mdWVsTGFiZWwgJiYgKHRoaXMuZnVlbExhYmVsLnNob3cgPSBmYWxzZSlcclxuICAgICAgICB0aGlzLnZpZXdGb2xsb3cgPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4uY2hlY2tlZCA9IHZcclxuICAgICAgfVxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHRoaXMuaXNTaG93VmlldyA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgaWYgKHRoaXMuZ3JvdW5kKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0IC0gTnVtYmVyKHYudG9GaXhlZCgyKSlcclxuICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSBOdW1iZXIodi50b0ZpeGVkKDIpKVxyXG4gICAgaWYgKHRoaXMubGluZSkge1xyXG4gICAgICBpZiAodGhpcy5ncm91bmQpIHtcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGR2YWx1ZSA9IHRoaXMub3B0aW9ucy5oZWlnaHQgLSB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rZXlQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQgKz0gZHZhbHVlXHJcbiAgICAgICAgICB0aGlzLmtleVBvaW50c1tpXS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sbmcsIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLnBvc2l0aW9uKSB7XHJcbiAgICAgIGxldCBoZWFkaW5nID0gdGhpcy5tb2RlbC5oZWFkaW5nXHJcbiAgICAgIGxldCBwaXRjaCA9IHRoaXMubW9kZWwucGl0Y2hcclxuICAgICAgbGV0IHJvbGwgPSB0aGlzLm1vZGVsLnJvbGxcclxuICAgICAgaWYgKGlzTmFOKGhlYWRpbmcpIHx8IGlzTmFOKHBpdGNoKSB8fCBpc05hTihyb2xsKSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0aGlzLm1vZGVsLnBvc2l0aW9uKVxyXG5cclxuICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVRyYW5zbGF0aW9uKG1hdHJpeCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKDAsIDAsIC1kaWZmZXJlbmNlKSwgbWF0cml4KVxyXG4gICAgICBDZXNpdW0uTWF0cml4NC5nZXRUcmFuc2xhdGlvbihtYXRyaXgsIHRoaXMubW9kZWwucG9zaXRpb24pXHJcblxyXG4gICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5TWF0cml4MyhtYXRyaXgsIENlc2l1bS5NYXRyaXgzLmZyb21IZWFkaW5nUGl0Y2hSb2xsKENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKGhlYWRpbmcsIHBpdGNoLCByb2xsKSksIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG5cclxuXHJcbiAgICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlUcmFuc2xhdGlvbih0aGlzLm1vZGVsLm1vZGVsTWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMCwgMCwgLWRpZmZlcmVuY2UpLCB0aGlzLm1vZGVsLm1vZGVsTWF0cml4KVxyXG4gICAgICAvLyBDZXNpdW0uTWF0cml4NC5nZXRUcmFuc2xhdGlvbih0aGlzLm1vZGVsLm1vZGVsTWF0cml4LCB0aGlzLm1vZGVsLnBvc2l0aW9uKVxyXG4gICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnNob3cgPSB0aGlzLmxhYmVsLnNob3cpXHJcbiAgICAgIHRoaXMuZnVlbExhYmVsICYmICh0aGlzLmZ1ZWxMYWJlbC5zaG93ID0gdGhpcy5mdWVsTGFiZWwuc2hvdylcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQpIHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFt0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XSlcclxuICAgICAgICAgICAgdGhpcy5mdWVsTGFiZWwgJiYgKHRoaXMuZnVlbExhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgbGF0OiB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0IH0pLnRoZW4oKGhlaWdodCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgaGVpZ2h0XSlcclxuICAgICAgICAgICAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgaGVpZ2h0XSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uc19zbW9vdGggPSB0aGlzLnJlbmV3TGluZVBvc2l0aW9ucyh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLmxpbmUucG9seWxpbmUucG9zaXRpb25zID0gcG9zaXRpb25zX3Ntb290aFxyXG4gICAgdGhpcy5fZWxtcy5oZWlnaHQgJiYgdGhpcy5fZWxtcy5oZWlnaHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gTnVtYmVyKHYudG9GaXhlZCgyKSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ncm91bmRcclxuICB9XHJcbiAgc2V0IGdyb3VuZCh2KSB7XHJcbiAgICB0aGlzLmxpbmVFZGl0ID0gZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5ncm91bmQgPSB2XHJcbiAgICB0aGlzLnJlYWxUaW1lTGluZS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdlxyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcblxyXG4gICAgaWYgKHRoaXMubGluZSkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMubGluZS5wb2x5bGluZS5jbGFtcFRvR3JvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rZXlQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0TW9zdERldGFpbGVkKFtuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxuZywgdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxhdCldKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5rZXlQb2ludHNbaV0ucG9zaXRpb24gPSByZXN1bHRbMF1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSAmJiB0aGlzLlR3ZWVuQW5pbWF0ZS5faXNQbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKHRoaXMuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKDApXHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAvLyBsZXQgX3RoaXMgPSB0aGlzXHJcblxyXG4gICAgLy8gbGV0IHBvc2l0aW9ucyA9IHRoaXMucmVuZXdMaW5lUG9zaXRpb25zKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgIC8vIGxldCBzdGFydERpc3RhbmNlID0gdGhpcy5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZVxyXG4gICAgLy8gbGV0IGxpbmVTdHJpbmcgPSBbXVxyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgbGV0IHBvc2l0aW9uID0gdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbnNbaV0sIF90aGlzLnNkay52aWV3ZXIpXHJcbiAgICAvLyAgIGxpbmVTdHJpbmcucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIHBvc2l0aW9uLmFsdF0pXHJcbiAgICAvLyB9XHJcbiAgICAvLyBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhsaW5lU3RyaW5nKTtcclxuICAgIC8vIHRoaXMuZGlzdGFuY2UgPSB0dXJmLmxlbmd0aChsaW5lLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAvLyBzZXRQb3NpdGlvbihzdGFydERpc3RhbmNlKVxyXG5cclxuICAgIC8vIGFzeW5jIGZ1bmN0aW9uIHNldFBvc2l0aW9uKGRpc3RhbmNlKSB7XHJcbiAgICAvLyAgIGxldCBzdGFydCA9IDA7XHJcbiAgICAvLyAgIGxldCBzdG9wID0gZGlzdGFuY2U7XHJcbiAgICAvLyAgIGxldCBjb29yZGluYXRlc1xyXG4gICAgLy8gICBsZXQgc2xpY2VkID0gbGluZVxyXG4gICAgLy8gICBpZiAoc3RvcCkge1xyXG4gICAgLy8gICAgIHNsaWNlZCA9IGF3YWl0IHR1cmYubGluZVNsaWNlQWxvbmcobGluZSwgc3RhcnQsIHN0b3AsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgIC8vICAgICAvLyBfdGhpcy5yZWFsVGltZVJvdXRlQXJyYXkgPSBzbGljZWQrXHJcbiAgICAvLyAgICAgY29vcmRpbmF0ZXMgPSBbLi4uc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW3NsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXV1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBlbHNlIHtcclxuICAgIC8vICAgICBjb29yZGluYXRlcyA9IFsuLi5saW5lLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdXVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGxldCBwb3NpdGlvblxyXG4gICAgLy8gICBsZXQgcG9zaXRpb25DYW1lcmFcclxuXHJcbiAgICAvLyAgIGlmIChfdGhpcy5ncm91bmQpIHtcclxuICAgIC8vICAgICAvLyBpZiAodmlld2VyLnRlcnJhaW5Qcm92aWRlci5hdmFpbGFiaWxpdHkpIHtcclxuICAgIC8vICAgICAvLyAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQodmlld2VyLnRlcnJhaW5Qcm92aWRlciwgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdKV0pO1xyXG4gICAgLy8gICAgIC8vICAgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0sIHJlc3VsdFswXS5oZWlnaHQpXHJcbiAgICAvLyAgICAgLy8gICBwb3NpdGlvbkNhbWVyYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgcmVzdWx0WzBdLmhlaWdodCArIDEpXHJcbiAgICAvLyAgICAgLy8gfVxyXG4gICAgLy8gICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICAgIC8vICAgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pXHJcbiAgICAvLyAgICAgLy8gICBwb3NpdGlvbkNhbWVyYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgMSlcclxuICAgIC8vICAgICAvLyB9XHJcbiAgICAvLyAgICAgbGV0IGZpbHRlckVudGl0eXMgPSBbXVxyXG4gICAgLy8gICAgIC8vIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAvLyAgICAgLy8gICBpZiAoIXZhbHVlLnR5cGUgfHwgKHZhbHVlLnR5cGUgIT09ICdnbGInICYmIHZhbHVlLnR5cGUhPT0gJ2JpbScgJiYgdmFsdWUudHlwZSE9PSAndGlsZXNldCcgJiYgdmFsdWUudHlwZSE9PSAnVHJhamVjdG9yeU1vdGlvbicgJiYgdmFsdWUuZW50aXR5KSkge1xyXG4gICAgLy8gICAgIC8vICAgICBjb25zb2xlLmxvZyh2YWx1ZS5lbnRpdHkpXHJcbiAgICAvLyAgICAgLy8gICAgIGZpbHRlckVudGl0eXMucHVzaCh2YWx1ZS5lbnRpdHkuaWQpXHJcbiAgICAvLyAgICAgLy8gICB9XHJcbiAgICAvLyAgICAgLy8gfVxyXG4gICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCc4ODg4ODg4ODg4JyxfdGhpcy5tb2RlbCwgLi4uZmlsdGVyRW50aXR5cylcclxuXHJcbiAgICAvLyAgICAgbGV0IHJlc3VsdFxyXG4gICAgLy8gICAgIGxldCBzZGsyRCA9IGdldDJEVmlldygpXHJcbiAgICAvLyAgICAgaWYgKHNkazJEICYmIF90aGlzLnNkayA9PSBzZGsyRCkge1xyXG4gICAgLy8gICAgICAgcmVzdWx0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgIC8vICAgICAgIHBvc2l0aW9uID0gcmVzdWx0XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgcmVzdWx0ID0gYXdhaXQgX3RoaXMuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pLCBbX3RoaXMubW9kZWwsIC4uLmZpbHRlckVudGl0eXNdKVxyXG4gICAgLy8gICAgICAgcG9zaXRpb24gPSByZXN1bHRcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgIC8vICAgICAgIHBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgbGV0IHBvczMgPSBfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbiwgX3RoaXMuc2RrLnZpZXdlcik7XHJcbiAgICAvLyAgICAgbGV0IGhlaWdodDIgPSAwXHJcbiAgICAvLyAgICAgdHJ5IHtcclxuICAgIC8vICAgICAgIGxldCBwb3NpdGlvbjIgPSBhd2FpdCBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZChcclxuICAgIC8vICAgICAgICAgX3RoaXMuc2RrLnZpZXdlci5zY2VuZS50ZXJyYWluUHJvdmlkZXIsXHJcbiAgICAvLyAgICAgICAgIFtDZXNpdW0uQ2FydG9ncmFwaGljLmZyb21EZWdyZWVzKHBvczMubG5nLCBwb3MzLmxhdCldXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgICBoZWlnaHQyID0gcG9zaXRpb24yWzBdLmhlaWdodFxyXG4gICAgLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLyAgICAgICBoZWlnaHQyID0gMFxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBpZiAocG9zMy5hbHQgPCBoZWlnaHQyKSB7XHJcbiAgICAvLyAgICAgICBwb3MzLmFsdCA9IGhlaWdodDJcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcG9zMy5hbHQgPSBOdW1iZXIocG9zMy5hbHQudG9GaXhlZCgxKSlcclxuICAgIC8vICAgICBwb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczMubG5nLCBwb3MzLmxhdCwgcG9zMy5hbHQpXHJcbiAgICAvLyAgICAgcG9zaXRpb25DYW1lcmEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0sIF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uLCBfdGhpcy5zZGsudmlld2VyKS5hbHQgKyAxLjgpXHJcbiAgICAvLyAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG5cclxuICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVswXSwgc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldWzFdKVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBfdGhpcy5yZWFsVGltZVBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIC8vICAgICAvLyBfdGhpcy5yZWFsVGltZUxpbmUucG9seWxpbmUucG9zaXRpb25zID0gXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZWxzZSB7XHJcbiAgICAvLyAgICAgbGV0IGNhcnRlc2lhbjMgPSBfdGhpcy5zcGxpbmUuZXZhbHVhdGUoZGlzdGFuY2UgLyBfdGhpcy5kaXN0YW5jZSlcclxuICAgIC8vICAgICBpZiAoIWNhcnRlc2lhbjMpIHtcclxuICAgIC8vICAgICAgIHJldHVyblxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBjb29yZGluYXRlcyA9IF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbjMsIF90aGlzLnNkay52aWV3ZXIpO1xyXG4gICAgLy8gICAgIHBvc2l0aW9uID0gY2FydGVzaWFuM1xyXG4gICAgLy8gICAgIHBvc2l0aW9uQ2FtZXJhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXMubG5nLCBjb29yZGluYXRlcy5sYXQsIGNvb3JkaW5hdGVzLmFsdCArIDEuOClcclxuICAgIC8vICAgICBsZXQgcG9zaXRpb25zX3Ntb290aCA9IFtdXHJcbiAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTAwMDsgaSsrKSB7XHJcbiAgICAvLyAgICAgICBpZiAoKGkgLyAxMDAwKSA+IChkaXN0YW5jZSAvIF90aGlzLmRpc3RhbmNlKSkge1xyXG4gICAgLy8gICAgICAgICBicmVha1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGNhcnRlc2lhbjMgPSBfdGhpcy5zcGxpbmUuZXZhbHVhdGUoaSAvIDEwMDApO1xyXG4gICAgLy8gICAgICAgcG9zaXRpb25zX3Ntb290aC5wdXNoKGNhcnRlc2lhbjMpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBwb3NpdGlvbnNfc21vb3RoLnB1c2goY2FydGVzaWFuMylcclxuICAgIC8vICAgICBfdGhpcy5yZWFsVGltZVBvc2l0aW9ucyA9IHBvc2l0aW9uc19zbW9vdGhcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgSGVhZGluZ1BpdGNoUm9sbCA9IGdldEhlYWRpbmdQaXRjaFJvbGwoX3RoaXMubW9kZWwucG9zaXRpb24sIHBvc2l0aW9uKVxyXG4gICAgLy8gICBpZiAocHJldmlvdXMgJiYgcHJldmlvdXMucG9zaXRpb24pIHtcclxuICAgIC8vICAgICBIZWFkaW5nUGl0Y2hSb2xsMiA9IGdldEhlYWRpbmdQaXRjaFJvbGwocHJldmlvdXMucG9zaXRpb24sIHBvc2l0aW9uKVxyXG4gICAgLy8gICAgIEhlYWRpbmdQaXRjaFJvbGwucGl0Y2ggPSBIZWFkaW5nUGl0Y2hSb2xsMi5waXRjaFxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHByZXZpb3VzLnBvc2l0aW9uID0gX3RoaXMubW9kZWwucG9zaXRpb25cclxuICAgIC8vICAgbGV0IG1vZGVIZWFkaW5nUGl0Y2hSb2xsID0gQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXMoX3RoaXMub3B0aW9ucy5tb2RlbC5oZWFkaW5nLCBfdGhpcy5vcHRpb25zLm1vZGVsLnBpdGNoLCBfdGhpcy5vcHRpb25zLm1vZGVsLnJvbGwpXHJcbiAgICAvLyAgIGxldCBoZWFkaW5nID0gMFxyXG4gICAgLy8gICBsZXQgcGl0Y2ggPSAwXHJcbiAgICAvLyAgIGxldCByb2xsID0gMFxyXG5cclxuICAgIC8vICAgbGV0IG1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKVxyXG4gICAgLy8gICBpZiAoX3RoaXMub3B0aW9ucy5yb3V0ZURpcmVjdGlvbiAmJiAhX3RoaXMubGluZUVkaXQpIHtcclxuICAgIC8vICAgICBoZWFkaW5nID0gKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZykgKiAoMTgwIC8gTWF0aC5QSSkgLSA5MCAtIF90aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZ1xyXG4gICAgLy8gICAgIHBpdGNoID0gKEhlYWRpbmdQaXRjaFJvbGwucGl0Y2gpICogKDE4MCAvIE1hdGguUEkpIC0gX3RoaXMub3B0aW9ucy5tb2RlbC5waXRjaFxyXG4gICAgLy8gICAgIHJvbGwgPSBfdGhpcy5vcHRpb25zLm1vZGVsLnJvbGxcclxuICAgIC8vICAgICBpZiAoaXNOYU4oaGVhZGluZykgfHwgaXNOYU4ocGl0Y2gpIHx8IGlzTmFOKHJvbGwpKSB7XHJcbiAgICAvLyAgICAgICByZXR1cm5cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgX3RoaXMubW9kZWwubW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5TWF0cml4MyhtYXRyaXgsIENlc2l1bS5NYXRyaXgzLmZyb21IZWFkaW5nUGl0Y2hSb2xsKENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKGhlYWRpbmcsIHBpdGNoLCByb2xsKSksIF90aGlzLm1vZGVsLm1vZGVsTWF0cml4KVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGVsc2Uge1xyXG4gICAgLy8gICAgIGlmIChfdGhpcy5lbnRpdHkpIHtcclxuICAgIC8vICAgICAgIGhlYWRpbmcgPSBfdGhpcy5vcHRpb25zLm1vZGVsLmhlYWRpbmdcclxuICAgIC8vICAgICAgIHBpdGNoID0gX3RoaXMub3B0aW9ucy5tb2RlbC5waXRjaFxyXG4gICAgLy8gICAgICAgcm9sbCA9IF90aGlzLm9wdGlvbnMubW9kZWwucm9sbFxyXG4gICAgLy8gICAgICAgaWYgKGlzTmFOKGhlYWRpbmcpIHx8IGlzTmFOKHBpdGNoKSB8fCBpc05hTihyb2xsKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm5cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIC8vIOaXi+i9rFxyXG4gICAgLy8gICAgICAgbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChcclxuICAgIC8vICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHJvbGwpXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKFxyXG4gICAgLy8gICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMocGl0Y2gpXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgICBsZXQgbXogPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25aKFxyXG4gICAgLy8gICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoaGVhZGluZylcclxuICAgIC8vICAgICAgIClcclxuICAgIC8vICAgICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgIC8vICAgICAgIGxldCByb3RhdGlvblkgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteSlcclxuICAgIC8vICAgICAgIGxldCByb3RhdGlvblogPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteilcclxuICAgIC8vICAgICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcbiAgICAvLyAgICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHJvdGF0aW9uWCwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICAvLyAgICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25ZLCBvcmlnaW5hbE1hdHJpeClcclxuICAgIC8vICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblosIF90aGlzLmVudGl0eS5tb2RlbE1hdHJpeClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgLy8gY29uc29sZS5sb2coKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZyAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcpICogKDE4MCAvIE1hdGguUEkpKVxyXG5cclxuXHJcblxyXG4gICAgLy8gICBfdGhpcy5tb2RlbC5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAvLyAgIGlmICghcG9zaXRpb24pIHtcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBsZXQgbGFiZWxQb3NpdGlvbiA9IF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uLCBfdGhpcy5zZGsudmlld2VyKVxyXG4gICAgLy8gICBfdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtsYWJlbFBvc2l0aW9uLmxuZywgbGFiZWxQb3NpdGlvbi5sYXQsIGxhYmVsUG9zaXRpb24uYWx0XVxyXG4gICAgLy8gICBsYXN0RGlzdGFuY2UgPSBkaXN0YW5jZVxyXG4gICAgLy8gICAvLyBjb25zb2xlLmxvZyhwb3NpdGlvbilcclxuICAgIC8vICAgX3RoaXMucmVhbFRpbWVSb3V0ZUFycmF5LnB1c2gocG9zaXRpb24pXHJcbiAgICAvLyAgIGlmIChfdGhpcy52aWV3Rm9sbG93KSB7XHJcbiAgICAvLyAgICAgLy8gY29uc29sZS5sb2coQ2VzaXVtLk1hdGgudG9EZWdyZWVzKF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBpdGNoKSlcclxuICAgIC8vICAgICBpZiAoX3RoaXMub3B0aW9ucy5maXJzdFBlcnNvblZpZXcpIHtcclxuICAgIC8vICAgICAgIF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnNldFZpZXcoe1xyXG4gICAgLy8gICAgICAgICBkZXN0aW5hdGlvbjogcG9zaXRpb25DYW1lcmEsXHJcbiAgICAvLyAgICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAvLyAgICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGhlYWRpbmcgKyA5MCArIF90aGlzLmZpcnN0UGVyc29uSGVhZGluZ1BpdGNoLmhlYWRpbmcpLFxyXG4gICAgLy8gICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3RoaXMuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2gucGl0Y2gpLFxyXG4gICAgLy8gICAgICAgICAgIHJvbGw6IDBcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICBpZiAoX3RoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAzKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChfdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgIC8vICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgLy8gICAgICAgICAgIC8vIF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uID0gcG9zaXRpb25cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChfdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgIC8vICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgIC8vICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlcy5sbmcsIGNvb3JkaW5hdGVzLmxhdCwgX3RoaXMuc2RrLnZpZXdlci5jYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWMuaGVpZ2h0KSxcclxuICAgIC8vICAgICAgICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTApLFxyXG4gICAgLy8gICAgICAgICAgICAgICBwaXRjaDogMCxcclxuICAgIC8vICAgICAgICAgICAgICAgcm9sbDogMFxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIH0pXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94IGRpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZWxtcy5oZWlnaHRCb3ggJiYgKHRoaXMuX2VsbXMuaGVpZ2h0Qm94LmNsYXNzTmFtZSA9ICdpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMSBoZWlnaHQtYm94Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmdyb3VuZCAmJiB0aGlzLl9lbG1zLmdyb3VuZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbW9kZWxQaXhlbFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1vZGVsLnBpeGVsU2l6ZVxyXG4gIH1cclxuICBzZXQgbW9kZWxQaXhlbFNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLnBpeGVsU2l6ZSA9IHZcclxuICAgIGlmICh0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHRoaXMubW9kZWwubWluaW11bVBpeGVsU2l6ZSA9IHZcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubW9kZWxQaXhlbFNpemUgJiYgdGhpcy5fZWxtcy5tb2RlbFBpeGVsU2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tb2RlbC5zY2FsZVxyXG4gIH1cclxuICBzZXQgc2NhbGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLnNjYWxlID0gTnVtYmVyKHYpXHJcbiAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICB0aGlzLm1vZGVsLnNjYWxlID0gdlxyXG4gICAgICB0aGlzLm1vZGVsLmN1c3RvbVNjYWxlID0geyB4OiB0aGlzLm9wdGlvbnMubW9kZWwuc2NhbGUsIHk6IHRoaXMub3B0aW9ucy5tb2RlbC5zY2FsZSwgejogdGhpcy5vcHRpb25zLm1vZGVsLnNjYWxlIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnNjYWxlICYmIHRoaXMuX2VsbXMuc2NhbGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBzcGVlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3BlZWRcclxuICB9XHJcbiAgc2V0IHNwZWVkKHYpIHtcclxuICAgIGlmICh2IDw9IDApIHtcclxuICAgICAgdiA9IDAuMDFcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IHZcclxuICAgIGlmICh0aGlzLnN0YXRlICYmIHRoaXMuVHdlZW5BbmltYXRlICYmIHRoaXMuVHdlZW5BbmltYXRlLl9pc1BsYXlpbmcpIHtcclxuICAgICAgdGhpcy5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKHRoaXMuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGV0IHRvdGFsVGltZSA9ICh0aGlzLmRpc3RhbmNlICogMTAwMCkgLyB0aGlzLm9wdGlvbnMuc3BlZWQgKiAxMDAwXHJcbiAgICAvLyAvLyB0aGlzLlR3ZWVuQW5pbWF0ZS5fb2JqZWN0LmRpc3RhbmNlL3RoaXMuVHdlZW5BbmltYXRlLl92YWx1ZXNFbmQuZGlzdGFuY2VcclxuICAgIC8vIHRoaXMuVHdlZW5BbmltYXRlLl9kdXJhdGlvbiA9IHRvdGFsVGltZVxyXG4gICAgdGhpcy5fZWxtcy5zcGVlZCAmJiB0aGlzLl9lbG1zLnNwZWVkLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc21vb3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLnNtb290aFxyXG4gIH1cclxuICBzZXQgc21vb3RoKHYpIHtcclxuICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuc21vb3RoID0gdlxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMucmVuZXdMaW5lUG9zaXRpb25zKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuXHJcbiAgICB0aGlzLmxpbmUucG9seWxpbmUucG9zaXRpb25zID0gcG9zaXRpb25zXHJcbiAgICB0aGlzLm1vZGVsLnBvc2l0aW9uID0gcG9zaXRpb25zWzBdXHJcbiAgICB0aGlzLm1vZGVsTW92ZShwb3NpdGlvbnMpXHJcbiAgICB0aGlzLl9lbG1zLnNtb290aCAmJiB0aGlzLl9lbG1zLnNtb290aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZGVsYXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlbGF5XHJcbiAgfVxyXG4gIHNldCBkZWxheSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZGVsYXkgPSB2XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUgJiYgdGhpcy5Ud2VlbkFuaW1hdGUuX2lzUGxheWluZykge1xyXG4gICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS5kZWxheSh0aGlzLmRlbGF5KVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5kZWxheSAmJiB0aGlzLl9lbG1zLmRlbGF5LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXRlXHJcbiAgfVxyXG4gIHNldCBzdGF0ZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc3RhdGUgPSB2XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLiNfcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZClcclxuICAgIGlmICh0aGlzLmVkaXRPYmopIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLmVkaXRPYmogPSBudWxsXHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmlubmVySFRNTCA9ICflvIDlp4vosIPmlbQnXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmNsYXNzTmFtZSA9ICdidG4gbW9kZWwtcm90YXRlLWJ0bidcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlICYmIHRoaXMuVHdlZW5BbmltYXRlLl9pc1BsYXlpbmcpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuVHdlZW5BbmltYXRlLnRpbWVvdXQpXHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5saW5lRWRpdCA9IGZhbHNlXHJcbiAgICAgICAgaWYgKHRoaXMuVHdlZW5BbmltYXRlLmlzUGxheWluZygpKSB7XHJcbiAgICAgICAgICB0aGlzLlR3ZWVuQW5pbWF0ZS50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnJlc3VtZSgpXHJcbiAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMuZGVsYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLmRlbGF5KHRoaXMuZGVsYXkpLnN0YXJ0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGVlZCA9IHRoaXMuc3BlZWRcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgcG9zaXRpb25DYW1lcmEgPSB7IC4uLnRoaXMuc2RrLnZpZXdlci5jYW1lcmEuX3Bvc2l0aW9uIH1cclxuXHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgICAgIHRoaXMuI19yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGZuKCkge1xyXG4gICAgICAgICAgaWYgKF90aGlzLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogeyAuLi5wb3NpdGlvbkNhbWVyYSB9LFxyXG4gICAgICAgICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkaW5nOiBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nLFxyXG4gICAgICAgICAgICAgICAgcGl0Y2g6IF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBpdGNoLFxyXG4gICAgICAgICAgICAgICAgcm9sbDogX3RoaXMuc2RrLnZpZXdlci5jYW1lcmEucm9sbFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLiNfcmVxdWVzdEFuaW1hdGlvbkZyYW1lRXZlbnRJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmbilcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnBhdXNlKClcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIF90aGlzLm1vZGVsICYmIChfdGhpcy5tb2RlbC5pc01vdmUgPSBmYWxzZSlcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5yZW5ld0xpbmVQb3NpdGlvbnModGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKVxyXG4gICAgICAgIHRoaXMubW9kZWxNb3ZlKHBvc2l0aW9ucylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5zdGF0ZSAmJiB0aGlzLl9lbG1zLnN0YXRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBtb2RlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1vZGVsLnNob3dcclxuICB9XHJcbiAgc2V0IG1vZGVsU2hvdyh2KSB7XHJcbiAgICBsZXQgc2RrRCA9IGdldDJEVmlldygpXHJcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwuc2hvdyA9IHZcclxuICAgIGxldCBzaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSkge1xyXG4gICAgICBzaG93ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5zaG93KSB7XHJcbiAgICAgIHRoaXMubW9kZWwuc2hvdyA9IHNob3dcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubW9kZWxTaG93ICYmIHRoaXMuX2VsbXMubW9kZWxTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBtb2RlbEFuaW1hdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1vZGVsLmFuaW1hdGVcclxuICB9XHJcblxyXG4gIHNldCBtb2RlbEFuaW1hdGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLmFuaW1hdGUgPSB2XHJcbiAgICBpZiAoIXRoaXMubW9kZWwgfHwgIXRoaXMubW9kZWwubG9hZGVyLmNvbXBvbmVudHMpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgYW5pbWF0aW9ucyA9IHRoaXMubW9kZWwubG9hZGVyLmNvbXBvbmVudHMuYW5pbWF0aW9uc1xyXG4gICAgdGhpcy5tb2RlbC5hY3RpdmVBbmltYXRpb25zLnJlbW92ZUFsbCgpXHJcbiAgICBpZiAoYW5pbWF0aW9ucyAmJiBhbmltYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFuaW1hdGlvbnNbaV0ubmFtZSA9PSB2KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZUFuaW1hdGlvbnMuYWRkKHtcclxuICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIGxvb3A6IENlc2l1bS5Nb2RlbEFuaW1hdGlvbkxvb3AuUkVQRUFULFxyXG4gICAgICAgICAgICBzcGVlZHVwOiAxLFxyXG4gICAgICAgICAgICByZXZlcnNlOiBmYWxzZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLm1vZGVsQW5pbWF0ZSAmJiB0aGlzLl9lbG1zLm1vZGVsQW5pbWF0ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG5vc2VUb1RhaWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUubm9zZVRvVGFpbFxyXG4gIH1cclxuICBzZXQgbm9zZVRvVGFpbCh2KSB7XHJcbiAgICB0aGlzLmxpbmVFZGl0ID0gZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLm5vc2VUb1RhaWwgPSB2XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMucHVzaCh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubGF0LCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgfVxyXG4gICAgbGV0IG5vc21vb3RoID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICBpZiAodGhpcy5saW5lKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gdGhpcy5yZW5ld0xpbmVQb3NpdGlvbnModGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKVxyXG4gICAgICB0aGlzLmxpbmUucG9seWxpbmUucG9zaXRpb25zID0gcG9zaXRpb25zX3Ntb290aFxyXG4gICAgICB0aGlzLm1vZGVsLnBvc2l0aW9uID0gcG9zaXRpb25zX3Ntb290aFswXVxyXG4gICAgICB0aGlzLm1vZGVsTW92ZShwb3NpdGlvbnNfc21vb3RoKVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5ub3NlVG9UYWlsICYmIHRoaXMuX2VsbXMubm9zZVRvVGFpbC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGluZVNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUuc2hvd1xyXG4gIH1cclxuICBzZXQgbGluZVNob3codikge1xyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5yZWFsVGltZVJvdXRlID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5saW5lLnNob3cgPSB2XHJcbiAgICBsZXQgc2hvdyA9IHZcclxuICAgIGxldCBzZGtEID0gZ2V0MkRWaWV3KClcclxuICAgIGlmICgoIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzIHx8ICFzZGtEKSkge1xyXG4gICAgICBzaG93ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubGluZSAmJiB0aGlzLnNob3cpIHtcclxuICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLm1hdGVyaWFsID0gc2hvdyA/IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgY29sb3I6IG5ldyBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjMDBmZmZmJyksXHJcbiAgICAgICAgZGFzaExlbmd0aDogMjAsIC8v55+t5YiS57q/6ZW/5bqmXHJcbiAgICAgIH0pIDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICBjb2xvcjogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmZmYwMCcpLFxyXG4gICAgICAgIGRhc2hMZW5ndGg6IDIwLCAvL+efreWIkue6v+mVv+W6plxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5saW5lU2hvdyAmJiB0aGlzLl9lbG1zLmxpbmVTaG93LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCByZWFsVGltZVJvdXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZWFsVGltZVJvdXRlXHJcbiAgfVxyXG4gIHNldCByZWFsVGltZVJvdXRlKHYpIHtcclxuICAgIGlmICh2KSB7XHJcbiAgICAgIHRoaXMubGluZVNob3cgPSBmYWxzZVxyXG4gICAgICB0aGlzLmtleVBvaW50U2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMucmVhbFRpbWVSb3V0ZSA9IHZcclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTGluZSAmJiB0aGlzLnNob3cpIHtcclxuICAgICAgdGhpcy5yZWFsVGltZUxpbmUuc2hvdyA9IHZcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMucmVhbFRpbWVSb3V0ZSAmJiB0aGlzLl9lbG1zLnJlYWxUaW1lUm91dGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGtleVBvaW50U2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGluZS5rZXlQb2ludFxyXG4gIH1cclxuICBzZXQga2V5UG9pbnRTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLmtleVBvaW50ID0gdlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmtleVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5zaG93KSB7XHJcbiAgICAgICAgdGhpcy5rZXlQb2ludHNbaV0uc2hvdyA9IHZcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5rZXlQb2ludFNob3cgJiYgdGhpcy5fZWxtcy5rZXlQb2ludFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gICAgaWYgKCF2ICYmIHRoaXMubGluZUVkaXQpIHtcclxuICAgICAgLy8g5YWz6Zet57q/57yW6L6RXHJcbiAgICAgIHRoaXMuI2xpbmVFZGl0ID0gdlxyXG4gICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0ICYmIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgIHRoaXMudGlwID0gbnVsbFxyXG4gICAgICB0aGlzLl9lbG1zLmxpbmVFZGl0ICYmIHRoaXMuX2VsbXMubGluZUVkaXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsaW5lRWRpdCgpIHtcclxuICAgIHJldHVybiB0aGlzLiNsaW5lRWRpdFxyXG4gIH1cclxuXHJcbiAgc2V0IGxpbmVFZGl0KHYpIHtcclxuICAgIGxldCBsaW5lUG9zaXRpb25zID0gW11cclxuICAgIGxldCBjb21wdXRlUG9zaXRpb25zU21vb3RoID0gKHBvc2l0aW9ucykgPT4ge1xyXG4gICAgICBsaW5lUG9zaXRpb25zID0gdGhpcy5yZW5ld0xpbmVQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgICB0aGlzLm1vZGVsLnBvc2l0aW9uID0gbGluZVBvc2l0aW9uc1swXVxyXG4gICAgICB0aGlzLm1vZGVsTW92ZShsaW5lUG9zaXRpb25zKVxyXG4gICAgfVxyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy52aWV3Rm9sbG93ID0gZmFsc2VcclxuICAgICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICB0aGlzLnNtb290aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IGZhbHNlXHJcblxyXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhpcy5zZGspXHJcbiAgICAgICAgdGhpcy5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoaXMuc2RrKVxyXG4gICAgICAgIGxldCBzZWxlY3RQb2ludFxyXG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbnNTbW9vdGgoWy4uLnRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc10pXHJcblxyXG4gICAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgbGV0IHBpY2sgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMua2V5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMua2V5UG9pbnRzW2ldLmlkID09PSBwaWNrLmlkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmtleVBvaW50c1tpXS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmVkaXRUcmFuc2xhdGlvbmFsKClcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuY29udHJvbGxlckNhbGxCYWNrID0gKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncGFyYW1zJywgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gcGFyYW1zLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RQb2ludC5pbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgPSB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0ICYmIHRoaXMuX2VsbXMuaGVpZ2h0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBOdW1iZXIodGhpcy5vcHRpb25zLmhlaWdodC50b0ZpeGVkKDIpKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgc2VsZWN0UG9pbnQucG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhwYXJhbXMucG9zaXRpb24ubG5nLCBwYXJhbXMucG9zaXRpb24ubGF0LCBwYXJhbXMucG9zaXRpb24uYWx0KVxyXG4gICAgICAgICAgICAgICAgICBjb21wdXRlUG9zaXRpb25zU21vb3RoKFsuLi50aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5rZXlQb2ludFNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBsZXQgcG9zID0ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgIHg6IChtb3ZlbWVudC5wb3NpdGlvbjEueCArIG1vdmVtZW50LnBvc2l0aW9uMi54KSAvIDIsXHJcbiAgICAgICAgICAgICAgeTogKG1vdmVtZW50LnBvc2l0aW9uMS55ICsgbW92ZW1lbnQucG9zaXRpb24yLnkpIC8gMlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmV2ZW50Lmdlc3R1cmVfcGluY2tfZW5kKCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gc3RhcnRUaW1lID49IDUwMCkge1xyXG4gICAgICAgICAgICAgIC8vIOmVv+aMieWPlua2iFxyXG4gICAgICAgICAgICAgIHRoaXMua2V5UG9pbnRTaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICAgICAgICB0aGlzLnRpcCA9IG51bGxcclxuICAgICAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMubGluZS5wb2x5bGluZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGxpbmVQb3NpdGlvbnNcclxuICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgfVxyXG4gICAgICAvLyDmmL7npLrlhbPplK7ngrlcclxuICAgICAgdGhpcy5rZXlQb2ludFNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubGluZUVkaXQpIHtcclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLnRpcCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICAvLyDpmpDol4/lhbPplK7ngrlcclxuICAgICAgdGhpcy5rZXlQb2ludFNob3cgPSB2XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIHRoaXMuI2xpbmVFZGl0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5saW5lRWRpdCAmJiB0aGlzLl9lbG1zLmxpbmVFZGl0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCByb3V0ZURpcmVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucm91dGVEaXJlY3Rpb25cclxuICB9XHJcbiAgc2V0IHJvdXRlRGlyZWN0aW9uKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5yb3V0ZURpcmVjdGlvbiA9IHZcclxuICAgIHRoaXMuX2VsbXMucm91dGVEaXJlY3Rpb24gJiYgdGhpcy5fZWxtcy5yb3V0ZURpcmVjdGlvbi5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbG9vcCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG9vcFxyXG4gIH1cclxuICBzZXQgbG9vcCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubG9vcCA9IHZcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSAmJiB0aGlzLlR3ZWVuQW5pbWF0ZS5faXNQbGF5aW5nKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucmVwZWF0KEluZmluaXR5KVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnJlcGVhdCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubG9vcCAmJiB0aGlzLl9lbG1zLmxvb3AuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGZpcnN0UGVyc29uVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlyc3RQZXJzb25WaWV3XHJcbiAgfVxyXG5cclxuICBzZXQgZmlyc3RQZXJzb25WaWV3KHYpIHtcclxuICAgIC8vIHRoaXMuc3RhdGUgPSB0cnVlXHJcbiAgICBsZXQgc2RrRCA9IGdldDJEVmlldygpXHJcbiAgICBsZXQgc3BsaXRTZGsgPSBnZXRTZGsoKVxyXG4gICAgaWYgKGdldDJEVmlldygpIHx8IHNwbGl0U2RrLnNka0QgfHwgIXRoaXMuc2hvdykge1xyXG4gICAgICB2ID0gZmFsc2VcclxuICAgIH1cclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuI19yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkKVxyXG4gICAgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQgJiYgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuX2ZpcnN0UGVyc29uVmlldyA9IHZcclxuICAgIHRoaXMub3B0aW9ucy5maXJzdFBlcnNvblZpZXcgPSB2XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICB0aGlzLnZpZXdGb2xsb3cgPSB0cnVlXHJcbiAgICAgIHRoaXMuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2ggPSB7XHJcbiAgICAgICAgaGVhZGluZzogMCxcclxuICAgICAgICBwaXRjaDogLTEwXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IHRydWVcclxuICAgICAgdGhpcy5tb2RlbCAmJiAodGhpcy5tb2RlbC5zaG93ID0gZmFsc2UpXHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAgICAgICBsZXQgZV9maXJzdFBlcnNvbiA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b25bbmFtZT0nZmlyc3RQZXJzb24nXVwiKVxyXG4gICAgICAgIGVfZmlyc3RQZXJzb25bMF0uY2xhc3NOYW1lID0gJ2J0biBpcy1hY3RpdmUnXHJcbiAgICAgICAgZV9maXJzdFBlcnNvblsxXS5jbGFzc05hbWUgPSAnYnRuJ1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgQ2FtZXJhQ29udHJvbGxlcih0aGlzLnNkaywgZmFsc2UpXHJcbiAgICAgIGxldCBzcGxpdFNkayA9IGdldFNkaygpXHJcbiAgICAgIGxldCB0YXJnZXRTZGtcclxuICAgICAgaWYgKHRoaXMuc2RrID09PSBzcGxpdFNkay5zZGtQKSB7XHJcbiAgICAgICAgdGFyZ2V0U2RrID0gc3BsaXRTZGsuc2RrRFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFNkayA9IHNwbGl0U2RrLnNka1BcclxuICAgICAgfVxyXG4gICAgICBsZXQgdGFyZ2V0RW50aXR5ID0gdGFyZ2V0U2RrID8gdGFyZ2V0U2RrLmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKSA6IHVuZGVmaW5lZFxyXG4gICAgICBpZiAodGhpcy5zZGspXHJcbiAgICAgICAgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgICAgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQubW91c2VfcmlnaHRfZG93bigobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGxldCBzdGFydFBvc2l0aW9uID0geyAuLi5tb3ZlbWVudC5wb3NpdGlvbiB9XHJcbiAgICAgICAgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQubW91c2VfbW92ZSgobW92ZW1lbnQyLCBjYXJ0ZXNpYW4yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpcnN0UGVyc29uSGVhZGluZ1BpdGNoLmhlYWRpbmcgPSB0aGlzLmZpcnN0UGVyc29uSGVhZGluZ1BpdGNoLmhlYWRpbmcgKyAoKG1vdmVtZW50Mi5lbmRQb3NpdGlvbi54IC0gc3RhcnRQb3NpdGlvbi54KSAvIDIwKVxyXG4gICAgICAgICAgdGhpcy5maXJzdFBlcnNvbkhlYWRpbmdQaXRjaC5waXRjaCA9IHRoaXMuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2gucGl0Y2ggKyAoKHN0YXJ0UG9zaXRpb24ueSAtIG1vdmVtZW50Mi5lbmRQb3NpdGlvbi55KSAvIDEwKVxyXG4gICAgICAgICAgdGFyZ2V0RW50aXR5ICYmICh0YXJnZXRFbnRpdHkuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2ggPSB7IC4uLnRoaXMuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2ggfSlcclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSB7IC4uLm1vdmVtZW50Mi5lbmRQb3NpdGlvbiB9XHJcbiAgICAgICAgfSwgdHJ1ZSlcclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy4jZmlyc3RQZXJzb25WaWV3RXZlbnQubW91c2VfcmlnaHRfdXAoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICB0aGlzLiNmaXJzdFBlcnNvblZpZXdFdmVudC5tb3VzZV9tb3ZlKCgpID0+IHsgfSlcclxuICAgICAgfSwgdHJ1ZSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBDYW1lcmFDb250cm9sbGVyKHRoaXMuc2RrLCB0cnVlKVxyXG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsU2hvdyAmJiB0aGlzLnNob3cpIHtcclxuICAgICAgICBsZXQgc2hvdyA9IHRydWVcclxuICAgICAgICBpZiAodGhpcy5zaG93ICYmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpKSB7XHJcbiAgICAgICAgICBzaG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNob3cgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGVsLnNob3cgPSBzaG93XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgIGxldCBlX2ZpcnN0UGVyc29uID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbltuYW1lPSdmaXJzdFBlcnNvbiddXCIpXHJcbiAgICAgICAgaWYgKGVfZmlyc3RQZXJzb25bMF0gJiYgZV9maXJzdFBlcnNvblsxXSkge1xyXG4gICAgICAgICAgZV9maXJzdFBlcnNvblswXS5jbGFzc05hbWUgPSAnYnRuJ1xyXG4gICAgICAgICAgZV9maXJzdFBlcnNvblsxXS5jbGFzc05hbWUgPSAnYnRuIGlzLWFjdGl2ZSdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdGb2xsb3cgJiYgdGhpcy5zaG93KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDMpIHtcclxuICAgICAgICAgIGxldCBwb2ludEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAvLyBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb25zX3Ntb290aFswXSwgLy8gcG9zaXRpb24gb2YgdGhlIHBvaW50XHJcbiAgICAgICAgICAgIHBvaW50OiB7XHJcbiAgICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5SRUQud2l0aEFscGhhKDApLCAvLyBjb2xvciBvZiB0aGUgcG9pbnRcclxuICAgICAgICAgICAgICBwaXhlbFNpemU6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IHBvaW50RW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdGb2xsb3cgPSB0aGlzLnZpZXdGb2xsb3dcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHZpZXdGb2xsb3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdGb2xsb3dcclxuICB9XHJcbiAgc2V0IHZpZXdGb2xsb3codikge1xyXG4gICAgbGV0IHNwbGl0U2RrID0gZ2V0U2RrKClcclxuICAgIGxldCBzZGsyRCA9IGdldDJEVmlldygpXHJcbiAgICAvLyBpZiAoc2RrMkQgfHwgc3BsaXRTZGsuc2RrRCkge1xyXG4gICAgLy8gICB2ID0gZmFsc2VcclxuICAgIC8vIH1cclxuICAgIGlmICghdGhpcy5zaG93KSB7XHJcbiAgICAgIHYgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnZpZXdGb2xsb3cgPSB2XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy52aWV3Rm9sbG93KSB7XHJcbiAgICAgIHRoaXMuZmlyc3RQZXJzb25WaWV3ID0gZmFsc2VcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5lZGl0T2JqKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMuZWRpdE9iaiA9IG51bGxcclxuICAgICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmlubmVySFRNTCA9ICflvIDlp4vosIPmlbQnXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2RlbC1yb3RhdGUtYnRuJylbMF0uY2xhc3NOYW1lID0gJ2J0biBtb2RlbC1yb3RhdGUtYnRuJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjbG9zZVJvdGF0ZUFyb3VuZCh0aGlzLnNkaylcclxuXHJcbiAgICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maXJzdFBlcnNvblZpZXcpIHtcclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSlcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50KSB7XHJcbiAgICAgICAgbGV0IGVfZmlyc3RQZXJzb24gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYnV0dG9uW25hbWU9J2ZpcnN0UGVyc29uJ11cIilcclxuICAgICAgICBpZiAoZV9maXJzdFBlcnNvblswXSAmJiBlX2ZpcnN0UGVyc29uWzFdKSB7XHJcbiAgICAgICAgICBlX2ZpcnN0UGVyc29uWzBdLmNsYXNzTmFtZSA9ICdidG4nXHJcbiAgICAgICAgICBlX2ZpcnN0UGVyc29uWzFdLmNsYXNzTmFtZSA9ICdidG4gaXMtYWN0aXZlJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHYgJiYgdGhpcy5zaG93ICYmIHRoaXMubW9kZWwpIHtcclxuICAgICAgICBsZXQgcG9pbnRFbnRpdHkgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIC8vIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgcG9zaXRpb246IHRoaXMubW9kZWwucG9zaXRpb24sIC8vIHBvc2l0aW9uIG9mIHRoZSBwb2ludFxyXG4gICAgICAgICAgcG9pbnQ6IHtcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5SRUQud2l0aEFscGhhKDApLCAvLyBjb2xvciBvZiB0aGUgcG9pbnRcclxuICAgICAgICAgICAgcGl4ZWxTaXplOiAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkgPSBwb2ludEVudGl0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBzZGszRCA9IGdldDNEVmlldygpXHJcbiAgICBpZiAoc2RrM0QpIHtcclxuICAgICAgaWYgKHRoaXMuc2RrICE9IHNkazNEKSB7XHJcbiAgICAgICAgbGV0IHRoYXQzRCA9IHNkazNELmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIGlmICh0aGF0M0QgJiYgdGhhdDNELnZpZXdGb2xsb3cgIT0gdikge1xyXG4gICAgICAgICAgdGhhdDNELnZpZXdGb2xsb3cgPSB2XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChzZGsyRCkge1xyXG4gICAgICAgICAgbGV0IHRoYXQyRCA9IHNkazJELmVudGl0eU1hcC5nZXQodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgaWYgKHRoYXQyRCAmJiB0aGF0MkQudmlld0ZvbGxvdyAhPSB2KSB7XHJcbiAgICAgICAgICAgIHRoYXQyRC52aWV3Rm9sbG93ID0gdlxyXG4gICAgICAgICAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUgJiYgdGhpcy5Ud2VlbkFuaW1hdGUuX2lzUGxheWluZykge1xyXG4gICAgICAgICAgICAgIHRoYXQyRC5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKHRoaXMuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIHRoaXMuX2VsbXMudmlld0ZvbGxvdyAmJiB0aGlzLl9lbG1zLnZpZXdGb2xsb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgbGV0IHNka0QgPSBnZXQyRFZpZXcoKVxyXG4gICAgbGV0IHNob3cgPSB2XHJcbiAgICBpZiAodGhpcy5zaG93ICYmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpKSB7XHJcbiAgICAgIHNob3cgPSB2XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zaG93KSB7XHJcbiAgICAgIGlmICh0aGlzLmxhYmVsKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gc2hvd1xyXG4gICAgICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgKyAodGhpcy5mdWVsU2hvdyA/IHRoaXMubGFiZWxGb250U2l6ZSArIDIwIDogMClcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQsIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHRdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgbGF0OiB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0IH0pLnRoZW4oKGhlaWdodCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5wb3NpdGlvbiA9IFt0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCBoZWlnaHRdKVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlKVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiYgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mb250RmFtaWx5ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkpXHJcbiAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwuZm9udEZhbWlseSA9IHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5KVxyXG5cclxuICAgIGxldCBuYW1lID0gZ2V0Rm9udEZhbWlseU5hbWUodGhpcy5sYWJlbEZvbnRGYW1pbHkpIHx8ICcnXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSAmJlxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSBuYW1lXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsQ29sb3Iodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5jb2xvciA9IHYpXHJcbiAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwuY29sb3IgPSB2KVxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMubGFiZWwgJiYgKHRoaXMubGFiZWwuZm9udFNpemUgPSB2KVxyXG4gICAgaWYgKHRoaXMuZnVlbExhYmVsKSB7XHJcbiAgICAgIHRoaXMuZnVlbExhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ICsgdiArIDIwXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbC5waXhlbE9mZnNldCA9IHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplICYmIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICB9XHJcbiAgc2V0IGxhYmVsU2NhbGVCeURpc3RhbmNlKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHYpXHJcbiAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdilcclxuICAgIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgJiYgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxOZWFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgfVxyXG4gIHNldCBsYWJlbE5lYXIodikge1xyXG4gICAgbGV0IG5lYXIgPSB2XHJcbiAgICBpZiAobmVhciA+IHRoaXMubGFiZWxGYXIpIHtcclxuICAgICAgbmVhciA9IHRoaXMubGFiZWxGYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5uZWFyID0gbmVhclxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5uZWFyID0gbmVhcilcclxuICAgIHRoaXMuZnVlbExhYmVsICYmICh0aGlzLmZ1ZWxMYWJlbC5uZWFyID0gbmVhcilcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mYXIgPSBmYXIpXHJcbiAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwuZmFyID0gZmFyKVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZhciAmJiB0aGlzLl9lbG1zLmxhYmVsRmFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IGZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCB1bml0RnVlbENvbnN1bXB0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy51bml0RnVlbENvbnN1bXB0aW9uXHJcbiAgfVxyXG5cclxuICBzZXQgdW5pdEZ1ZWxDb25zdW1wdGlvbih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudW5pdEZ1ZWxDb25zdW1wdGlvbiA9IHZcclxuICAgIHRoaXMuX2VsbXMudW5pdEZ1ZWxDb25zdW1wdGlvbiAmJiB0aGlzLl9lbG1zLnVuaXRGdWVsQ29uc3VtcHRpb24uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBmdWVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZnVlbFNob3dcclxuICB9XHJcblxyXG4gIHNldCBmdWVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZnVlbFNob3cgPSB2XHJcbiAgICBsZXQgc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgKCF0aGlzLnNob3dWaWV3IHx8IHRoaXMuc2hvd1ZpZXcgPT0gMykpIHtcclxuICAgICAgc2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNob3cpIHtcclxuICAgICAgaWYgKHRoaXMuZnVlbExhYmVsKSB7XHJcbiAgICAgICAgdGhpcy5mdWVsTGFiZWwuc2hvdyA9IHNob3dcclxuICAgICAgICB0aGlzLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ICsgKHNob3cgPyB0aGlzLmxhYmVsRm9udFNpemUgKyAyMCA6IDApXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbC5waXhlbE9mZnNldCA9IHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24pIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVlbExhYmVsICYmICh0aGlzLmZ1ZWxMYWJlbC5wb3NpdGlvbiA9IFt0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nLCB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24ubGF0LCB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0XSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoeyBsbmc6IHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sbmcsIGxhdDogdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB9KS50aGVuKChoZWlnaHQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZ1ZWxMYWJlbCAmJiAodGhpcy5mdWVsTGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZywgdGhpcy5vcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCwgaGVpZ2h0XSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZnVlbExhYmVsICYmICh0aGlzLmZ1ZWxMYWJlbC5zaG93ID0gZmFsc2UpXHJcbiAgICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuZnVlbFNob3cgJiYgdGhpcy5fZWxtcy5mdWVsU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyDliJvlu7rot6/lvoRcclxuICBzdGF0aWMgYWRkTGluZSh0aGF0KSB7XHJcbiAgICBsZXQgcG9zaXRpb25zX3Ntb290aCA9IHRoYXQucmVuZXdMaW5lUG9zaXRpb25zKHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgIGxldCBzaG93XHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2hvdyA9IHRoYXQub3B0aW9ucy5saW5lLnNob3dcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmVCeUlkKHRoYXQub3B0aW9ucy5pZCArICctMicpXHJcbiAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlQnlJZCh0aGF0Lm9wdGlvbnMuaWQgKyAnLTMnKVxyXG4gICAgdGhhdC5saW5lID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQgKyAnLTInLFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogcG9zaXRpb25zX3Ntb290aCxcclxuICAgICAgICB3aWR0aDogMixcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiB0aGF0Lmdyb3VuZCxcclxuICAgICAgICBtYXRlcmlhbDogc2hvdyA/IG5ldyBDZXNpdW0uUG9seWxpbmVEYXNoTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBjb2xvcjogbmV3IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMGZmZmYnKSxcclxuICAgICAgICAgIGRhc2hMZW5ndGg6IDIwLCAvL+efreWIkue6v+mVv+W6plxyXG4gICAgICAgIH0pIDogbmV3IENlc2l1bS5Qb2x5bGluZURhc2hNYXRlcmlhbFByb3BlcnR5KHtcclxuICAgICAgICAgIGNvbG9yOiBuZXcgQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwZmZmZjAwJyksXHJcbiAgICAgICAgICBkYXNoTGVuZ3RoOiAyMCwgLy/nn63liJLnur/plb/luqZcclxuICAgICAgICB9KSxcclxuICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXhcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgICB0aGF0LnJlYWxUaW1lTGluZSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkICsgJy0zJyxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnJlYWxUaW1lUm91dGUgPyB0aGF0Lm9wdGlvbnMucmVhbFRpbWVSb3V0ZSA6IGZhbHNlLFxyXG4gICAgICBwb2x5bGluZToge1xyXG4gICAgICAgIHBvc2l0aW9uczogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiB0aGF0LnJlYWxUaW1lUG9zaXRpb25zXHJcbiAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRoYXQuZ3JvdW5kLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmYwMDAwJyksXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5zZGsuX2VudGl0eVpJbmRleCsrXHJcbiAgICBpZiAodGhhdC4jbW91c2VSaWdodGV2ZW50KSB7XHJcbiAgICAgIHRoYXQuI21vdXNlUmlnaHRldmVudC5kZXN0cm95KClcclxuICAgIH1cclxuICAgIHRoYXQuI21vdXNlUmlnaHRldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgdGhhdC4jbW91c2VSaWdodGV2ZW50Lm1vdXNlX3JpZ2h0KChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgIGxldCBzcGxpdFNkayA9IGdldFNkaygpXHJcbiAgICAgIGxldCB0YXJnZXRTZGtcclxuICAgICAgaWYgKHRoYXQuc2RrID09PSBzcGxpdFNkay5zZGtQKSB7XHJcbiAgICAgICAgdGFyZ2V0U2RrID0gc3BsaXRTZGsuc2RrRFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFNkayA9IHNwbGl0U2RrLnNka1BcclxuICAgICAgfVxyXG4gICAgICBsZXQgdGFyZ2V0RW50aXR5ID0gdGFyZ2V0U2RrID8gdGFyZ2V0U2RrLmVudGl0eU1hcC5nZXQodGhhdC5vcHRpb25zLmlkKSA6IHVuZGVmaW5lZFxyXG4gICAgICB0YXJnZXRFbnRpdHkgJiYgKHRhcmdldEVudGl0eS52aWV3Rm9sbG93ID0gZmFsc2UpXHJcbiAgICAgIHRoYXQudmlld0ZvbGxvdyA9IGZhbHNlXHJcbiAgICB9LCB0cnVlKVxyXG4gICAgVHJhamVjdG9yeU1vdGlvbi5hZGRNb2RlbCh0aGF0KVxyXG4gICAgVHJhamVjdG9yeU1vdGlvbi5hZGRLZXlQb2ludCh0aGF0KVxyXG4gICAgdGhhdC5ub3NlVG9UYWlsID0gdGhhdC5vcHRpb25zLmxpbmUubm9zZVRvVGFpbFxyXG4gICAgdGhhdC5zbW9vdGggPSB0aGF0Lm9wdGlvbnMubGluZS5zbW9vdGhcclxuXHJcbiAgICBzeW5jRGF0YSh0aGF0LnNkaywgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgaWYgKHRoYXQub3B0aW9ucy5zaG93KSB7XHJcblxyXG4gICAgICBzZXRTcGxpdERpcmVjdGlvbigwLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOWIm+W7uuaooeWei1xyXG4gIHN0YXRpYyBhc3luYyBhZGRNb2RlbCh0aGF0KSB7XHJcbiAgICBsZXQgdXJsID0gdGhhdC5yZXBsYWNlSG9zdCh0aGF0Lm9wdGlvbnMubW9kZWwudXJsLCB0aGF0Lm9wdGlvbnMuaG9zdClcclxuICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubW9kZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBzY2FsZTogdGhhdC5vcHRpb25zLm1vZGVsLnNjYWxlLFxyXG4gICAgICAvLyBtaW5pbXVtUGl4ZWxTaXplOiB0aGF0Lm9wdGlvbnMubW9kZWwucGl4ZWxTaXplLFxyXG4gICAgICAvLyBtYXhpbXVtU2NhbGU6IDEwMDAwMCxcclxuICAgICAgLy8gYWxsb3dQaWNraW5nOiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKE51bWJlcihDZXNpdW0uVkVSU0lPTi5zcGxpdCgnLicpWzFdKSA+PSAxMDcpIHtcclxuICAgICAgdGhhdC5tb2RlbCA9IGF3YWl0IENlc2l1bS5Nb2RlbC5mcm9tR2x0ZkFzeW5jKG9wdGlvbnMpXHJcbiAgICAgIHRoYXQubW9kZWwub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyA9IDBcclxuICAgICAgdGhhdC5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoYXQubW9kZWwpXHJcbiAgICAgIHRoYXQubW9kZWwucmVhZHlFdmVudC5hZGRFdmVudExpc3RlbmVyKCgpID0+IHtcclxuICAgICAgICB0aGF0Lm1vZGVsLm9yaWdpbmFsQm91bmRpbmdTcGhlcmVSYWRpdXMgPSB0aGF0Lm1vZGVsLmJvdW5kaW5nU3BoZXJlLnJhZGl1c1xyXG4gICAgICAgIHRoYXQubW9kZWxBbmltYXRlID0gdGhhdC5vcHRpb25zLm1vZGVsLmFuaW1hdGVcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGF0Lm1vZGVsID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICAgIENlc2l1bS5Nb2RlbC5mcm9tR2x0ZihvcHRpb25zKVxyXG4gICAgICApO1xyXG4gICAgICB0aGF0Lm1vZGVsLm9yaWdpbmFsQm91bmRpbmdTcGhlcmVSYWRpdXMgPSAwXHJcbiAgICAgIHRoYXQubW9kZWwucmVhZHlQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoYXQubW9kZWwub3JpZ2luYWxCb3VuZGluZ1NwaGVyZVJhZGl1cyA9IHRoYXQubW9kZWwuYm91bmRpbmdTcGhlcmUucmFkaXVzXHJcbiAgICAgICAgdGhhdC5tb2RlbEFuaW1hdGUgPSB0aGF0Lm9wdGlvbnMubW9kZWwuYW5pbWF0ZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoYXQubW9kZWwuaW1hZ2VCYXNlZExpZ2h0aW5nLmx1bWluYW5jZUF0WmVuaXRoID0gMC42XHJcbiAgICAvLyDorr7nva7mqKHlnovnmoTml4vovazop5LluqbvvIzkvb/lhbbmsLTlubPmlL7nva7kuo7lnLDpnaJcclxuICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0aGF0LnBvc2l0aW9uc19zbW9vdGhbMF0pXHJcbiAgICB0aGF0Lm1vZGVsLm1vZGVsTWF0cml4ID0gbWF0cml4XHJcbiAgICB0aGF0Lm1vZGVsLnBvc2l0aW9uID0gdGhhdC5wb3NpdGlvbnNfc21vb3RoWzBdXHJcbiAgICB0aGF0Lm1vZGVsLmN1c3RvbVNjYWxlID0geyB4OiB0aGF0Lm9wdGlvbnMubW9kZWwuc2NhbGUsIHk6IHRoYXQub3B0aW9ucy5tb2RlbC5zY2FsZSwgejogdGhhdC5vcHRpb25zLm1vZGVsLnNjYWxlIH07XHJcbiAgICAvLyDmqKHlnovlpKflsI/mr5TkvotcclxuICAgIC8vIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlTY2FsZShtYXRyaXgsIG5ldyBDZXNpdW0uQ2FydGVzaWFuMygwLjEsIDAuMSwgMC4xKSwgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXgpXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgIH1cclxuICAgIGxldCBwb3MgPSB0aGF0LnNtb290aCA/IHRoYXQucG9zaXRpb25zX3Ntb290aCA6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKVxyXG4gICAgVHJhamVjdG9yeU1vdGlvbi5jcmVhdGVMYWJlbCh0aGF0KVxyXG4gICAgVHJhamVjdG9yeU1vdGlvbi5jcmVhdGVGdWVsTGFiZWwodGhhdClcclxuICAgIHRoYXQubW9kZWxNb3ZlKHBvcylcclxuXHJcblxyXG4gICAgdGhhdC5lbnRpdHkgPSB0aGF0Lm1vZGVsXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgbGV0IGxhYmVsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHRoYXQubW9kZWwucG9zaXRpb24sIHRoYXQuc2RrLnZpZXdlcilcclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyAodGhhdC5vcHRpb25zLmxhYmVsLnNob3cgPyB0cnVlIDogZmFsc2UpIDogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBbbGFiZWxQb3NpdGlvbi5sbmcsIGxhYmVsUG9zaXRpb24ubGF0LCBsYWJlbFBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6IHRoYXQub3B0aW9ucy5uYW1lLFxyXG4gICAgICBmb250U2l6ZTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5OiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSxcclxuICAgICAgY29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5jb2xvcixcclxuICAgICAgcGl4ZWxPZmZzZXQ6IHRoYXQub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCArICh0aGF0Lm9wdGlvbnMuZnVlbFNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUgKyAyMCA6IDApLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXJcclxuICAgIH0sIHRoYXQubW9kZWwpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlRnVlbExhYmVsKHRoYXQpIHtcclxuICAgIGxldCBsYWJlbFBvc2l0aW9uID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NCh0aGF0Lm1vZGVsLnBvc2l0aW9uLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICB0aGF0LmZ1ZWxMYWJlbCA9IG5ldyBMYWJlbE9iamVjdCh0aGF0LnNkaywge1xyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyA/ICh0aGF0Lm9wdGlvbnMuZnVlbFNob3cgPyB0cnVlIDogZmFsc2UpIDogZmFsc2UsXHJcbiAgICAgIC8vIHNob3c6IHRydWUsXHJcbiAgICAgIHBvc2l0aW9uOiBbbGFiZWxQb3NpdGlvbi5sbmcsIGxhYmVsUG9zaXRpb24ubGF0LCBsYWJlbFBvc2l0aW9uLmFsdF0sXHJcbiAgICAgIHRleHQ6ICfmgLvmsrnogJc6JyxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiAwLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFsnIzZlNmU2ZScsICcjNmU2ZTZlJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogJyMwMGZmZmYwMCcsXHJcbiAgICAgIGxpbmVXaWR0aDogMCxcclxuICAgICAgc2NhbGVCeURpc3RhbmNlOiB0aGF0Lm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlLFxyXG4gICAgICBuZWFyOiB0aGF0Lm9wdGlvbnMubGFiZWwubmVhcixcclxuICAgICAgZmFyOiB0aGF0Lm9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB9LCB0aGF0Lm1vZGVsKVxyXG4gIH1cclxuXHJcbiAgLy8g5Yib5bu65YWz6ZSu54K5XHJcbiAgc3RhdGljIGFzeW5jIGFkZEtleVBvaW50KHRoYXQpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQodGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldKVxyXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxhdCwgaGVpZ2h0KVxyXG4gICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5saW5lLmtleVBvaW50IHx8IGZhbHNlLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGF0Lmdyb3VuZCA/IHJlc3VsdCA6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQua2V5UG9pbnRzLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5qih5Z6L56e75YqoXHJcbiAgYXN5bmMgbW9kZWxNb3ZlKHBvc2l0aW9ucywgb3B0aW9uID0geyB0aW1lOiAwIH0pIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuI19yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkKVxyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgbGV0IHRpbWUgPSBvcHRpb24udGltZSB8fCAwXHJcbiAgICBsZXQgc3RhcnREaXN0YW5jZSA9IG9wdGlvbi5kaXN0YW5jZVxyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMuc2RrLnZpZXdlclxyXG4gICAgaWYgKCF0aGlzLm1vZGVsIHx8ICF0aGlzLnNkayB8fCAhdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVNb2RlbEFuaW1hdGUoKVxyXG5cclxuICAgIGxldCBsaW5lU3RyaW5nID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB2aWV3ZXIpXHJcbiAgICAgIGxpbmVTdHJpbmcucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIHBvc2l0aW9uLmFsdF0pXHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhsaW5lU3RyaW5nKVxyXG4gICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcobGluZVN0cmluZyk7XHJcbiAgICB0aGlzLmRpc3RhbmNlID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgbGV0IHRvdGFsVGltZSA9ICh0aGlzLmRpc3RhbmNlICogMTAwMCkgLyB0aGlzLm9wdGlvbnMuc3BlZWQgIC8vIOaAu+iAl+aXtu+8iOenku+8iVxyXG4gICAgaWYgKCFzdGFydERpc3RhbmNlICYmIHN0YXJ0RGlzdGFuY2UgIT09IDApIHtcclxuICAgICAgc3RhcnREaXN0YW5jZSA9IDAuMDAwMDAxXHJcbiAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgaWYgKHRpbWUgPiB0b3RhbFRpbWUpIHtcclxuICAgICAgICAgIHRpbWUgPSB0b3RhbFRpbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhcnREaXN0YW5jZSA9ICh0aW1lIC8gdG90YWxUaW1lKSAqIHRoaXMuZGlzdGFuY2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChzdGFydERpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSkge1xyXG4gICAgICAgIHN0YXJ0RGlzdGFuY2UgPSB0aGlzLmRpc3RhbmNlXHJcbiAgICAgIH1cclxuICAgICAgdGltZSA9IChzdGFydERpc3RhbmNlIC8gdGhpcy5kaXN0YW5jZSkgKiB0b3RhbFRpbWVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRvdGFsVGltZSlcclxuICAgIGxldCBsYXN0RGlzdGFuY2UgPSAwXHJcbiAgICBsZXQgbW90aW9uQXJyYXkgPSBbXVxyXG4gICAgbGV0IEhlYWRpbmdQaXRjaFJvbGxcclxuICAgIGxldCBIZWFkaW5nUGl0Y2hSb2xsMlxyXG4gICAgbGV0IHByZXZpb3VzID0ge31cclxuICAgIGxldCBtID0gMFxyXG4gICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBuZXcgVFdFRU4uVHdlZW4oeyBkaXN0YW5jZTogc3RhcnREaXN0YW5jZSB9KS50byh7IGRpc3RhbmNlOiB0aGlzLmRpc3RhbmNlIH0sICh0b3RhbFRpbWUgLSB0aW1lKSAqIDEwMDApLmRlbGF5KHRoaXMuZGVsYXkpLmVhc2luZyhUV0VFTi5FYXNpbmcuTGluZWFyLk5vbmUpLnJlcGVhdCh0aGlzLm9wdGlvbnMubG9vcCA/IEluZmluaXR5IDogMCkub25SZXBlYXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGltZSB8fCBzdGFydERpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9KS5vblVwZGF0ZShhc3luYyAociwgYSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUuX2R1cmF0aW9uID09IEluZmluaXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbSsrXHJcbiAgICAgIGlmICghdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVNb2RlbEFuaW1hdGUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzTmFOKHIuZGlzdGFuY2UpKSB7XHJcbiAgICAgICAgc2V0UG9zaXRpb24oci5kaXN0YW5jZSlcclxuICAgICAgfVxyXG4gICAgfSkub25FdmVyeVN0YXJ0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZWFsVGltZVJvdXRlQXJyYXkgPSBbXVxyXG4gICAgfSkub25Db21wbGV0ZSgoZCkgPT4ge1xyXG4gICAgICB0aGlzLnN0YXRlID0gZmFsc2VcclxuICAgICAgLy8gdGhpcy5yZW1vdmVNb2RlbEFuaW1hdGUoKVxyXG4gICAgICAvLyBsZXQgcnVudGltZUFuaW1hdGlvbiA9IHRoaXMubW9kZWwuX2FjdGl2ZUFuaW1hdGlvbnMuX3J1bnRpbWVBbmltYXRpb25zXHJcbiAgICAgIC8vIC8vIGxldCBhbmltYXRpb25zID0gYXdhaXQgdGhpcy5tb2RlbC5yZWFkeVByb21pc2VcclxuICAgICAgLy8gZm9yIChsZXQgaSA9IHJ1bnRpbWVBbmltYXRpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgLy8gICBzd2l0Y2ggKHJ1bnRpbWVBbmltYXRpb25baV0ubmFtZSkge1xyXG4gICAgICAvLyAgICAgY2FzZSAn6LeRJzpcclxuICAgICAgLy8gICAgICAgdGhpcy5tb2RlbC5hY3RpdmVBbmltYXRpb25zLnJlbW92ZShydW50aW1lQW5pbWF0aW9uW2ldKVxyXG4gICAgICAvLyAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnN0YXRlKSB7XHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnN0YXJ0KClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZXRQb3NpdGlvbihzdGFydERpc3RhbmNlKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBfdGhpcy5tb2RlbC5pc01vdmUgPSBmYWxzZVxyXG4gICAgICB9LCAxMDAwKTtcclxuXHJcblxyXG4gICAgICBhbmltYXRlVXBkYXRlKClcclxuICAgICAgZnVuY3Rpb24gYW5pbWF0ZVVwZGF0ZSgpIHtcclxuICAgICAgICBfdGhpcy4jX3JlcXVlc3RBbmltYXRpb25GcmFtZUV2ZW50SWQyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFxyXG4gICAgICAgICAgYW5pbWF0ZVVwZGF0ZVxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5maXJzdFBlcnNvblZpZXcpIHtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbkNhbWVyYSA9IHsgLi4uX3RoaXMuc2RrLnZpZXdlci5jYW1lcmEuX3Bvc2l0aW9uIH1cclxuICAgICAgICAgIF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnNldFZpZXcoe1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogcG9zaXRpb25DYW1lcmEsXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF90aGlzLm1vZGVsLmhlYWRpbmcgKyA5MCArIF90aGlzLmZpcnN0UGVyc29uSGVhZGluZ1BpdGNoLmhlYWRpbmcpLFxyXG4gICAgICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoX3RoaXMuZmlyc3RQZXJzb25IZWFkaW5nUGl0Y2gucGl0Y2gpLFxyXG4gICAgICAgICAgICAgIHJvbGw6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRQb3NpdGlvbihkaXN0YW5jZSkge1xyXG4gICAgICBfdGhpcy50b3RhbEZ1ZWxDb25zdW1wdGlvbiA9IE51bWJlcigoZGlzdGFuY2UgLyAxMDAgKiBfdGhpcy51bml0RnVlbENvbnN1bXB0aW9uKS50b0ZpeGVkKDIpKVxyXG4gICAgICBfdGhpcy5mdWVsTGFiZWwudGV4dCA9ICfmgLvmsrnogJc6JyArIF90aGlzLnRvdGFsRnVlbENvbnN1bXB0aW9uICsgJyBMJ1xyXG4gICAgICBfdGhpcy5tb2RlbC5pc01vdmUgPSB0cnVlXHJcbiAgICAgIGxldCBzZGsyRCA9IGdldDJEVmlldygpXHJcbiAgICAgIGxldCBzcGxpdFNkayA9IGdldFNkaygpXHJcbiAgICAgIGlmICghX3RoaXMuc2RrLnZpZXdlciB8fCAhX3RoaXMuc2RrLnZpZXdlci5zY2VuZSkge1xyXG4gICAgICAgIF90aGlzLnJlbW92ZU1vZGVsQW5pbWF0ZSgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0YXJ0ID0gMDtcclxuICAgICAgbGV0IHN0b3AgPSBkaXN0YW5jZTtcclxuICAgICAgbGV0IGNvb3JkaW5hdGVzXHJcbiAgICAgIGxldCBzbGljZWQgPSBsaW5lXHJcbiAgICAgIGlmIChzdG9wKSB7XHJcbiAgICAgICAgc2xpY2VkID0gYXdhaXQgdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lLCBzdGFydCwgc3RvcCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAgIC8vIF90aGlzLnJlYWxUaW1lUm91dGVBcnJheSA9IHNsaWNlZCtcclxuICAgICAgICBjb29yZGluYXRlcyA9IFsuLi5zbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aCAtIDFdXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvb3JkaW5hdGVzID0gWy4uLmxpbmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1dXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBvc2l0aW9uXHJcbiAgICAgIGxldCBwb3NpdGlvbkNhbWVyYVxyXG5cclxuICAgICAgaWYgKF90aGlzLmdyb3VuZCkge1xyXG4gICAgICAgIC8vIGlmICh2aWV3ZXIudGVycmFpblByb3ZpZGVyLmF2YWlsYWJpbGl0eSkge1xyXG4gICAgICAgIC8vICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBDZXNpdW0uc2FtcGxlVGVycmFpbk1vc3REZXRhaWxlZCh2aWV3ZXIudGVycmFpblByb3ZpZGVyLCBbQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pXSk7XHJcbiAgICAgICAgLy8gICBwb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgcmVzdWx0WzBdLmhlaWdodClcclxuICAgICAgICAvLyAgIHBvc2l0aW9uQ2FtZXJhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCByZXN1bHRbMF0uaGVpZ2h0ICsgMSlcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgLy8gICBwb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgICAgICAvLyAgIHBvc2l0aW9uQ2FtZXJhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCAxKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgZmlsdGVyRW50aXR5cyA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIF90aGlzLnNkay5lbnRpdHlNYXApIHtcclxuICAgICAgICAgIGlmICghdmFsdWUudHlwZSB8fCAodmFsdWUudHlwZSAhPT0gJ2dsYicgJiYgdmFsdWUudHlwZSAhPT0gJ2JpbScgJiYgdmFsdWUudHlwZSAhPT0gJ3RpbGVzZXQnICYmIHZhbHVlLnR5cGUgIT09ICdUcmFqZWN0b3J5TW90aW9uJyAmJiB2YWx1ZS50eXBlICE9PSAnUGFydGljbGVFZmZlY3RzJyAmJiB2YWx1ZS5lbnRpdHkpKSB7XHJcbiAgICAgICAgICAgIC8vIGlmKHZhbHVlLnR5cGUgPT09ICdQYXJ0aWNsZUVmZmVjdHMnKSB7XHJcbiAgICAgICAgICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5lbnRpdHkuX3BhcnRpY2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyAgICAgZmlsdGVyRW50aXR5cy5wdXNoKHZhbHVlLmVudGl0eS5fcGFydGljbGVzW2ldLl9iaWxsYm9hcmQpXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGZpbHRlckVudGl0eXMucHVzaCh2YWx1ZS5lbnRpdHkpXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sYWJlbCAmJiB2YWx1ZS5sYWJlbC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJFbnRpdHlzLnB1c2godmFsdWUubGFiZWwuZW50aXR5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfdGhpcy5sYWJlbCAmJiBfdGhpcy5sYWJlbC5lbnRpdHkpIHtcclxuICAgICAgICAgIGZpbHRlckVudGl0eXMucHVzaChfdGhpcy5sYWJlbC5lbnRpdHkpXHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIC8vIGxldCBwb2ludDEgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCAtMTAwMDApO1xyXG4gICAgICAgIC8vIGxldCBwb2ludDIgPSBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCAxMDAwMDAwMDAwMCk7XHJcbiAgICAgICAgLy8gbGV0IGRpcmVjdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvaW50MiwgcG9pbnQxLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgICAgLy8gbGV0IGMgPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUoZGlyZWN0aW9uLCBkaXJlY3Rpb24pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCflsITnur/mlrnlkJE6JywgYyk7XHJcbiAgICAgICAgLy8gbGV0IHJheSA9IG5ldyBDZXNpdW0uUmF5KHBvaW50MSwgYyk7XHJcbiAgICAgICAgLy8gbGV0IHBpY2tlZE9iamVjdHMgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGlja0Zyb21SYXkocmF5KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncGlja2VkT2JqZWN0cycsIHBpY2tlZE9iamVjdHMpXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2hlaWdodCcsIENlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbUNhcnRlc2lhbihwaWNrZWRPYmplY3RzLnBvc2l0aW9uKS5oZWlnaHQpXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdFxyXG4gICAgICAgIGxldCBzZGsyRCA9IGdldDJEVmlldygpXHJcbiAgICAgICAgaWYgKHNkazJEICYmIF90aGlzLnNkayA9PSBzZGsyRCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgICAgICAgIHBvc2l0aW9uID0gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgX3RoaXMuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KG5ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pLCBbX3RoaXMubW9kZWwsIC4uLmZpbHRlckVudGl0eXNdKVxyXG4gICAgICAgICAgcG9zaXRpb24gPSByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgIHBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvczMgPSBfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbiwgdmlld2VyKTtcclxuICAgICAgICBsZXQgaGVpZ2h0MiA9IDBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uMiA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zMy5sbmcsIHBvczMubGF0KV1cclxuICAgICAgICAgIClcclxuICAgICAgICAgIGhlaWdodDIgPSBwb3NpdGlvbjJbMF0uaGVpZ2h0XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGhlaWdodDIgPSAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3MzLmFsdCA8IGhlaWdodDIpIHtcclxuICAgICAgICAgIHBvczMuYWx0ID0gaGVpZ2h0MlxyXG4gICAgICAgIH1cclxuICAgICAgICBwb3MzLmFsdCA9IE51bWJlcihwb3MzLmFsdC50b0ZpeGVkKDEpKVxyXG4gICAgICAgIHBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zMy5sbmcsIHBvczMubGF0LCBwb3MzLmFsdClcclxuICAgICAgICBpZiAoIV90aGlzLnNkay52aWV3ZXIgfHwgIV90aGlzLnNkay52aWV3ZXIuc2NlbmUpIHtcclxuICAgICAgICAgIF90aGlzLnJlbW92ZU1vZGVsQW5pbWF0ZSgpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zaXRpb25DYW1lcmEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0sIF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uLCBfdGhpcy5zZGsudmlld2VyKS5hbHQgKyAxLjgpXHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHNsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlc1tpXVswXSwgc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldWzFdKVxyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcy5yZWFsVGltZVBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXkoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICAvLyBfdGhpcy5yZWFsVGltZUxpbmUucG9seWxpbmUucG9zaXRpb25zID0gXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGNhcnRlc2lhbjMgPSBfdGhpcy5zcGxpbmUuZXZhbHVhdGUoZGlzdGFuY2UgLyBfdGhpcy5kaXN0YW5jZSlcclxuICAgICAgICBpZiAoIWNhcnRlc2lhbjMpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcG9zODQgPSBfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChjYXJ0ZXNpYW4zLCB2aWV3ZXIpO1xyXG4gICAgICAgIGNvb3JkaW5hdGVzID0gW3Bvczg0LmxuZywgcG9zODQubGF0LCBwb3M4NC5hbHQgKyAxLjhdXHJcbiAgICAgICAgcG9zaXRpb24gPSBjYXJ0ZXNpYW4zXHJcbiAgICAgICAgcG9zaXRpb25DYW1lcmEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0sIGNvb3JkaW5hdGVzWzJdKVxyXG4gICAgICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAxMDAwOyBpKyspIHtcclxuICAgICAgICAgIGlmICgoaSAvIDEwMDApID4gKGRpc3RhbmNlIC8gX3RoaXMuZGlzdGFuY2UpKSB7XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY2FydGVzaWFuMyA9IF90aGlzLnNwbGluZS5ldmFsdWF0ZShpIC8gMTAwMCk7XHJcbiAgICAgICAgICBwb3NpdGlvbnNfc21vb3RoLnB1c2goY2FydGVzaWFuMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvc2l0aW9uc19zbW9vdGgucHVzaChjYXJ0ZXNpYW4zKVxyXG4gICAgICAgIF90aGlzLnJlYWxUaW1lUG9zaXRpb25zID0gcG9zaXRpb25zX3Ntb290aFxyXG4gICAgICB9XHJcblxyXG4gICAgICBIZWFkaW5nUGl0Y2hSb2xsID0gZ2V0SGVhZGluZ1BpdGNoUm9sbChfdGhpcy5tb2RlbC5wb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy5wb3NpdGlvbikge1xyXG4gICAgICAgIEhlYWRpbmdQaXRjaFJvbGwyID0gZ2V0SGVhZGluZ1BpdGNoUm9sbChwcmV2aW91cy5wb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICAgICAgSGVhZGluZ1BpdGNoUm9sbC5waXRjaCA9IEhlYWRpbmdQaXRjaFJvbGwyLnBpdGNoXHJcbiAgICAgIH1cclxuICAgICAgcHJldmlvdXMucG9zaXRpb24gPSBfdGhpcy5tb2RlbC5wb3NpdGlvblxyXG4gICAgICBsZXQgbW9kZUhlYWRpbmdQaXRjaFJvbGwgPSBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbC5mcm9tRGVncmVlcyhfdGhpcy5vcHRpb25zLm1vZGVsLmhlYWRpbmcsIF90aGlzLm9wdGlvbnMubW9kZWwucGl0Y2gsIF90aGlzLm9wdGlvbnMubW9kZWwucm9sbClcclxuICAgICAgbGV0IGhlYWRpbmcgPSAwXHJcbiAgICAgIGxldCBwaXRjaCA9IDBcclxuICAgICAgbGV0IHJvbGwgPSAwXHJcblxyXG4gICAgICBsZXQgbWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocG9zaXRpb24pXHJcbiAgICAgIGlmIChfdGhpcy5vcHRpb25zLnJvdXRlRGlyZWN0aW9uICYmICFfdGhpcy5saW5lRWRpdCkge1xyXG4gICAgICAgIGhlYWRpbmcgPSAoSGVhZGluZ1BpdGNoUm9sbC5oZWFkaW5nKSAqICgxODAgLyBNYXRoLlBJKSAtIDkwIC0gX3RoaXMub3B0aW9ucy5tb2RlbC5oZWFkaW5nXHJcbiAgICAgICAgcGl0Y2ggPSAoSGVhZGluZ1BpdGNoUm9sbC5waXRjaCkgKiAoMTgwIC8gTWF0aC5QSSkgLSBfdGhpcy5vcHRpb25zLm1vZGVsLnBpdGNoXHJcbiAgICAgICAgcm9sbCA9IF90aGlzLm9wdGlvbnMubW9kZWwucm9sbFxyXG4gICAgICAgIGxldCB0aGF0M0RcclxuICAgICAgICBpZiAoZ2V0M0RWaWV3KCkpIHtcclxuICAgICAgICAgIHRoYXQzRCA9IGdldDNEVmlldygpLmVudGl0eU1hcC5nZXQoX3RoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGF0M0QgPSAoc3BsaXRTZGsuc2RrUCAmJiBzcGxpdFNkay5zZGtQLmVudGl0eU1hcC5nZXQoX3RoaXMub3B0aW9ucy5pZCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghX3RoaXMuc3RhdGUpIHtcclxuICAgICAgICAgIGlmICh0aGF0M0QgJiYgKChzZGsyRCAmJiBzZGsyRCA9PT0gX3RoaXMuc2RrKSB8fCAoc3BsaXRTZGsuc2RrRCAmJiBzcGxpdFNkay5zZGtEID09PSBfdGhpcy5zZGspKSkge1xyXG4gICAgICAgICAgICBoZWFkaW5nID0gdGhhdDNELm1vZGVsLmhlYWRpbmdcclxuICAgICAgICAgICAgcGl0Y2ggPSB0aGF0M0QubW9kZWwucGl0Y2hcclxuICAgICAgICAgICAgcm9sbCA9IHRoYXQzRC5tb2RlbC5yb2xsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc05hTihoZWFkaW5nKSB8fCBpc05hTihwaXRjaCkgfHwgaXNOYU4ocm9sbCkpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIV90aGlzLnN0YXRlKSB7XHJcbiAgICAgICAgICBpZiAodGhhdDNEICYmICgoc2RrMkQgJiYgc2RrMkQgPT09IF90aGlzLnNkaykgfHwgKHNwbGl0U2RrLnNka0QgJiYgc3BsaXRTZGsuc2RrRCA9PT0gX3RoaXMuc2RrKSkpIHtcclxuICAgICAgICAgICAgaGVhZGluZyA9IHRoYXQzRC5tb2RlbC5oZWFkaW5nXHJcbiAgICAgICAgICAgIHBpdGNoID0gdGhhdDNELm1vZGVsLnBpdGNoXHJcbiAgICAgICAgICAgIHJvbGwgPSB0aGF0M0QubW9kZWwucm9sbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhlYWRpbmcgPSAoX3RoaXMubW9kZWwuaGVhZGluZyB8fCBfdGhpcy5tb2RlbC5oZWFkaW5nID09PSAwKSA/IF90aGlzLm1vZGVsLmhlYWRpbmcgOiBfdGhpcy5vcHRpb25zLm1vZGVsLmhlYWRpbmdcclxuICAgICAgICAgICAgcGl0Y2ggPSAoX3RoaXMubW9kZWwucGl0Y2ggfHwgX3RoaXMubW9kZWwucGl0Y2ggPT09IDApID8gX3RoaXMubW9kZWwucGl0Y2ggOiBfdGhpcy5vcHRpb25zLm1vZGVsLnBpdGNoXHJcbiAgICAgICAgICAgIHJvbGwgPSAoX3RoaXMubW9kZWwucm9sbCB8fCBfdGhpcy5tb2RlbC5yb2xsID09PSAwKSA/IF90aGlzLm1vZGVsLnJvbGwgOiBfdGhpcy5vcHRpb25zLm1vZGVsLnJvbGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMubW9kZWwubW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5TWF0cml4MyhtYXRyaXgsIENlc2l1bS5NYXRyaXgzLmZyb21IZWFkaW5nUGl0Y2hSb2xsKENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKGhlYWRpbmcsIHBpdGNoLCByb2xsKSksIF90aGlzLm1vZGVsLm1vZGVsTWF0cml4KVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChfdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICAgIGhlYWRpbmcgPSBfdGhpcy5vcHRpb25zLm1vZGVsLmhlYWRpbmdcclxuICAgICAgICAgIHBpdGNoID0gX3RoaXMub3B0aW9ucy5tb2RlbC5waXRjaFxyXG4gICAgICAgICAgcm9sbCA9IF90aGlzLm9wdGlvbnMubW9kZWwucm9sbFxyXG4gICAgICAgICAgaWYgKGlzTmFOKGhlYWRpbmcpIHx8IGlzTmFOKHBpdGNoKSB8fCBpc05hTihyb2xsKSkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIOaXi+i9rFxyXG4gICAgICAgICAgbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChcclxuICAgICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHJvbGwpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMocGl0Y2gpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBsZXQgbXogPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25aKFxyXG4gICAgICAgICAgICBDZXNpdW0uTWF0aC50b1JhZGlhbnMoaGVhZGluZylcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgICAgICAgIGxldCByb3RhdGlvblkgPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteSlcclxuICAgICAgICAgIGxldCByb3RhdGlvblogPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteilcclxuICAgICAgICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcbiAgICAgICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHJvdGF0aW9uWCwgb3JpZ2luYWxNYXRyaXgpXHJcbiAgICAgICAgICBDZXNpdW0uTWF0cml4NC5tdWx0aXBseShvcmlnaW5hbE1hdHJpeCwgcm90YXRpb25ZLCBvcmlnaW5hbE1hdHJpeClcclxuICAgICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblosIF90aGlzLmVudGl0eS5tb2RlbE1hdHJpeClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gY29uc29sZS5sb2coKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZyAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcpICogKDE4MCAvIE1hdGguUEkpKVxyXG5cclxuICAgICAgX3RoaXMubW9kZWwucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICBfdGhpcy5tb2RlbC5yb2xsID0gcm9sbFxyXG4gICAgICBfdGhpcy5tb2RlbC5waXRjaCA9IHBpdGNoXHJcbiAgICAgIF90aGlzLm1vZGVsLmhlYWRpbmcgPSBoZWFkaW5nXHJcbiAgICAgIGlmICghcG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgbGFiZWxQb3NpdGlvbiA9IF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9uLCBfdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICBfdGhpcy5sYWJlbC5wb3NpdGlvbiA9IFtsYWJlbFBvc2l0aW9uLmxuZywgbGFiZWxQb3NpdGlvbi5sYXQsIGxhYmVsUG9zaXRpb24uYWx0XVxyXG4gICAgICBfdGhpcy5mdWVsTGFiZWwucG9zaXRpb24gPSBbbGFiZWxQb3NpdGlvbi5sbmcsIGxhYmVsUG9zaXRpb24ubGF0LCBsYWJlbFBvc2l0aW9uLmFsdF1cclxuICAgICAgbGFzdERpc3RhbmNlID0gZGlzdGFuY2VcclxuICAgICAgLy8gY29uc29sZS5sb2cocG9zaXRpb24pXHJcbiAgICAgIF90aGlzLnJlYWxUaW1lUm91dGVBcnJheS5wdXNoKHBvc2l0aW9uKVxyXG4gICAgICBpZiAoX3RoaXMudmlld0ZvbGxvdykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKENlc2l1bS5NYXRoLnRvRGVncmVlcyhfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5waXRjaCkpXHJcbiAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuZmlyc3RQZXJzb25WaWV3KSB7XHJcbiAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IHBvc2l0aW9uQ2FtZXJhLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyhoZWFkaW5nICsgOTAgKyBfdGhpcy5maXJzdFBlcnNvbkhlYWRpbmdQaXRjaC5oZWFkaW5nKSxcclxuICAgICAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKF90aGlzLmZpcnN0UGVyc29uSGVhZGluZ1BpdGNoLnBpdGNoKSxcclxuICAgICAgICAgICAgICByb2xsOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKF90aGlzLnNkay52aWV3ZXIuc2NlbmUubW9kZSA9PT0gMykge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5LnBvc2l0aW9uID0gcG9zaXRpb25cclxuICAgICAgICAgICAgICAvLyBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMuc2RrLnZpZXdlci5jYW1lcmEuc2V0Vmlldyh7XHJcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYy5oZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MCksXHJcbiAgICAgICAgICAgICAgICAgIHBpdGNoOiAwLFxyXG4gICAgICAgICAgICAgICAgICByb2xsOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGZ1bmN0aW9uIGV4ZWN1dGVBbmltYXRlKCkge1xyXG4gICAgLy8gfVxyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGxldCBpID0gMFxyXG4gICAgLy8gICBmdW5jdGlvbiBhbmltYXRlKCkge1xyXG4gICAgLy8gICAgIGlmIChpIDwgbW90aW9uQXJyYXkubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgICBsZXQgcmVzdWx0ID0gbW90aW9uQXJyYXlbaV0ucmVzdWx0O1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgLy8gICAgICAgcmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgLy8gICAgICAgICBsZXQgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhtb3Rpb25BcnJheVtpXS5sbmcsIG1vdGlvbkFycmF5W2ldLmxhdCwgcmVzWzBdLmhlaWdodClcclxuXHJcbiAgICAvLyAgICAgICAgIGxldCBIZWFkaW5nUGl0Y2hSb2xsID0gZ2V0SGVhZGluZ1BpdGNoUm9sbChfdGhpcy5tb2RlbC5wb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICAvLyAgICAgICAgIGxldCBtb2RlSGVhZGluZ1BpdGNoUm9sbCA9IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKF90aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZywgX3RoaXMub3B0aW9ucy5tb2RlbC5waXRjaCwgX3RoaXMub3B0aW9ucy5tb2RlbC5yb2xsKVxyXG4gICAgLy8gICAgICAgICBsZXQgaGVhZGluZyA9IDBcclxuICAgIC8vICAgICAgICAgbGV0IHBpdGNoID0gMFxyXG4gICAgLy8gICAgICAgICBsZXQgcm9sbCA9IDBcclxuICAgIC8vICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMucm91dGVEaXJlY3Rpb24pIHtcclxuICAgIC8vICAgICAgICAgICBoZWFkaW5nID0gKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZyAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcpICogKDE4MCAvIE1hdGguUEkpIC0gOTBcclxuICAgIC8vICAgICAgICAgICBwaXRjaCA9IChIZWFkaW5nUGl0Y2hSb2xsLnBpdGNoIC0gbW9kZUhlYWRpbmdQaXRjaFJvbGwucGl0Y2gpICogKDE4MCAvIE1hdGguUEkpXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgaGVhZGluZyA9IC0gX3RoaXMub3B0aW9ucy5tb2RlbC5oZWFkaW5nXHJcbiAgICAvLyAgICAgICAgICAgcGl0Y2ggPSAtIF90aGlzLm9wdGlvbnMubW9kZWwucGl0Y2hcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICByb2xsID0gLSBfdGhpcy5vcHRpb25zLm1vZGVsLnJvbGxcclxuICAgIC8vICAgICAgICAgLy8gY29uc29sZS5sb2coaGVhZGluZylcclxuICAgIC8vICAgICAgICAgbGV0IG1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvc2l0aW9uKVxyXG4gICAgLy8gICAgICAgICBfdGhpcy5tb2RlbC5tb2RlbE1hdHJpeCA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlNYXRyaXgzKG1hdHJpeCwgQ2VzaXVtLk1hdHJpeDMuZnJvbUhlYWRpbmdQaXRjaFJvbGwoQ2VzaXVtLkhlYWRpbmdQaXRjaFJvbGwuZnJvbURlZ3JlZXMoaGVhZGluZywgcGl0Y2gsIHJvbGwpKSwgX3RoaXMubW9kZWwubW9kZWxNYXRyaXgpXHJcbiAgICAvLyAgICAgICAgIF90aGlzLm1vZGVsLnBvc2l0aW9uID0gcG9zaXRpb25cclxuICAgIC8vICAgICAgICAgaWYgKF90aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSkge1xyXG4gICAgLy8gICAgICAgICAgIF90aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eS5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgaSsrXHJcbiAgICAvLyAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuICAgIC8vICAgICAgIH0pXHJcblxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgYW5pbWF0ZSgpO1xyXG4gICAgLy8gfSwgMjAwMCk7XHJcblxyXG4gICAgLy8g5qC55o2u5Lik5Liq5Z2Q5qCH54K5LOiOt+WPlkhlYWRpbmco5pyd5ZCRKVxyXG4gICAgZnVuY3Rpb24gZ2V0SGVhZGluZ1BpdGNoUm9sbChwb2ludEEsIHBvaW50Qikge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhkaXN0YW5jZSwgX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9pbnRBLCB2aWV3ZXIpLCBfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb2ludEIsIHZpZXdlcikpXHJcbiAgICAgIC8v5bu656uL5Lul54K5QeS4uuWOn+eCue+8jFjovbTkuLplYXN0LFnovbTkuLpub3J0aCxa6L205pyd5LiK55qE5Z2Q5qCH57O7XHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHBvaW50QSk7XHJcbiAgICAgIC8v5ZCR6YePQUJcclxuICAgICAgaWYgKCFwb2ludEIpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3NpdGlvbnZlY3RvciA9IENlc2l1bS5DYXJ0ZXNpYW4zLnN1YnRyYWN0KHBvaW50QiwgcG9pbnRBLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIC8v5ZugdHJhbnNmb3Jt5piv5bCGQeS4uuWOn+eCueeahGVhc3ROb3J0aFVw5Z2Q5qCH57O75Lit55qE54K56L2s5o2i5Yiw5LiW55WM5Z2Q5qCH57O755qE55+p6Zi1XHJcbiAgICAgIC8vQULkuLrkuJbnlYzlnZDmoIfkuK3nmoTlkJHph49cclxuICAgICAgLy/lm6DmraTlsIZBQuWQkemHj+i9rOaNouS4ukHljp/ngrnlnZDmoIfns7vkuK3nmoTlkJHph4/vvIzpnIDkuZjku6V0cmFuc2Zvcm3nmoTpgIbnn6npmLXjgIJcclxuICAgICAgY29uc3QgdmVjdG9yID0gQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoXHJcbiAgICAgICAgQ2VzaXVtLk1hdHJpeDQuaW52ZXJzZSh0cmFuc2Zvcm0sIG5ldyBDZXNpdW0uTWF0cml4NCgpKSxcclxuICAgICAgICBwb3NpdGlvbnZlY3RvcixcclxuICAgICAgICBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKVxyXG4gICAgICApO1xyXG4gICAgICAvL+W9kuS4gOWMllxyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5ub3JtYWxpemUodmVjdG9yLCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoKSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGRpcmVjdGlvbilcclxuICAgICAgLy9oZWFkaW5nXHJcbiAgICAgIGNvbnN0IGhlYWRpbmcgPSBNYXRoLmF0YW4yKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCkgLSBDZXNpdW0uTWF0aC5QSV9PVkVSX1RXTztcclxuICAgICAgY29uc3QgcGl0Y2ggPSBDZXNpdW0uTWF0aC5QSV9PVkVSX1RXTyAtIENlc2l1bS5NYXRoLmFjb3NDbGFtcGVkKGRpcmVjdGlvbi56KTtcclxuICAgICAgLy8gY29uc29sZS5sb2cocGl0Y2ggKiAoMTgwIC8gTWF0aC5QSSkpXHJcbiAgICAgIGNvbnN0IHJvbGwgPSBDZXNpdW0uTWF0aC5mYXN0QXBwcm94aW1hdGVBdGFuMihkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnopO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh7aGVhZGluZzogaGVhZGluZyAqICgxODAgLyBNYXRoLlBJKSwgcGl0Y2g6IHBpdGNoICogKDE4MCAvIE1hdGguUEkpLCByb2xsOiByb2xsICogKDE4MCAvIE1hdGguUEkpfSlcclxuICAgICAgcmV0dXJuIHsgaGVhZGluZzogQ2VzaXVtLk1hdGguVFdPX1BJIC0gQ2VzaXVtLk1hdGguemVyb1RvVHdvUGkoaGVhZGluZyksIHBpdGNoOiBwaXRjaCwgcm9sbDogcm9sbCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TW92ZVBvc2l0aW9uQnlEaXN0YW5jZShkaXN0YW5jZSkge1xyXG4gICAgbGV0IHBvc2l0aW9uc19zbW9vdGggPSB0aGlzLnJlbmV3TGluZVBvc2l0aW9ucyh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLm1vZGVsTW92ZShwb3NpdGlvbnNfc21vb3RoLCB7IGRpc3RhbmNlOiBkaXN0YW5jZSB9KVxyXG4gIH1cclxuXHJcbiAgc2V0TW92ZVBvc2l0aW9uQnlUaW1lKHRpbWUpIHtcclxuICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gdGhpcy5yZW5ld0xpbmVQb3NpdGlvbnModGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKVxyXG4gICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zX3Ntb290aCwgeyB0aW1lOiB0aW1lIH0pXHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHmoYZcclxuICBhc3luYyBlZGl0KHN0YXRlKSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn6L2o6L+56L+Q5Yqo5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnZpZXdGb2xsb3dPcmllbnRhdGlvbiA9IHt9XHJcbiAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMudmlld0ZvbGxvd09yaWVudGF0aW9uLmhlYWRpbmcgPSBDZXNpdW0uTWF0aC50b0RlZ3JlZXModGhpcy5zZGsudmlld2VyLmNhbWVyYS5oZWFkaW5nKVxyXG4gICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnZpZXdGb2xsb3dPcmllbnRhdGlvbi5waXRjaCA9IENlc2l1bS5NYXRoLnRvRGVncmVlcyh0aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBpdGNoKVxyXG4gICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnZpZXdGb2xsb3dPcmllbnRhdGlvbi5yb2xsID0gQ2VzaXVtLk1hdGgudG9EZWdyZWVzKHRoaXMuc2RrLnZpZXdlci5jYW1lcmEucm9sbClcclxuICAgICAgICAgIC8vIHRoaXMub3B0aW9ucy52aWV3Rm9sbG93T3JpZW50YXRpb24uZGlyZWN0aW9uID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5kaXJlY3Rpb25cclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICBsZXQgY2RvcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICBjZG9wdGlvbnMuaG9zdCA9ICcnXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKGNkb3B0aW9ucylcclxuICAgICAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5ID0gbnVsbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cucmVtb3ZlQ2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xvc2VDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2soKVxyXG4gICAgICAgICAgaWYgKHRoaXMuZWRpdE9iaikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRPYmouZGVzdHJveSgpXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdE9iaiA9IG51bGxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMua2V5UG9pbnRTaG93ID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICAgICAgICBpZiAodGhpcy5maXJzdFBlcnNvblZpZXcgIT09IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0UGVyc29uVmlldyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpcnN0UGVyc29uVmlldztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmZpcnN0UGVyc29uVmlldyAmJiB0aGlzLm1vZGVsU2hvdykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsICYmICh0aGlzLm1vZGVsLnNob3cgPSBmYWxzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICAvLyB0aGlzLm1vZGVsICYmICh0aGlzLm1vZGVsLnNob3cgPSBzaG93KVxyXG4gICAgICAgICAgLy8gdGhpcy5saW5lICYmICh0aGlzLmxpbmUuc2hvdyA9IHNob3cpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIHRyYWplY3RvcnktbW90aW9uJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgICBpZiAodGhpcy5lZGl0T2JqKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmlubmVySFRNTCA9ICfnu5PmnZ/osIPmlbQnXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmNsYXNzTmFtZSA9ICdidG4gbW9kZWwtcm90YXRlLWJ0biBpcy1hY3RpdmUnXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmlubmVySFRNTCA9ICflvIDlp4vosIPmlbQnXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kZWwtcm90YXRlLWJ0bicpWzBdLmNsYXNzTmFtZSA9ICdidG4gbW9kZWwtcm90YXRlLWJ0bidcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAnJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBoZWlnaHRCb3hFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWlnaHQtYm94JylbMF1cclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgdGhpcy5fRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSB0aGlzLl9FdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmhlaWdodEJveCA9IGhlaWdodEJveEVsbVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgaWYgKHRoaXMubW9kZWwpIHtcclxuICAgICAgICBjb25zdCBnZXRBbmltYXRpb25zTGlzdCA9ICgpID0+IHtcclxuICAgICAgICAgIGxldCBhbmltYXRpb25zID0gdGhpcy5tb2RlbC5sb2FkZXIuY29tcG9uZW50cy5hbmltYXRpb25zXHJcbiAgICAgICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhbmltYXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRhZ0RhdGEgPSBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICfml6AnLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJ+aXoCcsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGFnRGF0YS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYW5pbWF0aW9uc1tpXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbmltYXRpb25zW2ldLm5hbWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZWdwKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LCBcIi5tb2RlbC1hbmltYXRlLXNlbGVjdFwiKS5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGVsLWFuaW1hdGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgICAgc2VsZWN0RWxtLnZhbHVlID0gdGhpcy5tb2RlbEFuaW1hdGVcclxuICAgICAgICAgICAgc2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUsIGMpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZGVsQW5pbWF0ZSA9IHNlbGVjdEVsbS52YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZWwucmVhZHkpIHtcclxuICAgICAgICAgICAgZ2V0QW5pbWF0aW9uc0xpc3QoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHlFdmVudC5hZGRFdmVudExpc3RlbmVyKCgpID0+IHtcclxuICAgICAgICAgICAgICBnZXRBbmltYXRpb25zTGlzdCgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwucmVhZHlQcm9taXNlLnRoZW4oKGVudGl0eSkgPT4ge1xyXG4gICAgICAgICAgICBnZXRBbmltYXRpb25zTGlzdCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VuZCkge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCBkaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VsbXMuaGVpZ2h0Qm94ICYmICh0aGlzLl9lbG1zLmhlaWdodEJveC5jbGFzc05hbWUgPSAnaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTEgaGVpZ2h0LWJveCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZV9maXJzdFBlcnNvbiA9IGNvbnRlbnRFbG0ucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbltuYW1lPSdmaXJzdFBlcnNvbiddXCIpXHJcbiAgICAgIGVfZmlyc3RQZXJzb25bMF0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCBzcGxpdFNkayA9IGdldFNkaygpXHJcbiAgICAgICAgaWYgKCFnZXQyRFZpZXcoKSAmJiAhc3BsaXRTZGsuc2RrRCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdGb2xsb3cgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpcnN0UGVyc29uVmlldyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGVfZmlyc3RQZXJzb25bMV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICAgICAgdGhpcy52aWV3Rm9sbG93ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpcnN0UGVyc29uVmlldyA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlyc3RQZXJzb25WaWV3KSB7XHJcbiAgICAgICAgZV9maXJzdFBlcnNvblswXS5jbGFzc05hbWUgPSAnYnRuIGlzLWFjdGl2ZSdcclxuICAgICAgICBlX2ZpcnN0UGVyc29uWzFdLmNsYXNzTmFtZSA9ICdidG4nXHJcbiAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gICAgICAgICAgdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkgPSBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVfZmlyc3RQZXJzb25bMF0uY2xhc3NOYW1lID0gJ2J0bidcclxuICAgICAgICBlX2ZpcnN0UGVyc29uWzFdLmNsYXNzTmFtZSA9ICdidG4gaXMtYWN0aXZlJ1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgbGV0IHJ1YnJpY0VsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgIHJ1YnJpY0VsbS5jbGFzc05hbWUgPSAnY3VzdG9tLXJ1YnJpYy1ib3gnXHJcbiAgICAgIHJ1YnJpY0VsbS5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnY2VudGVyIGJvdHRvbSdcclxuICAgICAgcnVicmljRWxtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgcnVicmljRWxtLnN0eWxlLnRvcCA9ICcxODBweCc7XHJcbiAgICAgIHJ1YnJpY0VsbS5zdHlsZS5yaWdodCA9ICczcHgnO1xyXG4gICAgICBydWJyaWNFbG0uc3R5bGUucGFkZGluZyA9ICc1cHggMTBweCc7XHJcbiAgICAgIHJ1YnJpY0VsbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzNlNDI0OSc7XHJcbiAgICAgIHJ1YnJpY0VsbS5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcclxuICAgICAgcnVicmljRWxtLnN0eWxlLmZvbnRTaXplID0gJzEycHgnO1xyXG4gICAgICBydWJyaWNFbG0uc3R5bGUuY29sb3IgPSAnI2ZmNTczMyc7XHJcbiAgICAgIHJ1YnJpY0VsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcblxyXG4gICAgICBydWJyaWNFbG0uaW5uZXJIVE1MID0gYOWcuuaZr+ato+S4nOaWueWQkeS4uui9qOi/ueWJjei/m+ato+aWueWQkTxkaXYgeC1hcnJvdz1cIlwiIGNsYXNzPVwiY3VzdG9tX19wb3BwZXJfX2Fycm93XCIgc3R5bGU9XCJsZWZ0OiA1OXB4O1wiPjwvZGl2PmBcclxuICAgICAgbGV0IGljb25SdWJyaWMgPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ljb24tcnVicmljJylbMF1cclxuICAgICAgaWNvblJ1YnJpYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKGUpID0+IHtcclxuICAgICAgICBydWJyaWNFbG0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgfSlcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8g5qOA5p+l54K55Ye755qE5YWD57Sg5piv5ZCm5Zyo5qih5oCB5qGG5YaF5a655Yy65Z+f5LmL5aSWXHJcbiAgICAgICAgaWYgKCFpY29uUnVicmljLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICAgIHJ1YnJpY0VsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmFwcGVuZENoaWxkKHJ1YnJpY0VsbSlcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChmb250T2JqZWN0KSB7XHJcbiAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoKGZvbnREYXRhKVxyXG4gICAgICAgICAgbGV0IGZvbnREYXRhTGVncEVsbSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb250LXNlbGVjdCcpWzBdXHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLnZhbHVlID0gZm9udERhdGFbdGhpcy5sYWJlbEZvbnRGYW1pbHldLnZhbHVlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb250T2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKGZvbnREYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChmb250RGF0YVtpXS52YWx1ZSA9PT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IGZvbnREYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLl9lbG1zLmxhYmVsRm9udEZhbWlseSA9IFtmb250RGF0YUxlZ3BFbG1dXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICBkZXN0aW5hdGlvbjogdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucG9zaXRpb24sXHJcbiAgICAgICAgb3JpZW50YXRpb246IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5saW5lICYmIHRoaXMuc2RrLnZpZXdlci5mbHlUbyh0aGlzLmxpbmUsIHtcclxuICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC02MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5yZW1vdmUodGhpcy5tb2RlbClcclxuICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5saW5lKVxyXG4gICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnJlYWxUaW1lTGluZSlcclxuICAgIHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5yZW1vdmUoKVxyXG4gICAgdGhpcy5mdWVsTGFiZWwgJiYgdGhpcy5mdWVsTGFiZWwucmVtb3ZlKClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rZXlQb2ludFNob3cubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLmtleVBvaW50U2hvd1tpXSlcclxuICAgIH1cclxuICAgIHRoaXMubGluZSA9IG51bGxcclxuICAgIHRoaXMucmVhbFRpbWVMaW5lID0gbnVsbFxyXG4gICAgdGhpcy5tb2RlbCA9IG51bGxcclxuICAgIHRoaXMubGFiZWwgPSBudWxsXHJcbiAgICB0aGlzLmZ1ZWxMYWJlbCA9IG51bGxcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgIXRoaXMuX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuI21vdXNlUmlnaHRldmVudCkge1xyXG4gICAgICB0aGlzLiNtb3VzZVJpZ2h0ZXZlbnQuZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbW92ZU1vZGVsQW5pbWF0ZSgpXHJcbiAgICBsZXQgc2RrMkQgPSBnZXQyRFZpZXcoKVxyXG4gICAgaWYgKCFzZGsyRCB8fCBzZGsyRCAhPT0gdGhpcy5zZGspIHtcclxuICAgICAgdGhpcy52aWV3Rm9sbG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuI19yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFdmVudElkKVxyXG4gICAgYXdhaXQgdGhpcy5zZGsucmVtb3ZlSW5jZXRhbmNlKHRoaXMub3B0aW9ucy5pZClcclxuICAgIGF3YWl0IHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVzZXQoKSB7XHJcbiAgICAodGhpcy5vcHRpb25zLm1vZGVsLnVybCAhPT0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubW9kZWwudXJsKSAmJiB0aGlzLmNoYW5nZU1vZGVsVXJsKHRoaXMub3JpZ2luYWxPcHRpb25zLm1vZGVsLnVybCk7XHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5uYW1lO1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUucG9zaXRpb25zKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUucG9zaXRpb25zKTtcclxuICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMucmVuZXdMaW5lUG9zaXRpb25zKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLnBvc2l0aW9ucyA9IHBvc2l0aW9uc1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsLnBvc2l0aW9uID0gcG9zaXRpb25zWzBdO1xyXG4gICAgICAgIHRoaXMubW9kZWxNb3ZlKHBvc2l0aW9ucylcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1vZGVsLnNob3c7XHJcbiAgICAodGhpcy5ub3NlVG9UYWlsICE9PSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLm5vc2VUb1RhaWwpICYmICh0aGlzLm5vc2VUb1RhaWwgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLm5vc2VUb1RhaWwpO1xyXG4gICAgKHRoaXMuaGVpZ2h0ICE9PSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5oZWlnaHQpICYmICh0aGlzLmhlaWdodCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmhlaWdodCk7XHJcbiAgICAodGhpcy5saW5lU2hvdyAhPT0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5zaG93KSAmJiAodGhpcy5saW5lU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUuc2hvdyk7XHJcbiAgICB0aGlzLmtleVBvaW50U2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxpbmUua2V5UG9pbnQ7XHJcbiAgICB0aGlzLnJvdXRlRGlyZWN0aW9uID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucm91dGVEaXJlY3Rpb247XHJcbiAgICB0aGlzLnNjYWxlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubW9kZWwuc2NhbGU7XHJcbiAgICAodGhpcy5sb29wICE9PSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sb29wKSAmJiAodGhpcy5sb29wID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubG9vcCk7XHJcbiAgICB0aGlzLnZpZXdGb2xsb3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy52aWV3Rm9sbG93O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnN0YXRlO1xyXG4gICAgdGhpcy5zcGVlZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLnNwZWVkO1xyXG4gICAgKHRoaXMuc21vb3RoICE9PSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5saW5lLnNtb290aCkgJiYgKHRoaXMuc21vb3RoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGluZS5zbW9vdGgpO1xyXG4gICAgdGhpcy5yZWFsVGltZVJvdXRlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMucmVhbFRpbWVSb3V0ZTtcclxuICAgIHRoaXMubW9kZWxBbmltYXRlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubW9kZWwuYW5pbWF0ZTtcclxuICAgIHRoaXMuZGVsYXkgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5kZWxheTtcclxuICAgICh0aGlzLmdyb3VuZCAhPT0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZ3JvdW5kKSAmJiAodGhpcy5ncm91bmQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5ncm91bmQpO1xyXG4gICAgaWYgKHRoaXMuZmlyc3RQZXJzb25WaWV3ICE9PSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maXJzdFBlcnNvblZpZXcpIHtcclxuICAgICAgdGhpcy5maXJzdFBlcnNvblZpZXcgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maXJzdFBlcnNvblZpZXc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maXJzdFBlcnNvblZpZXcgJiYgdGhpcy5tb2RlbFNob3cpIHtcclxuICAgICAgdGhpcy5tb2RlbCAmJiAodGhpcy5tb2RlbC5zaG93ID0gZmFsc2UpXHJcbiAgICB9XHJcbiAgICB0aGlzLmxhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNob3dcclxuICAgIHRoaXMuZnVlbExhYmVsU2hvdyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZ1ZWxTaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8vIHZpZXdGb2xsb3coZSkge1xyXG4gIC8vICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAvLyAgICAgdmFyIHBvaW50RW50aXR5ID0gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgLy8gICAgICAgLy8gc2hvdzogZmFsc2UsXHJcbiAgLy8gICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb25zX3Ntb290aFswXSwgLy8gcG9zaXRpb24gb2YgdGhlIHBvaW50XHJcbiAgLy8gICAgICAgcG9pbnQ6IHtcclxuICAvLyAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuUkVELndpdGhBbHBoYSgwKSwgLy8gY29sb3Igb2YgdGhlIHBvaW50XHJcbiAgLy8gICAgICAgICBwaXhlbFNpemU6IDBcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IHBvaW50RW50aXR5O1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgLy8gICAgIHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5ID0gbnVsbFxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgbW9kZWxSb3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0T2JqKSB7XHJcbiAgICAgIHRoaXMuZWRpdE9iai5kZXN0cm95KClcclxuICAgICAgdGhpcy5lZGl0T2JqID0gbnVsbFxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGVsLXJvdGF0ZS1idG4nKVswXS5pbm5lckhUTUwgPSAn5byA5aeL6LCD5pW0J1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGVsLXJvdGF0ZS1idG4nKVswXS5jbGFzc05hbWUgPSAnYnRuIG1vZGVsLXJvdGF0ZS1idG4nXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy52aWV3Rm9sbG93KSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5FTEVNRU5UKSB7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ+WFs+mXreinhuinkui3n+maj+WQjuWPr+iwg+aVtOaooeWei+aWueWQkSEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGNvbnNvbGUud2Fybign5YWz6Zet6KeG6KeS6Lef6ZqP5ZCO5Y+v6LCD5pW05qih5Z6L5pa55ZCRIScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2RlbC1yb3RhdGUtYnRuJylbMF0uaW5uZXJIVE1MID0gJ+e7k+adn+iwg+aVtCdcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGVsLXJvdGF0ZS1idG4nKVswXS5jbGFzc05hbWUgPSAnYnRuIG1vZGVsLXJvdGF0ZS1idG4gaXMtYWN0aXZlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmVkaXRPYmogPSBuZXcgRWRpdEdsdGYodGhpcy5zZGssIHRoaXMubW9kZWwpXHJcbiAgICAgICAgdGhpcy5lZGl0T2JqLmVkaXRSdGF0aW9uKClcclxuICAgICAgICB0aGlzLmVkaXRPYmoudHJhbnNmb3JtQ2FsbEJhY2sgPSB0aGlzLnJvdGF0aW9uRWRpdGluZ0NhbGxCYWNrXHJcbiAgICAgICAgdGhpcy5yb3V0ZURpcmVjdGlvbiA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZ1xyXG4gICAgICAgIGxldCBwaXRjaCA9IHRoaXMub3B0aW9ucy5tb2RlbC5waXRjaFxyXG4gICAgICAgIGxldCByb2xsID0gdGhpcy5vcHRpb25zLm1vZGVsLnJvbGxcclxuICAgICAgICBpZiAoaXNOYU4oaGVhZGluZykgfHwgaXNOYU4ocGl0Y2gpIHx8IGlzTmFOKHJvbGwpKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1hdHJpeCA9IENlc2l1bS5UcmFuc2Zvcm1zLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHRoaXMubW9kZWwucG9zaXRpb24pXHJcbiAgICAgICAgLy8g5peL6L2sXHJcbiAgICAgICAgbGV0IG14ID0gQ2VzaXVtLk1hdHJpeDMuZnJvbVJvdGF0aW9uWChcclxuICAgICAgICAgIENlc2l1bS5NYXRoLnRvUmFkaWFucyhyb2xsKVxyXG4gICAgICAgIClcclxuICAgICAgICBsZXQgbXkgPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25ZKFxyXG4gICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHBpdGNoKVxyXG4gICAgICAgIClcclxuICAgICAgICBsZXQgbXogPSBDZXNpdW0uTWF0cml4My5mcm9tUm90YXRpb25aKFxyXG4gICAgICAgICAgQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGhlYWRpbmcpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGxldCByb3RhdGlvblggPSBDZXNpdW0uTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihteClcclxuICAgICAgICBsZXQgcm90YXRpb25ZID0gQ2VzaXVtLk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obXkpXHJcbiAgICAgICAgbGV0IHJvdGF0aW9uWiA9IENlc2l1bS5NYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG16KVxyXG4gICAgICAgIGxldCBvcmlnaW5hbE1hdHJpeCA9IG5ldyBDZXNpdW0uTWF0cml4NCgpXHJcbiAgICAgICAgQ2VzaXVtLk1hdHJpeDQubXVsdGlwbHkobWF0cml4LCByb3RhdGlvblgsIG9yaWdpbmFsTWF0cml4KVxyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblksIG9yaWdpbmFsTWF0cml4KVxyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5KG9yaWdpbmFsTWF0cml4LCByb3RhdGlvblosIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGlja0NoYW5nZU1vZGVsKCkge1xyXG4gICAgdGhpcy5EaWFsb2cuY2hhbmdlTW9kZWxDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jaGFuZ2VNb2RlbENhbGxCYWNrKClcclxuICB9XHJcblxyXG4gIC8v5peL6L2s5pe277yM5Z2Q5qCH5L+h5oGv5Y+Y5YyW55qE5Zue6LCDXHJcbiAgc2V0IHJvdGF0aW9uRWRpdGluZ0NhbGxCYWNrKGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9yb3RhdGlvbkVkaXRpbmdDYWxsQmFjayA9IGNhbGxiYWNrXHJcbiAgfVxyXG5cclxuICBnZXQgcm90YXRpb25FZGl0aW5nQ2FsbEJhY2soKSB7XHJcbiAgICByZXR1cm4gKHBhcmFtcykgPT4ge1xyXG4gICAgICB0aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZyA9IHBhcmFtcy5yelxyXG4gICAgICB0aGlzLm9wdGlvbnMubW9kZWwucGl0Y2ggPSBwYXJhbXMucnlcclxuICAgICAgdGhpcy5vcHRpb25zLm1vZGVsLnJvbGwgPSBwYXJhbXMucnhcclxuICAgICAgdGhpcy5fcm90YXRpb25FZGl0aW5nQ2FsbEJhY2sgJiYgdGhpcy5fcm90YXRpb25FZGl0aW5nQ2FsbEJhY2sodGhpcy5lZGl0T2JqLl9wYXJhbXMpXHJcbiAgICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5pc01vdmUgPSB0cnVlKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dEV2ZW50T2JqZWN0KVxyXG4gICAgICB0aGlzLiN0aW1lb3V0RXZlbnRPYmplY3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuaXNNb3ZlID0gZmFsc2UpXHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjaGFuZ2VNb2RlbFVybCh1cmwpIHtcclxuICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLm1vZGVsKVxyXG4gICAgdGhpcy5vcHRpb25zLm1vZGVsLnVybCA9IHRoaXMucmVwbGFjZUhvc3QodXJsLCB0aGlzLm9wdGlvbnMuaG9zdClcclxuICAgIGxldCBtYXRyaXggPSB0aGlzLm1vZGVsLm1vZGVsTWF0cml4XHJcbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLm1vZGVsLnBvc2l0aW9uXHJcbiAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgdXJsOiB0aGlzLm9wdGlvbnMubW9kZWwudXJsLFxyXG4gICAgICBzaG93OiB0aGlzLm9wdGlvbnMubW9kZWwuc2hvdyxcclxuICAgICAgc2NhbGU6IHRoaXMub3B0aW9ucy5tb2RlbC5zY2FsZSxcclxuICAgICAgLy8gbWluaW11bVBpeGVsU2l6ZTogdGhpcy5vcHRpb25zLm1vZGVsLnBpeGVsU2l6ZSxcclxuICAgICAgLy8gbWF4aW11bVNjYWxlOiAxMDAwMDAsXHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRBbmltYXRpb25zTGlzdCA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlbC51cmwgPT09IHRoaXMub3JpZ2luYWxPcHRpb25zLm1vZGVsLnVybCkge1xyXG4gICAgICAgIHRoaXMubW9kZWxBbmltYXRlID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubW9kZWwuYW5pbWF0ZVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5tb2RlbC5hbmltYXRlID0gJ+aXoCdcclxuICAgICAgfVxyXG4gICAgICBsZXQgYW5pbWF0aW9ucyA9IHRoaXMubW9kZWwubG9hZGVyLmNvbXBvbmVudHMuYW5pbWF0aW9uc1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKGFuaW1hdGlvbnMpIHtcclxuICAgICAgICAgIGxldCB0YWdEYXRhID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ+aXoCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6ICfml6AnLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuaW1hdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGFnRGF0YS5wdXNoKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGFuaW1hdGlvbnNbaV0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBhbmltYXRpb25zW2ldLm5hbWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQsIFwiLm1vZGVsLWFuaW1hdGUtc2VsZWN0XCIpLmxlZ3Bfc2VhcmNoKHRhZ0RhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2RlbC1hbmltYXRlLXNlbGVjdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgc2VsZWN0RWxtLnZhbHVlID0gdGhpcy5tb2RlbEFuaW1hdGVcclxuICAgICAgICBzZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSwgYykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbEFuaW1hdGUgPSBzZWxlY3RFbG0udmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKENlc2l1bS5WRVJTSU9OLnNwbGl0KCcuJylbMV0pID49IDEwNykge1xyXG4gICAgICB0aGlzLm1vZGVsID0gYXdhaXQgQ2VzaXVtLk1vZGVsLmZyb21HbHRmQXN5bmMob3B0aW9ucylcclxuICAgICAgdGhpcy5tb2RlbC5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLmFkZCh0aGlzLm1vZGVsKVxyXG4gICAgICB0aGlzLm1vZGVsLnJlYWR5RXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigoKSA9PiB7XHJcbiAgICAgICAgZ2V0QW5pbWF0aW9uc0xpc3QoKVxyXG4gICAgICAgIHRoaXMubW9kZWwubW9kZWxNYXRyaXggPSBtYXRyaXhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgICAgIENlc2l1bS5Nb2RlbC5mcm9tR2x0ZihvcHRpb25zKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm1vZGVsLnBvc2l0aW9uID0gcG9zaXRpb25cclxuICAgICAgdGhpcy5tb2RlbC5yZWFkeVByb21pc2UudGhlbigoZW50aXR5KSA9PiB7XHJcbiAgICAgICAgZ2V0QW5pbWF0aW9uc0xpc3QoKVxyXG4gICAgICAgIHRoaXMubW9kZWwubW9kZWxNYXRyaXggPSBtYXRyaXhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMubW9kZWwuaW1hZ2VCYXNlZExpZ2h0aW5nLmx1bWluYW5jZUF0WmVuaXRoID0gMC42XHJcbiAgfVxyXG5cclxuICAvLyDnp7vpmaTliqjnlLtcclxuICByZW1vdmVNb2RlbEFuaW1hdGUoKSB7XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuVHdlZW5BbmltYXRlLnRpbWVvdXQpXHJcbiAgICAgIFRXRUVOLnJlbW92ZSh0aGlzLlR3ZWVuQW5pbWF0ZSlcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBudWxsXHJcbiAgICB9XHJcbiAgICAvLyBpZiAobW9kZWxQcmltaXRpdmUgJiYgbW9kZWxQcmltaXRpdmUuX2FjdGl2ZUFuaW1hdGlvbnMgJiYgbW9kZWxQcmltaXRpdmUuX2FjdGl2ZUFuaW1hdGlvbnMuX3J1bnRpbWVBbmltYXRpb25zKSB7XHJcbiAgICAvLyAgIGxldCBydW50aW1lQW5pbWF0aW9uID0gbW9kZWxQcmltaXRpdmUuX2FjdGl2ZUFuaW1hdGlvbnMuX3J1bnRpbWVBbmltYXRpb25zXHJcbiAgICAvLyAgIGZvciAobGV0IGkgPSBydW50aW1lQW5pbWF0aW9uLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAvLyAgICAgc3dpdGNoIChydW50aW1lQW5pbWF0aW9uW2ldLm5hbWUpIHtcclxuICAgIC8vICAgICAgIGNhc2UgJ+i3kSc6XHJcbiAgICAvLyAgICAgICAgIG1vZGVsUHJpbWl0aXZlLmFjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKHJ1bnRpbWVBbmltYXRpb25baV0pXHJcbiAgICAvLyAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHNldCBjb250cm9sbGVyQ2FsbEJhY2soY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2NvbnRyb2xsZXJDYWxsQmFjayA9IGNhbGxiYWNrXHJcbiAgfVxyXG4gIGdldCBjb250cm9sbGVyQ2FsbEJhY2soKSB7XHJcbiAgICByZXR1cm4gKHBhcmFtcykgPT4ge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5Z2Q5qCHXHJcbiAgcmVuZXdMaW5lUG9zaXRpb25zKHBvcykge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHBvc1xyXG4gICAgaWYgKHRoaXMubm9zZVRvVGFpbCkge1xyXG4gICAgICBwb3NpdGlvbnMgPSBbLi4ucG9zLCBwb3NbMF1dXHJcbiAgICB9XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMgPSBbXVxyXG4gICAgbGV0IHRpbWUgPSBbXVxyXG4gICAgbGV0IHBvc2l0aW9uc19zbW9vdGggPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICB0aW1lLnB1c2goaSAvIChwb3NpdGlvbnMubGVuZ3RoIC0gMSkpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbW9vdGgpIHtcclxuICAgICAgdGhpcy5zcGxpbmUgPSBuZXcgQ2VzaXVtLkNhdG11bGxSb21TcGxpbmUoe1xyXG4gICAgICAgIHRpbWVzOiB0aW1lLFxyXG4gICAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3BsaW5lID0gbmV3IENlc2l1bS5MaW5lYXJTcGxpbmUoe1xyXG4gICAgICAgIHRpbWVzOiB0aW1lLFxyXG4gICAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTAwMDsgaSsrKSB7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW4zID0gdGhpcy5zcGxpbmUuZXZhbHVhdGUoaSAvIDEwMDApO1xyXG4gICAgICBwb3NpdGlvbnNfc21vb3RoLnB1c2goY2FydGVzaWFuMyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvc2l0aW9uc19zbW9vdGggPSBwb3NpdGlvbnNfc21vb3RoXHJcbiAgICByZXR1cm4gcG9zaXRpb25zX3Ntb290aFxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFqZWN0b3J5TW90aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBc0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTBMQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0dBO0FBQUE7QUF5U0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQXBVQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUhBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFHQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTVQQTtBQUFBO0FBQUE7QUF4R0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFpQkE7QUFDQTtBQStQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZCQTtBQTdhQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdiQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF0REE7QUF1REE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXBQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNQQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFoQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaERBO0FBQUE7QUFBQTtBQUFBO0FBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFmQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWxFQTtBQUFBO0FBQUE7QUFBQTtBQW9FQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUEE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUF2ckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBcERBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBQUE7QUFvQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVoQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TrajectoryMotion/index.js\n"); /***/ }), /***/ "./src/Obj/Base/TrajectoryMotionObject/index.js": /*!******************************************************!*\ !*** ./src/Obj/Base/TrajectoryMotionObject/index.js ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Event_index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Event/index */ \"./src/Event/index.js\");\n/* harmony import */ var _Controller_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Controller/index */ \"./src/Controller/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\n\n\nvar _lineEdit = /*#__PURE__*/new WeakMap();\nvar TrajectoryMotionObject = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @description 轨迹运动\r\n * @param options {object}\r\n * @param options.name {string} 名称\r\n * @param options.speed=1 {number} 运行速度(米/每秒)\r\n * @param options.delay=0 {number} 运动延迟时间(毫秒)\r\n * @param options.loop=true {boolean} 循环\r\n * @param options.height {number} 起始点高度\r\n * @param options.ground=false {boolean} 贴地\r\n * @param options.state=true {boolean} 模型运动\r\n * @param options.routeDirection=true {boolean} 路径方向\r\n * @param options.viewFollow=false {boolean} 视角跟随\r\n * @param options.line {object} 路径参数\r\n * @param options.line.show=true {boolean} 路径显隐\r\n * @param options.line.smooth=false {boolean} 路径圆滑\r\n * @param options.line.noseToTail=false {boolean} 路径收尾相联\r\n * @param {Array.} options.line.positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param _Dialog {object} 弹框事件\r\n * @param _Dialog.confirmCallBack {function} 弹框确认时的回调\r\n * */\n function TrajectoryMotionObject(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this, TrajectoryMotionObject);\n _this2 = _callSuper(this, TrajectoryMotionObject, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _lineEdit, false);\n _this2.options.name = options.name || '';\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options.speed = options.speed || options.speed === 0 ? options.speed : 1;\n _this2.options.totalTime = options.totalTime;\n if (options.totalTime || options.totalTime === 0) {\n _this2.totalTime = options.totalTime;\n }\n _this2.options.delay = options.delay || 0;\n _this2.options.loop = options.loop || options.loop === false ? options.loop : true;\n _this2.options.line = options.line = options.line || {};\n _this2.options.line.positions = options.line.positions || [];\n _this2.options.height = options.height || options.height === 0 ? options.height : _this2.options.line.positions[0] ? _this2.options.line.positions[0].alt : 0;\n _this2.options.line.show = options.line.show || options.line.show === false ? options.line.show : true;\n _this2.options.line.smooth = options.line.smooth ? options.line.smooth : false;\n _this2.options.line.noseToTail = options.line.noseToTail ? options.line.noseToTail : false;\n _this2.positions_smooth = [];\n _this2.options.ground = options.ground || false;\n _this2.options.state = options.state || options.state === false ? options.state : true;\n _this2.options.routeDirection = options.routeDirection || options.routeDirection === false ? options.routeDirection : true;\n _this2.keyPoints = [];\n _this2.realTimePositions = [];\n _this2._elms = {};\n _this2.Dialog = _Dialog;\n _this2.realTimeRouteArray = [];\n // this._initial = {}\n _this2._current = {\n heading: 0,\n pitch: 0,\n roll: 0\n };\n // this.options.firstPerson = false\n _this2.distance;\n // this.addModel()\n\n if (_this2.options.line.positions.length < 2) {\n _this2._error = '最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n _this2.ControllerObject = new _Controller_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_this2.sdk);\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n TrajectoryMotionObject.addLine(_this2);\n _this2.firstPersonView = false;\n _this2.options.viewFollow = false;\n }\n\n // animateUpdate()\n // function animateUpdate() {\n // requestAnimationFrame(animateUpdate);\n // TWEEN.update();\n // }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8___default()(TrajectoryMotionObject, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(TrajectoryMotionObject, [{\n key: \"type\",\n get: function get() {\n return 'TrajectoryMotionObject';\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n this.options.show = v;\n if (v) {\n this.line.show = this.lineShow;\n for (var i = 0; i < this.keyPoints.length; i++) {\n this.keyPoints[i].show = this.keyPointShow;\n }\n } else {\n this.line.show = v;\n for (var _i = 0; _i < this.keyPoints.length; _i++) {\n this.keyPoints[_i].show = v;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = v;\n }\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.height = v;\n if (this.line) {\n if (this.ground) {\n this.line.polyline.clampToGround = true;\n var _loop = function _loop(i) {\n _this3.sdk.viewer.scene.clampToHeightMostDetailed([new Cesium.Cartesian3.fromDegrees(_this3.options.line.positions[i].lng, _this3.options.line.positions[i].lat)]).then(function (result) {\n _this3.keyPoints[i].position = result[0];\n });\n };\n for (var i = 0; i < this.keyPoints.length; i++) {\n _loop(i);\n }\n } else {\n var dvalue = this.options.height - this.options.line.positions[0].alt;\n this.line.polyline.clampToGround = false;\n for (var _i2 = 0; _i2 < this.keyPoints.length; _i2++) {\n this.options.line.positions[_i2].alt += dvalue;\n this.keyPoints[_i2].position = Cesium.Cartesian3.fromDegrees(this.options.line.positions[_i2].lng, this.options.line.positions[_i2].lat, this.options.line.positions[_i2].alt);\n }\n }\n }\n var positions_smooth = this._renewLine(this.options.line.positions);\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"ground\",\n get: function get() {\n return this.options.ground;\n },\n set: function set(v) {\n this.lineEdit = false;\n this.options.ground = v;\n this.realTimeLine.polyline.clampToGround = v;\n this.height = this.options.height;\n this._elms.ground && this._elms.ground.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"speed\",\n get: function get() {\n return this.options.speed;\n },\n set: function set(v) {\n var _this4 = this;\n if (v <= 0) {\n v = 0.01;\n }\n this.options.speed = v;\n if (this.distance || this.distance === 0) {\n this.options.totalTime = this.distance * 1000 / this.options.speed;\n // this.TweenAnimate._object.distance/this.TweenAnimate._valuesEnd.distance\n if (this.TweenAnimate && this.state) {\n this.TweenAnimate && this.setMovePositionByDistance(this.TweenAnimate._object.distance);\n }\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = v;\n });\n this._elms.totalTime && this._elms.totalTime.forEach(function (item) {\n item.value = _this4.options.totalTime;\n });\n }\n }\n }, {\n key: \"totalTime\",\n get: function get() {\n return this.options.totalTime;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.totalTime = v;\n if (this.distance || this.distance === 0) {\n this.options.speed = this.distance * 1000 / this.options.totalTime;\n this.TweenAnimate && this.setMovePositionByDistance(this.TweenAnimate._object.distance);\n this._elms.totalTime && this._elms.totalTime.forEach(function (item) {\n item.value = v;\n });\n this._elms.speed && this._elms.speed.forEach(function (item) {\n item.value = _this5.options.speed;\n });\n }\n }\n }, {\n key: \"smooth\",\n get: function get() {\n return this.options.line.smooth;\n },\n set: function set(v) {\n this.lineEdit = false;\n this.options.line.smooth = v;\n var positions = this._renewLine(this.options.line.positions);\n this.modelMove(positions);\n this._elms.smooth && this._elms.smooth.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"delay\",\n get: function get() {\n return this.options.delay;\n },\n set: function set(v) {\n this.options.delay = v;\n if (this.TweenAnimate) {\n this.TweenAnimate.delay(this.delay);\n }\n this._elms.delay && this._elms.delay.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"state\",\n get: function get() {\n return this.options.state;\n },\n set: function set(v) {\n this.options.state = v;\n if (this.editObj) {\n this.editObj.destroy();\n this.editObj = null;\n }\n if (this.TweenAnimate) {\n if (v) {\n this.speed = this.speed;\n } else {\n this.TweenAnimate.pause();\n }\n } else {\n if (v) {\n var positions = this._renewLine(this.options.line.positions);\n this.modelMove(positions);\n }\n }\n this._elms.state && this._elms.state.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options.line.noseToTail;\n },\n set: function set(v) {\n this.lineEdit = false;\n this.options.line.noseToTail = v;\n var fromDegreesArrayHeights = [];\n for (var i = 0; i < this.options.line.positions.length; i++) {\n fromDegreesArrayHeights.push(this.options.line.positions[i].lng, this.options.line.positions[i].lat, this.options.line.positions[i].alt);\n }\n var nosmooth = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights);\n if (this.line) {\n var positions_smooth = this._renewLine(this.options.line.positions);\n this.modelMove(positions_smooth);\n }\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"lineShow\",\n get: function get() {\n return this.options.line.show;\n },\n set: function set(v) {\n if (v) {\n this.realTimeRoute = false;\n }\n this.options.line.show = v;\n if (this.line && this.show) {\n this.line.show = v;\n }\n this._elms.lineShow && this._elms.lineShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"realTimeRoute\",\n get: function get() {\n return this.options.realTimeRoute;\n },\n set: function set(v) {\n if (v) {\n this.lineShow = false;\n this.keyPointShow = false;\n }\n this.options.realTimeRoute = v;\n if (this.realTimeLine && this.show) {\n this.realTimeLine.show = v;\n }\n this._elms.realTimeRoute && this._elms.realTimeRoute.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"keyPointShow\",\n get: function get() {\n return this.options.line.keyPoint;\n },\n set: function set(v) {\n this.options.line.keyPoint = v;\n for (var i = 0; i < this.keyPoints.length; i++) {\n if (this.show) {\n this.keyPoints[i].show = v;\n }\n }\n this._elms.keyPointShow && this._elms.keyPointShow.forEach(function (item) {\n item.checked = v;\n });\n if (!v && this.lineEdit) {\n // 关闭线编辑\n _classPrivateFieldSet(_lineEdit, this, v);\n YJ.Measure.SetMeasureStatus(false);\n this.event && this.event.destroy();\n this.ControllerObject && this.ControllerObject.destroy();\n this.tip && this.tip.destroy();\n this.tip = null;\n this._elms.lineEdit && this._elms.lineEdit.forEach(function (item) {\n item.checked = v;\n });\n }\n }\n }, {\n key: \"lineEdit\",\n get: function get() {\n return _classPrivateFieldGet(_lineEdit, this);\n },\n set: function set(v) {\n var _this6 = this;\n var linePositions = [];\n var computePositionsSmooth = function computePositionsSmooth(positions) {\n linePositions = _this6._renewLine(positions);\n _this6.modelMove(linePositions);\n };\n if (v) {\n this.viewFollow = false;\n if (YJ.Measure.GetMeasureStatus()) {\n console.warn('上一次测量未结束');\n this.lineEdit = false;\n return;\n } else {\n this.ground = false;\n this.smooth = false;\n this.state = false;\n YJ.Measure.SetMeasureStatus(true);\n this.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('请选择一个顶点,右键取消', this.sdk);\n this.event = new _Event_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this.sdk);\n var selectPoint;\n computePositionsSmooth(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(this.options.line.positions));\n this.event.mouse_left(function (movement, cartesian) {\n var pick = _this6.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n for (var i = 0; i < _this6.keyPoints.length; i++) {\n if (_this6.keyPoints[i].id === pick.id.id) {\n // this.keyPoints[i].show = false\n selectPoint = pick.id;\n _this6.ControllerObject.position = _this6.options.line.positions[selectPoint.index];\n _this6.ControllerObject.editTranslational();\n _this6.tip && _this6.tip.destroy();\n _this6.tip = null;\n _this6.ControllerObject.controllerCallBack = function (params) {\n // console.log('params', params)\n _this6.options.line.positions[selectPoint.index] = params.position;\n selectPoint.position = Cesium.Cartesian3.fromDegrees(params.position.lng, params.position.lat, params.position.alt);\n computePositionsSmooth(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(_this6.options.line.positions));\n };\n break;\n }\n }\n // originalPosition = this.cartesian3Towgs84(cartesian, this.sdk.viewer)\n }\n });\n this.event.mouse_right(function (movement, cartesian) {\n // if (selectPoint) {\n // let positions = [...this.options.line.positions]\n // selectPoint.position = Cesium.Cartesian3.fromDegrees(positions[selectPoint.index].lng, positions[selectPoint.index].lat, positions[selectPoint.index].alt)\n // computePositionsSmooth(positions)\n // }\n _this6.keyPointShow = false;\n YJ.Measure.SetMeasureStatus(false);\n _this6.event.destroy();\n _this6.tip && _this6.tip.destroy();\n _this6.tip = null;\n _this6.ControllerObject.destroy();\n });\n this.event.mouse_move(function (movement, cartesian) {\n // if (selectPoint) {\n // let positions = [...this.options.line.positions]\n // positions[selectPoint.index] = this.cartesian3Towgs84(cartesian, this.sdk.viewer)\n // selectPoint.position = cartesian\n // computePositionsSmooth(positions)\n // // that.options.positions[selectPoint.index] = that.cartesian3Towgs84(cartesian, that.sdk.viewer)\n // // let positions = that.options.positions\n // // let fromDegreesArray = []\n // // for (let i = 0; i < positions.length; i++) {\n // // fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt)\n // // }\n // // newpositions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n // // if (that.options.positions.length === 1) {\n // // that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.height]\n // // }\n // }\n _this6.tip && _this6.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n this.line.polyline.positions = new Cesium.CallbackProperty(function () {\n return linePositions;\n }, false);\n }\n // 显示关键点\n this.keyPointShow = v;\n } else {\n if (this.lineEdit) {\n YJ.Measure.SetMeasureStatus(false);\n this.event.destroy();\n this.tip && this.tip.destroy();\n this.tip = null;\n }\n // 隐藏关键点\n this.keyPointShow = v;\n this.ControllerObject.destroy();\n }\n _classPrivateFieldSet(_lineEdit, this, v);\n this._elms.lineEdit && this._elms.lineEdit.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"routeDirection\",\n get: function get() {\n return this.options.routeDirection;\n },\n set: function set(v) {\n this.options.routeDirection = v;\n this._elms.routeDirection && this._elms.routeDirection.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"loop\",\n get: function get() {\n return this.options.loop;\n },\n set: function set(v) {\n this.options.loop = v;\n if (v) {\n this.TweenAnimate.repeat(Infinity);\n } else {\n this.TweenAnimate.repeat();\n }\n this._elms.loop && this._elms.loop.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"firstPersonView\",\n get: function get() {\n return this.options.firstPersonView;\n },\n set: function set(v) {\n // this.state = true\n this.sdk.viewer._firstPersonView = v;\n this.options.firstPersonView = v;\n if (this.options.firstPersonView) {\n if (this._DialogObject && this._DialogObject._element.content) {\n var e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n e_firstPerson[0].className = 'btn is-active';\n e_firstPerson[1].className = 'btn';\n }\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n } else {\n if (this._DialogObject && this._DialogObject._element.content) {\n var _e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n if (_e_firstPerson[0] && _e_firstPerson[1]) {\n _e_firstPerson[0].className = 'btn';\n _e_firstPerson[1].className = 'btn is-active';\n }\n }\n if (this.viewFollow) {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n }\n var pointEntity = this.sdk.viewer.entities.add({\n // show: false,\n position: this.positions_smooth[0],\n // position of the point\n point: {\n color: Cesium.Color.RED.withAlpha(0),\n // color of the point\n pixelSize: 0\n }\n });\n this.sdk.viewer.trackedEntity = pointEntity;\n }\n }\n }\n }, {\n key: \"viewFollow\",\n get: function get() {\n return this.options.viewFollow;\n },\n set: function set(v) {\n this.options.viewFollow = v;\n if (!this.options.viewFollow) {\n this.firstPersonView = false;\n } else {\n this.lineEdit = false;\n }\n if (this.options.firstPersonView) {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n if (this._DialogObject && this._DialogObject._element.content) {\n var e_firstPerson = this._DialogObject._element.content.querySelectorAll(\"button[name='firstPerson']\");\n if (e_firstPerson[0] && e_firstPerson[1]) {\n e_firstPerson[0].className = 'btn';\n e_firstPerson[1].className = 'btn is-active';\n }\n }\n } else {\n if (this.sdk.viewer.trackedEntity) {\n this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity);\n this.sdk.viewer.trackedEntity = null;\n }\n if (v) {\n var pointEntity = this.sdk.viewer.entities.add({\n // show: false,\n position: this.current.position,\n // position of the point\n point: {\n color: Cesium.Color.RED.withAlpha(0),\n // color of the point\n pixelSize: 0\n }\n });\n this.sdk.viewer.trackedEntity = pointEntity;\n }\n }\n this._elms.viewFollow && this._elms.viewFollow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"moveCallBack\",\n value: function moveCallBack(that) {\n // if((that.lng || that.lng == 0) && (that.lat || that.lat == 0) && (that.alt || that.lat == 0)) {\n // this._initial.position = {\n // lng: that.lng,\n // lat: that.lat,\n // alt: that.alt,\n // }\n // }\n // if(that.rotateX || that.rotateX == 0 ) {\n // this._initial.pitch = that.rotateX\n // }\n // if(that.rotateY || that.rotateY == 0) {\n // this._initial.roll = that.rotateY\n // }\n // if(that.rotateZ || that.rotateZ == 0) {\n // this._initial.heading = that.rotateZ\n // }\n this.setPosition = that.setPosition.bind(that);\n }\n\n // get moveCallBack() {\n // return this.options.moveCallBack\n // }\n\n // set moveCallBack(v) {\n // this.options.moveCallBack = v\n // }\n }, {\n key: \"current\",\n get: function get() {\n return this._current;\n },\n set: function set(v) {\n this._current = v;\n var pos = this.cartesian3Towgs84(this._current.position, this.sdk.viewer);\n this.setPosition && this.setPosition(_objectSpread(_objectSpread({}, this._current), {}, {\n position: _objectSpread({}, pos)\n }));\n }\n\n // 创建路径\n }, {\n key: \"modelMove\",\n value: // 模型移动\n function () {\n var _modelMove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee3(positions) {\n var _this7 = this;\n var option,\n _this,\n time,\n startDistance,\n viewer,\n lineString,\n i,\n position,\n line,\n totalTime,\n lastDistance,\n motionArray,\n HeadingPitchRoll,\n HeadingPitchRoll2,\n previous,\n m,\n modelArray,\n _iterator,\n _step,\n _step$value,\n key,\n value,\n first,\n setPosition,\n _setPosition,\n getHeadingPitchRoll,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n getHeadingPitchRoll = function _getHeadingPitchRoll(pointA, pointB) {\n // console.log(distance, _this.cartesian3Towgs84(pointA, viewer), _this.cartesian3Towgs84(pointB, viewer))\n //建立以点A为原点,X轴为east,Y轴为north,Z轴朝上的坐标系\n var transform = Cesium.Transforms.eastNorthUpToFixedFrame(pointA);\n //向量AB\n if (!pointB) {\n return;\n }\n var positionvector = Cesium.Cartesian3.subtract(pointB, pointA, new Cesium.Cartesian3());\n //因transform是将A为原点的eastNorthUp坐标系中的点转换到世界坐标系的矩阵\n //AB为世界坐标中的向量\n //因此将AB向量转换为A原点坐标系中的向量,需乘以transform的逆矩阵。\n var vector = Cesium.Matrix4.multiplyByPointAsVector(Cesium.Matrix4.inverse(transform, new Cesium.Matrix4()), positionvector, new Cesium.Cartesian3());\n //归一化\n var direction = Cesium.Cartesian3.normalize(vector, new Cesium.Cartesian3());\n //heading\n var heading = Math.atan2(direction.y, direction.x) - Cesium.Math.PI_OVER_TWO;\n var pitch = Cesium.Math.PI_OVER_TWO - Cesium.Math.acosClamped(direction.z);\n var a = pitch * (180 / Math.PI);\n if (a < 0) {\n // a = (-a)\n }\n pitch = a * (Math.PI / 180);\n var roll = Cesium.Math.fastApproximateAtan2(direction.x, direction.z);\n // console.log({heading: heading * (180 / Math.PI), pitch: pitch * (180 / Math.PI), roll: roll * (180 / Math.PI)})\n return {\n heading: Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading),\n pitch: pitch,\n roll: roll\n };\n };\n _setPosition = function _setPosition3() {\n _setPosition = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee2(distance) {\n var start, stop, coordinates, sliced, _sliced, position, positionCamera, result, pos3, height2, position2, fromDegreesArray, _i3, cartesian3, positions_smooth, _i4, _cartesian, modeHeadingPitchRoll, heading, pitch, roll;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n start = 0;\n stop = distance;\n sliced = line;\n if (!stop) {\n _context2.next = 10;\n break;\n }\n _context2.next = 6;\n return turf.lineSliceAlong(line, start, stop, {\n units: 'kilometers'\n });\n case 6:\n _sliced = _context2.sent;\n // _this.realTimeRouteArray = sliced+\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(_sliced.geometry.coordinates[_sliced.geometry.coordinates.length - 1]);\n _context2.next = 11;\n break;\n case 10:\n coordinates = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(line.geometry.coordinates[0]);\n case 11:\n if (!_this.ground) {\n _context2.next = 38;\n break;\n }\n _context2.next = 14;\n return _this.sdk.viewer.scene.clampToHeight(new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]), modelArray);\n case 14:\n result = _context2.sent;\n position = result;\n if (!position) {\n position = new Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]);\n }\n pos3 = _this.cartesian3Towgs84(position, viewer);\n height2 = 0;\n _context2.prev = 19;\n _context2.next = 22;\n return Cesium.sampleTerrainMostDetailed(_this.sdk.viewer.scene.terrainProvider, [Cesium.Cartographic.fromDegrees(pos3.lng, pos3.lat)]);\n case 22:\n position2 = _context2.sent;\n height2 = position2[0].height;\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t0 = _context2[\"catch\"](19);\n height2 = 0;\n case 29:\n if (pos3.alt < height2) {\n pos3.alt = height2;\n }\n pos3.alt = Number(pos3.alt.toFixed(1));\n position = Cesium.Cartesian3.fromDegrees(pos3.lng, pos3.lat, pos3.alt);\n positionCamera = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], _this.cartesian3Towgs84(position, _this.sdk.viewer).alt + 1);\n fromDegreesArray = [];\n for (_i3 = 0; _i3 < sliced.geometry.coordinates.length; _i3++) {\n fromDegreesArray.push(sliced.geometry.coordinates[_i3][0], sliced.geometry.coordinates[_i3][1]);\n }\n _this.realTimePositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray);\n // _this.realTimeLine.polyline.positions = \n _context2.next = 54;\n break;\n case 38:\n cartesian3 = _this.spline.evaluate(distance / _this.distance);\n coordinates = _this.cartesian3Towgs84(cartesian3, viewer);\n position = Cesium.Cartesian3.fromDegrees(coordinates.lng, coordinates.lat, coordinates.alt);\n positionCamera = Cesium.Cartesian3.fromDegrees(coordinates.lng, coordinates.lat, coordinates.alt + 1);\n positions_smooth = [];\n _i4 = 0;\n case 44:\n if (!(_i4 <= 100)) {\n _context2.next = 52;\n break;\n }\n if (!(_i4 / 100 > distance / _this.distance)) {\n _context2.next = 47;\n break;\n }\n return _context2.abrupt(\"break\", 52);\n case 47:\n _cartesian = _this.spline.evaluate(_i4 / 100);\n positions_smooth.push(_cartesian);\n case 49:\n _i4++;\n _context2.next = 44;\n break;\n case 52:\n positions_smooth.push(cartesian3);\n _this.realTimePositions = positions_smooth;\n case 54:\n HeadingPitchRoll = getHeadingPitchRoll(_this.current.position, position);\n if (previous && previous.position) {\n HeadingPitchRoll2 = getHeadingPitchRoll(previous.position, position);\n HeadingPitchRoll.pitch = HeadingPitchRoll2.pitch;\n }\n previous.position = _this.current.position;\n modeHeadingPitchRoll = Cesium.HeadingPitchRoll.fromDegrees(_this.current.heading, _this.current.pitch, _this.current.roll);\n heading = 0;\n pitch = 0;\n roll = 0;\n if (_this.options.routeDirection) {\n heading = (HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI) - 90 + _this.current.heading;\n pitch = HeadingPitchRoll.pitch * (180 / Math.PI);\n } else {\n heading = _this.current.heading;\n pitch = _this.current.pitch;\n }\n roll = _this.current.roll;\n // console.log((HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI))\n if (!(isNaN(heading) || isNaN(pitch) || isNaN(roll))) {\n _context2.next = 65;\n break;\n }\n return _context2.abrupt(\"return\");\n case 65:\n if (heading < 0 || heading > 180) {\n pitch = -pitch;\n }\n _this.current = {\n position: position,\n heading: heading,\n pitch: pitch,\n roll: roll\n };\n if (first) {\n first = false;\n _this._first = {\n position: position,\n heading: heading,\n pitch: pitch,\n roll: roll\n };\n }\n lastDistance = distance;\n // console.log(position)\n _this.realTimeRouteArray.push(position);\n if (_this.viewFollow) {\n // console.log(heading)\n if (_this.options.firstPersonView) {\n _this.sdk.viewer.camera.setView({\n destination: positionCamera,\n orientation: {\n heading: _this.sdk.viewer.camera.heading,\n pitch: _this.sdk.viewer.camera.pitch,\n roll: _this.sdk.viewer.camera.roll\n }\n });\n } else {\n if (_this.sdk.viewer.trackedEntity) {\n _this.sdk.viewer.trackedEntity.position = position;\n // _this.sdk.viewer.camera.position = position\n }\n }\n }\n case 71:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[19, 26]]);\n }));\n return _setPosition.apply(this, arguments);\n };\n setPosition = function _setPosition2(_x4) {\n return _setPosition.apply(this, arguments);\n };\n option = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {\n time: 0\n };\n _this = this;\n time = option.time || 0;\n startDistance = option.distance || 0;\n viewer = this.sdk.viewer;\n this.removeModelAnimate();\n lineString = [];\n for (i = 0; i < positions.length; i++) {\n position = this.cartesian3Towgs84(positions[i], viewer);\n lineString.push([position.lng, position.lat, position.alt]);\n }\n // console.log(lineString)\n line = turf.lineString(lineString);\n this.distance = turf.length(line, {\n units: 'kilometers'\n });\n if (!this.totalTime) {\n this.totalTime = this.distance * 1000 / this.options.speed; // 总耗时(秒)\n }\n totalTime = this.totalTime;\n if (time) {\n if (time > totalTime) {\n time = totalTime;\n }\n startDistance = time / totalTime * this.distance;\n } else {\n // this._initial.position && (this._current.position = this.positions_smooth[0])\n // if(this._initial.pitch || this._initial.pitch === 0) {\n // this._current.pitch = this._initial.pitch\n // }\n // if(this._initial.roll || this._initial.roll === 0) {\n // this._current.roll = this._initial.roll\n // }\n // if(this._initial.heading || this._initial.heading === 0) {\n // this._current.heading = this._initial.heading\n // }\n }\n lastDistance = 0;\n motionArray = [];\n previous = {};\n m = 0;\n modelArray = [];\n _iterator = _createForOfIteratorHelper(this.sdk.entityMap);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_step.value, 2), key = _step$value[0], value = _step$value[1];\n if (value.type && value.type === 'glb') {\n modelArray.push(value.entity);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n first = true;\n this.TweenAnimate = new TWEEN.Tween({\n distance: startDistance\n }).to({\n distance: this.distance\n }, (totalTime - time) * 1000).delay(this.delay).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(function () {\n if (time) {\n _this7.modelMove(positions);\n }\n }).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(_this7.TweenAnimate._duration == Infinity)) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n m++;\n if (_this7.sdk.viewer) {\n _context.next = 6;\n break;\n }\n _this7.removeModelAnimate();\n return _context.abrupt(\"return\");\n case 6:\n setPosition(r.distance);\n case 7:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n }()).onEveryStart(function () {\n _this7.realTimeRouteArray = [];\n }).onComplete(function (d) {\n _this7.state = false;\n _this7.removeModelAnimate();\n // let runtimeAnimation = this.model._activeAnimations._runtimeAnimations\n // // let animations = await this.model.readyPromise\n // for (let i = runtimeAnimation.length - 1; i >= 0; i--) {\n // switch (runtimeAnimation[i].name) {\n // case '跑':\n // this.model.activeAnimations.remove(runtimeAnimation[i])\n // break;\n // default:\n // }\n // }\n });\n if (this.state) {\n this.TweenAnimate.start();\n } else {\n setPosition(startDistance);\n }\n\n // function executeAnimate() {\n // }\n // setTimeout(() => {\n // let i = 0\n // function animate() {\n // if (i < motionArray.length) {\n // let result = motionArray[i].result;\n // console.log(result)\n // result.then((res) => {\n // let position = Cesium.Cartesian3.fromDegrees(motionArray[i].lng, motionArray[i].lat, res[0].height)\n\n // let HeadingPitchRoll = getHeadingPitchRoll(_this.model.position, position)\n // let modeHeadingPitchRoll = Cesium.HeadingPitchRoll.fromDegrees(_this.options.model.heading, _this.options.model.pitch, _this.options.model.roll)\n // let heading = 0\n // let pitch = 0\n // let roll = 0\n // if (_this.options.routeDirection) {\n // heading = (HeadingPitchRoll.heading - modeHeadingPitchRoll.heading) * (180 / Math.PI) - 90\n // pitch = (HeadingPitchRoll.pitch - modeHeadingPitchRoll.pitch) * (180 / Math.PI)\n // }\n // else {\n // heading = - _this.options.model.heading\n // pitch = - _this.options.model.pitch\n // }\n // roll = - _this.options.model.roll\n // // console.log(heading)\n // let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position)\n // _this.model.modelMatrix = Cesium.Matrix4.multiplyByMatrix3(matrix, Cesium.Matrix3.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll)), _this.model.modelMatrix)\n // _this.model.position = position\n // if (_this.sdk.viewer.trackedEntity) {\n // _this.sdk.viewer.trackedEntity.position = position\n // }\n // i++\n // requestAnimationFrame(animate);\n // })\n\n // }\n\n // }\n // animate();\n // }, 2000);\n\n // 根据两个坐标点,获取Heading(朝向)\n case 26:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function modelMove(_x) {\n return _modelMove.apply(this, arguments);\n }\n return modelMove;\n }()\n }, {\n key: \"setMovePositionByDistance\",\n value: function setMovePositionByDistance(distance) {\n var positions_smooth = this._renewLine(this.options.line.positions);\n this.modelMove(positions_smooth, {\n distance: distance\n });\n }\n }, {\n key: \"setMovePositionByTime\",\n value: function setMovePositionByTime(time) {\n var positions_smooth = this._renewLine(this.options.line.positions);\n this.modelMove(positions_smooth, {\n time: time\n });\n if (!this.state) {\n this.modelMove(positions_smooth, {\n time: time + 0.01\n });\n }\n }\n\n // 暂停\n }, {\n key: \"pause\",\n value: function pause() {\n this.state = false;\n }\n\n // 继续\n }, {\n key: \"resume\",\n value: function resume() {\n this.state = true;\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee4() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n _args4 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_15__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_15__[\"closeRotateAround\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context4.next = 22;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n position = _objectSpread({}, this.options.line.positions[0]);\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context4.next = 15;\n break;\n }\n _context4.next = 14;\n return this.getClampToHeight(position);\n case 14:\n position.alt = _context4.sent;\n case 15:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context4.next = 23;\n break;\n case 22:\n this.line && this.sdk.viewer.flyTo(this.line, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 23:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"remove\",\n value: function remove() {\n // this.sdk.viewer.scene.primitives.remove(this.model)\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.sdk.viewer.entities.remove(this.line);\n this.line = null;\n this.removeModelAnimate();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.modelMove(this.line.polyline.positions._value);\n this.state = false;\n this.current = this._first;\n }\n\n // viewFollow(e) {\n // if (e.target.checked) {\n // var pointEntity = this.sdk.viewer.entities.add({\n // // show: false,\n // position: this.positions_smooth[0], // position of the point\n // point: {\n // color: Cesium.Color.RED.withAlpha(0), // color of the point\n // pixelSize: 0\n // }\n // });\n // this.sdk.viewer.trackedEntity = pointEntity;\n // }\n // else {\n // this.sdk.viewer.entities.remove(this.sdk.viewer.trackedEntity)\n // this.sdk.viewer.trackedEntity = null\n // }\n // }\n\n // 移除动画\n }, {\n key: \"removeModelAnimate\",\n value: function removeModelAnimate() {\n if (this.TweenAnimate) {\n clearTimeout(this.TweenAnimate.timeout);\n TWEEN.remove(this.TweenAnimate);\n this.TweenAnimate = null;\n }\n // if (modelPrimitive && modelPrimitive._activeAnimations && modelPrimitive._activeAnimations._runtimeAnimations) {\n // let runtimeAnimation = modelPrimitive._activeAnimations._runtimeAnimations\n // for (let i = runtimeAnimation.length - 1; i >= 0; i--) {\n // switch (runtimeAnimation[i].name) {\n // case '跑':\n // modelPrimitive.activeAnimations.remove(runtimeAnimation[i])\n // break;\n // default:\n // }\n // }\n // }\n }\n }, {\n key: \"_renewLine\",\n value: function _renewLine(pos) {\n this.options.line.positions = pos;\n var positions = pos;\n if (this.noseToTail) {\n positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(pos), [pos[0]]);\n }\n var fromDegreesArrayHeights = [];\n var time = [];\n var positions_smooth = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n time.push(i / (positions.length - 1));\n }\n if (this.smooth) {\n this.spline = new Cesium.CatmullRomSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n } else {\n this.spline = new Cesium.LinearSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n }\n for (var _i5 = 0; _i5 <= 100; _i5++) {\n var cartesian3 = this.spline.evaluate(_i5 / 100);\n positions_smooth.push(cartesian3);\n }\n this.positions_smooth = positions_smooth;\n return positions_smooth;\n }\n // 更新坐标\n }, {\n key: \"renewLinePositions\",\n value: function renewLinePositions(pos) {\n this.options.line.positions = pos;\n var positions = pos;\n if (this.noseToTail) {\n positions = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_3___default()(pos), [pos[0]]);\n }\n var fromDegreesArrayHeights = [];\n var time = [];\n var positions_smooth = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt);\n time.push(i / (positions.length - 1));\n }\n if (this.smooth) {\n this.spline = new Cesium.CatmullRomSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n } else {\n this.spline = new Cesium.LinearSpline({\n times: time,\n points: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n });\n }\n for (var _i6 = 0; _i6 <= 100; _i6++) {\n var cartesian3 = this.spline.evaluate(_i6 / 100);\n positions_smooth.push(cartesian3);\n }\n this.positions_smooth = positions_smooth;\n if (this.line && this.line.polyline) {\n this.line.polyline.positions = positions_smooth;\n }\n return positions_smooth;\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"addLine\",\n value: function addLine(that) {\n var positions_smooth = that._renewLine(that.options.line.positions);\n that.current.position = positions_smooth[0];\n that.line = that.sdk.viewer.entities.add({\n id: that.options.id + '-2',\n show: that.options.show ? that.options.line.show : false,\n polyline: {\n positions: positions_smooth,\n width: 2,\n clampToGround: that.ground,\n material: Cesium.Color.fromCssColorString('#ffffff'),\n zIndex: that.sdk._entityZIndex\n }\n });\n that.realTimeLine = that.sdk.viewer.entities.add({\n id: that.options.id + '-3',\n show: that.options.realTimeRoute ? that.options.realTimeRoute : false,\n polyline: {\n positions: new Cesium.CallbackProperty(function () {\n return that.realTimePositions;\n }, false),\n width: 2,\n clampToGround: that.ground,\n zIndex: that.sdk._entityZIndex,\n material: Cesium.Color.fromCssColorString('#ff0000')\n }\n });\n that.sdk._entityZIndex++;\n var event = new _Event_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"](that.sdk);\n event.mouse_right(function (movement, cartesian) {\n that.viewFollow = false;\n });\n TrajectoryMotionObject.addKeyPoint(that);\n that.noseToTail = that.options.line.noseToTail;\n that.smooth = that.options.line.smooth;\n }\n // 创建模型\n }, {\n key: \"addModel\",\n value: function addModel(that) {\n // that.model = that.sdk.viewer.scene.primitives.add(\n // Cesium.Model.fromGltf({\n // id: that.options.id,\n // url: that.options.model.url,\n // show: that.options.show ? that.options.model.show : false,\n // scale: that.options.model.scale,\n // // minimumPixelSize: that.options.model.pixelSize,\n // // maximumScale: 100000,\n // // allowPicking: false\n // })\n // );\n\n // let cartographic = Cesium.Cartographic.fromDegrees(103, 65, 100);\n // let position = that.sdk.viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);\n // // 设置模型的旋转角度,使其水平放置于地面\n // let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(that.positions_smooth[0])\n // that.model.modelMatrix = matrix\n // that.model.position = that.positions_smooth[0]\n // // 模型大小比例\n // // Cesium.Matrix4.multiplyByScale(matrix, new Cesium.Cartesian3(0.1, 0.1, 0.1), this.entity.modelMatrix)\n\n // let positions = that.options.line.positions\n // let fromDegreesArrayHeights = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArrayHeights.push(positions[i].lng, positions[i].lat, positions[i].alt)\n // }\n // let pos = that.smooth ? that.positions_smooth : Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)\n // that.modelMove(pos)\n\n // that.model.readyPromise.then(() => {\n // that.modelAnimate = that.options.model.animate\n // })\n // that.entity = that.model\n }\n\n // 创建关键点\n }, {\n key: \"addKeyPoint\",\n value: function () {\n var _addKeyPoint = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.mark(function _callee5(that) {\n var i, height, result, entity;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_9___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n i = 0;\n case 1:\n if (!(i < that.options.line.positions.length)) {\n _context5.next = 13;\n break;\n }\n _context5.next = 4;\n return that.getClampToHeight(that.options.line.positions[i]);\n case 4:\n height = _context5.sent;\n _context5.next = 7;\n return Cesium.Cartesian3.fromDegrees(that.options.line.positions[i].lng, that.options.line.positions[i].lat, height);\n case 7:\n result = _context5.sent;\n entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n show: that.options.line.keyPoint || false,\n position: that.ground ? result : Cesium.Cartesian3.fromDegrees(that.options.line.positions[i].lng, that.options.line.positions[i].lat, that.options.line.positions[i].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.keyPoints.push(entity);\n case 10:\n i++;\n _context5.next = 1;\n break;\n case 13:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }));\n function addKeyPoint(_x5) {\n return _addKeyPoint.apply(this, arguments);\n }\n return addKeyPoint;\n }()\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TrajectoryMotionObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVHJhamVjdG9yeU1vdGlvbk9iamVjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9UcmFqZWN0b3J5TW90aW9uT2JqZWN0L2luZGV4LmpzP2NmMjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZy9ldmVudEJpbmRpbmcnO1xyXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vaW5kZXhcIjtcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQvaW5kZXgnXHJcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCIuLi8uLi8uLi9Db250cm9sbGVyL2luZGV4XCI7XHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBUcmFqZWN0b3J5TW90aW9uT2JqZWN0IGV4dGVuZHMgQmFzZSB7XHJcbiAgI2xpbmVFZGl0ID0gZmFsc2VcclxuICAvKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBkZXNjcmlwdGlvbiDovajov7nov5DliqhcclxuICogQHBhcmFtIG9wdGlvbnMge29iamVjdH1cclxuICogQHBhcmFtIG9wdGlvbnMubmFtZSB7c3RyaW5nfSDlkI3np7BcclxuICogQHBhcmFtIG9wdGlvbnMuc3BlZWQ9MSB7bnVtYmVyfSDov5DooYzpgJ/luqYo57GzL+avj+enkilcclxuICogQHBhcmFtIG9wdGlvbnMuZGVsYXk9MCB7bnVtYmVyfSDov5Dliqjlu7bov5/ml7bpl7Qo5q+r56eSKVxyXG4gKiBAcGFyYW0gb3B0aW9ucy5sb29wPXRydWUge2Jvb2xlYW59IOW+queOr1xyXG4gKiBAcGFyYW0gb3B0aW9ucy5oZWlnaHQge251bWJlcn0g6LW35aeL54K56auY5bqmXHJcbiAqIEBwYXJhbSBvcHRpb25zLmdyb3VuZD1mYWxzZSB7Ym9vbGVhbn0g6LS05ZywXHJcbiAqIEBwYXJhbSBvcHRpb25zLnN0YXRlPXRydWUge2Jvb2xlYW59IOaooeWei+i/kOWKqFxyXG4gKiBAcGFyYW0gb3B0aW9ucy5yb3V0ZURpcmVjdGlvbj10cnVlIHtib29sZWFufSDot6/lvoTmlrnlkJFcclxuICogQHBhcmFtIG9wdGlvbnMudmlld0ZvbGxvdz1mYWxzZSB7Ym9vbGVhbn0g6KeG6KeS6Lef6ZqPXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxpbmUge29iamVjdH0g6Lev5b6E5Y+C5pWwXHJcbiAqIEBwYXJhbSBvcHRpb25zLmxpbmUuc2hvdz10cnVlIHtib29sZWFufSDot6/lvoTmmL7pmpBcclxuICogQHBhcmFtIG9wdGlvbnMubGluZS5zbW9vdGg9ZmFsc2Uge2Jvb2xlYW59IOi3r+W+hOWchua7kVxyXG4gKiBAcGFyYW0gb3B0aW9ucy5saW5lLm5vc2VUb1RhaWw9ZmFsc2Uge2Jvb2xlYW59IOi3r+W+hOaUtuWwvuebuOiBlFxyXG4gKiBAcGFyYW0ge0FycmF5LjxvYmplY3Q+fSBvcHRpb25zLmxpbmUucG9zaXRpb25zIOe7j+e6rOW6puWSjOmrmOW6pueahOWIl+ihqO+8jOWAvOS6pOabvyBbe2xvbixsYXQsYWx0fSwuLi5dXHJcbiAqIEBwYXJhbSBfRGlhbG9nIHtvYmplY3R9IOW8ueahhuS6i+S7tlxyXG4gKiBAcGFyYW0gX0RpYWxvZy5jb25maXJtQ2FsbEJhY2sge2Z1bmN0aW9ufSDlvLnmoYbnoa7orqTml7bnmoTlm57osINcclxuICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgJydcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5zcGVlZCA9IChvcHRpb25zLnNwZWVkIHx8IG9wdGlvbnMuc3BlZWQgPT09IDApID8gb3B0aW9ucy5zcGVlZCA6IDFcclxuICAgIHRoaXMub3B0aW9ucy50b3RhbFRpbWUgPSBvcHRpb25zLnRvdGFsVGltZVxyXG4gICAgaWYob3B0aW9ucy50b3RhbFRpbWUgfHwgb3B0aW9ucy50b3RhbFRpbWU9PT0wKSB7XHJcbiAgICAgIHRoaXMudG90YWxUaW1lID0gb3B0aW9ucy50b3RhbFRpbWVcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5kZWxheSA9IG9wdGlvbnMuZGVsYXkgfHwgMFxyXG4gICAgdGhpcy5vcHRpb25zLmxvb3AgPSBvcHRpb25zLmxvb3AgfHwgb3B0aW9ucy5sb29wID09PSBmYWxzZSA/IG9wdGlvbnMubG9vcCA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5saW5lID0gb3B0aW9ucy5saW5lID0gb3B0aW9ucy5saW5lIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMgPSBvcHRpb25zLmxpbmUucG9zaXRpb25zIHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gKG9wdGlvbnMuaGVpZ2h0IHx8IG9wdGlvbnMuaGVpZ2h0ID09PSAwKSA/IG9wdGlvbnMuaGVpZ2h0IDogKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1swXSA/IHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1swXS5hbHQgOiAwKVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuc2hvdyA9IG9wdGlvbnMubGluZS5zaG93IHx8IG9wdGlvbnMubGluZS5zaG93ID09PSBmYWxzZSA/IG9wdGlvbnMubGluZS5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuc21vb3RoID0gb3B0aW9ucy5saW5lLnNtb290aCA/IG9wdGlvbnMubGluZS5zbW9vdGggOiBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUubm9zZVRvVGFpbCA9IG9wdGlvbnMubGluZS5ub3NlVG9UYWlsID8gb3B0aW9ucy5saW5lLm5vc2VUb1RhaWwgOiBmYWxzZVxyXG4gICAgdGhpcy5wb3NpdGlvbnNfc21vb3RoID0gW11cclxuICAgIHRoaXMub3B0aW9ucy5ncm91bmQgPSBvcHRpb25zLmdyb3VuZCB8fCBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLnN0YXRlID0gKG9wdGlvbnMuc3RhdGUgfHwgb3B0aW9ucy5zdGF0ZSA9PT0gZmFsc2UpID8gb3B0aW9ucy5zdGF0ZSA6IHRydWVcclxuICAgIHRoaXMub3B0aW9ucy5yb3V0ZURpcmVjdGlvbiA9IChvcHRpb25zLnJvdXRlRGlyZWN0aW9uIHx8IG9wdGlvbnMucm91dGVEaXJlY3Rpb24gPT09IGZhbHNlKSA/IG9wdGlvbnMucm91dGVEaXJlY3Rpb24gOiB0cnVlXHJcbiAgICB0aGlzLmtleVBvaW50cyA9IFtdXHJcbiAgICB0aGlzLnJlYWxUaW1lUG9zaXRpb25zID0gW11cclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5yZWFsVGltZVJvdXRlQXJyYXkgPSBbXVxyXG4gICAgLy8gdGhpcy5faW5pdGlhbCA9IHt9XHJcbiAgICB0aGlzLl9jdXJyZW50ID0ge1xyXG4gICAgICBoZWFkaW5nOiAwLFxyXG4gICAgICBwaXRjaDogMCxcclxuICAgICAgcm9sbDogMFxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5vcHRpb25zLmZpcnN0UGVyc29uID0gZmFsc2VcclxuICAgIHRoaXMuZGlzdGFuY2VcclxuICAgIC8vIHRoaXMuYWRkTW9kZWwoKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLl9lcnJvciA9ICfmnIDlsJHpnIDopoHkuKTkuKrlnZDmoIfvvIEnXHJcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLl9lcnJvcilcclxuICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5fZXJyb3IsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuQ29udHJvbGxlck9iamVjdCA9IG5ldyBDb250cm9sbGVyKHRoaXMuc2RrKVxyXG4gICAgICB0aGlzLl9FdmVudEJpbmRpbmcgPSBuZXcgRXZlbnRCaW5kaW5nKClcclxuICAgICAgVHJhamVjdG9yeU1vdGlvbk9iamVjdC5hZGRMaW5lKHRoaXMpXHJcbiAgICAgIHRoaXMuZmlyc3RQZXJzb25WaWV3ID0gZmFsc2VcclxuICAgICAgdGhpcy5vcHRpb25zLnZpZXdGb2xsb3cgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGFuaW1hdGVVcGRhdGUoKVxyXG4gICAgLy8gZnVuY3Rpb24gYW5pbWF0ZVVwZGF0ZSgpIHtcclxuICAgIC8vICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVVcGRhdGUpO1xyXG4gICAgLy8gICBUV0VFTi51cGRhdGUoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuICdUcmFqZWN0b3J5TW90aW9uT2JqZWN0J1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB2XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5saW5lLnNob3cgPSB0aGlzLmxpbmVTaG93XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmtleVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5rZXlQb2ludHNbaV0uc2hvdyA9IHRoaXMua2V5UG9pbnRTaG93XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGluZS5zaG93ID0gdlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rZXlQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMua2V5UG9pbnRzW2ldLnNob3cgPSB2XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4pIHtcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3Quc2hvd0J0bi5jaGVja2VkID0gdlxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi5Y+C5pWw5b+F6aG75Li6Ym9vbGVhblwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IHZcclxuICAgIGlmICh0aGlzLmxpbmUpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdW5kKSB7XHJcbiAgICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSB0cnVlXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmtleVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHRNb3N0RGV0YWlsZWQoW25ldyBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubGF0KV0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmtleVBvaW50c1tpXS5wb3NpdGlvbiA9IHJlc3VsdFswXVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGR2YWx1ZSA9IHRoaXMub3B0aW9ucy5oZWlnaHQgLSB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbMF0uYWx0XHJcbiAgICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLmNsYW1wVG9Hcm91bmQgPSBmYWxzZVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rZXlQb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQgKz0gZHZhbHVlXHJcbiAgICAgICAgICB0aGlzLmtleVBvaW50c1tpXS5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sbmcsIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sYXQsIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcG9zaXRpb25zX3Ntb290aCA9IHRoaXMuX3JlbmV3TGluZSh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLl9lbG1zLmhlaWdodCAmJiB0aGlzLl9lbG1zLmhlaWdodC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdyb3VuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ3JvdW5kXHJcbiAgfVxyXG4gIHNldCBncm91bmQodikge1xyXG4gICAgdGhpcy5saW5lRWRpdCA9IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuZ3JvdW5kID0gdlxyXG4gICAgdGhpcy5yZWFsVGltZUxpbmUucG9seWxpbmUuY2xhbXBUb0dyb3VuZCA9IHZcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodFxyXG4gICAgdGhpcy5fZWxtcy5ncm91bmQgJiYgdGhpcy5fZWxtcy5ncm91bmQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNwZWVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zcGVlZFxyXG4gIH1cclxuICBzZXQgc3BlZWQodikge1xyXG4gICAgaWYgKHYgPD0gMCkge1xyXG4gICAgICB2ID0gMC4wMVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdlxyXG4gICAgaWYgKHRoaXMuZGlzdGFuY2UgfHwgdGhpcy5kaXN0YW5jZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudG90YWxUaW1lID0gKHRoaXMuZGlzdGFuY2UqMTAwMCkgLyB0aGlzLm9wdGlvbnMuc3BlZWRcclxuICAgICAgLy8gdGhpcy5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZS90aGlzLlR3ZWVuQW5pbWF0ZS5fdmFsdWVzRW5kLmRpc3RhbmNlXHJcbiAgICAgIGlmKHRoaXMuVHdlZW5BbmltYXRlICYmIHRoaXMuc3RhdGUpIHtcclxuICAgICAgICB0aGlzLlR3ZWVuQW5pbWF0ZSAmJiAodGhpcy5zZXRNb3ZlUG9zaXRpb25CeURpc3RhbmNlKHRoaXMuVHdlZW5BbmltYXRlLl9vYmplY3QuZGlzdGFuY2UpKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2VsbXMuc3BlZWQgJiYgdGhpcy5fZWxtcy5zcGVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5fZWxtcy50b3RhbFRpbWUgJiYgdGhpcy5fZWxtcy50b3RhbFRpbWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMudG90YWxUaW1lXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudG90YWxUaW1lXHJcbiAgfVxyXG4gIHNldCB0b3RhbFRpbWUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnRvdGFsVGltZSA9IHZcclxuICAgIGlmICh0aGlzLmRpc3RhbmNlIHx8IHRoaXMuZGlzdGFuY2UgPT09IDApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNwZWVkID0gKHRoaXMuZGlzdGFuY2UqMTAwMCkgLyB0aGlzLm9wdGlvbnMudG90YWxUaW1lXHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlICYmICh0aGlzLnNldE1vdmVQb3NpdGlvbkJ5RGlzdGFuY2UodGhpcy5Ud2VlbkFuaW1hdGUuX29iamVjdC5kaXN0YW5jZSkpXHJcbiAgICAgIHRoaXMuX2VsbXMudG90YWxUaW1lICYmIHRoaXMuX2VsbXMudG90YWxUaW1lLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9lbG1zLnNwZWVkICYmIHRoaXMuX2VsbXMuc3BlZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMuc3BlZWRcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgc21vb3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLnNtb290aFxyXG4gIH1cclxuICBzZXQgc21vb3RoKHYpIHtcclxuICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUuc21vb3RoID0gdlxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuX3JlbmV3TGluZSh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMpXHJcbiAgICB0aGlzLm1vZGVsTW92ZShwb3NpdGlvbnMpXHJcbiAgICB0aGlzLl9lbG1zLnNtb290aCAmJiB0aGlzLl9lbG1zLnNtb290aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZGVsYXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlbGF5XHJcbiAgfVxyXG4gIHNldCBkZWxheSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZGVsYXkgPSB2XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUuZGVsYXkodGhpcy5kZWxheSlcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMuZGVsYXkgJiYgdGhpcy5fZWxtcy5kZWxheS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zdGF0ZVxyXG4gIH1cclxuICBzZXQgc3RhdGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLnN0YXRlID0gdlxyXG5cclxuICAgIGlmICh0aGlzLmVkaXRPYmopIHtcclxuICAgICAgdGhpcy5lZGl0T2JqLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLmVkaXRPYmogPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5Ud2VlbkFuaW1hdGUpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLnNwZWVkID0gdGhpcy5zcGVlZFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnBhdXNlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuX3JlbmV3TGluZSh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMpXHJcbiAgICAgICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLnN0YXRlICYmIHRoaXMuX2VsbXMuc3RhdGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG5vc2VUb1RhaWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxpbmUubm9zZVRvVGFpbFxyXG4gIH1cclxuICBzZXQgbm9zZVRvVGFpbCh2KSB7XHJcbiAgICB0aGlzLmxpbmVFZGl0ID0gZmFsc2VcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLm5vc2VUb1RhaWwgPSB2XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMucHVzaCh0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0ubGF0LCB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgfVxyXG4gICAgbGV0IG5vc21vb3RoID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICBpZiAodGhpcy5saW5lKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gdGhpcy5fcmVuZXdMaW5lKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zX3Ntb290aClcclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMubm9zZVRvVGFpbCAmJiB0aGlzLl9lbG1zLm5vc2VUb1RhaWwuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLnNob3dcclxuICB9XHJcbiAgc2V0IGxpbmVTaG93KHYpIHtcclxuICAgIGlmICh2KSB7XHJcbiAgICAgIHRoaXMucmVhbFRpbWVSb3V0ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMubGluZSAmJiB0aGlzLnNob3cpIHtcclxuICAgICAgdGhpcy5saW5lLnNob3cgPSB2XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxpbmVTaG93ICYmIHRoaXMuX2VsbXMubGluZVNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWxUaW1lUm91dGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJlYWxUaW1lUm91dGVcclxuICB9XHJcbiAgc2V0IHJlYWxUaW1lUm91dGUodikge1xyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5saW5lU2hvdyA9IGZhbHNlXHJcbiAgICAgIHRoaXMua2V5UG9pbnRTaG93ID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5yZWFsVGltZVJvdXRlID0gdlxyXG4gICAgaWYgKHRoaXMucmVhbFRpbWVMaW5lICYmIHRoaXMuc2hvdykge1xyXG4gICAgICB0aGlzLnJlYWxUaW1lTGluZS5zaG93ID0gdlxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5yZWFsVGltZVJvdXRlICYmIHRoaXMuX2VsbXMucmVhbFRpbWVSb3V0ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQga2V5UG9pbnRTaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5saW5lLmtleVBvaW50XHJcbiAgfVxyXG4gIHNldCBrZXlQb2ludFNob3codikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxpbmUua2V5UG9pbnQgPSB2XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMua2V5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3cpIHtcclxuICAgICAgICB0aGlzLmtleVBvaW50c1tpXS5zaG93ID0gdlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmtleVBvaW50U2hvdyAmJiB0aGlzLl9lbG1zLmtleVBvaW50U2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgICBpZiAoIXYgJiYgdGhpcy5saW5lRWRpdCkge1xyXG4gICAgICAvLyDlhbPpl63nur/nvJbovpFcclxuICAgICAgdGhpcy4jbGluZUVkaXQgPSB2XHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QgJiYgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgIHRoaXMuX2VsbXMubGluZUVkaXQgJiYgdGhpcy5fZWxtcy5saW5lRWRpdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVFZGl0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuI2xpbmVFZGl0XHJcbiAgfVxyXG5cclxuICBzZXQgbGluZUVkaXQodikge1xyXG4gICAgbGV0IGxpbmVQb3NpdGlvbnMgPSBbXVxyXG4gICAgbGV0IGNvbXB1dGVQb3NpdGlvbnNTbW9vdGggPSAocG9zaXRpb25zKSA9PiB7XHJcbiAgICAgIGxpbmVQb3NpdGlvbnMgPSB0aGlzLl9yZW5ld0xpbmUocG9zaXRpb25zKVxyXG4gICAgICB0aGlzLm1vZGVsTW92ZShsaW5lUG9zaXRpb25zKVxyXG4gICAgfVxyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy52aWV3Rm9sbG93ID0gZmFsc2VcclxuICAgICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgICAgIHRoaXMubGluZUVkaXQgPSBmYWxzZVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdW5kID0gZmFsc2VcclxuICAgICAgICB0aGlzLnNtb290aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgICAgdGhpcy50aXAgPSBuZXcgTW91c2VUaXAoJ+ivt+mAieaLqeS4gOS4qumhtueCue+8jOWPs+mUruWPlua2iCcsIHRoaXMuc2RrKVxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGlzLnNkaylcclxuICAgICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAgICAgICBjb21wdXRlUG9zaXRpb25zU21vb3RoKFsuLi50aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNdKVxyXG4gICAgICAgIHRoaXMuZXZlbnQubW91c2VfbGVmdCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgbGV0IHBpY2sgPSB0aGlzLnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMua2V5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMua2V5UG9pbnRzW2ldLmlkID09PSBwaWNrLmlkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmtleVBvaW50c1tpXS5zaG93ID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmVkaXRUcmFuc2xhdGlvbmFsKClcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuY29udHJvbGxlckNhbGxCYWNrID0gKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncGFyYW1zJywgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gcGFyYW1zLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdFBvaW50LnBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocGFyYW1zLnBvc2l0aW9uLmxuZywgcGFyYW1zLnBvc2l0aW9uLmxhdCwgcGFyYW1zLnBvc2l0aW9uLmFsdClcclxuICAgICAgICAgICAgICAgICAgY29tcHV0ZVBvc2l0aW9uc1Ntb290aChbLi4udGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KGNhcnRlc2lhbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5ldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgICAgLy8gaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBwb3NpdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zXVxyXG4gICAgICAgICAgLy8gICBzZWxlY3RQb2ludC5wb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLCBwb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmxhdCwgcG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5hbHQpXHJcbiAgICAgICAgICAvLyAgIGNvbXB1dGVQb3NpdGlvbnNTbW9vdGgocG9zaXRpb25zKVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgdGhpcy5rZXlQb2ludFNob3cgPSBmYWxzZVxyXG4gICAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgdGhpcy50aXAgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLkNvbnRyb2xsZXJPYmplY3QuZGVzdHJveSgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICAgIC8vIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgLy8gICBsZXQgcG9zaXRpb25zID0gWy4uLnRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc11cclxuICAgICAgICAgIC8vICAgcG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGlzLnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAvLyAgIHNlbGVjdFBvaW50LnBvc2l0aW9uID0gY2FydGVzaWFuXHJcbiAgICAgICAgICAvLyAgIGNvbXB1dGVQb3NpdGlvbnNTbW9vdGgocG9zaXRpb25zKVxyXG4gICAgICAgICAgLy8gICAvLyB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAvLyAgIC8vIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICAvLyAgIC8vIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgIC8vICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIC8vICAgLy8gICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgICAgIC8vICAgLy8gfVxyXG4gICAgICAgICAgLy8gICAvLyBuZXdwb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgLy8gICAvLyBpZiAodGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIC8vICAgLy8gICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhhdC5vcHRpb25zLmhlaWdodF1cclxuICAgICAgICAgIC8vICAgLy8gfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgdGhpcy50aXAgJiYgdGhpcy50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gbGluZVBvc2l0aW9uc1xyXG4gICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOaYvuekuuWFs+mUrueCuVxyXG4gICAgICB0aGlzLmtleVBvaW50U2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5saW5lRWRpdCkge1xyXG4gICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMudGlwICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMudGlwID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIC8vIOmakOiXj+WFs+mUrueCuVxyXG4gICAgICB0aGlzLmtleVBvaW50U2hvdyA9IHZcclxuICAgICAgdGhpcy5Db250cm9sbGVyT2JqZWN0LmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gICAgdGhpcy4jbGluZUVkaXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxpbmVFZGl0ICYmIHRoaXMuX2VsbXMubGluZUVkaXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvdXRlRGlyZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yb3V0ZURpcmVjdGlvblxyXG4gIH1cclxuICBzZXQgcm91dGVEaXJlY3Rpb24odikge1xyXG4gICAgdGhpcy5vcHRpb25zLnJvdXRlRGlyZWN0aW9uID0gdlxyXG4gICAgdGhpcy5fZWxtcy5yb3V0ZURpcmVjdGlvbiAmJiB0aGlzLl9lbG1zLnJvdXRlRGlyZWN0aW9uLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsb29wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sb29wXHJcbiAgfVxyXG4gIHNldCBsb29wKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sb29wID0gdlxyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUucmVwZWF0KEluZmluaXR5KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuVHdlZW5BbmltYXRlLnJlcGVhdCgpXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxvb3AgJiYgdGhpcy5fZWxtcy5sb29wLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBlcnNvblZpZXcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpcnN0UGVyc29uVmlld1xyXG4gIH1cclxuXHJcbiAgc2V0IGZpcnN0UGVyc29uVmlldyh2KSB7XHJcbiAgICAvLyB0aGlzLnN0YXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5zZGsudmlld2VyLl9maXJzdFBlcnNvblZpZXcgPSB2XHJcbiAgICB0aGlzLm9wdGlvbnMuZmlyc3RQZXJzb25WaWV3ID0gdlxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maXJzdFBlcnNvblZpZXcpIHtcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICAgIGxldCBlX2ZpcnN0UGVyc29uID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbltuYW1lPSdmaXJzdFBlcnNvbiddXCIpXHJcbiAgICAgICAgZV9maXJzdFBlcnNvblswXS5jbGFzc05hbWUgPSAnYnRuIGlzLWFjdGl2ZSdcclxuICAgICAgICBlX2ZpcnN0UGVyc29uWzFdLmNsYXNzTmFtZSA9ICdidG4nXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSlcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAgICAgICBsZXQgZV9maXJzdFBlcnNvbiA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b25bbmFtZT0nZmlyc3RQZXJzb24nXVwiKVxyXG4gICAgICAgIGlmIChlX2ZpcnN0UGVyc29uWzBdICYmIGVfZmlyc3RQZXJzb25bMV0pIHtcclxuICAgICAgICAgIGVfZmlyc3RQZXJzb25bMF0uY2xhc3NOYW1lID0gJ2J0bidcclxuICAgICAgICAgIGVfZmlyc3RQZXJzb25bMV0uY2xhc3NOYW1lID0gJ2J0biBpcy1hY3RpdmUnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpZXdGb2xsb3cpIHtcclxuICAgICAgICBpZiAodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwb2ludEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgLy8gc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbnNfc21vb3RoWzBdLCAvLyBwb3NpdGlvbiBvZiB0aGUgcG9pbnRcclxuICAgICAgICAgIHBvaW50OiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuUkVELndpdGhBbHBoYSgwKSwgLy8gY29sb3Igb2YgdGhlIHBvaW50XHJcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5ID0gcG9pbnRFbnRpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB2aWV3Rm9sbG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52aWV3Rm9sbG93XHJcbiAgfVxyXG4gIHNldCB2aWV3Rm9sbG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy52aWV3Rm9sbG93ID0gdlxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudmlld0ZvbGxvdykge1xyXG4gICAgICB0aGlzLmZpcnN0UGVyc29uVmlldyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5saW5lRWRpdCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZpcnN0UGVyc29uVmlldykge1xyXG4gICAgICBpZiAodGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAgICAgICBsZXQgZV9maXJzdFBlcnNvbiA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b25bbmFtZT0nZmlyc3RQZXJzb24nXVwiKVxyXG4gICAgICAgIGlmIChlX2ZpcnN0UGVyc29uWzBdICYmIGVfZmlyc3RQZXJzb25bMV0pIHtcclxuICAgICAgICAgIGVfZmlyc3RQZXJzb25bMF0uY2xhc3NOYW1lID0gJ2J0bidcclxuICAgICAgICAgIGVfZmlyc3RQZXJzb25bMV0uY2xhc3NOYW1lID0gJ2J0biBpcy1hY3RpdmUnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSlcclxuICAgICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGxldCBwb2ludEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgLy8gc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5jdXJyZW50LnBvc2l0aW9uLCAvLyBwb3NpdGlvbiBvZiB0aGUgcG9pbnRcclxuICAgICAgICAgIHBvaW50OiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuUkVELndpdGhBbHBoYSgwKSwgLy8gY29sb3Igb2YgdGhlIHBvaW50XHJcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5ID0gcG9pbnRFbnRpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2VsbXMudmlld0ZvbGxvdyAmJiB0aGlzLl9lbG1zLnZpZXdGb2xsb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbW92ZUNhbGxCYWNrKHRoYXQpIHtcclxuICAgIC8vIGlmKCh0aGF0LmxuZyB8fCB0aGF0LmxuZyA9PSAwKSAmJiAodGhhdC5sYXQgfHwgdGhhdC5sYXQgPT0gMCkgJiYgKHRoYXQuYWx0IHx8IHRoYXQubGF0ID09IDApKSB7XHJcbiAgICAvLyAgIHRoaXMuX2luaXRpYWwucG9zaXRpb24gPSB7XHJcbiAgICAvLyAgICAgbG5nOiB0aGF0LmxuZyxcclxuICAgIC8vICAgICBsYXQ6IHRoYXQubGF0LFxyXG4gICAgLy8gICAgIGFsdDogdGhhdC5hbHQsXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGlmKHRoYXQucm90YXRlWCB8fCB0aGF0LnJvdGF0ZVggPT0gMCApIHtcclxuICAgIC8vICAgdGhpcy5faW5pdGlhbC5waXRjaCA9IHRoYXQucm90YXRlWFxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYodGhhdC5yb3RhdGVZIHx8IHRoYXQucm90YXRlWSA9PSAwKSB7XHJcbiAgICAvLyAgIHRoaXMuX2luaXRpYWwucm9sbCA9IHRoYXQucm90YXRlWVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYodGhhdC5yb3RhdGVaIHx8IHRoYXQucm90YXRlWiA9PSAwKSB7XHJcbiAgICAvLyAgIHRoaXMuX2luaXRpYWwuaGVhZGluZyA9IHRoYXQucm90YXRlWlxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5zZXRQb3NpdGlvbiA9IHRoYXQuc2V0UG9zaXRpb24uYmluZCh0aGF0KVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG1vdmVDYWxsQmFjaygpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLm9wdGlvbnMubW92ZUNhbGxCYWNrXHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgbW92ZUNhbGxCYWNrKHYpIHtcclxuICAvLyAgIHRoaXMub3B0aW9ucy5tb3ZlQ2FsbEJhY2sgPSB2XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgY3VycmVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50XHJcbiAgfVxyXG5cclxuICBzZXQgY3VycmVudCh2KSB7XHJcbiAgICB0aGlzLl9jdXJyZW50ID0gdlxyXG4gICAgbGV0IHBvcyA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQodGhpcy5fY3VycmVudC5wb3NpdGlvbiwgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgdGhpcy5zZXRQb3NpdGlvbiAmJiB0aGlzLnNldFBvc2l0aW9uKHsgLi4udGhpcy5fY3VycmVudCwgcG9zaXRpb246IHsgLi4ucG9zIH0gfSlcclxuICB9XHJcblxyXG4gIC8vIOWIm+W7uui3r+W+hFxyXG4gIHN0YXRpYyBhZGRMaW5lKHRoYXQpIHtcclxuICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gdGhhdC5fcmVuZXdMaW5lKHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgIHRoYXQuY3VycmVudC5wb3NpdGlvbiA9IHBvc2l0aW9uc19zbW9vdGhbMF1cclxuICAgIHRoYXQubGluZSA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkICsgJy0yJyxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGluZS5zaG93IDogZmFsc2UsXHJcbiAgICAgIHBvbHlsaW5lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBwb3NpdGlvbnNfc21vb3RoLFxyXG4gICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgIGNsYW1wVG9Hcm91bmQ6IHRoYXQuZ3JvdW5kLFxyXG4gICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmZmZmZmJyksXHJcbiAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgdGhhdC5yZWFsVGltZUxpbmUgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCArICctMycsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5yZWFsVGltZVJvdXRlID8gdGhhdC5vcHRpb25zLnJlYWxUaW1lUm91dGUgOiBmYWxzZSxcclxuICAgICAgcG9seWxpbmU6IHtcclxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhhdC5yZWFsVGltZVBvc2l0aW9uc1xyXG4gICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICB3aWR0aDogMixcclxuICAgICAgICBjbGFtcFRvR3JvdW5kOiB0aGF0Lmdyb3VuZCxcclxuICAgICAgICB6SW5kZXg6IHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgsXHJcbiAgICAgICAgbWF0ZXJpYWw6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZjAwMDAnKVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgbGV0IGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQodGhhdC5zZGspXHJcbiAgICBldmVudC5tb3VzZV9yaWdodCgobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICB0aGF0LnZpZXdGb2xsb3cgPSBmYWxzZVxyXG4gICAgfSlcclxuICAgIFRyYWplY3RvcnlNb3Rpb25PYmplY3QuYWRkS2V5UG9pbnQodGhhdClcclxuICAgIHRoYXQubm9zZVRvVGFpbCA9IHRoYXQub3B0aW9ucy5saW5lLm5vc2VUb1RhaWxcclxuICAgIHRoYXQuc21vb3RoID0gdGhhdC5vcHRpb25zLmxpbmUuc21vb3RoXHJcbiAgfVxyXG4gIC8vIOWIm+W7uuaooeWei1xyXG4gIHN0YXRpYyBhZGRNb2RlbCh0aGF0KSB7XHJcbiAgICAvLyB0aGF0Lm1vZGVsID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKFxyXG4gICAgLy8gICBDZXNpdW0uTW9kZWwuZnJvbUdsdGYoe1xyXG4gICAgLy8gICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAvLyAgICAgdXJsOiB0aGF0Lm9wdGlvbnMubW9kZWwudXJsLFxyXG4gICAgLy8gICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLm1vZGVsLnNob3cgOiBmYWxzZSxcclxuICAgIC8vICAgICBzY2FsZTogdGhhdC5vcHRpb25zLm1vZGVsLnNjYWxlLFxyXG4gICAgLy8gICAgIC8vIG1pbmltdW1QaXhlbFNpemU6IHRoYXQub3B0aW9ucy5tb2RlbC5waXhlbFNpemUsXHJcbiAgICAvLyAgICAgLy8gbWF4aW11bVNjYWxlOiAxMDAwMDAsXHJcbiAgICAvLyAgICAgLy8gYWxsb3dQaWNraW5nOiBmYWxzZVxyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gKTtcclxuXHJcbiAgICAvLyBsZXQgY2FydG9ncmFwaGljID0gQ2VzaXVtLkNhcnRvZ3JhcGhpYy5mcm9tRGVncmVlcygxMDMsIDY1LCAxMDApO1xyXG4gICAgLy8gbGV0IHBvc2l0aW9uID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjYXJ0b2dyYXBoaWMpO1xyXG4gICAgLy8gLy8g6K6+572u5qih5Z6L55qE5peL6L2s6KeS5bqm77yM5L2/5YW25rC05bmz5pS+572u5LqO5Zyw6Z2iXHJcbiAgICAvLyBsZXQgbWF0cml4ID0gQ2VzaXVtLlRyYW5zZm9ybXMuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodGhhdC5wb3NpdGlvbnNfc21vb3RoWzBdKVxyXG4gICAgLy8gdGhhdC5tb2RlbC5tb2RlbE1hdHJpeCA9IG1hdHJpeFxyXG4gICAgLy8gdGhhdC5tb2RlbC5wb3NpdGlvbiA9IHRoYXQucG9zaXRpb25zX3Ntb290aFswXVxyXG4gICAgLy8gLy8g5qih5Z6L5aSn5bCP5q+U5L6LXHJcbiAgICAvLyAvLyBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5U2NhbGUobWF0cml4LCBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoMC4xLCAwLjEsIDAuMSksIHRoaXMuZW50aXR5Lm1vZGVsTWF0cml4KVxyXG5cclxuICAgIC8vIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMubGluZS5wb3NpdGlvbnNcclxuICAgIC8vIGxldCBmcm9tRGVncmVlc0FycmF5SGVpZ2h0cyA9IFtdXHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICBmcm9tRGVncmVlc0FycmF5SGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQsIHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAvLyB9XHJcbiAgICAvLyBsZXQgcG9zID0gdGhhdC5zbW9vdGggPyB0aGF0LnBvc2l0aW9uc19zbW9vdGggOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5SGVpZ2h0cylcclxuICAgIC8vIHRoYXQubW9kZWxNb3ZlKHBvcylcclxuXHJcbiAgICAvLyB0aGF0Lm1vZGVsLnJlYWR5UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgIC8vICAgdGhhdC5tb2RlbEFuaW1hdGUgPSB0aGF0Lm9wdGlvbnMubW9kZWwuYW5pbWF0ZVxyXG4gICAgLy8gfSlcclxuICAgIC8vIHRoYXQuZW50aXR5ID0gdGhhdC5tb2RlbFxyXG4gIH1cclxuXHJcbiAgLy8g5Yib5bu65YWz6ZSu54K5XHJcbiAgc3RhdGljIGFzeW5jIGFkZEtleVBvaW50KHRoYXQpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBhd2FpdCB0aGF0LmdldENsYW1wVG9IZWlnaHQodGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldKVxyXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLmxpbmUucG9zaXRpb25zW2ldLmxhdCwgaGVpZ2h0KVxyXG4gICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5saW5lLmtleVBvaW50IHx8IGZhbHNlLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGF0Lmdyb3VuZCA/IHJlc3VsdCA6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sbmcsIHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5saW5lLnBvc2l0aW9uc1tpXS5hbHQpLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoYXQuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQua2V5UG9pbnRzLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5qih5Z6L56e75YqoXHJcbiAgYXN5bmMgbW9kZWxNb3ZlKHBvc2l0aW9ucywgb3B0aW9uID0geyB0aW1lOiAwIH0pIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIGxldCB0aW1lID0gb3B0aW9uLnRpbWUgfHwgMFxyXG4gICAgbGV0IHN0YXJ0RGlzdGFuY2UgPSBvcHRpb24uZGlzdGFuY2UgfHwgMFxyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMuc2RrLnZpZXdlclxyXG4gICAgdGhpcy5yZW1vdmVNb2RlbEFuaW1hdGUoKVxyXG5cclxuICAgIGxldCBsaW5lU3RyaW5nID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb25zW2ldLCB2aWV3ZXIpXHJcbiAgICAgIGxpbmVTdHJpbmcucHVzaChbcG9zaXRpb24ubG5nLCBwb3NpdGlvbi5sYXQsIHBvc2l0aW9uLmFsdF0pXHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhsaW5lU3RyaW5nKVxyXG4gICAgbGV0IGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcobGluZVN0cmluZyk7XHJcbiAgICB0aGlzLmRpc3RhbmNlID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgaWYoIXRoaXMudG90YWxUaW1lKSB7XHJcbiAgICAgIHRoaXMudG90YWxUaW1lID0gKHRoaXMuZGlzdGFuY2UqMTAwMCkgLyB0aGlzLm9wdGlvbnMuc3BlZWQgIC8vIOaAu+iAl+aXtu+8iOenku+8iVxyXG4gICAgfVxyXG4gICAgbGV0IHRvdGFsVGltZSA9IHRoaXMudG90YWxUaW1lXHJcbiAgICBcclxuICAgIGlmICh0aW1lKSB7XHJcbiAgICAgIGlmICh0aW1lID4gdG90YWxUaW1lKSB7XHJcbiAgICAgICAgdGltZSA9IHRvdGFsVGltZVxyXG4gICAgICB9XHJcbiAgICAgIHN0YXJ0RGlzdGFuY2UgPSAodGltZSAvIHRvdGFsVGltZSkgKiB0aGlzLmRpc3RhbmNlXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5faW5pdGlhbC5wb3NpdGlvbiAmJiAodGhpcy5fY3VycmVudC5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zX3Ntb290aFswXSlcclxuICAgICAgLy8gaWYodGhpcy5faW5pdGlhbC5waXRjaCB8fCB0aGlzLl9pbml0aWFsLnBpdGNoID09PSAwKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fY3VycmVudC5waXRjaCA9IHRoaXMuX2luaXRpYWwucGl0Y2hcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBpZih0aGlzLl9pbml0aWFsLnJvbGwgfHwgdGhpcy5faW5pdGlhbC5yb2xsID09PSAwKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fY3VycmVudC5yb2xsID0gdGhpcy5faW5pdGlhbC5yb2xsXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaWYodGhpcy5faW5pdGlhbC5oZWFkaW5nIHx8IHRoaXMuX2luaXRpYWwuaGVhZGluZyA9PT0gMCkge1xyXG4gICAgICAvLyAgIHRoaXMuX2N1cnJlbnQuaGVhZGluZyA9IHRoaXMuX2luaXRpYWwuaGVhZGluZ1xyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICBsZXQgbGFzdERpc3RhbmNlID0gMFxyXG4gICAgbGV0IG1vdGlvbkFycmF5ID0gW11cclxuICAgIGxldCBIZWFkaW5nUGl0Y2hSb2xsXHJcbiAgICBsZXQgSGVhZGluZ1BpdGNoUm9sbDJcclxuICAgIGxldCBwcmV2aW91cyA9IHt9XHJcbiAgICBsZXQgbSA9IDBcclxuXHJcbiAgICBsZXQgbW9kZWxBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zZGsuZW50aXR5TWFwKSB7XHJcbiAgICAgIGlmICh2YWx1ZS50eXBlICYmIHZhbHVlLnR5cGUgPT09ICdnbGInKSB7XHJcbiAgICAgICAgbW9kZWxBcnJheS5wdXNoKHZhbHVlLmVudGl0eSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0ID0gdHJ1ZVxyXG4gICAgdGhpcy5Ud2VlbkFuaW1hdGUgPSBuZXcgVFdFRU4uVHdlZW4oeyBkaXN0YW5jZTogc3RhcnREaXN0YW5jZSB9KS50byh7IGRpc3RhbmNlOiB0aGlzLmRpc3RhbmNlIH0sICh0b3RhbFRpbWUgLSB0aW1lKSoxMDAwKS5cclxuICAgICAgZGVsYXkodGhpcy5kZWxheSkuZWFzaW5nKFRXRUVOLkVhc2luZy5MaW5lYXIuTm9uZSkucmVwZWF0KHRoaXMub3B0aW9ucy5sb29wID8gSW5maW5pdHkgOiAwKS5vblJlcGVhdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxNb3ZlKHBvc2l0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0pLm9uVXBkYXRlKGFzeW5jIChyLCBhKSA9PiB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZS5fZHVyYXRpb24gPT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBtKytcclxuICAgICAgICBpZiAoIXRoaXMuc2RrLnZpZXdlcikge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbEFuaW1hdGUoKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRQb3NpdGlvbihyLmRpc3RhbmNlKVxyXG4gICAgICB9KS5vbkV2ZXJ5U3RhcnQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVhbFRpbWVSb3V0ZUFycmF5ID0gW11cclxuICAgICAgfSkub25Db21wbGV0ZSgoZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMucmVtb3ZlTW9kZWxBbmltYXRlKClcclxuICAgICAgICAvLyBsZXQgcnVudGltZUFuaW1hdGlvbiA9IHRoaXMubW9kZWwuX2FjdGl2ZUFuaW1hdGlvbnMuX3J1bnRpbWVBbmltYXRpb25zXHJcbiAgICAgICAgLy8gLy8gbGV0IGFuaW1hdGlvbnMgPSBhd2FpdCB0aGlzLm1vZGVsLnJlYWR5UHJvbWlzZVxyXG4gICAgICAgIC8vIGZvciAobGV0IGkgPSBydW50aW1lQW5pbWF0aW9uLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgLy8gICBzd2l0Y2ggKHJ1bnRpbWVBbmltYXRpb25baV0ubmFtZSkge1xyXG4gICAgICAgIC8vICAgICBjYXNlICfot5EnOlxyXG4gICAgICAgIC8vICAgICAgIHRoaXMubW9kZWwuYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUocnVudGltZUFuaW1hdGlvbltpXSlcclxuICAgICAgICAvLyAgICAgICBicmVhaztcclxuICAgICAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuc3RhdGUpIHtcclxuICAgICAgdGhpcy5Ud2VlbkFuaW1hdGUuc3RhcnQoKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNldFBvc2l0aW9uKHN0YXJ0RGlzdGFuY2UpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gc2V0UG9zaXRpb24oZGlzdGFuY2UpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gMDtcclxuICAgICAgbGV0IHN0b3AgPSBkaXN0YW5jZTtcclxuICAgICAgbGV0IGNvb3JkaW5hdGVzXHJcbiAgICAgIGxldCBzbGljZWQgPSBsaW5lXHJcbiAgICAgIGlmIChzdG9wKSB7XHJcbiAgICAgICAgbGV0IHNsaWNlZCA9IGF3YWl0IHR1cmYubGluZVNsaWNlQWxvbmcobGluZSwgc3RhcnQsIHN0b3AsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICAvLyBfdGhpcy5yZWFsVGltZVJvdXRlQXJyYXkgPSBzbGljZWQrXHJcbiAgICAgICAgY29vcmRpbmF0ZXMgPSBbLi4uc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW3NsaWNlZC5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXV1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb29yZGluYXRlcyA9IFsuLi5saW5lLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdXVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBwb3NpdGlvblxyXG4gICAgICBsZXQgcG9zaXRpb25DYW1lcmFcclxuXHJcbiAgICAgIGlmIChfdGhpcy5ncm91bmQpIHtcclxuICAgICAgICAvLyBpZiAodmlld2VyLnRlcnJhaW5Qcm92aWRlci5hdmFpbGFiaWxpdHkpIHtcclxuICAgICAgICAvLyAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgQ2VzaXVtLnNhbXBsZVRlcnJhaW5Nb3N0RGV0YWlsZWQodmlld2VyLnRlcnJhaW5Qcm92aWRlciwgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdKV0pO1xyXG4gICAgICAgIC8vICAgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0sIHJlc3VsdFswXS5oZWlnaHQpXHJcbiAgICAgICAgLy8gICBwb3NpdGlvbkNhbWVyYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgcmVzdWx0WzBdLmhlaWdodCArIDEpXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgIC8vICAgcG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pXHJcbiAgICAgICAgLy8gICBwb3NpdGlvbkNhbWVyYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgMSlcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IF90aGlzLnNkay52aWV3ZXIuc2NlbmUuY2xhbXBUb0hlaWdodChuZXcgQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdKSwgbW9kZWxBcnJheSlcclxuICAgICAgICBwb3NpdGlvbiA9IHJlc3VsdFxyXG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcclxuICAgICAgICAgIHBvc2l0aW9uID0gbmV3IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBvczMgPSBfdGhpcy5jYXJ0ZXNpYW4zVG93Z3M4NChwb3NpdGlvbiwgdmlld2VyKTtcclxuICAgICAgICBsZXQgaGVpZ2h0MiA9IDBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uMiA9IGF3YWl0IENlc2l1bS5zYW1wbGVUZXJyYWluTW9zdERldGFpbGVkKFxyXG4gICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLnNjZW5lLnRlcnJhaW5Qcm92aWRlcixcclxuICAgICAgICAgICAgW0Nlc2l1bS5DYXJ0b2dyYXBoaWMuZnJvbURlZ3JlZXMocG9zMy5sbmcsIHBvczMubGF0KV1cclxuICAgICAgICAgIClcclxuICAgICAgICAgIGhlaWdodDIgPSBwb3NpdGlvbjJbMF0uaGVpZ2h0XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGhlaWdodDIgPSAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3MzLmFsdCA8IGhlaWdodDIpIHtcclxuICAgICAgICAgIHBvczMuYWx0ID0gaGVpZ2h0MlxyXG4gICAgICAgIH1cclxuICAgICAgICBwb3MzLmFsdCA9IE51bWJlcihwb3MzLmFsdC50b0ZpeGVkKDEpKVxyXG4gICAgICAgIHBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zMy5sbmcsIHBvczMubGF0LCBwb3MzLmFsdClcclxuICAgICAgICBwb3NpdGlvbkNhbWVyYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSwgX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9zaXRpb24sIF90aGlzLnNkay52aWV3ZXIpLmFsdCArIDEpXHJcbiAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2goc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzW2ldWzBdLCBzbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbaV1bMV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLnJlYWxUaW1lUG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheShmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgIC8vIF90aGlzLnJlYWxUaW1lTGluZS5wb2x5bGluZS5wb3NpdGlvbnMgPSBcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgY2FydGVzaWFuMyA9IF90aGlzLnNwbGluZS5ldmFsdWF0ZShkaXN0YW5jZSAvIF90aGlzLmRpc3RhbmNlKVxyXG4gICAgICAgIGNvb3JkaW5hdGVzID0gX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FydGVzaWFuMywgdmlld2VyKTtcclxuICAgICAgICBwb3NpdGlvbiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKGNvb3JkaW5hdGVzLmxuZywgY29vcmRpbmF0ZXMubGF0LCBjb29yZGluYXRlcy5hbHQpXHJcbiAgICAgICAgcG9zaXRpb25DYW1lcmEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhjb29yZGluYXRlcy5sbmcsIGNvb3JkaW5hdGVzLmxhdCwgY29vcmRpbmF0ZXMuYWx0ICsgMSlcclxuICAgICAgICBsZXQgcG9zaXRpb25zX3Ntb290aCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTAwOyBpKyspIHtcclxuICAgICAgICAgIGlmICgoaSAvIDEwMCkgPiAoZGlzdGFuY2UgLyBfdGhpcy5kaXN0YW5jZSkpIHtcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjYXJ0ZXNpYW4zID0gX3RoaXMuc3BsaW5lLmV2YWx1YXRlKGkgLyAxMDApO1xyXG4gICAgICAgICAgcG9zaXRpb25zX3Ntb290aC5wdXNoKGNhcnRlc2lhbjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb3NpdGlvbnNfc21vb3RoLnB1c2goY2FydGVzaWFuMylcclxuICAgICAgICBfdGhpcy5yZWFsVGltZVBvc2l0aW9ucyA9IHBvc2l0aW9uc19zbW9vdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgSGVhZGluZ1BpdGNoUm9sbCA9IGdldEhlYWRpbmdQaXRjaFJvbGwoX3RoaXMuY3VycmVudC5wb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy5wb3NpdGlvbikge1xyXG4gICAgICAgIEhlYWRpbmdQaXRjaFJvbGwyID0gZ2V0SGVhZGluZ1BpdGNoUm9sbChwcmV2aW91cy5wb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICAgICAgSGVhZGluZ1BpdGNoUm9sbC5waXRjaCA9IEhlYWRpbmdQaXRjaFJvbGwyLnBpdGNoXHJcbiAgICAgIH1cclxuICAgICAgcHJldmlvdXMucG9zaXRpb24gPSBfdGhpcy5jdXJyZW50LnBvc2l0aW9uXHJcbiAgICAgIGxldCBtb2RlSGVhZGluZ1BpdGNoUm9sbCA9IENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKF90aGlzLmN1cnJlbnQuaGVhZGluZywgX3RoaXMuY3VycmVudC5waXRjaCwgX3RoaXMuY3VycmVudC5yb2xsKVxyXG4gICAgICBsZXQgaGVhZGluZyA9IDBcclxuICAgICAgbGV0IHBpdGNoID0gMFxyXG4gICAgICBsZXQgcm9sbCA9IDBcclxuICAgICAgaWYgKF90aGlzLm9wdGlvbnMucm91dGVEaXJlY3Rpb24pIHtcclxuICAgICAgICBoZWFkaW5nID0gKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZyAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcpICogKDE4MCAvIE1hdGguUEkpIC0gOTAgKyBfdGhpcy5jdXJyZW50LmhlYWRpbmdcclxuICAgICAgICBwaXRjaCA9IEhlYWRpbmdQaXRjaFJvbGwucGl0Y2ggKiAoMTgwIC8gTWF0aC5QSSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBoZWFkaW5nID0gX3RoaXMuY3VycmVudC5oZWFkaW5nXHJcbiAgICAgICAgcGl0Y2ggPSBfdGhpcy5jdXJyZW50LnBpdGNoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJvbGwgPSBfdGhpcy5jdXJyZW50LnJvbGxcclxuICAgICAgLy8gY29uc29sZS5sb2coKEhlYWRpbmdQaXRjaFJvbGwuaGVhZGluZyAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcpICogKDE4MCAvIE1hdGguUEkpKVxyXG4gICAgICBpZiAoaXNOYU4oaGVhZGluZykgfHwgaXNOYU4ocGl0Y2gpIHx8IGlzTmFOKHJvbGwpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhlYWRpbmcgPCAwIHx8IGhlYWRpbmcgPiAxODApIHtcclxuICAgICAgICBwaXRjaCA9IC1waXRjaFxyXG4gICAgICB9XHJcbiAgICAgIF90aGlzLmN1cnJlbnQgPSB7XHJcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxyXG4gICAgICAgIGhlYWRpbmc6IGhlYWRpbmcsXHJcbiAgICAgICAgcGl0Y2g6IHBpdGNoLFxyXG4gICAgICAgIHJvbGw6IHJvbGxcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlyc3QpIHtcclxuICAgICAgICBmaXJzdCA9IGZhbHNlXHJcbiAgICAgICAgX3RoaXMuX2ZpcnN0ID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxyXG4gICAgICAgICAgaGVhZGluZzogaGVhZGluZyxcclxuICAgICAgICAgIHBpdGNoOiBwaXRjaCxcclxuICAgICAgICAgIHJvbGw6IHJvbGxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGFzdERpc3RhbmNlID0gZGlzdGFuY2VcclxuICAgICAgLy8gY29uc29sZS5sb2cocG9zaXRpb24pXHJcbiAgICAgIF90aGlzLnJlYWxUaW1lUm91dGVBcnJheS5wdXNoKHBvc2l0aW9uKVxyXG4gICAgICBpZiAoX3RoaXMudmlld0ZvbGxvdykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGhlYWRpbmcpXHJcbiAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuZmlyc3RQZXJzb25WaWV3KSB7XHJcbiAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLmNhbWVyYS5zZXRWaWV3KHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IHBvc2l0aW9uQ2FtZXJhLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGhlYWRpbmc6IF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLmhlYWRpbmcsXHJcbiAgICAgICAgICAgICAgcGl0Y2g6IF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBpdGNoLFxyXG4gICAgICAgICAgICAgIHJvbGw6IF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnJvbGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KSB7XHJcbiAgICAgICAgICAgIF90aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eS5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIC8vIF90aGlzLnNkay52aWV3ZXIuY2FtZXJhLnBvc2l0aW9uID0gcG9zaXRpb25cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBmdW5jdGlvbiBleGVjdXRlQW5pbWF0ZSgpIHtcclxuICAgIC8vIH1cclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICBsZXQgaSA9IDBcclxuICAgIC8vICAgZnVuY3Rpb24gYW5pbWF0ZSgpIHtcclxuICAgIC8vICAgICBpZiAoaSA8IG1vdGlvbkFycmF5Lmxlbmd0aCkge1xyXG4gICAgLy8gICAgICAgbGV0IHJlc3VsdCA9IG1vdGlvbkFycmF5W2ldLnJlc3VsdDtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgIC8vICAgICAgIHJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgIC8vICAgICAgICAgbGV0IHBvc2l0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobW90aW9uQXJyYXlbaV0ubG5nLCBtb3Rpb25BcnJheVtpXS5sYXQsIHJlc1swXS5oZWlnaHQpXHJcblxyXG4gICAgLy8gICAgICAgICBsZXQgSGVhZGluZ1BpdGNoUm9sbCA9IGdldEhlYWRpbmdQaXRjaFJvbGwoX3RoaXMubW9kZWwucG9zaXRpb24sIHBvc2l0aW9uKVxyXG4gICAgLy8gICAgICAgICBsZXQgbW9kZUhlYWRpbmdQaXRjaFJvbGwgPSBDZXNpdW0uSGVhZGluZ1BpdGNoUm9sbC5mcm9tRGVncmVlcyhfdGhpcy5vcHRpb25zLm1vZGVsLmhlYWRpbmcsIF90aGlzLm9wdGlvbnMubW9kZWwucGl0Y2gsIF90aGlzLm9wdGlvbnMubW9kZWwucm9sbClcclxuICAgIC8vICAgICAgICAgbGV0IGhlYWRpbmcgPSAwXHJcbiAgICAvLyAgICAgICAgIGxldCBwaXRjaCA9IDBcclxuICAgIC8vICAgICAgICAgbGV0IHJvbGwgPSAwXHJcbiAgICAvLyAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnJvdXRlRGlyZWN0aW9uKSB7XHJcbiAgICAvLyAgICAgICAgICAgaGVhZGluZyA9IChIZWFkaW5nUGl0Y2hSb2xsLmhlYWRpbmcgLSBtb2RlSGVhZGluZ1BpdGNoUm9sbC5oZWFkaW5nKSAqICgxODAgLyBNYXRoLlBJKSAtIDkwXHJcbiAgICAvLyAgICAgICAgICAgcGl0Y2ggPSAoSGVhZGluZ1BpdGNoUm9sbC5waXRjaCAtIG1vZGVIZWFkaW5nUGl0Y2hSb2xsLnBpdGNoKSAqICgxODAgLyBNYXRoLlBJKVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgIGhlYWRpbmcgPSAtIF90aGlzLm9wdGlvbnMubW9kZWwuaGVhZGluZ1xyXG4gICAgLy8gICAgICAgICAgIHBpdGNoID0gLSBfdGhpcy5vcHRpb25zLm1vZGVsLnBpdGNoXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgcm9sbCA9IC0gX3RoaXMub3B0aW9ucy5tb2RlbC5yb2xsXHJcbiAgICAvLyAgICAgICAgIC8vIGNvbnNvbGUubG9nKGhlYWRpbmcpXHJcbiAgICAvLyAgICAgICAgIGxldCBtYXRyaXggPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb3NpdGlvbilcclxuICAgIC8vICAgICAgICAgX3RoaXMubW9kZWwubW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5tdWx0aXBseUJ5TWF0cml4MyhtYXRyaXgsIENlc2l1bS5NYXRyaXgzLmZyb21IZWFkaW5nUGl0Y2hSb2xsKENlc2l1bS5IZWFkaW5nUGl0Y2hSb2xsLmZyb21EZWdyZWVzKGhlYWRpbmcsIHBpdGNoLCByb2xsKSksIF90aGlzLm1vZGVsLm1vZGVsTWF0cml4KVxyXG4gICAgLy8gICAgICAgICBfdGhpcy5tb2RlbC5wb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAvLyAgICAgICAgIGlmIChfdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkpIHtcclxuICAgIC8vICAgICAgICAgICBfdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkucG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIGkrK1xyXG4gICAgLy8gICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAvLyAgICAgICB9KVxyXG5cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGFuaW1hdGUoKTtcclxuICAgIC8vIH0sIDIwMDApO1xyXG5cclxuICAgIC8vIOagueaNruS4pOS4quWdkOagh+eCuSzojrflj5ZIZWFkaW5nKOacneWQkSlcclxuICAgIGZ1bmN0aW9uIGdldEhlYWRpbmdQaXRjaFJvbGwocG9pbnRBLCBwb2ludEIpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZGlzdGFuY2UsIF90aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvaW50QSwgdmlld2VyKSwgX3RoaXMuY2FydGVzaWFuM1Rvd2dzODQocG9pbnRCLCB2aWV3ZXIpKVxyXG4gICAgICAvL+W7uueri+S7peeCuUHkuLrljp/ngrnvvIxY6L205Li6ZWFzdCxZ6L205Li6bm9ydGgsWui9tOacneS4iueahOWdkOagh+ezu1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBDZXNpdW0uVHJhbnNmb3Jtcy5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShwb2ludEEpO1xyXG4gICAgICAvL+WQkemHj0FCXHJcbiAgICAgIGlmICghcG9pbnRCKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zaXRpb252ZWN0b3IgPSBDZXNpdW0uQ2FydGVzaWFuMy5zdWJ0cmFjdChwb2ludEIsIHBvaW50QSwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICAvL+WboHRyYW5zZm9ybeaYr+WwhkHkuLrljp/ngrnnmoRlYXN0Tm9ydGhVcOWdkOagh+ezu+S4reeahOeCuei9rOaNouWIsOS4lueVjOWdkOagh+ezu+eahOefqemYtVxyXG4gICAgICAvL0FC5Li65LiW55WM5Z2Q5qCH5Lit55qE5ZCR6YePXHJcbiAgICAgIC8v5Zug5q2k5bCGQULlkJHph4/ovazmjaLkuLpB5Y6f54K55Z2Q5qCH57O75Lit55qE5ZCR6YeP77yM6ZyA5LmY5LuldHJhbnNmb3Jt55qE6YCG55+p6Zi144CCXHJcbiAgICAgIGNvbnN0IHZlY3RvciA9IENlc2l1bS5NYXRyaXg0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKFxyXG4gICAgICAgIENlc2l1bS5NYXRyaXg0LmludmVyc2UodHJhbnNmb3JtLCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSksXHJcbiAgICAgICAgcG9zaXRpb252ZWN0b3IsXHJcbiAgICAgICAgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKClcclxuICAgICAgKTtcclxuICAgICAgLy/lvZLkuIDljJZcclxuICAgICAgY29uc3QgZGlyZWN0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMubm9ybWFsaXplKHZlY3RvciwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKCkpO1xyXG4gICAgICAvL2hlYWRpbmdcclxuICAgICAgY29uc3QgaGVhZGluZyA9IE1hdGguYXRhbjIoZGlyZWN0aW9uLnksIGRpcmVjdGlvbi54KSAtIENlc2l1bS5NYXRoLlBJX09WRVJfVFdPO1xyXG4gICAgICBsZXQgcGl0Y2ggPSBDZXNpdW0uTWF0aC5QSV9PVkVSX1RXTyAtIENlc2l1bS5NYXRoLmFjb3NDbGFtcGVkKGRpcmVjdGlvbi56KTtcclxuICAgICAgbGV0IGEgPSBwaXRjaCAqICgxODAgLyBNYXRoLlBJKVxyXG4gICAgICBpZiAoYSA8IDApIHtcclxuICAgICAgICAvLyBhID0gKC1hKVxyXG4gICAgICB9XHJcbiAgICAgIHBpdGNoID0gYSAqIChNYXRoLlBJIC8gMTgwKVxyXG4gICAgICBjb25zdCByb2xsID0gQ2VzaXVtLk1hdGguZmFzdEFwcHJveGltYXRlQXRhbjIoZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcclxuICAgICAgLy8gY29uc29sZS5sb2coe2hlYWRpbmc6IGhlYWRpbmcgKiAoMTgwIC8gTWF0aC5QSSksIHBpdGNoOiBwaXRjaCAqICgxODAgLyBNYXRoLlBJKSwgcm9sbDogcm9sbCAqICgxODAgLyBNYXRoLlBJKX0pXHJcbiAgICAgIHJldHVybiB7IGhlYWRpbmc6IENlc2l1bS5NYXRoLlRXT19QSSAtIENlc2l1bS5NYXRoLnplcm9Ub1R3b1BpKGhlYWRpbmcpLCBwaXRjaDogcGl0Y2gsIHJvbGw6IHJvbGwgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE1vdmVQb3NpdGlvbkJ5RGlzdGFuY2UoZGlzdGFuY2UpIHtcclxuICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gdGhpcy5fcmVuZXdMaW5lKHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucylcclxuICAgIHRoaXMubW9kZWxNb3ZlKHBvc2l0aW9uc19zbW9vdGgsIHsgZGlzdGFuY2U6IGRpc3RhbmNlIH0pXHJcbiAgfVxyXG5cclxuICBzZXRNb3ZlUG9zaXRpb25CeVRpbWUodGltZSkge1xyXG4gICAgbGV0IHBvc2l0aW9uc19zbW9vdGggPSB0aGlzLl9yZW5ld0xpbmUodGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKVxyXG4gICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zX3Ntb290aCwgeyB0aW1lOiB0aW1lIH0pXHJcbiAgICBpZiAoIXRoaXMuc3RhdGUpIHtcclxuICAgICAgdGhpcy5tb2RlbE1vdmUocG9zaXRpb25zX3Ntb290aCwgeyB0aW1lOiB0aW1lKzAuMDEgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOaaguWBnFxyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyDnu6fnu61cclxuICByZXN1bWUoKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zWzBdIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGluZSAmJiB0aGlzLnNkay52aWV3ZXIuZmx5VG8odGhpcy5saW5lLCB7XHJcbiAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9yaWVudGF0aW9uIHx8IHtcclxuICAgICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtNjAuMCksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIC8vIHRoaXMuc2RrLnZpZXdlci5zY2VuZS5wcmltaXRpdmVzLnJlbW92ZSh0aGlzLm1vZGVsKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubGluZSlcclxuICAgIHRoaXMubGluZSA9IG51bGxcclxuICAgIHRoaXMucmVtb3ZlTW9kZWxBbmltYXRlKClcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5tb2RlbE1vdmUodGhpcy5saW5lLnBvbHlsaW5lLnBvc2l0aW9ucy5fdmFsdWUpXHJcbiAgICB0aGlzLnN0YXRlID0gZmFsc2VcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuX2ZpcnN0XHJcbiAgfVxyXG5cclxuICAvLyB2aWV3Rm9sbG93KGUpIHtcclxuICAvLyAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7XHJcbiAgLy8gICAgIHZhciBwb2ludEVudGl0eSA9IHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gIC8vICAgICAgIC8vIHNob3c6IGZhbHNlLFxyXG4gIC8vICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uc19zbW9vdGhbMF0sIC8vIHBvc2l0aW9uIG9mIHRoZSBwb2ludFxyXG4gIC8vICAgICAgIHBvaW50OiB7XHJcbiAgLy8gICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLlJFRC53aXRoQWxwaGEoMCksIC8vIGNvbG9yIG9mIHRoZSBwb2ludFxyXG4gIC8vICAgICAgICAgcGl4ZWxTaXplOiAwXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgICAgdGhpcy5zZGsudmlld2VyLnRyYWNrZWRFbnRpdHkgPSBwb2ludEVudGl0eTtcclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuc2RrLnZpZXdlci50cmFja2VkRW50aXR5KVxyXG4gIC8vICAgICB0aGlzLnNkay52aWV3ZXIudHJhY2tlZEVudGl0eSA9IG51bGxcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIOenu+mZpOWKqOeUu1xyXG4gIHJlbW92ZU1vZGVsQW5pbWF0ZSgpIHtcclxuICAgIGlmICh0aGlzLlR3ZWVuQW5pbWF0ZSkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5Ud2VlbkFuaW1hdGUudGltZW91dClcclxuICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuVHdlZW5BbmltYXRlKVxyXG4gICAgICB0aGlzLlR3ZWVuQW5pbWF0ZSA9IG51bGxcclxuICAgIH1cclxuICAgIC8vIGlmIChtb2RlbFByaW1pdGl2ZSAmJiBtb2RlbFByaW1pdGl2ZS5fYWN0aXZlQW5pbWF0aW9ucyAmJiBtb2RlbFByaW1pdGl2ZS5fYWN0aXZlQW5pbWF0aW9ucy5fcnVudGltZUFuaW1hdGlvbnMpIHtcclxuICAgIC8vICAgbGV0IHJ1bnRpbWVBbmltYXRpb24gPSBtb2RlbFByaW1pdGl2ZS5fYWN0aXZlQW5pbWF0aW9ucy5fcnVudGltZUFuaW1hdGlvbnNcclxuICAgIC8vICAgZm9yIChsZXQgaSA9IHJ1bnRpbWVBbmltYXRpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIC8vICAgICBzd2l0Y2ggKHJ1bnRpbWVBbmltYXRpb25baV0ubmFtZSkge1xyXG4gICAgLy8gICAgICAgY2FzZSAn6LeRJzpcclxuICAgIC8vICAgICAgICAgbW9kZWxQcmltaXRpdmUuYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUocnVudGltZUFuaW1hdGlvbltpXSlcclxuICAgIC8vICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICBkZWZhdWx0OlxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcblxyXG4gIF9yZW5ld0xpbmUocG9zKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGluZS5wb3NpdGlvbnMgPSBwb3NcclxuICAgIGxldCBwb3NpdGlvbnMgPSBwb3NcclxuICAgIGlmICh0aGlzLm5vc2VUb1RhaWwpIHtcclxuICAgICAgcG9zaXRpb25zID0gWy4uLnBvcywgcG9zWzBdXVxyXG4gICAgfVxyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzID0gW11cclxuICAgIGxldCB0aW1lID0gW11cclxuICAgIGxldCBwb3NpdGlvbnNfc21vb3RoID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgdGltZS5wdXNoKGkgLyAocG9zaXRpb25zLmxlbmd0aCAtIDEpKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21vb3RoKSB7XHJcbiAgICAgIHRoaXMuc3BsaW5lID0gbmV3IENlc2l1bS5DYXRtdWxsUm9tU3BsaW5lKHtcclxuICAgICAgICB0aW1lczogdGltZSxcclxuICAgICAgICBwb2ludHM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNwbGluZSA9IG5ldyBDZXNpdW0uTGluZWFyU3BsaW5lKHtcclxuICAgICAgICB0aW1lczogdGltZSxcclxuICAgICAgICBwb2ludHM6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwMDsgaSsrKSB7XHJcbiAgICAgIGxldCBjYXJ0ZXNpYW4zID0gdGhpcy5zcGxpbmUuZXZhbHVhdGUoaSAvIDEwMCk7XHJcbiAgICAgIHBvc2l0aW9uc19zbW9vdGgucHVzaChjYXJ0ZXNpYW4zKTtcclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zX3Ntb290aCA9IHBvc2l0aW9uc19zbW9vdGhcclxuICAgIHJldHVybiBwb3NpdGlvbnNfc21vb3RoXHJcbiAgfVxyXG4gIC8vIOabtOaWsOWdkOagh1xyXG4gIHJlbmV3TGluZVBvc2l0aW9ucyhwb3MpIHtcclxuICAgIHRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9ucyA9IHBvc1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHBvc1xyXG4gICAgaWYgKHRoaXMubm9zZVRvVGFpbCkge1xyXG4gICAgICBwb3NpdGlvbnMgPSBbLi4ucG9zLCBwb3NbMF1dXHJcbiAgICB9XHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMgPSBbXVxyXG4gICAgbGV0IHRpbWUgPSBbXVxyXG4gICAgbGV0IHBvc2l0aW9uc19zbW9vdGggPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheUhlaWdodHMucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICB0aW1lLnB1c2goaSAvIChwb3NpdGlvbnMubGVuZ3RoIC0gMSkpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbW9vdGgpIHtcclxuICAgICAgdGhpcy5zcGxpbmUgPSBuZXcgQ2VzaXVtLkNhdG11bGxSb21TcGxpbmUoe1xyXG4gICAgICAgIHRpbWVzOiB0aW1lLFxyXG4gICAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3BsaW5lID0gbmV3IENlc2l1bS5MaW5lYXJTcGxpbmUoe1xyXG4gICAgICAgIHRpbWVzOiB0aW1lLFxyXG4gICAgICAgIHBvaW50czogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheUhlaWdodHMpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTAwOyBpKyspIHtcclxuICAgICAgbGV0IGNhcnRlc2lhbjMgPSB0aGlzLnNwbGluZS5ldmFsdWF0ZShpIC8gMTAwKTtcclxuICAgICAgcG9zaXRpb25zX3Ntb290aC5wdXNoKGNhcnRlc2lhbjMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3NpdGlvbnNfc21vb3RoID0gcG9zaXRpb25zX3Ntb290aFxyXG4gICAgaWYgKHRoaXMubGluZSAmJiB0aGlzLmxpbmUucG9seWxpbmUpIHtcclxuICAgICAgdGhpcy5saW5lLnBvbHlsaW5lLnBvc2l0aW9ucyA9IHBvc2l0aW9uc19zbW9vdGhcclxuICAgIH1cclxuICAgIHJldHVybiBwb3NpdGlvbnNfc21vb3RoXHJcbiAgfVxyXG5cclxuICBmbGlja2VyKCkgeyB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYWplY3RvcnlNb3Rpb25PYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdkJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWdHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEZBO0FBQUE7QUFxTEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQW5OQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFIQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUF4SUE7QUFBQTtBQUFBO0FBNUZBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTJJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdDQTtBQWhUQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1UQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXhDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQTdrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVnQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/TrajectoryMotionObject/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Vector/color.json": /*!****************************************!*\ !*** ./src/Obj/Base/Vector/color.json ***! \****************************************/ /*! exports provided: 地震灾害, 洪水灾害, 干旱灾害, 雪灾灾害, 雷电、冰雹灾害, 高温灾害, 低温灾害, 台风灾害, 大风、沙尘暴灾害, 暴雨灾害, 自然灾害GDP综合风险图色彩样式, 自然灾害死亡人口综合风险图色彩样式, 自然灾害受灾人口综合风险图色彩样式, 自然灾害农作物综合风险图色彩样式, 自然灾害房屋综合风险图色彩样式, 自然灾害道路综合风险图色彩样式, 自然灾害减灾能力图色彩样式, 自然灾害综合防治区划图色彩样式, default */ /***/ (function(module) { eval("module.exports = JSON.parse(\"{\\\"地震灾害\\\":{\\\"1\\\":{\\\"c\\\":30,\\\"m\\\":85,\\\"y\\\":65,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":0,\\\"m\\\":95,\\\"y\\\":40,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":5,\\\"m\\\":55,\\\"y\\\":40,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":2,\\\"m\\\":20,\\\"y\\\":20,\\\"k\\\":0}},\\\"洪水灾害\\\":{\\\"1\\\":{\\\"c\\\":100,\\\"m\\\":70,\\\"y\\\":40,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":70,\\\"m\\\":50,\\\"y\\\":10,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":55,\\\"m\\\":30,\\\"y\\\":10,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":20,\\\"m\\\":10,\\\"y\\\":5,\\\"k\\\":0}},\\\"干旱灾害\\\":{\\\"1\\\":{\\\"c\\\":10,\\\"m\\\":15,\\\"y\\\":100,\\\"k\\\":10},\\\"2\\\":{\\\"c\\\":0,\\\"m\\\":5,\\\"y\\\":55,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":2,\\\"y\\\":25,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":10,\\\"k\\\":0}},\\\"雪灾灾害\\\":{\\\"1\\\":{\\\"c\\\":100,\\\"m\\\":65,\\\"y\\\":40,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":100,\\\"m\\\":40,\\\"y\\\":15,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":65,\\\"m\\\":25,\\\"y\\\":10,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":18,\\\"m\\\":8,\\\"y\\\":8,\\\"k\\\":0}},\\\"雷电、冰雹灾害\\\":{\\\"1\\\":{\\\"c\\\":40,\\\"m\\\":45,\\\"y\\\":40,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":30,\\\"m\\\":30,\\\"y\\\":25,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":0,\\\"k\\\":16},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":0,\\\"k\\\":0}},\\\"高温灾害\\\":{\\\"1\\\":{\\\"c\\\":20,\\\"m\\\":90,\\\"y\\\":65,\\\"k\\\":20},\\\"2\\\":{\\\"c\\\":20,\\\"m\\\":85,\\\"y\\\":100,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":55,\\\"y\\\":80,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":30,\\\"y\\\":85,\\\"k\\\":0}},\\\"低温灾害\\\":{\\\"1\\\":{\\\"c\\\":70,\\\"m\\\":70,\\\"y\\\":50,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":60,\\\"m\\\":50,\\\"y\\\":30,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":40,\\\"m\\\":35,\\\"y\\\":20,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":10,\\\"m\\\":10,\\\"y\\\":5,\\\"k\\\":0}},\\\"台风灾害\\\":{\\\"1\\\":{\\\"c\\\":95,\\\"m\\\":75,\\\"y\\\":75,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":75,\\\"m\\\":60,\\\"y\\\":65,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":40,\\\"m\\\":25,\\\"y\\\":30,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":25,\\\"m\\\":10,\\\"y\\\":15,\\\"k\\\":0}},\\\"大风、沙尘暴灾害\\\":{\\\"1\\\":{\\\"c\\\":0,\\\"m\\\":40,\\\"y\\\":100,\\\"k\\\":45},\\\"2\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":100,\\\"k\\\":25},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":60,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":25,\\\"k\\\":0}},\\\"暴雨灾害\\\":{\\\"1\\\":{\\\"c\\\":100,\\\"m\\\":70,\\\"y\\\":40,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":70,\\\"m\\\":50,\\\"y\\\":10,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":55,\\\"m\\\":30,\\\"y\\\":10,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":20,\\\"m\\\":10,\\\"y\\\":5,\\\"k\\\":0}},\\\"自然灾害GDP综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":15,\\\"m\\\":100,\\\"y\\\":85,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":7,\\\"m\\\":50,\\\"y\\\":60,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":5,\\\"y\\\":55,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":2,\\\"y\\\":25,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":10,\\\"k\\\":0}},\\\"自然灾害死亡人口综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":0,\\\"m\\\":100,\\\"y\\\":100,\\\"k\\\":25},\\\"2\\\":{\\\"c\\\":15,\\\"m\\\":100,\\\"y\\\":85,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":5,\\\"m\\\":50,\\\"y\\\":60,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":5,\\\"m\\\":35,\\\"y\\\":40,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":0,\\\"m\\\":15,\\\"y\\\":15,\\\"k\\\":0}},\\\"自然灾害受灾人口综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":25,\\\"m\\\":58,\\\"y\\\":95,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":8,\\\"m\\\":45,\\\"y\\\":95,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":5,\\\"m\\\":30,\\\"y\\\":60,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":2,\\\"m\\\":20,\\\"y\\\":40,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":0,\\\"m\\\":10,\\\"y\\\":20,\\\"k\\\":0}},\\\"自然灾害农作物综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":0,\\\"m\\\":40,\\\"y\\\":100,\\\"k\\\":45},\\\"2\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":100,\\\"k\\\":45},\\\"3\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":100,\\\"k\\\":25},\\\"4\\\":{\\\"c\\\":0,\\\"m\\\":0,\\\"y\\\":60,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":10,\\\"m\\\":5,\\\"y\\\":15,\\\"k\\\":0}},\\\"自然灾害房屋综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":60,\\\"m\\\":90,\\\"y\\\":70,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":50,\\\"m\\\":90,\\\"y\\\":60,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":40,\\\"m\\\":80,\\\"y\\\":40,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":25,\\\"m\\\":45,\\\"y\\\":25,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":15,\\\"m\\\":25,\\\"y\\\":15,\\\"k\\\":0}},\\\"自然灾害道路综合风险图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":55,\\\"m\\\":65,\\\"y\\\":75,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":45,\\\"m\\\":50,\\\"y\\\":60,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":20,\\\"m\\\":30,\\\"y\\\":40,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":7,\\\"m\\\":15,\\\"y\\\":35,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":0,\\\"m\\\":10,\\\"y\\\":25,\\\"k\\\":0}},\\\"自然灾害减灾能力图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":90,\\\"m\\\":50,\\\"y\\\":95,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":70,\\\"m\\\":40,\\\"y\\\":80,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":50,\\\"m\\\":30,\\\"y\\\":65,\\\"k\\\":0},\\\"4\\\":{\\\"c\\\":35,\\\"m\\\":20,\\\"y\\\":50,\\\"k\\\":0},\\\"5\\\":{\\\"c\\\":10,\\\"m\\\":5,\\\"y\\\":35,\\\"k\\\":0}},\\\"自然灾害综合防治区划图色彩样式\\\":{\\\"1\\\":{\\\"c\\\":0,\\\"m\\\":90,\\\"y\\\":80,\\\"k\\\":0},\\\"2\\\":{\\\"c\\\":0,\\\"m\\\":50,\\\"y\\\":80,\\\"k\\\":0},\\\"3\\\":{\\\"c\\\":60,\\\"m\\\":0,\\\"y\\\":50,\\\"k\\\":25},\\\"4\\\":{\\\"c\\\":60,\\\"m\\\":0,\\\"y\\\":100,\\\"k\\\":0}}}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVmVjdG9yL2NvbG9yLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/Vector/color.json\n"); /***/ }), /***/ "./src/Obj/Base/Vector/index.js": /*!**************************************!*\ !*** ./src/Obj/Base/Vector/index.js ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Element_Pagination__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Element/Pagination */ \"./src/Obj/Element/Pagination.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _openAllNodeList__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./openAllNodeList */ \"./src/Obj/Base/Vector/openAllNodeList.js\");\n/* harmony import */ var _openNodeListById__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./openNodeListById */ \"./src/Obj/Base/Vector/openNodeListById.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n/* harmony import */ var _Tools_proj__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../Tools/proj */ \"./src/Tools/proj.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n/* harmony import */ var _Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../../Global/cluster/cluster */ \"./src/Global/cluster/cluster.js\");\n\n\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_8___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_7___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_8___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar colors = __webpack_require__(/*! ./color.json */ \"./src/Obj/Base/Vector/color.json\");\nvar _loadEvent = /*#__PURE__*/new WeakMap();\nvar _loaded = /*#__PURE__*/new WeakMap();\nvar _textEntity = /*#__PURE__*/new WeakMap();\nvar Vector = /*#__PURE__*/function (_Base) {\n function Vector(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5___default()(this, Vector);\n _this2 = _callSuper(this, Vector, [sdk, options]);\n _classPrivateFieldInitSpec(_this2, _loadEvent, void 0);\n _classPrivateFieldInitSpec(_this2, _loaded, false);\n _classPrivateFieldInitSpec(_this2, _textEntity, []);\n _this2.viewer = sdk.viewer;\n if (!_this2.options.path) {\n _this2.error = '未提供路径!';\n if (window.ELEMENT) {\n window.ELEMENT.Message.closeAll();\n window.ELEMENT.Message({\n message: _this2.error,\n type: 'warning',\n duration: 1500\n });\n }\n console.warn(_this2.error);\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_7___default()(_this2);\n }\n _this2.colors = colors;\n _this2.options.head_tables = options.head_tables || [];\n _this2.options.fileName = options.fileName || '未命名对象';\n if (!_this2.options.path.endsWith('.kml')) {\n ;\n _this2.options.color = options.color || 'rgba(0,255,184,0.5)', _this2.options.opacity = options.opacity || options.opacity === 0 ? options.opacity : 1;\n }\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.total = 0;\n _this2.page = 1;\n _this2.pageSize = 20;\n _this2.currentData = [];\n _this2.data = [];\n _this2.list = [];\n _this2.imgEntity = [];\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n _this2.disaster_type_colors = colors[_this2.options.disaster_type] ? _objectSpread({}, colors[_this2.options.disaster_type]) : void 0;\n for (var key in _this2.disaster_type_colors) {\n _this2.disaster_type_colors[key] = _this2.cmykToRgb(_this2.disaster_type_colors[key]);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_9___default()(Vector, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6___default()(Vector, [{\n key: \"type\",\n get: function get() {\n return 'vector';\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n this.setShow(v);\n }\n }, {\n key: \"opacity\",\n get: function get() {\n return this.options.opacity;\n },\n set: function set(v) {\n this.options.opacity = v;\n if (this.entity) {\n this.entity.entities.values.forEach(function (enetity) {\n if (enetity.point) {\n enetity.point.color = enetity.point.color._value.withAlpha(v);\n }\n if (enetity.polygon) {\n enetity.polygon.material = enetity.polygon.material.color._value.withAlpha(v);\n }\n if (enetity.polyline) {\n enetity.polyline.material = enetity.polyline.material.color._value.withAlpha(v);\n }\n });\n }\n }\n }, {\n key: \"on\",\n value: function on() {\n if (!this.sdk || !this.viewer || !this.options.path) {\n return;\n }\n return this.init();\n }\n }, {\n key: \"init\",\n value: function () {\n var _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee() {\n var url, response, arrayBuffer, uint8Array, string;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n url = '';\n this.options.host = this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getHost\"])();\n if (this.options.host.endsWith('yjearth4.0')) {\n url = this.options.host + '/api/v1/vector/load2';\n } else {\n url = this.options.host + '/yjearth4.0/api/v1/vector/load2';\n }\n url += '?path=' + this.options.path;\n // url = 'json/shp.json'\n _context.next = 6;\n return fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n token: Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])(),\n Authorization: 'Bearer ' + Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])()\n }\n });\n case 6:\n response = _context.sent;\n if (!(response.status === 200)) {\n _context.next = 17;\n break;\n }\n _context.next = 10;\n return response.arrayBuffer();\n case 10:\n arrayBuffer = _context.sent;\n uint8Array = new Uint8Array(arrayBuffer);\n string = this.decompressGzip(uint8Array);\n if (this.data.length === 0) {\n this.data = JSON.parse(string);\n }\n _context.next = 16;\n return this.formatData();\n case 16:\n return _context.abrupt(\"return\", Vector.create(this));\n case 17:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function init() {\n return _init.apply(this, arguments);\n }\n return init;\n }() // 格式化数据\n }, {\n key: \"formatData\",\n value: function () {\n var _formatData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee2() {\n var features, _this, _posConvert, i, crs_src, crs_dst, _iterator, _step, _step$value, key, item, m, range;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n features = [];\n _this = this;\n _posConvert = function posConvert(data, src, dst) {\n if (data) {\n if (Array.isArray(data)) {\n var flag = false;\n for (var i = 0; i < data.length; i++) {\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(data[i]) === 'object') {\n _posConvert(data[i], src, dst);\n } else {\n flag = true;\n break;\n }\n }\n if (flag) {\n var x = Number(data[0]);\n var y = Number(data[1]);\n var res = proj4(src, dst, [x, y]);\n data[0] = Number(res[0].toFixed(10));\n data[1] = Number(res[1].toFixed(10));\n }\n } else {\n if (data instanceof Object) {\n _posConvert(data.coordinates, src, dst);\n _posConvert(data.geometries, src, dst);\n }\n }\n }\n };\n for (i = 0; i < this.data.list.length; i++) {\n crs_src = '';\n crs_dst = '';\n _iterator = _createForOfIteratorHelper(this.name_map);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _step$value = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_step.value, 2), key = _step$value[0], item = _step$value[1];\n if (item.def === this.data.list[i].crs_src) {\n crs_src = item.epsg;\n }\n if (item.def === this.data.list[i].crs_dst) {\n crs_dst = item.epsg;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (m = 0; m < this.data.list[i].features.length; m++) {\n this.data.list[i].features[m].properties.id;\n if (!this.data.list[i].features[m].properties) {\n this.data.list[i].features[m].properties = {};\n }\n if (!this.data.list[i].features[m].properties.id) {\n this.data.list[i].features[m].properties.id = Cesium.createGuid();\n }\n this.data.list[i].features[m].id = this.data.list[i].features[m].properties.id;\n _posConvert(this.data.list[i].features[m].geometry, this.data.list[i].crs_src, this.data.list[i].crs_dst || '+proj=longlat +datum=WGS84 +no_defs');\n this.data.list[i].features[m].geometry.geometries || (this.data.list[i].features[m].geometry.geometries = []);\n range = turf.bbox(this.data.list[i].features[m].geometry);\n if (range && range[0] && range[0] != Infinity) {\n this.data.list[i].features[m].geometry.range = turf.bbox(this.data.list[i].features[m]);\n }\n features.push(this.data.list[i].features[m]);\n }\n }\n this.geojson = {\n type: 'FeatureCollection',\n features: features\n };\n // console.log(this.geojson)\n\n // for (let i = 0; i < this.geojson.features.length; i++) {\n // this.geojson.features[i].id = this.geojson.features[i].properties.id\n // this.geojson.features[i].geometry.range = turf.bbox(this.geojson.features[i]);\n // }\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function formatData() {\n return _formatData.apply(this, arguments);\n }\n return formatData;\n }()\n }, {\n key: \"fileName\",\n get: function get() {\n return this.options.fileName;\n },\n set: function set(v) {\n this.options.fileName = v;\n this._elms.fileName && (this._elms.fileName.value = v);\n }\n }, {\n key: \"field\",\n get: function get() {\n return this.options.field;\n },\n set: function set(v) {\n this.options.field = v;\n // for (let i = 0; i < this.#textEntity.length; i++) {\n // const img = new Image();\n // img.src = Vector.getcanvas(this.#textEntity[i].properties[this.options.field] && this.#textEntity[i].properties[this.options.field]._value + '')\n // img.onload = async () => {\n // this.#textEntity[i].billboard.image = Vector.getcanvas(this.#textEntity[i].properties[this.options.field] && this.#textEntity[i].properties[this.options.field]._value + '')\n // }\n // }\n var label = v;\n for (var index = 0; index < this.options.head_tables.length; index++) {\n if (this.options.head_tables[index].key === v) {\n label = this.options.head_tables[index].label;\n break;\n }\n }\n this._elms.field && (this._elms.field.value = label);\n }\n }, {\n key: \"img\",\n get: function get() {\n return this.options.img;\n },\n set: function set(v) {\n if (!Array.isArray(v)) {\n v = [v];\n }\n this.options.img = v;\n Vector.createImage(this);\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n if (!this.entity) {\n return;\n }\n this.entity.entities.values.forEach(function (enetity) {\n if (enetity.point) {\n enetity.point.color = Cesium.Color.fromCssColorString(v).withAlpha(_this3.opacity);\n }\n if (enetity.polygon) {\n enetity.polygon.material = Cesium.Color.fromCssColorString(v).withAlpha(_this3.opacity);\n }\n if (enetity.polyline) {\n enetity.polyline.material = Cesium.Color.fromCssColorString(v).withAlpha(_this3.opacity);\n }\n });\n }\n }, {\n key: \"onRightClick\",\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n if (this.rightClickCallBack == null && this.options && this.options.id) {\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_14__[\"regRightClickCallback\"])(this.options.id, this.rightClickCB, this);\n }\n this.rightClickCallBack = val;\n }\n }\n }, {\n key: \"leftClickCB\",\n value: function leftClickCB(mo, id, p, that) {\n if (that.clickCallBack && typeof that.clickCallBack === 'function') {\n that.clickCallBack(mo, id, p);\n }\n }\n }, {\n key: \"edit\",\n value: function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee3() {\n var _this4 = this;\n var status,\n DialogEvent,\n html,\n contentElm,\n nameElm,\n keyData,\n key,\n label,\n index,\n keyObject,\n keyDataLegpElm,\n i,\n selectElm,\n option,\n _key,\n _label,\n _index,\n o,\n _args3 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n status = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;\n DialogEvent = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!status) {\n _context3.next = 74;\n break;\n }\n _context3.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk, this.options, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.fileName = _this4.fileName.trim();\n if (!_this4.fileName) {\n _this4.fileName = '未命名对象';\n }\n _this4.originalOptions.fileName = _this4.fileName;\n _this4.originalOptions.field = _this4.field;\n _this4._DialogObject.close();\n DialogEvent.confirmCallBack && DialogEvent.confirmCallBack({\n id: _this4.options.id,\n fileName: _this4.originalOptions.fileName,\n field: _this4.originalOptions.field\n });\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n DialogEvent.closeCallBack && DialogEvent.closeCallBack();\n }\n });\n case 7:\n this._DialogObject = _context3.sent;\n html = \"\\n
    \\n
    \\n \\u6587\\u4EF6\\u540D\\u79F0\\uFF1A\\n \\n
    \\n
    \\n
    \\n
    \\n \\u540D\\u79F0\\u5B57\\u6BB5\\u9009\\u62E9\\uFF1A\\n
    \\n
    \\n
    \\n \";\n contentElm = document.createElement('div');\n contentElm.innerHTML = html;\n this._DialogObject.contentAppChild(contentElm);\n nameElm = contentElm.getElementsByClassName('flie-name')[0];\n nameElm.value = this.options.fileName;\n nameElm.addEventListener('input', function () {\n _this4.options.fileName = nameElm.value;\n });\n keyData = [];\n _context3.t0 = _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.keys(this.geojson.features[0].properties);\n case 17:\n if ((_context3.t1 = _context3.t0()).done) {\n _context3.next = 31;\n break;\n }\n key = _context3.t1.value;\n label = key;\n index = 0;\n case 21:\n if (!(index < this.options.head_tables.length)) {\n _context3.next = 28;\n break;\n }\n if (!(this.options.head_tables[index].key === key)) {\n _context3.next = 25;\n break;\n }\n label = this.options.head_tables[index].label;\n return _context3.abrupt(\"break\", 28);\n case 25:\n index++;\n _context3.next = 21;\n break;\n case 28:\n keyData.push({\n name: label,\n value: label,\n key: key\n });\n _context3.next = 17;\n break;\n case 31:\n keyObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_23__[\"legp\"])(contentElm.getElementsByClassName('key-box')[0], '.key');\n if (!keyObject) {\n _context3.next = 47;\n break;\n }\n keyObject.legp_search(keyData);\n keyDataLegpElm = contentElm.getElementsByClassName('key')[0].getElementsByTagName('input')[0];\n keyDataLegpElm.value = this.field;\n i = 0;\n case 37:\n if (!(i < keyData.length)) {\n _context3.next = 45;\n break;\n }\n if (!(keyData[i].key == this.field)) {\n _context3.next = 42;\n break;\n }\n keyDataLegpElm.value = keyData[i].value;\n keyObject.legp_searchActive(keyData[i].value);\n return _context3.abrupt(\"break\", 45);\n case 42:\n i++;\n _context3.next = 37;\n break;\n case 45:\n keyDataLegpElm.addEventListener('input', function () {\n for (var _i = 0; _i < keyData.length; _i++) {\n if (keyData[_i].value === keyDataLegpElm.value) {\n _this4.options.field = keyData[_i].key;\n break;\n }\n }\n });\n this._elms.field = keyDataLegpElm;\n case 47:\n this._elms.fileName = nameElm;\n return _context3.abrupt(\"return\");\n case 52:\n if ((_context3.t3 = _context3.t2()).done) {\n _context3.next = 67;\n break;\n }\n _key = _context3.t3.value;\n _label = _key;\n _index = 0;\n case 56:\n if (!(_index < this.options.head_tables.length)) {\n _context3.next = 63;\n break;\n }\n if (!(this.options.head_tables[_index].key === _key)) {\n _context3.next = 60;\n break;\n }\n _label = this.options.head_tables[_index].label;\n return _context3.abrupt(\"break\", 63);\n case 60:\n _index++;\n _context3.next = 56;\n break;\n case 63:\n o = \"\");\n option = option + o;\n _context3.next = 52;\n break;\n case 67:\n selectElm.innerHTML = option;\n selectElm.value = this.options.field;\n selectElm.addEventListener('input', function () {\n _this4.options.field = selectElm.value;\n });\n this._elms.fileName = nameElm;\n this._elms.field = selectElm;\n _context3.next = 75;\n break;\n case 74:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 75:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"editById\",\n value: function () {\n var _editById = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee5() {\n var _this5 = this;\n var status,\n nodeId,\n DialogEvent,\n cameraName,\n index,\n options,\n i,\n html,\n contentElm,\n all_elm,\n attributeSelectElm,\n linkAddBtnElm,\n openRichTextBtnElm,\n attributeContent,\n _i2,\n cameraNameElm,\n cameraSelectElm,\n _args5 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n status = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false;\n nodeId = _args5.length > 1 ? _args5[1] : undefined;\n DialogEvent = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};\n // nodeId = this.dataArray[0].attr.id\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n cameraName = '';\n if (!status) {\n _context5.next = 48;\n break;\n }\n options = {};\n i = 0;\n case 8:\n if (!(i < this.geojson.features.length)) {\n _context5.next = 16;\n break;\n }\n if (!(this.geojson.features[i].id === nodeId)) {\n _context5.next = 13;\n break;\n }\n if (this.geojson.features[i].content) {\n options = this.deepCopyObj(this.geojson.features[i].content);\n }\n index = i;\n return _context5.abrupt(\"break\", 16);\n case 13:\n i++;\n _context5.next = 8;\n break;\n case 16:\n options.id = options.id || nodeId;\n options.link || (options.link = {});\n options.link.content || (options.link.content = []);\n options.camera || (options.camera = []);\n options.richTextContent || (options.richTextContent = '');\n options.attributeType = options.attributeType || 'richText';\n _context5.next = 24;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.sdk, options, {\n title: '编辑属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack() {\n _this5._DialogObject.close();\n _this5.geojson.features[index].content = _this5.deepCopyObj(_this5._DialogObject.attribute);\n DialogEvent.confirmCallBack && DialogEvent.confirmCallBack(_this5._DialogObject.attribute);\n },\n closeCallBack: function closeCallBack() {\n // this.reset()\n DialogEvent.closeCallBack && DialogEvent.closeCallBack();\n }\n });\n case 24:\n this._DialogObject = _context5.sent;\n this._DialogObject.event = DialogEvent;\n this._DialogObject.attribute = this.deepCopyObj(options);\n html = \"\\n
    \\n
    \\n \\u5185\\u5BB9\\u7C7B\\u578B\\uFF1A\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\u7F16\\u8F91\\u5185\\u5BB9\\uFF1A\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\u540D\\u79F0
    \\n
    \\u94FE\\u63A5
    \\n
    \\u64CD\\u4F5C
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\u6682\\u65E0\\u6570\\u636E

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\u7F16\\u8F91\\u5185\\u5BB9\\uFF1A\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\u64CD\\u4F5C
    \\n
    \\u8BBE\\u5907\\u540D\\u79F0
    \\n
    \\u8BBE\\u5907\\u7C7B\\u578B
    \\n
    \\u8BBE\\u5907IP
    \\n
    \\u8BBE\\u5907\\u7AEF\\u53E3
    \\n
    \\u7528\\u6237\\u540D
    \\n
    \\u5BC6\\u7801
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\u7ED1\\u5B9A\\n
    \\n
    \\u8BBE\\u5907\\u540D\\u79F0
    \\n
    \\u8BBE\\u5907\\u7C7B\\u578B
    \\n
    \\u8BBE\\u5907IP
    \\n
    \\u8BBE\\u5907\\u7AEF\\u53E3
    \\n
    \\u7528\\u6237\\u540D
    \\n
    \\u5BC6\\u7801
    \\n
    \\n
    \\n
    \\n
    \\n

    \\u6682\\u65E0\\u6570\\u636E

    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
      \\n
      \\n \";\n contentElm = document.createElement('div');\n contentElm.innerHTML = html;\n this._DialogObject.contentAppChild(contentElm);\n all_elm = contentElm.getElementsByTagName('*');\n this._DialogObject._element.body.style.width = '600px';\n attributeSelectElm = contentElm.getElementsByClassName('attribute-select')[0];\n linkAddBtnElm = contentElm.getElementsByClassName('link_add_btn')[0];\n openRichTextBtnElm = contentElm.getElementsByClassName('open-richText-btn')[0];\n attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (_i2 = 0; _i2 < attributeContent.length; _i2++) {\n if (attributeContent[_i2].className.indexOf('attribute-content-' + this._DialogObject.attribute.attributeType) > -1) {\n attributeContent[_i2].style.display = 'block';\n } else {\n attributeContent[_i2].style.display = 'none';\n }\n }\n attributeSelectElm.addEventListener('change', function () {\n _this5._DialogObject.attribute.attributeType = attributeSelectElm.value;\n for (var _i3 = 0; _i3 < attributeContent.length; _i3++) {\n if (attributeContent[_i3].className.indexOf('attribute-content-' + _this5._DialogObject.attribute.attributeType) > -1) {\n attributeContent[_i3].style.display = 'block';\n } else {\n attributeContent[_i3].style.display = 'none';\n }\n }\n });\n linkAddBtnElm.addEventListener('click', /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (_this5._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n _this5._DialogObject.attribute.link.content.push({\n name: '链接',\n url: _this5._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n _this5._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n _this5.setAttributeLinkById(nodeId, _this5._DialogObject.attribute.link.content);\n } else {\n DialogEvent.clickAddLink && DialogEvent.clickAddLink(nodeId);\n }\n case 1:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n })));\n openRichTextBtnElm.addEventListener('click', function () {\n _Element_richText__WEBPACK_IMPORTED_MODULE_15__[\"default\"].open(nodeId, nodeId, _this5._DialogObject.attribute.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_15__[\"default\"].primaryCallBack = function (content) {\n _this5._DialogObject.attribute.richTextContent = content;\n };\n });\n cameraNameElm = contentElm.getElementsByClassName('camera-name')[0];\n cameraSelectElm = contentElm.getElementsByClassName('camera-select')[0];\n cameraNameElm.addEventListener('input', function () {\n cameraName = cameraNameElm.value;\n });\n this.cameraSelect && this.cameraSelect(cameraName);\n cameraSelectElm.addEventListener('click', function () {\n _this5.cameraSelect && _this5.cameraSelect(cameraName);\n });\n\n // let nameElm = contentElm.getElementsByClassName('flie-name')[0]\n // nameElm.value = this.options.fileName\n // nameElm.addEventListener('input', ()=>{\n // this.options.fileName = nameElm.value\n // })\n\n // let selectElm = contentElm.getElementsByClassName('input-select')[0]\n // let option = ''\n // for(let key in this.dataArray[0].attr) {\n // let o = ``\n // option = option + o\n // }\n // selectElm.innerHTML = option\n // selectElm.value = this.options.field\n // selectElm.addEventListener('input', ()=>{\n // this.options.field = selectElm.value\n // })\n\n // this._elms.fileName = nameElm\n // this._elms.field = selectElm\n _context5.next = 49;\n break;\n case 48:\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n case 49:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function editById() {\n return _editById.apply(this, arguments);\n }\n return editById;\n }()\n }, {\n key: \"editContentById\",\n value: function editContentById(nodeId, content) {\n for (var i = 0; i < this.geojson.features.length; i++) {\n if (this.geojson.features[i].id === nodeId) {\n this.geojson.features[i].content = content;\n break;\n }\n }\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.fileName = this.originalOptions.fileName;\n this.field = this.originalOptions.field;\n }\n }, {\n key: \"addAttributeLinkById\",\n value: function addAttributeLinkById(nodeId, link, i) {\n if (this._DialogObject && this._DialogObject.attribute && this._DialogObject.attribute.id == nodeId) {\n if (i || i === 0) {\n this._DialogObject._element.body.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('tr')[i + 1].getElementsByClassName('file-select')[0].value = link;\n } else {\n this._DialogObject.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.setAttributeLinkById(nodeId, this._DialogObject.attribute.link.content);\n }\n }\n }\n }, {\n key: \"setAttributeLinkById\",\n value: function setAttributeLinkById(nodeId, data) {\n var _this6 = this;\n if (this._DialogObject && this._DialogObject.attribute && this._DialogObject.attribute.id == nodeId) {\n this._DialogObject.attribute.link.content = data;\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this._DialogObject.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this._DialogObject.attribute.link.content.length; i++) {\n var tr = \"\\n
      \\n
      \" + this._DialogObject.attribute.link.content[i].name + \"
      \\n
      \" + this._DialogObject.attribute.link.content[i].url + \"
      \\n
      \\n \\n \\n
      \\n
      \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee6(index) {\n var table, tableContent, item, _loop, _i4;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee6$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return _this6.setAttributeLinkById(nodeId, _this6._DialogObject.attribute.link.content);\n case 2:\n table = _this6._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _loop(_i4) {\n var html, td, btn, n, _iterator2, _step2, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _loop$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(index === _i4)) {\n _context7.next = 33;\n break;\n }\n html = \"\\n
      \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \";\n item[_i4].innerHTML = html;\n td = item[_i4].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this6._DialogObject.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this6._DialogObject.attribute.link.content[index].url;\n btn = item[_i4].getElementsByTagName('button');\n n = 0;\n case 8:\n if (!(n < btn.length)) {\n _context7.next = 32;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context7.next = 11;\n break;\n }\n return _context7.abrupt(\"continue\", 29);\n case 11:\n _iterator2 = _createForOfIteratorHelper(btn[n].attributes);\n _context7.prev = 12;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _loop2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n m = _step2.value;\n if (!(m.name === '@click')) {\n _context6.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context6.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context6.stop();\n }\n }, _loop2);\n });\n _iterator2.s();\n case 15:\n if ((_step2 = _iterator2.n()).done) {\n _context7.next = 21;\n break;\n }\n return _context7.delegateYield(_loop2(), \"t0\", 17);\n case 17:\n if (!_context7.t0) {\n _context7.next = 19;\n break;\n }\n return _context7.abrupt(\"break\", 21);\n case 19:\n _context7.next = 15;\n break;\n case 21:\n _context7.next = 26;\n break;\n case 23:\n _context7.prev = 23;\n _context7.t1 = _context7[\"catch\"](12);\n _iterator2.e(_context7.t1);\n case 26:\n _context7.prev = 26;\n _iterator2.f();\n return _context7.finish(26);\n case 29:\n n++;\n _context7.next = 8;\n break;\n case 32:\n return _context7.abrupt(\"return\", 1);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _loop, null, [[12, 23, 26, 29]]);\n });\n _i4 = 0;\n case 7:\n if (!(_i4 < item.length)) {\n _context8.next = 14;\n break;\n }\n return _context8.delegateYield(_loop(_i4), \"t0\", 9);\n case 9:\n if (!_context8.t0) {\n _context8.next = 11;\n break;\n }\n return _context8.abrupt(\"break\", 14);\n case 11:\n _i4++;\n _context8.next = 7;\n break;\n case 14:\n case \"end\":\n return _context8.stop();\n }\n }, _callee6);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this6._DialogObject.attribute.link.content.splice(i, 1);\n _this6.setAttributeLinkById(nodeId, _this6._DialogObject.attribute.link.content);\n },\n confirmEdit: function confirmEdit(value, i) {\n _this6._DialogObject.attribute.link.content[i] = value;\n _this6.setAttributeLinkById(nodeId, _this6._DialogObject.attribute.link.content);\n },\n cancelEdit: function cancelEdit() {\n _this6.setAttributeLinkById(nodeId, _this6._DialogObject.attribute.link.content);\n },\n fileSelect: function fileSelect(value, i) {\n _this6._DialogObject.event && _this6._DialogObject.event.clickAddLink && _this6._DialogObject.event.clickAddLink(nodeId, i);\n }\n };\n var _loop3 = function _loop3(_i5) {\n var btn = item[_i5].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator3 = _createForOfIteratorHelper(btn[n].attributes),\n _step3;\n try {\n var _loop4 = function _loop4() {\n var m = _step3.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i5);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n };\n for (var _i5 = 0; _i5 < item.length; _i5++) {\n _loop3(_i5);\n }\n }\n for (var _i6 = 0; _i6 < this.dataArray.length; _i6++) {\n if (this.dataArray[_i6].attr.id === nodeId) {\n if (this.dataArray[_i6].content) {\n this.opt_DialogObject.attribute.link.content = v;\n }\n break;\n }\n }\n }\n }, {\n key: \"getAllNode\",\n value: function getAllNode() {\n return this.data;\n }\n }, {\n key: \"openAllNodeList\",\n value: function openAllNodeList() {\n Object(_openAllNodeList__WEBPACK_IMPORTED_MODULE_17__[\"openAllNodeList\"])(this);\n }\n }, {\n key: \"openNodeListById\",\n value: function openNodeListById(id) {\n Object(_openNodeListById__WEBPACK_IMPORTED_MODULE_18__[\"openNodeListById\"])(this, id);\n }\n }, {\n key: \"flyTo\",\n value: function flyTo(id) {\n var _this7 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"closeViewFollow\"])(this.sdk);\n if (id) {\n var _loop5 = function _loop5(i) {\n if (_this7.geojson.features[i].id === id) {\n if (_this7.geojson.features[i].geometry.type === 'Point') {\n _this7.getClampToHeight({\n lng: _this7.geojson.features[i].geometry.coordinates[0],\n lat: _this7.geojson.features[i].geometry.coordinates[1]\n }).then(function (height) {\n _this7.sdk.viewer.camera.flyTo({\n orientation: options.orientation,\n destination: Cesium.Cartesian3.fromDegrees(_this7.geojson.features[i].geometry.coordinates[0], _this7.geojson.features[i].geometry.coordinates[1], height + (options.height || 500))\n });\n });\n } else {\n var range = _this7.geojson.features[i].geometry.range;\n if (range) {\n var array = [];\n _this7.getClampToHeight({\n lng: range[0],\n lat: range[1]\n }).then(function (h) {\n var a = Cesium.Cartesian3.fromDegrees(range[0], range[1], h);\n array.push(a.x, a.y, a.z);\n _this7.getClampToHeight({\n lng: range[2],\n lat: range[3]\n }).then(function (h2) {\n var a = Cesium.Cartesian3.fromDegrees(range[2], range[3], h2);\n array.push(a.x, a.y, a.z);\n var BoundingSphere = Cesium.BoundingSphere.fromVertices(array);\n _this7.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n });\n });\n }\n }\n }\n };\n for (var i = 0; i < this.geojson.features.length; i++) {\n _loop5(i);\n }\n } else {\n if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {\n var orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n var lng = this.options.customView.relativePosition.lng;\n var lat = this.options.customView.relativePosition.lat;\n var alt = this.options.customView.relativePosition.alt;\n var destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n } else {\n if (this.range) {\n var array = [];\n this.getClampToHeight({\n lng: this.range[0],\n lat: this.range[1]\n }).then(function (h) {\n var a = Cesium.Cartesian3.fromDegrees(_this7.range[0], _this7.range[1], h);\n array.push(a.x, a.y, a.z);\n _this7.getClampToHeight({\n lng: _this7.range[2],\n lat: _this7.range[3]\n }).then(function (h2) {\n var a = Cesium.Cartesian3.fromDegrees(_this7.range[2], _this7.range[3], h2);\n array.push(a.x, a.y, a.z);\n var BoundingSphere = Cesium.BoundingSphere.fromVertices(array);\n _this7.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n });\n });\n }\n }\n }\n }\n }, {\n key: \"setShow\",\n value: function setShow(status, id) {\n // let enetity = this.entity.entities.getById(id)\n // if(enetity) {\n // enetity.show = status\n // }\n // else {\n\n // }\n if (id) {\n if (!this.entity) {\n return;\n }\n for (var i = 0; i < this.entity.entities.values.length; i++) {\n if (this.entity.entities.values[i].id && this.entity.entities.values[i].id.startsWith(id)) {\n this.entity.entities.values[i].show = status;\n this.entity.entities.values[i]._customShow = status;\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(this.sdk, this.options.id, this.entity.entities.values[i].id);\n // this.entity.entities.remove(this.entity.entities.values[i])\n break;\n }\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(this.sdk, this.options.id);\n } else {\n this.options.show = status;\n if (!this.entity) {\n return;\n }\n // this.entity.show = status\n for (var _i7 = 0; _i7 < this.entity.entities.values.length; _i7++) {\n this.entity.entities.values[_i7].show = status;\n this.entity.entities.values[_i7]._customShow = status;\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(this.sdk, this.options.id, this.entity.entities.values[_i7].id);\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(this.sdk, this.options.id);\n }\n }\n }, {\n key: \"setShowImg\",\n value: function setShowImg(status, index) {\n if (index || index === 0) {\n for (var i = 0; i < this.imgEntity.length; i++) {\n if (i == index) {\n this.imgEntity[i].show = status;\n break;\n }\n }\n } else {\n for (var _i8 = 0; _i8 < this.imgEntity.length; _i8++) {\n this.imgEntity[_i8].show = status;\n }\n }\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.mark(function _callee7() {\n var _this8 = this;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_10___default.a.wrap(function _callee7$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n if (this.entity) {\n this.entity.entities.values.forEach(function (enetity) {\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_25__[\"remove_entity_from_cluster\"])(_this8.sdk.viewer, enetity);\n });\n }\n _classPrivateFieldSet(_textEntity, this, []);\n // this.#textEntity = []\n // this.viewer.dataSources.remove(this.entity, true)\n this.removeImage();\n this.entity = null;\n this.geojson = {};\n this.data = {};\n _context9.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context9.next = 10;\n return Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(this.sdk, this.options.id);\n case 10:\n _context9.next = 12;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_19__[\"syncData\"])(this.sdk, this.options.id);\n case 12:\n case \"end\":\n return _context9.stop();\n }\n }, _callee7, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"removeImage\",\n value: function removeImage() {\n for (var i = 0; i < this.imgEntity.length; i++) {\n this.sdk.viewer.entities.remove(this.imgEntity[i]);\n }\n this.imgEntity = [];\n }\n }, {\n key: \"cameraSelect\",\n value: function cameraSelect(cameraName, page) {\n var _this9 = this;\n var type = {\n '1': '海康',\n '2': '大华'\n };\n var host = this.options.host;\n if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {\n var paginationElm = that._DialogObject._element.content.getElementsByClassName('pagination')[0];\n var attributeCameraElm = that._DialogObject._element.content.getElementsByClassName('attribute-content-camera')[0];\n if (!paginationElm) {\n return;\n }\n if (!attributeCameraElm) {\n return;\n }\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_13__[\"generatePagination\"])(paginationElm, 1, 10, 1);\n } else {\n return;\n }\n var url = '';\n var params = {\n cameraName: cameraName,\n page: !page || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(page) === 'object' ? 1 : page,\n pageSize: 5\n };\n var queryString = new URLSearchParams(params).toString();\n if (host.endsWith('yjearth4.0')) url = \"\".concat(host, \"/api/v1/cameraData/list?\").concat(queryString);else url = \"\".concat(host, \"/yjearth4.0/api/v1/cameraData/list?\").concat(queryString);\n // url = this.options.path\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n token: Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])(),\n Authorization: 'Bearer ' + Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!_this9._DialogObject || !_this9._DialogObject._element || !_this9._DialogObject._element.content) {\n return;\n }\n var _paginationElm = _this9._DialogObject._element.content.getElementsByClassName('pagination')[0];\n var table = _this9._DialogObject._element.content.getElementsByClassName('camera-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (data.data) {\n if (data.data.list && data.data.list.length > 0) {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_13__[\"generatePagination\"])(_paginationElm, data.data.total, 10, 1, function (pageIndex) {\n _this9.cameraSelect && _this9.cameraSelect(cameraName, pageIndex);\n });\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'inline-flex';\n var _loop6 = function _loop6(i) {\n var tr = \"\\n
      \\n
      \\n \\n \\u7ED1\\u5B9A\\n
      \\n
      \").concat(data.data.list[i].cameraName, \"
      \\n
      \").concat(type[data.data.list[i].type], \"
      \\n
      \").concat(data.data.list[i].ip, \"
      \\n
      \").concat(data.data.list[i].port, \"
      \\n
      \").concat(data.data.list[i].userName, \"
      \\n
      \").concat(data.data.list[i].passWord, \"
      \\n
      \");\n var trElm = document.createRange().createContextualFragment(tr);\n var checkbox = trElm.querySelector('input[type=\"checkbox\"]');\n checkbox.addEventListener('change', function () {\n if (checkbox.checked) {\n _this9._DialogObject.attribute.camera.push(data.data.list[i]);\n } else {\n var newArray = _this9._DialogObject.attribute.camera.filter(function (item) {\n return item.ID !== data.data.list[i].ID;\n });\n _this9._DialogObject.attribute.camera = newArray;\n }\n });\n tableContent.appendChild(trElm);\n for (var m = 0; m < _this9._DialogObject.attribute.camera.length; m++) {\n if (_this9._DialogObject.attribute.camera[m].ID === data.data.list[i].ID) {\n checkbox.checked = true;\n break;\n }\n }\n };\n for (var i = 0; i < data.data.list.length; i++) {\n _loop6(i);\n }\n }\n if (data.data && data.data.total) {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_13__[\"generatePagination\"])(_paginationElm, data.data.total, 10, 1, function (pageIndex) {\n _this9.cameraSelect && _this9.cameraSelect(cameraName, pageIndex);\n });\n }\n } else {\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_13__[\"generatePagination\"])(_paginationElm, 1, 10, 1);\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n }\n }, {\n key: \"load\",\n value: function load(callback) {\n if (_classPrivateFieldGet(_loaded, this)) {\n callback();\n } else {\n _classPrivateFieldSet(_loadEvent, this, callback);\n }\n }\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n // that.entity = new Cesium.PrimitiveCollection();\n // that.viewer.scene.primitives.add(that.entity)\n // Vector.calculationScope(that, that.data)\n // Vector.createPoints(that, that.data.points)\n // Vector.createPolylines(that, that.data.polylines)\n // Vector.createPolygons(that, that.data.polygons)\n var bbox = turf.bbox(that.geojson);\n if (bbox && bbox[0] && bbox[0] != Infinity) {\n that.range = bbox;\n }\n that.options.img && Vector.createImage(that);\n var getColor = function getColor(level) {\n // level = Number(level)\n var color = that.options.color;\n if (that.disaster_type_colors && that.disaster_type_colors.hasOwnProperty(level)) {\n color = that.disaster_type_colors[level];\n }\n return color;\n };\n if (that.options.path.endsWith('.kml') || that.options.path.endsWith('.kmz')) {\n var url = '';\n that.options.host = that.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getHost\"])();\n if (that.options.host.endsWith('yjearth4.0')) {\n url = that.options.host + '/api/v1/vector/getKml';\n } else {\n url = that.options.host + '/yjearth4.0/api/v1/vector/getKml';\n }\n url += '?path=' + that.options.path;\n // url = 'json/shp.json'\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n token: Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])(),\n Authorization: 'Bearer ' + Object(_on__WEBPACK_IMPORTED_MODULE_11__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.blob().then(function (data) {\n data.text().then(function (kml) {\n if (that.options.path.endsWith('.kmz')) {\n kml = url;\n } else {\n var parser = new DOMParser(); // new Parser\n kml = parser.parseFromString(kml, 'text/xml'); // Parse string\n var placemark = kml.getElementsByTagName('Placemark');\n for (var i = 0; i < placemark.length; i++) {\n placemark[i].id = that.geojson.features[i].id;\n }\n }\n Cesium.KmlDataSource.load(kml, {\n camera: that.viewer.scene.camera,\n canvas: that.viewer.scene.canvas,\n clampToGround: true\n }).then(function (datasource) {\n createEntity(datasource);\n });\n });\n });\n }\n });\n } else {\n var geoJsonDataSource = new Cesium.GeoJsonDataSource();\n var promise = geoJsonDataSource.load(that.geojson, {\n clampToGround: true\n });\n var Instances = [];\n return promise.then(function (datasource) {\n createEntity(datasource);\n });\n }\n function createEntity(datasource) {\n that.entity = datasource;\n // that.viewer.dataSources.add(datasource);\n datasource.entities.values.forEach(function (entity, index) {\n // if(!that.geojson.features[index]) {\n // return\n // }\n // that.data.list[i].features[index].id = that.data.list[i].features[index].properties.id = entity.id\n // that.geojson.features[index].id = that.geojson.features[index].properties.id = entity.id\n entity.show = that.options.show;\n entity.type = 'vector';\n entity.parentId = that.options.id;\n if (!entity.properties) {\n entity.properties = {};\n }\n\n // that.sdk.viewer.entities.add(entity)\n Object(_Global_cluster_cluster__WEBPACK_IMPORTED_MODULE_25__[\"addCluster\"])(that.sdk, entity);\n var color = getColor(entity.properties && entity.properties[that.options.fxdj] && entity.properties[that.options.fxdj]._value);\n if (entity.billboard) {\n // entity.billboard.show = false\n entity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n entity.point = new Cesium.PointGraphics({\n show: true,\n // position: new Cesium.Cartesian3(entity.position._value.x, entity.position._value.y, entity.position._value.z), // 点的位置\n color: Cesium.Color.fromCssColorString(color || 'rgba(0,255,184,0.5)').withAlpha(that.opacity),\n // 点的颜色\n pixelSize: 10,\n // 点的大小\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false)\n });\n }\n if (entity.polyline) {\n var material = entity.polyline.material;\n if (color) {\n material = Cesium.Color.fromCssColorString(color).withAlpha(that.opacity);\n }\n entity.polyline = new Cesium.PolylineGraphics({\n positions: entity.polyline.positions._value,\n width: entity.polyline.width && entity.polyline.width.getValue(),\n clampToGround: true,\n material: material,\n zIndex: that.sdk._entityZIndex\n });\n\n // let polyline = new Cesium.GroundPolylineGeometry({\n // positions: entity.polyline.positions._value,\n // width: 2\n // });\n // Instances.push(new Cesium.GeometryInstance({\n // geometry: polyline,\n // attributes: {\n // color: Cesium.ColorGeometryInstanceAttribute.fromColor(\n // Cesium.Color.fromCssColorString('rgba(0,255,184,0.5)')\n // )\n // }\n // }))\n // console.log(entity.polyline)\n }\n if (entity.polygon && entity.polygon.material) {\n entity.polygon.perPositionHeight = false;\n entity.polygon.extrudedHeight = undefined;\n var _material = entity.polygon.material.color._value;\n if (color) {\n _material = Cesium.Color.fromCssColorString(color);\n }\n if (that.opacity || that.opacity === 0) {\n _material = _material.withAlpha(that.opacity);\n }\n var data = entity.kml || entity.kmz;\n if (data) {\n var img = data.extendedData && data.extendedData.BaseTexturePath && data.extendedData.BaseTexturePath.value ? data.extendedData.BaseTexturePath.value : undefined;\n if (img) {\n entity.polygon.material.image = img;\n entity.polygon.material.repeat = new Cesium.Cartesian2(1, 1);\n }\n entity.polygon.material = new Cesium.ImageMaterialProperty({\n image: img,\n // 贴图的URL\n repeat: new Cesium.Cartesian2(1, 1),\n color: _material\n });\n }\n entity.polygon.zIndex = that.sdk._entityZIndex;\n if (that.options.path.endsWith('.kml') || that.options.path.endsWith('.kmz')) {\n var _material2 = color ? Cesium.Color.fromCssColorString('#000000') : entity.polygon.outlineColor.getValue();\n if (that.opacity || that.opacity === 0) {\n _material2 = _material2.withAlpha(that.opacity);\n }\n if (entity.polygon.outlineWidth) {\n entity.polyline = new Cesium.PolylineGraphics({\n positions: entity.polygon.hierarchy._value.positions,\n width: entity.polygon.outlineWidth.getValue(),\n clampToGround: true,\n material: _material2,\n zIndex: that.sdk._entityZIndex\n });\n }\n } else {\n entity.polyline = new Cesium.PolylineGraphics({\n positions: entity.polygon.hierarchy._value.positions,\n width: 1,\n clampToGround: true,\n material: Cesium.Color.fromCssColorString('#000000').withAlpha(that.opacity),\n zIndex: that.sdk._entityZIndex\n });\n\n // 通过生成canvas创建billboard,增加贴地高度的加载速度\n // if (entity.billboard && entity.position && entity.position.getValue()) {\n // const img = new Image();\n // img.src = Vector.getcanvas(entity.properties[that.options.field] && entity.properties[that.options.field]._value + '')\n // img.onload = async function () {\n // let position = entity.position.getValue()\n // let entity2 = new Cesium.Entity({\n // show: that.options.show,\n // id: entity.id + '_text',\n // parentId: that.options.id,\n // position: new Cesium.Cartesian3(position.x, position.y, position.z), // 点的位置\n // billboard: {\n // image: img,\n // pixelOffset: new Cesium.Cartesian2(0, -15),\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n // disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n // return getGroundCover() ? undefined : 100000000\n // }, false)\n // }\n // })\n // entity2.properties = entity.properties\n // that.#textEntity.push(entity2)\n // that.sdk.viewer.entities.add(entity2)\n // }\n // }\n\n if (entity.point) {\n entity.label = new Cesium.LabelGraphics({\n text: new Cesium.CallbackProperty(function () {\n return entity.properties[that.options.field] && entity.properties[that.options.field]._value + '';\n }, false),\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 10,\n font: '16px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#ffeb3b'),\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n pixelOffset: new Cesium.Cartesian2(0, -15),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false)\n });\n }\n }\n that.sdk._entityZIndex++;\n }\n if (that.options.path.endsWith('.kml') || that.options.path.endsWith('.kmz')) {\n if (entity.label) {\n entity.label.font = '16px Microsoft YaHei';\n var feature = that.geojson.features[index];\n entity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n entity.properties = feature ? feature.properties : {};\n if (!entity.properties.id && !entity.properties.Id && !entity.properties.ID) {\n entity.properties.addProperty('id', entity.id);\n }\n entity.label.text = new Cesium.CallbackProperty(function () {\n return entity.properties[that.options.field] && entity.properties[that.options.field]._value + '';\n }, false);\n }\n } else {\n if (entity.point) {\n entity.label = new Cesium.LabelGraphics({\n text: new Cesium.CallbackProperty(function () {\n return entity.properties[that.options.field] && entity.properties[that.options.field]._value + '';\n }, false),\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 10,\n font: '16px Microsoft YaHei',\n fillColor: Cesium.Color.fromCssColorString('#ffeb3b'),\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n pixelOffset: new Cesium.Cartesian2(0, -15),\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n disableDepthTestDistance: new Cesium.CallbackProperty(function () {\n return Object(_Global_global__WEBPACK_IMPORTED_MODULE_24__[\"getGroundCover\"])() ? undefined : Number.POSITIVE_INFINITY;\n }, false)\n });\n }\n }\n });\n if (!that.options.field) {\n var properties = ['id', 'Id', 'ID', 'name', 'Name', 'NAME', 'address', 'Address', 'ADDRESS', 'text', 'Text', 'TEXT', 'label', 'Label', 'LABEL'];\n var field = properties.find(function (prop) {\n return that.geojson.features[0].properties[prop] !== undefined;\n });\n if (field) {\n that.options.field = field;\n } else {\n for (var key in that.geojson.features[0].properties) {\n that.options.field = key;\n break;\n }\n }\n }\n // for (let i = 0; i < that.#textEntity.length; i++) {\n // that.entity.entities.add(that.#textEntity[i])\n // }\n _classPrivateFieldSet(_loaded, that, true);\n if (_classPrivateFieldGet(_loadEvent, that)) {\n _classPrivateFieldGet(_loadEvent, that).call(that);\n }\n // let primitive = new Cesium.GroundPolylinePrimitive({\n // geometryInstances: Instances,\n // appearance: new Cesium.PolylineColorAppearance()\n // });\n // that.viewer.scene.primitives.add(primitive);\n // that.viewer.zoomTo(datasource)\n }\n }\n }, {\n key: \"createImage\",\n value: function createImage(that) {\n //(primitive无法贴地?)\n that.removeImage();\n if (!that.range) {\n return;\n }\n for (var i = 0; i < that.options.img.length; i++) {\n var _Cesium$Rectangle;\n var entity = that.sdk.viewer.entities.add({\n show: that.options.show,\n rectangle: {\n coordinates: (_Cesium$Rectangle = Cesium.Rectangle).fromDegrees.apply(_Cesium$Rectangle, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(that.range)),\n material: new Cesium.ImageMaterialProperty({\n image: that.options.img[i],\n transparent: true\n })\n }\n });\n that.imgEntity.push(entity);\n }\n }\n }, {\n key: \"getcanvas\",\n value: function getcanvas(text) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n ctx.font = '16px YaHei';\n var texts = text.split('\\n');\n var canvasWidth = 0;\n var canvasHeight = 0;\n for (var i = 0; i < texts.length; i++) {\n var t = texts[i];\n var width = ctx.measureText(t).width;\n if (width > canvasWidth) {\n canvasWidth = width;\n }\n canvasHeight += 16;\n }\n canvasHeight = canvasHeight + 10 + (texts.length - 1) * 5;\n canvasWidth = canvasWidth + 30;\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n var linearGradient = ctx.createLinearGradient(0, 0, canvasWidth, canvasHeight);\n ctx.fillStyle = linearGradient;\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n ctx.fillStyle = '#ffffff';\n ctx.font = '16px YaHei';\n ctx.strokeStyle = '#000000';\n ctx.strokeText(texts, 15, 16 * texts.length + 10 * 10 / 16 + texts.length * 5);\n ctx.fillText(texts, 15, 16 * texts.length + 10 * 10 / 16 + texts.length - 1 * 5);\n ctx.moveTo(canvasWidth / 2, canvasHeight);\n ctx.stroke();\n ctx.closePath();\n return canvas.toDataURL();\n }\n }, {\n key: \"createTableContent\",\n value: function createTableContent(that) {\n var trsElm = '';\n for (var i = 0; i < that.currentData.length; i++) {\n var trElm = '';\n var tdElm = '';\n for (var key in that.currentData[i].attr) {\n tdElm = tdElm + \"
      \").concat(that.currentData[i].attr[key], \"
      \");\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vector);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVmVjdG9yL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1ZlY3Rvci9pbmRleC5qcz9kZWI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEhvc3QsIGdldFRva2VuIH0gZnJvbSAnLi4vLi4vLi4vb24nXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2luZGV4J1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi9FbGVtZW50L1BhZ2luYXRpb24nXHJcbmltcG9ydCB7XHJcbiAgcmVnTGVmdENsaWNrQ2FsbGJhY2ssXHJcbiAgcmVnUmlnaHRDbGlja0NhbGxiYWNrXHJcbn0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL0NsaWNrQ2FsbGJhY2snXHJcbmltcG9ydCByaWNoVGV4dCBmcm9tICcuLi8uLi9FbGVtZW50L3JpY2hUZXh0J1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJ1xyXG5pbXBvcnQgeyBvcGVuQWxsTm9kZUxpc3QgYXMgT3BlbkFsbE5vZGVMaXN0IH0gZnJvbSAnLi9vcGVuQWxsTm9kZUxpc3QnXHJcbmltcG9ydCB7IG9wZW5Ob2RlTGlzdEJ5SWQgYXMgT3Blbk5vZGVMaXN0QnlJZCB9IGZyb20gJy4vb3Blbk5vZGVMaXN0QnlJZCdcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IHN5bmNTcGxpdERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuXCI7XHJcbmltcG9ydCB7IGF0dHJpYnV0ZUVsbSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcbmltcG9ydCB7IFByb2ogfSBmcm9tICcuLi8uLi8uLi9Ub29scy9wcm9qJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCdcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBnZXRHcm91bmRDb3ZlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcbmltcG9ydCB7XHJcbiAgYWRkQ2x1c3RlcixcclxuICByZW1vdmVfZW50aXR5X2Zyb21fY2x1c3RlclxyXG59IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9jbHVzdGVyL2NsdXN0ZXInXHJcbmxldCBjb2xvcnMgPSByZXF1aXJlKCcuL2NvbG9yLmpzb24nKVxyXG5cclxuY2xhc3MgVmVjdG9yIGV4dGVuZHMgQmFzZSB7XHJcbiAgI2xvYWRFdmVudCA9IHZvaWQgMFxyXG4gICNsb2FkZWQgPSBmYWxzZVxyXG4gICN0ZXh0RW50aXR5ID0gW11cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMgPSB7fSwgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpXHJcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXJcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBhdGgpIHtcclxuICAgICAgdGhpcy5lcnJvciA9ICfmnKrmj5Dkvpvot6/lvoQhJ1xyXG4gICAgICBpZiAod2luZG93LkVMRU1FTlQpIHtcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlLmNsb3NlQWxsKClcclxuICAgICAgICB3aW5kb3cuRUxFTUVOVC5NZXNzYWdlKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuZXJyb3IsXHJcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS53YXJuKHRoaXMuZXJyb3IpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5jb2xvcnMgPSBjb2xvcnNcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkX3RhYmxlcyA9IG9wdGlvbnMuaGVhZF90YWJsZXMgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5maWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgfHwgJ+acquWRveWQjeWvueixoSdcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wYXRoLmVuZHNXaXRoKCcua21sJykpIHtcclxuICAgICAgOyAodGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCAncmdiYSgwLDI1NSwxODQsMC41KScpLFxyXG4gICAgICAgICh0aGlzLm9wdGlvbnMub3BhY2l0eSA9XHJcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgfHwgb3B0aW9ucy5vcGFjaXR5ID09PSAwID8gb3B0aW9ucy5vcGFjaXR5IDogMSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9XHJcbiAgICAgIG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG5cclxuICAgIHRoaXMudG90YWwgPSAwXHJcbiAgICB0aGlzLnBhZ2UgPSAxXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gMjBcclxuICAgIHRoaXMuY3VycmVudERhdGEgPSBbXVxyXG4gICAgdGhpcy5kYXRhID0gW11cclxuICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICB0aGlzLmltZ0VudGl0eSA9IFtdXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fVxyXG5cclxuICAgIHRoaXMuc2RrLmFkZEluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQsIHRoaXMpXHJcblxyXG4gICAgdGhpcy5kaXNhc3Rlcl90eXBlX2NvbG9ycyA9IGNvbG9yc1t0aGlzLm9wdGlvbnMuZGlzYXN0ZXJfdHlwZV1cclxuICAgICAgPyB7IC4uLmNvbG9yc1t0aGlzLm9wdGlvbnMuZGlzYXN0ZXJfdHlwZV0gfVxyXG4gICAgICA6IHZvaWQgMFxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kaXNhc3Rlcl90eXBlX2NvbG9ycykge1xyXG4gICAgICB0aGlzLmRpc2FzdGVyX3R5cGVfY29sb3JzW2tleV0gPSB0aGlzLmNteWtUb1JnYihcclxuICAgICAgICB0aGlzLmRpc2FzdGVyX3R5cGVfY29sb3JzW2tleV1cclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ3ZlY3RvcidcclxuICB9XHJcblxyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zaG93XHJcbiAgfVxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIHRoaXMuc2V0U2hvdyh2KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9wYWNpdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHlcclxuICB9XHJcblxyXG4gIHNldCBvcGFjaXR5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gdlxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5mb3JFYWNoKGVuZXRpdHkgPT4ge1xyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvaW50KSB7XHJcbiAgICAgICAgICBlbmV0aXR5LnBvaW50LmNvbG9yID0gZW5ldGl0eS5wb2ludC5jb2xvci5fdmFsdWUud2l0aEFscGhhKHYpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvbHlnb24pIHtcclxuICAgICAgICAgIGVuZXRpdHkucG9seWdvbi5tYXRlcmlhbCA9IGVuZXRpdHkucG9seWdvbi5tYXRlcmlhbC5jb2xvci5fdmFsdWUud2l0aEFscGhhKFxyXG4gICAgICAgICAgICB2XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmV0aXR5LnBvbHlsaW5lKSB7XHJcbiAgICAgICAgICBlbmV0aXR5LnBvbHlsaW5lLm1hdGVyaWFsID0gZW5ldGl0eS5wb2x5bGluZS5tYXRlcmlhbC5jb2xvci5fdmFsdWUud2l0aEFscGhhKFxyXG4gICAgICAgICAgICB2XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuc2RrIHx8ICF0aGlzLnZpZXdlciB8fCAhdGhpcy5vcHRpb25zLnBhdGgpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXQoKSB7XHJcbiAgICBsZXQgdXJsID0gJydcclxuICAgIHRoaXMub3B0aW9ucy5ob3N0ID0gdGhpcy5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvc3QuZW5kc1dpdGgoJ3lqZWFydGg0LjAnKSkge1xyXG4gICAgICB1cmwgPSB0aGlzLm9wdGlvbnMuaG9zdCArICcvYXBpL3YxL3ZlY3Rvci9sb2FkMidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9IHRoaXMub3B0aW9ucy5ob3N0ICsgJy95amVhcnRoNC4wL2FwaS92MS92ZWN0b3IvbG9hZDInXHJcbiAgICB9XHJcbiAgICB1cmwgKz0gJz9wYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0aFxyXG4gICAgLy8gdXJsID0gJ2pzb24vc2hwLmpzb24nXHJcbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgdG9rZW46IGdldFRva2VuKCksXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgZ2V0VG9rZW4oKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIGxldCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcclxuICAgICAgbGV0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcilcclxuICAgICAgbGV0IHN0cmluZyA9IHRoaXMuZGVjb21wcmVzc0d6aXAodWludDhBcnJheSlcclxuICAgICAgaWYodGhpcy5kYXRhLmxlbmd0aD09PTApXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHN0cmluZylcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCB0aGlzLmZvcm1hdERhdGEoKVxyXG4gICAgICByZXR1cm4gVmVjdG9yLmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5qC85byP5YyW5pWw5o2uXHJcbiAgYXN5bmMgZm9ybWF0RGF0YSgpIHtcclxuICAgIGxldCBmZWF0dXJlcyA9IFtdXHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcblxyXG4gICAgY29uc3QgcG9zQ29udmVydCA9IChkYXRhLCBzcmMsIGRzdCkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2ldID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIHBvc0NvbnZlcnQoZGF0YVtpXSwgc3JjLCBkc3QpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBsZXQgeCA9IE51bWJlcihkYXRhWzBdKVxyXG4gICAgICAgICAgICBsZXQgeSA9IE51bWJlcihkYXRhWzFdKVxyXG4gICAgICAgICAgICBsZXQgcmVzID0gcHJvajQoc3JjLCBkc3QsIFt4LCB5XSlcclxuICAgICAgICAgICAgZGF0YVswXSA9IE51bWJlcihyZXNbMF0udG9GaXhlZCgxMCkpXHJcbiAgICAgICAgICAgIGRhdGFbMV0gPSBOdW1iZXIocmVzWzFdLnRvRml4ZWQoMTApKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICBwb3NDb252ZXJ0KGRhdGEuY29vcmRpbmF0ZXMsIHNyYywgZHN0KVxyXG4gICAgICAgICAgICBwb3NDb252ZXJ0KGRhdGEuZ2VvbWV0cmllcywgc3JjLCBkc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjcnNfc3JjID0gJydcclxuICAgICAgbGV0IGNyc19kc3QgPSAnJ1xyXG4gICAgICBmb3IgKGxldCBba2V5LCBpdGVtXSBvZiB0aGlzLm5hbWVfbWFwKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZGVmID09PSB0aGlzLmRhdGEubGlzdFtpXS5jcnNfc3JjKSB7XHJcbiAgICAgICAgICBjcnNfc3JjID0gaXRlbS5lcHNnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLmRlZiA9PT0gdGhpcy5kYXRhLmxpc3RbaV0uY3JzX2RzdCkge1xyXG4gICAgICAgICAgY3JzX2RzdCA9IGl0ZW0uZXBzZ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHRoaXMuZGF0YS5saXN0W2ldLmZlYXR1cmVzLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmxpc3RbaV0uZmVhdHVyZXNbbV0ucHJvcGVydGllcy5pZFxyXG4gICAgICAgIGlmKCF0aGlzLmRhdGEubGlzdFtpXS5mZWF0dXJlc1ttXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEubGlzdFtpXS5mZWF0dXJlc1ttXS5wcm9wZXJ0aWVzID0ge31cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuZGF0YS5saXN0W2ldLmZlYXR1cmVzW21dLnByb3BlcnRpZXMuaWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5saXN0W2ldLmZlYXR1cmVzW21dLnByb3BlcnRpZXMuaWQgPSBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5saXN0W2ldLmZlYXR1cmVzW21dLmlkID0gdGhpcy5kYXRhLmxpc3RbaV0uZmVhdHVyZXNbbV0ucHJvcGVydGllcy5pZFxyXG4gICAgICAgIHBvc0NvbnZlcnQoXHJcbiAgICAgICAgICB0aGlzLmRhdGEubGlzdFtpXS5mZWF0dXJlc1ttXS5nZW9tZXRyeSxcclxuICAgICAgICAgIHRoaXMuZGF0YS5saXN0W2ldLmNyc19zcmMsXHJcbiAgICAgICAgICB0aGlzLmRhdGEubGlzdFtpXS5jcnNfZHN0IHx8ICcrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArbm9fZGVmcydcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy5kYXRhLmxpc3RbaV0uZmVhdHVyZXNbbV0uZ2VvbWV0cnkuZ2VvbWV0cmllcyB8fFxyXG4gICAgICAgICAgKHRoaXMuZGF0YS5saXN0W2ldLmZlYXR1cmVzW21dLmdlb21ldHJ5Lmdlb21ldHJpZXMgPSBbXSlcclxuICAgICAgICBsZXQgcmFuZ2UgPSB0dXJmLmJib3godGhpcy5kYXRhLmxpc3RbaV0uZmVhdHVyZXNbbV0uZ2VvbWV0cnkpXHJcbiAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlWzBdICYmIHJhbmdlWzBdICE9IEluZmluaXR5KSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEubGlzdFtpXS5mZWF0dXJlc1ttXS5nZW9tZXRyeS5yYW5nZSA9IHR1cmYuYmJveChcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmxpc3RbaV0uZmVhdHVyZXNbbV1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZXMucHVzaCh0aGlzLmRhdGEubGlzdFtpXS5mZWF0dXJlc1ttXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VvanNvbiA9IHtcclxuICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzXHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmdlb2pzb24pXHJcblxyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmlkID0gdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWRcclxuICAgIC8vICAgdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LnJhbmdlID0gdHVyZi5iYm94KHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsZU5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbGVOYW1lXHJcbiAgfVxyXG4gIHNldCBmaWxlTmFtZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZmlsZU5hbWUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmZpbGVOYW1lICYmICh0aGlzLl9lbG1zLmZpbGVOYW1lLnZhbHVlID0gdilcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmllbGRcclxuICB9XHJcbiAgc2V0IGZpZWxkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5maWVsZCA9IHZcclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jdGV4dEVudGl0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIC8vICAgaW1nLnNyYyA9IFZlY3Rvci5nZXRjYW52YXModGhpcy4jdGV4dEVudGl0eVtpXS5wcm9wZXJ0aWVzW3RoaXMub3B0aW9ucy5maWVsZF0gJiYgdGhpcy4jdGV4dEVudGl0eVtpXS5wcm9wZXJ0aWVzW3RoaXMub3B0aW9ucy5maWVsZF0uX3ZhbHVlICsgJycpXHJcbiAgICAvLyAgIGltZy5vbmxvYWQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy4jdGV4dEVudGl0eVtpXS5iaWxsYm9hcmQuaW1hZ2UgPSBWZWN0b3IuZ2V0Y2FudmFzKHRoaXMuI3RleHRFbnRpdHlbaV0ucHJvcGVydGllc1t0aGlzLm9wdGlvbnMuZmllbGRdICYmIHRoaXMuI3RleHRFbnRpdHlbaV0ucHJvcGVydGllc1t0aGlzLm9wdGlvbnMuZmllbGRdLl92YWx1ZSArICcnKVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgbGFiZWwgPSB2XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLmhlYWRfdGFibGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmhlYWRfdGFibGVzW2luZGV4XS5rZXkgPT09IHYpIHtcclxuICAgICAgICBsYWJlbCA9IHRoaXMub3B0aW9ucy5oZWFkX3RhYmxlc1tpbmRleF0ubGFiZWxcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmZpZWxkICYmICh0aGlzLl9lbG1zLmZpZWxkLnZhbHVlID0gbGFiZWwpXHJcbiAgfVxyXG5cclxuICBnZXQgaW1nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbWdcclxuICB9XHJcblxyXG4gIHNldCBpbWcodikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgIHYgPSBbdl1cclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5pbWcgPSB2XHJcbiAgICBWZWN0b3IuY3JlYXRlSW1hZ2UodGhpcylcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcblxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmZvckVhY2goZW5ldGl0eSA9PiB7XHJcbiAgICAgIGlmIChlbmV0aXR5LnBvaW50KSB7XHJcbiAgICAgICAgZW5ldGl0eS5wb2ludC5jb2xvciA9IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodikud2l0aEFscGhhKFxyXG4gICAgICAgICAgdGhpcy5vcGFjaXR5XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbmV0aXR5LnBvbHlnb24pIHtcclxuICAgICAgICBlbmV0aXR5LnBvbHlnb24ubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHYpLndpdGhBbHBoYShcclxuICAgICAgICAgIHRoaXMub3BhY2l0eVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5ldGl0eS5wb2x5bGluZSkge1xyXG4gICAgICAgIGVuZXRpdHkucG9seWxpbmUubWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKFxyXG4gICAgICAgICAgdlxyXG4gICAgICAgICkud2l0aEFscGhhKHRoaXMub3BhY2l0eSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldCBvblJpZ2h0Q2xpY2sodmFsKSB7XHJcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndmFsOicsIHZhbCwgJ+S4jeaYr+S4gOS4qmZ1bmN0aW9uJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnJpZ2h0Q2xpY2tDYWxsQmFjayA9PSBudWxsICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaWQpIHtcclxuICAgICAgICByZWdSaWdodENsaWNrQ2FsbGJhY2sodGhpcy5vcHRpb25zLmlkLCB0aGlzLnJpZ2h0Q2xpY2tDQiwgdGhpcylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJpZ2h0Q2xpY2tDYWxsQmFjayA9IHZhbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGVmdENsaWNrQ0IobW8sIGlkLCBwLCB0aGF0KSB7XHJcbiAgICBpZiAodGhhdC5jbGlja0NhbGxCYWNrICYmIHR5cGVvZiB0aGF0LmNsaWNrQ2FsbEJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhhdC5jbGlja0NhbGxCYWNrKG1vLCBpZCwgcClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUodGhhdCkge1xyXG4gICAgLy8gdGhhdC5lbnRpdHkgPSBuZXcgQ2VzaXVtLlByaW1pdGl2ZUNvbGxlY3Rpb24oKTtcclxuICAgIC8vIHRoYXQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHRoYXQuZW50aXR5KVxyXG4gICAgLy8gVmVjdG9yLmNhbGN1bGF0aW9uU2NvcGUodGhhdCwgdGhhdC5kYXRhKVxyXG4gICAgLy8gVmVjdG9yLmNyZWF0ZVBvaW50cyh0aGF0LCB0aGF0LmRhdGEucG9pbnRzKVxyXG4gICAgLy8gVmVjdG9yLmNyZWF0ZVBvbHlsaW5lcyh0aGF0LCB0aGF0LmRhdGEucG9seWxpbmVzKVxyXG4gICAgLy8gVmVjdG9yLmNyZWF0ZVBvbHlnb25zKHRoYXQsIHRoYXQuZGF0YS5wb2x5Z29ucylcclxuICAgIGxldCBiYm94ID0gdHVyZi5iYm94KHRoYXQuZ2VvanNvbilcclxuICAgIGlmIChiYm94ICYmIGJib3hbMF0gJiYgYmJveFswXSAhPSBJbmZpbml0eSkge1xyXG4gICAgICB0aGF0LnJhbmdlID0gYmJveFxyXG4gICAgfVxyXG4gICAgdGhhdC5vcHRpb25zLmltZyAmJiBWZWN0b3IuY3JlYXRlSW1hZ2UodGhhdClcclxuICAgIGNvbnN0IGdldENvbG9yID0gbGV2ZWwgPT4ge1xyXG4gICAgICAvLyBsZXZlbCA9IE51bWJlcihsZXZlbClcclxuICAgICAgbGV0IGNvbG9yID0gdGhhdC5vcHRpb25zLmNvbG9yXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGF0LmRpc2FzdGVyX3R5cGVfY29sb3JzICYmXHJcbiAgICAgICAgdGhhdC5kaXNhc3Rlcl90eXBlX2NvbG9ycy5oYXNPd25Qcm9wZXJ0eShsZXZlbClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29sb3IgPSB0aGF0LmRpc2FzdGVyX3R5cGVfY29sb3JzW2xldmVsXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb2xvclxyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhhdC5vcHRpb25zLnBhdGguZW5kc1dpdGgoJy5rbWwnKSB8fFxyXG4gICAgICB0aGF0Lm9wdGlvbnMucGF0aC5lbmRzV2l0aCgnLmtteicpXHJcbiAgICApIHtcclxuICAgICAgbGV0IHVybCA9ICcnXHJcbiAgICAgIHRoYXQub3B0aW9ucy5ob3N0ID0gdGhhdC5vcHRpb25zLmhvc3QgfHwgZ2V0SG9zdCgpXHJcbiAgICAgIGlmICh0aGF0Lm9wdGlvbnMuaG9zdC5lbmRzV2l0aCgneWplYXJ0aDQuMCcpKSB7XHJcbiAgICAgICAgdXJsID0gdGhhdC5vcHRpb25zLmhvc3QgKyAnL2FwaS92MS92ZWN0b3IvZ2V0S21sJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCA9IHRoYXQub3B0aW9ucy5ob3N0ICsgJy95amVhcnRoNC4wL2FwaS92MS92ZWN0b3IvZ2V0S21sJ1xyXG4gICAgICB9XHJcbiAgICAgIHVybCArPSAnP3BhdGg9JyArIHRoYXQub3B0aW9ucy5wYXRoXHJcbiAgICAgIC8vIHVybCA9ICdqc29uL3NocC5qc29uJ1xyXG4gICAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICB0b2tlbjogZ2V0VG9rZW4oKSxcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGdldFRva2VuKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEudGV4dCgpLnRoZW4oa21sID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhhdC5vcHRpb25zLnBhdGguZW5kc1dpdGgoJy5rbXonKSkge1xyXG4gICAgICAgICAgICAgICAga21sID0gdXJsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKSAvLyBuZXcgUGFyc2VyXHJcbiAgICAgICAgICAgICAgICBrbWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGttbCwgJ3RleHQveG1sJykgLy8gUGFyc2Ugc3RyaW5nXHJcbiAgICAgICAgICAgICAgICBsZXQgcGxhY2VtYXJrID0ga21sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdQbGFjZW1hcmsnKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZW1hcmsubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtYXJrW2ldLmlkID0gdGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmlkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIENlc2l1bS5LbWxEYXRhU291cmNlLmxvYWQoa21sLCB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmE6IHRoYXQudmlld2VyLnNjZW5lLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgIGNhbnZhczogdGhhdC52aWV3ZXIuc2NlbmUuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZVxyXG4gICAgICAgICAgICAgIH0pLnRoZW4oZGF0YXNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVFbnRpdHkoZGF0YXNvdXJjZSlcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBnZW9Kc29uRGF0YVNvdXJjZSA9IG5ldyBDZXNpdW0uR2VvSnNvbkRhdGFTb3VyY2UoKVxyXG4gICAgICBsZXQgcHJvbWlzZSA9IGdlb0pzb25EYXRhU291cmNlLmxvYWQodGhhdC5nZW9qc29uLCB7XHJcbiAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgSW5zdGFuY2VzID0gW11cclxuICAgICAgcmV0dXJuIHByb21pc2UudGhlbihkYXRhc291cmNlID0+IHtcclxuICAgICAgICBjcmVhdGVFbnRpdHkoZGF0YXNvdXJjZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVFbnRpdHkoZGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGF0LmVudGl0eSA9IGRhdGFzb3VyY2VcclxuICAgICAgLy8gdGhhdC52aWV3ZXIuZGF0YVNvdXJjZXMuYWRkKGRhdGFzb3VyY2UpO1xyXG4gICAgICBkYXRhc291cmNlLmVudGl0aWVzLnZhbHVlcy5mb3JFYWNoKChlbnRpdHksIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8gaWYoIXRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpbmRleF0pIHtcclxuICAgICAgICAvLyAgIHJldHVyblxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyB0aGF0LmRhdGEubGlzdFtpXS5mZWF0dXJlc1tpbmRleF0uaWQgPSB0aGF0LmRhdGEubGlzdFtpXS5mZWF0dXJlc1tpbmRleF0ucHJvcGVydGllcy5pZCA9IGVudGl0eS5pZFxyXG4gICAgICAgIC8vIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpbmRleF0uaWQgPSB0aGF0Lmdlb2pzb24uZmVhdHVyZXNbaW5kZXhdLnByb3BlcnRpZXMuaWQgPSBlbnRpdHkuaWRcclxuICAgICAgICBlbnRpdHkuc2hvdyA9IHRoYXQub3B0aW9ucy5zaG93XHJcbiAgICAgICAgZW50aXR5LnR5cGUgPSAndmVjdG9yJ1xyXG4gICAgICAgIGVudGl0eS5wYXJlbnRJZCA9IHRoYXQub3B0aW9ucy5pZFxyXG4gICAgICAgIGlmICghZW50aXR5LnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzID0ge31cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoZW50aXR5KVxyXG4gICAgICAgIGFkZENsdXN0ZXIodGhhdC5zZGssIGVudGl0eSlcclxuICAgICAgICBsZXQgY29sb3IgPSBnZXRDb2xvcihcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzICYmXHJcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllc1t0aGF0Lm9wdGlvbnMuZnhkal0gJiZcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzW3RoYXQub3B0aW9ucy5meGRqXS5fdmFsdWVcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGVudGl0eS5iaWxsYm9hcmQpIHtcclxuICAgICAgICAgIC8vIGVudGl0eS5iaWxsYm9hcmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICBlbnRpdHkuYmlsbGJvYXJkLmhlaWdodFJlZmVyZW5jZSA9XHJcbiAgICAgICAgICAgIENlc2l1bS5IZWlnaHRSZWZlcmVuY2UuQ0xBTVBfVE9fR1JPVU5EXHJcbiAgICAgICAgICBlbnRpdHkucG9pbnQgPSBuZXcgQ2VzaXVtLlBvaW50R3JhcGhpY3Moe1xyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBwb3NpdGlvbjogbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKGVudGl0eS5wb3NpdGlvbi5fdmFsdWUueCwgZW50aXR5LnBvc2l0aW9uLl92YWx1ZS55LCBlbnRpdHkucG9zaXRpb24uX3ZhbHVlLnopLCAvLyDngrnnmoTkvY3nva5cclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoXHJcbiAgICAgICAgICAgICAgY29sb3IgfHwgJ3JnYmEoMCwyNTUsMTg0LDAuNSknXHJcbiAgICAgICAgICAgICkud2l0aEFscGhhKHRoYXQub3BhY2l0eSksIC8vIOeCueeahOminOiJslxyXG4gICAgICAgICAgICBwaXhlbFNpemU6IDEwLCAvLyDngrnnmoTlpKflsI9cclxuICAgICAgICAgICAgaGVpZ2h0UmVmZXJlbmNlOiBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORCxcclxuICAgICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBnZXRHcm91bmRDb3ZlcigpID8gdW5kZWZpbmVkIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbnRpdHkucG9seWxpbmUpIHtcclxuICAgICAgICAgIGxldCBtYXRlcmlhbCA9IGVudGl0eS5wb2x5bGluZS5tYXRlcmlhbFxyXG4gICAgICAgICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyhjb2xvcikud2l0aEFscGhhKFxyXG4gICAgICAgICAgICAgIHRoYXQub3BhY2l0eVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbnRpdHkucG9seWxpbmUgPSBuZXcgQ2VzaXVtLlBvbHlsaW5lR3JhcGhpY3Moe1xyXG4gICAgICAgICAgICBwb3NpdGlvbnM6IGVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMuX3ZhbHVlLFxyXG4gICAgICAgICAgICB3aWR0aDogZW50aXR5LnBvbHlsaW5lLndpZHRoICYmIGVudGl0eS5wb2x5bGluZS53aWR0aC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBjbGFtcFRvR3JvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAvLyBsZXQgcG9seWxpbmUgPSBuZXcgQ2VzaXVtLkdyb3VuZFBvbHlsaW5lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgLy8gICBwb3NpdGlvbnM6IGVudGl0eS5wb2x5bGluZS5wb3NpdGlvbnMuX3ZhbHVlLFxyXG4gICAgICAgICAgLy8gICB3aWR0aDogMlxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBJbnN0YW5jZXMucHVzaChuZXcgQ2VzaXVtLkdlb21ldHJ5SW5zdGFuY2Uoe1xyXG4gICAgICAgICAgLy8gICBnZW9tZXRyeTogcG9seWxpbmUsXHJcbiAgICAgICAgICAvLyAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgIC8vICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yR2VvbWV0cnlJbnN0YW5jZUF0dHJpYnV0ZS5mcm9tQ29sb3IoXHJcbiAgICAgICAgICAvLyAgICAgICBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCdyZ2JhKDAsMjU1LDE4NCwwLjUpJylcclxuICAgICAgICAgIC8vICAgICApXHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH0pKVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coZW50aXR5LnBvbHlsaW5lKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVudGl0eS5wb2x5Z29uICYmIGVudGl0eS5wb2x5Z29uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICBlbnRpdHkucG9seWdvbi5wZXJQb3NpdGlvbkhlaWdodCA9IGZhbHNlXHJcbiAgICAgICAgICBlbnRpdHkucG9seWdvbi5leHRydWRlZEhlaWdodCA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgbGV0IG1hdGVyaWFsID0gZW50aXR5LnBvbHlnb24ubWF0ZXJpYWwuY29sb3IuX3ZhbHVlXHJcbiAgICAgICAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGNvbG9yKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQub3BhY2l0eSB8fCB0aGF0Lm9wYWNpdHkgPT09IDApIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBtYXRlcmlhbC53aXRoQWxwaGEodGhhdC5vcGFjaXR5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRhdGEgPSBlbnRpdHkua21sIHx8IGVudGl0eS5rbXpcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGxldCBpbWcgPVxyXG4gICAgICAgICAgICAgIGRhdGEuZXh0ZW5kZWREYXRhICYmXHJcbiAgICAgICAgICAgICAgICBkYXRhLmV4dGVuZGVkRGF0YS5CYXNlVGV4dHVyZVBhdGggJiZcclxuICAgICAgICAgICAgICAgIGRhdGEuZXh0ZW5kZWREYXRhLkJhc2VUZXh0dXJlUGF0aC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgPyBkYXRhLmV4dGVuZGVkRGF0YS5CYXNlVGV4dHVyZVBhdGgudmFsdWVcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIGlmIChpbWcpIHtcclxuICAgICAgICAgICAgICBlbnRpdHkucG9seWdvbi5tYXRlcmlhbC5pbWFnZSA9IGltZ1xyXG4gICAgICAgICAgICAgIGVudGl0eS5wb2x5Z29uLm1hdGVyaWFsLnJlcGVhdCA9IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxLCAxKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVudGl0eS5wb2x5Z29uLm1hdGVyaWFsID0gbmV3IENlc2l1bS5JbWFnZU1hdGVyaWFsUHJvcGVydHkoe1xyXG4gICAgICAgICAgICAgIGltYWdlOiBpbWcsIC8vIOi0tOWbvueahFVSTFxyXG4gICAgICAgICAgICAgIHJlcGVhdDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEsIDEpLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBtYXRlcmlhbFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZW50aXR5LnBvbHlnb24uekluZGV4ID0gdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBhdGguZW5kc1dpdGgoJy5rbWwnKSB8fFxyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMucGF0aC5lbmRzV2l0aCgnLmtteicpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IG1hdGVyaWFsID0gY29sb3JcclxuICAgICAgICAgICAgICA/IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyMwMDAwMDAnKVxyXG4gICAgICAgICAgICAgIDogZW50aXR5LnBvbHlnb24ub3V0bGluZUNvbG9yLmdldFZhbHVlKClcclxuICAgICAgICAgICAgaWYgKHRoYXQub3BhY2l0eSB8fCB0aGF0Lm9wYWNpdHkgPT09IDApIHtcclxuICAgICAgICAgICAgICBtYXRlcmlhbCA9IG1hdGVyaWFsLndpdGhBbHBoYSh0aGF0Lm9wYWNpdHkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVudGl0eS5wb2x5Z29uLm91dGxpbmVXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGVudGl0eS5wb2x5bGluZSA9IG5ldyBDZXNpdW0uUG9seWxpbmVHcmFwaGljcyh7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IGVudGl0eS5wb2x5Z29uLmhpZXJhcmNoeS5fdmFsdWUucG9zaXRpb25zLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGVudGl0eS5wb2x5Z29uLm91dGxpbmVXaWR0aC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIHpJbmRleDogdGhhdC5zZGsuX2VudGl0eVpJbmRleFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbnRpdHkucG9seWxpbmUgPSBuZXcgQ2VzaXVtLlBvbHlsaW5lR3JhcGhpY3Moe1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uczogZW50aXR5LnBvbHlnb24uaGllcmFyY2h5Ll92YWx1ZS5wb3NpdGlvbnMsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgY2xhbXBUb0dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnIzAwMDAwMCcpLndpdGhBbHBoYShcclxuICAgICAgICAgICAgICAgIHRoYXQub3BhY2l0eVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgekluZGV4OiB0aGF0LnNkay5fZW50aXR5WkluZGV4XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAvLyDpgJrov4fnlJ/miJBjYW52YXPliJvlu7piaWxsYm9hcmTvvIzlop7liqDotLTlnLDpq5jluqbnmoTliqDovb3pgJ/luqZcclxuICAgICAgICAgICAgLy8gaWYgKGVudGl0eS5iaWxsYm9hcmQgJiYgZW50aXR5LnBvc2l0aW9uICYmIGVudGl0eS5wb3NpdGlvbi5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIC8vICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgIC8vICAgaW1nLnNyYyA9IFZlY3Rvci5nZXRjYW52YXMoZW50aXR5LnByb3BlcnRpZXNbdGhhdC5vcHRpb25zLmZpZWxkXSAmJiBlbnRpdHkucHJvcGVydGllc1t0aGF0Lm9wdGlvbnMuZmllbGRdLl92YWx1ZSArICcnKVxyXG4gICAgICAgICAgICAvLyAgIGltZy5vbmxvYWQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBsZXQgcG9zaXRpb24gPSBlbnRpdHkucG9zaXRpb24uZ2V0VmFsdWUoKVxyXG4gICAgICAgICAgICAvLyAgICAgbGV0IGVudGl0eTIgPSBuZXcgQ2VzaXVtLkVudGl0eSh7XHJcbiAgICAgICAgICAgIC8vICAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93LFxyXG4gICAgICAgICAgICAvLyAgICAgICBpZDogZW50aXR5LmlkICsgJ190ZXh0JyxcclxuICAgICAgICAgICAgLy8gICAgICAgcGFyZW50SWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgLy8gICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSwgLy8g54K555qE5L2N572uXHJcbiAgICAgICAgICAgIC8vICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGltYWdlOiBpbWcsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigwLCAtMTUpLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIHZlcnRpY2FsT3JpZ2luOiBDZXNpdW0uVmVydGljYWxPcmlnaW4uQk9UVE9NLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIGhlaWdodFJlZmVyZW5jZTogQ2VzaXVtLkhlaWdodFJlZmVyZW5jZS5DTEFNUF9UT19HUk9VTkQsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiAxMDAwMDAwMDBcclxuICAgICAgICAgICAgLy8gICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgfSlcclxuICAgICAgICAgICAgLy8gICAgIGVudGl0eTIucHJvcGVydGllcyA9IGVudGl0eS5wcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIC8vICAgICB0aGF0LiN0ZXh0RW50aXR5LnB1c2goZW50aXR5MilcclxuICAgICAgICAgICAgLy8gICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoZW50aXR5MilcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRpdHkucG9pbnQpIHtcclxuICAgICAgICAgICAgICBlbnRpdHkubGFiZWwgPSBuZXcgQ2VzaXVtLkxhYmVsR3JhcGhpY3Moe1xyXG4gICAgICAgICAgICAgICAgdGV4dDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllc1t0aGF0Lm9wdGlvbnMuZmllbGRdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXNbdGhhdC5vcHRpb25zLmZpZWxkXS5fdmFsdWUgKyAnJ1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5CTEFDSyxcclxuICAgICAgICAgICAgICAgIG91dGxpbmVXaWR0aDogMTAsXHJcbiAgICAgICAgICAgICAgICBmb250OiAnMTZweCBNaWNyb3NvZnQgWWFIZWknLFxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKCcjZmZlYjNiJyksXHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoMCwgLTE1KSxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0UmVmZXJlbmNlOiBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEdyb3VuZENvdmVyKCkgPyB1bmRlZmluZWQgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQuc2RrLl9lbnRpdHlaSW5kZXgrK1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucGF0aC5lbmRzV2l0aCgnLmttbCcpIHx8XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucGF0aC5lbmRzV2l0aCgnLmtteicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5LmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGVudGl0eS5sYWJlbC5mb250ID0gJzE2cHggTWljcm9zb2Z0IFlhSGVpJ1xyXG4gICAgICAgICAgICBsZXQgZmVhdHVyZSA9IHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpbmRleF1cclxuICAgICAgICAgICAgZW50aXR5LmJpbGxib2FyZC5oZWlnaHRSZWZlcmVuY2UgPSBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORFxyXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcyA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMgOiB7fVxyXG4gICAgICAgICAgICBpZiAoIWVudGl0eS5wcm9wZXJ0aWVzLmlkICYmICFlbnRpdHkucHJvcGVydGllcy5JZCAmJiAhZW50aXR5LnByb3BlcnRpZXMuSUQpIHtcclxuICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5hZGRQcm9wZXJ0eSgnaWQnLCBlbnRpdHkuaWQpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVudGl0eS5sYWJlbC50ZXh0ID0gbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZW50aXR5LnByb3BlcnRpZXNbdGhhdC5vcHRpb25zLmZpZWxkXSAmJiBlbnRpdHkucHJvcGVydGllc1t0aGF0Lm9wdGlvbnMuZmllbGRdLl92YWx1ZSArICcnXHJcbiAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChlbnRpdHkucG9pbnQpIHtcclxuICAgICAgICAgICAgZW50aXR5LmxhYmVsID0gbmV3IENlc2l1bS5MYWJlbEdyYXBoaWNzKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXNbdGhhdC5vcHRpb25zLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllc1t0aGF0Lm9wdGlvbnMuZmllbGRdLl92YWx1ZSArICcnXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLkJMQUNLLFxyXG4gICAgICAgICAgICAgIG91dGxpbmVXaWR0aDogMTAsXHJcbiAgICAgICAgICAgICAgZm9udDogJzE2cHggTWljcm9zb2Z0IFlhSGVpJyxcclxuICAgICAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmZmViM2InKSxcclxuICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDAsIC0xNSksXHJcbiAgICAgICAgICAgICAgc3R5bGU6IENlc2l1bS5MYWJlbFN0eWxlLkZJTExfQU5EX09VVExJTkUsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0UmVmZXJlbmNlOiBDZXNpdW0uSGVpZ2h0UmVmZXJlbmNlLkNMQU1QX1RPX0dST1VORCxcclxuICAgICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0R3JvdW5kQ292ZXIoKSA/IHVuZGVmaW5lZCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gICAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCF0aGF0Lm9wdGlvbnMuZmllbGQpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWydpZCcsICdJZCcsICdJRCcsICduYW1lJywgJ05hbWUnLCAnTkFNRScsICdhZGRyZXNzJywgJ0FkZHJlc3MnLCAnQUREUkVTUycsICd0ZXh0JywgJ1RleHQnLCAnVEVYVCcsICdsYWJlbCcsICdMYWJlbCcsICdMQUJFTCddO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcGVydGllcy5maW5kKHByb3AgPT4gdGhhdC5nZW9qc29uLmZlYXR1cmVzWzBdLnByb3BlcnRpZXNbcHJvcF0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMuZmllbGQgPSBmaWVsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhhdC5nZW9qc29uLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLmZpZWxkID0ga2V5O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LiN0ZXh0RW50aXR5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgdGhhdC5lbnRpdHkuZW50aXRpZXMuYWRkKHRoYXQuI3RleHRFbnRpdHlbaV0pXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhhdC4jbG9hZGVkID0gdHJ1ZVxyXG4gICAgICBpZiAodGhhdC4jbG9hZEV2ZW50KSB7XHJcbiAgICAgICAgdGhhdC4jbG9hZEV2ZW50KClcclxuICAgICAgfVxyXG4gICAgICAvLyBsZXQgcHJpbWl0aXZlID0gbmV3IENlc2l1bS5Hcm91bmRQb2x5bGluZVByaW1pdGl2ZSh7XHJcbiAgICAgIC8vICAgZ2VvbWV0cnlJbnN0YW5jZXM6IEluc3RhbmNlcyxcclxuICAgICAgLy8gICBhcHBlYXJhbmNlOiBuZXcgQ2VzaXVtLlBvbHlsaW5lQ29sb3JBcHBlYXJhbmNlKClcclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIHRoYXQudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMuYWRkKHByaW1pdGl2ZSk7XHJcbiAgICAgIC8vIHRoYXQudmlld2VyLnpvb21UbyhkYXRhc291cmNlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUltYWdlKHRoYXQpIHtcclxuICAgIC8vKHByaW1pdGl2ZeaXoOazlei0tOWcsD8pXHJcbiAgICB0aGF0LnJlbW92ZUltYWdlKClcclxuICAgIGlmICghdGhhdC5yYW5nZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5vcHRpb25zLmltZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgICAgcmVjdGFuZ2xlOiB7XHJcbiAgICAgICAgICBjb29yZGluYXRlczogQ2VzaXVtLlJlY3RhbmdsZS5mcm9tRGVncmVlcyguLi50aGF0LnJhbmdlKSxcclxuICAgICAgICAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLkltYWdlTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGF0Lm9wdGlvbnMuaW1nW2ldLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQuaW1nRW50aXR5LnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldGNhbnZhcyh0ZXh0KSB7XHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJylcclxuXHJcbiAgICBjdHguZm9udCA9ICcxNnB4IFlhSGVpJ1xyXG4gICAgbGV0IHRleHRzID0gdGV4dC5zcGxpdCgnXFxuJylcclxuICAgIGxldCBjYW52YXNXaWR0aCA9IDBcclxuICAgIGxldCBjYW52YXNIZWlnaHQgPSAwXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHQgPSB0ZXh0c1tpXVxyXG4gICAgICBjb25zdCB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0KS53aWR0aFxyXG4gICAgICBpZiAod2lkdGggPiBjYW52YXNXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhc1dpZHRoID0gd2lkdGhcclxuICAgICAgfVxyXG4gICAgICBjYW52YXNIZWlnaHQgKz0gMTZcclxuICAgIH1cclxuICAgIGNhbnZhc0hlaWdodCA9IGNhbnZhc0hlaWdodCArIDEwICsgKHRleHRzLmxlbmd0aCAtIDEpICogNVxyXG4gICAgY2FudmFzV2lkdGggPSBjYW52YXNXaWR0aCArIDMwXHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aFxyXG4gICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodFxyXG4gICAgY29uc3QgbGluZWFyR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoXHJcbiAgICAgIDAsXHJcbiAgICAgIDAsXHJcbiAgICAgIGNhbnZhc1dpZHRoLFxyXG4gICAgICBjYW52YXNIZWlnaHRcclxuICAgIClcclxuICAgIGN0eC5maWxsU3R5bGUgPSBsaW5lYXJHcmFkaWVudFxyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpXHJcbiAgICBjdHguZmlsbFN0eWxlID0gJyNmZmZmZmYnXHJcbiAgICBjdHguZm9udCA9ICcxNnB4IFlhSGVpJ1xyXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gJyMwMDAwMDAnXHJcbiAgICBjdHguc3Ryb2tlVGV4dChcclxuICAgICAgdGV4dHMsXHJcbiAgICAgIDE1LFxyXG4gICAgICAxNiAqIHRleHRzLmxlbmd0aCArICgxMCAqIDEwKSAvIDE2ICsgdGV4dHMubGVuZ3RoICogNVxyXG4gICAgKVxyXG4gICAgY3R4LmZpbGxUZXh0KFxyXG4gICAgICB0ZXh0cyxcclxuICAgICAgMTUsXHJcbiAgICAgIDE2ICogdGV4dHMubGVuZ3RoICsgKDEwICogMTApIC8gMTYgKyB0ZXh0cy5sZW5ndGggLSAxICogNVxyXG4gICAgKVxyXG5cclxuICAgIGN0eC5tb3ZlVG8oY2FudmFzV2lkdGggLyAyLCBjYW52YXNIZWlnaHQpXHJcbiAgICBjdHguc3Ryb2tlKClcclxuICAgIGN0eC5jbG9zZVBhdGgoKVxyXG4gICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZWRpdChzdGF0dXMgPSBmYWxzZSwgRGlhbG9nRXZlbnQgPSB7fSkge1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfnvJbovpHlsZ7mgKcnLFxyXG4gICAgICAgIGxlZnQ6ICcxODBweCcsXHJcbiAgICAgICAgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5maWxlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmllbGQgPSB0aGlzLmZpZWxkXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICAgICAgRGlhbG9nRXZlbnQuY29uZmlybUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgIERpYWxvZ0V2ZW50LmNvbmZpcm1DYWxsQmFjayh7XHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgICBmaWxlTmFtZTogdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgZmllbGQ6IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpZWxkXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIERpYWxvZ0V2ZW50LmNsb3NlQ2FsbEJhY2sgJiYgRGlhbG9nRXZlbnQuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaWh+S7tuWQjeensO+8mjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBmbGllLW5hbWVcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBrZXktYm94XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lkI3np7DlrZfmrrXpgInmi6nvvJo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXlcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcblxyXG4gICAgICBsZXQgbmFtZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmxpZS1uYW1lJylbMF1cclxuICAgICAgbmFtZUVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5maWxlTmFtZVxyXG4gICAgICBuYW1lRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5maWxlTmFtZSA9IG5hbWVFbG0udmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBrZXlEYXRhID0gW11cclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IGxhYmVsID0ga2V5XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5oZWFkX3RhYmxlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGVhZF90YWJsZXNbaW5kZXhdLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gdGhpcy5vcHRpb25zLmhlYWRfdGFibGVzW2luZGV4XS5sYWJlbFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXlEYXRhLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogbGFiZWwsXHJcbiAgICAgICAgICB2YWx1ZTogbGFiZWwsXHJcbiAgICAgICAgICBrZXk6IGtleVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGtleU9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdrZXktYm94JylbMF0sXHJcbiAgICAgICAgJy5rZXknXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChrZXlPYmplY3QpIHtcclxuICAgICAgICBrZXlPYmplY3QubGVncF9zZWFyY2goa2V5RGF0YSlcclxuICAgICAgICBsZXQga2V5RGF0YUxlZ3BFbG0gPSBjb250ZW50RWxtXHJcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgna2V5JylbMF1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXVxyXG4gICAgICAgIGtleURhdGFMZWdwRWxtLnZhbHVlID0gdGhpcy5maWVsZFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGtleURhdGFbaV0ua2V5ID09IHRoaXMuZmllbGQpIHtcclxuICAgICAgICAgICAga2V5RGF0YUxlZ3BFbG0udmFsdWUgPSBrZXlEYXRhW2ldLnZhbHVlXHJcbiAgICAgICAgICAgIGtleU9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShrZXlEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXlEYXRhTGVncEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoa2V5RGF0YVtpXS52YWx1ZSA9PT0ga2V5RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmllbGQgPSBrZXlEYXRhW2ldLmtleVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuZmllbGQgPSBrZXlEYXRhTGVncEVsbVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2VsbXMuZmlsZU5hbWUgPSBuYW1lRWxtXHJcblxyXG4gICAgICByZXR1cm5cclxuXHJcbiAgICAgIGxldCBzZWxlY3RFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0LXNlbGVjdCcpWzBdXHJcbiAgICAgIGxldCBvcHRpb24gPSAnJ1xyXG4gICAgICAvLyBmb3IgKGxldCBrZXkgaW4gdGhpcy5nZW9qc29uLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMpIHtcclxuICAgICAgLy8gICBsZXQgbyA9IGA8b3B0aW9uIHZhbHVlPVwiJHtrZXl9XCI+JHtrZXl9PC9vcHRpb24+YFxyXG4gICAgICAvLyAgIG9wdGlvbiA9IG9wdGlvbiArIG9cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IGxhYmVsID0ga2V5XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5oZWFkX3RhYmxlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGVhZF90YWJsZXNbaW5kZXhdLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gdGhpcy5vcHRpb25zLmhlYWRfdGFibGVzW2luZGV4XS5sYWJlbFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbyA9IGA8b3B0aW9uIHZhbHVlPVwiJHtrZXl9XCI+JHtsYWJlbH08L29wdGlvbj5gXHJcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uICsgb1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdEVsbS5pbm5lckhUTUwgPSBvcHRpb25cclxuICAgICAgc2VsZWN0RWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLmZpZWxkXHJcbiAgICAgIHNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmllbGQgPSBzZWxlY3RFbG0udmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuX2VsbXMuZmlsZU5hbWUgPSBuYW1lRWxtXHJcbiAgICAgIHRoaXMuX2VsbXMuZmllbGQgPSBzZWxlY3RFbG1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGVkaXRCeUlkKHN0YXR1cyA9IGZhbHNlLCBub2RlSWQsIERpYWxvZ0V2ZW50ID0ge30pIHtcclxuICAgIC8vIG5vZGVJZCA9IHRoaXMuZGF0YUFycmF5WzBdLmF0dHIuaWRcclxuICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QgJiYgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGxldCBjYW1lcmFOYW1lID0gJydcclxuICAgIGxldCBpbmRleFxyXG4gICAgaWYgKHN0YXR1cykge1xyXG4gICAgICBsZXQgb3B0aW9ucyA9IHt9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9PT0gbm9kZUlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmNvbnRlbnQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbmRleCA9IGlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG9wdGlvbnMuaWQgPSBvcHRpb25zLmlkIHx8IG5vZGVJZFxyXG4gICAgICBvcHRpb25zLmxpbmsgfHwgKG9wdGlvbnMubGluayA9IHt9KVxyXG4gICAgICBvcHRpb25zLmxpbmsuY29udGVudCB8fCAob3B0aW9ucy5saW5rLmNvbnRlbnQgPSBbXSlcclxuICAgICAgb3B0aW9ucy5jYW1lcmEgfHwgKG9wdGlvbnMuY2FtZXJhID0gW10pXHJcbiAgICAgIG9wdGlvbnMucmljaFRleHRDb250ZW50IHx8IChvcHRpb25zLnJpY2hUZXh0Q29udGVudCA9ICcnKVxyXG4gICAgICBvcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSBvcHRpb25zLmF0dHJpYnV0ZVR5cGUgfHwgJ3JpY2hUZXh0J1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCBvcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICfnvJbovpHlsZ7mgKcnLFxyXG4gICAgICAgIGxlZnQ6ICcxODBweCcsXHJcbiAgICAgICAgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpbmRleF0uY29udGVudCA9IHRoaXMuZGVlcENvcHlPYmooXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIERpYWxvZ0V2ZW50LmNvbmZpcm1DYWxsQmFjayAmJlxyXG4gICAgICAgICAgICBEaWFsb2dFdmVudC5jb25maXJtQ2FsbEJhY2sodGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIC8vIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgRGlhbG9nRXZlbnQuY2xvc2VDYWxsQmFjayAmJiBEaWFsb2dFdmVudC5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5ldmVudCA9IERpYWxvZ0V2ZW50XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUgPSB0aGlzLmRlZXBDb3B5T2JqKG9wdGlvbnMpXHJcbiAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWGheWuueexu+Wei++8mjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0IGlucHV0LXNlbGVjdCBhdHRyaWJ1dGUtc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTIwcHg7XCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJpY2hUZXh0XCI+5a+M5paH5pysPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPCEtLTxvcHRpb24gdmFsdWU9XCJsaW5rXCI+6ZO+5o6lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNhbWVyYVwiPuaRhOWDj+WktDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZW5zb3JcIj7kvKDmhJ/lmag8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidnJcIj7lhajmma/lm748L29wdGlvbj4tLT5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtbGlua1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsaW5rX2FkZFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxpbmtfYWRkX2J0blwiPis8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtcmljaFRleHRcIj5cclxuICAgICAgICAgIDxzcGFuPue8lui+keWGheWuue+8mjxidXR0b24gY2xhc3M9XCJvcGVuLXJpY2hUZXh0LWJ0blwiPuaJk+W8gOaWh+acrOe8lui+keWZqDwvYnV0dG9uPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtbGlua1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7lkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumTvuaOpTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5pON5L2cPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxwPuaaguaXoOaVsOaNrjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtY2FtZXJhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57yW6L6R5YaF5a6577yaPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBjYW1lcmEtbmFtZVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3QgYnRuIGNhbWVyYS1zZWxlY3RcIj7mkJzntKI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUgY2FtZXJhLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7mk43kvZw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7orr7lpIflkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7bWluLXdpZHRoOiA4MHB4O1wiPuiuvuWkh+exu+WeizwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDEyNnB4OyBmbGV4OiAwIDEyNnB4O21pbi13aWR0aDogMTI2cHg7XCI+6K6+5aSHSVA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7bWluLXdpZHRoOiA4MHB4O1wiPuiuvuWkh+err+WPozwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+55So5oi35ZCNPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5a+G56CBPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPue7keWumjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7orr7lpIflkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7orr7lpIfnsbvlnos8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7orr7lpIdJUDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuiuvuWkh+err+WPozwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPueUqOaIt+WQjTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuWvhueggTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtZW1wdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pbWdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPuaaguaXoOaVsOaNrjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcInJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+PC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpXHJcblxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICc2MDBweCdcclxuXHJcbiAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2F0dHJpYnV0ZS1zZWxlY3QnXHJcbiAgICAgIClbMF1cclxuICAgICAgbGV0IGxpbmtBZGRCdG5FbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkX2J0bicpWzBdXHJcbiAgICAgIGxldCBvcGVuUmljaFRleHRCdG5FbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ29wZW4tcmljaFRleHQtYnRuJ1xyXG4gICAgICApWzBdXHJcblxyXG4gICAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgJ2F0dHJpYnV0ZS1jb250ZW50J1xyXG4gICAgICApXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uY2xhc3NOYW1lLmluZGV4T2YoXHJcbiAgICAgICAgICAgICdhdHRyaWJ1dGUtY29udGVudC0nICsgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgICAgICApID4gLTFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUuYXR0cmlidXRlVHlwZSA9IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICdhdHRyaWJ1dGUtY29udGVudC0nICsgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgICAgICAgICkgPiAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxpbmtBZGRCdG5FbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICAgICAgKVswXS52YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICAgICAgICApWzBdLnZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgJ2xpbmtfYWRkJ1xyXG4gICAgICAgICAgKVswXS52YWx1ZSA9ICcnXHJcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKFxyXG4gICAgICAgICAgICBub2RlSWQsXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIERpYWxvZ0V2ZW50LmNsaWNrQWRkTGluayAmJiBEaWFsb2dFdmVudC5jbGlja0FkZExpbmsobm9kZUlkKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIG9wZW5SaWNoVGV4dEJ0bkVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICByaWNoVGV4dC5vcGVuKFxyXG4gICAgICAgICAgbm9kZUlkLFxyXG4gICAgICAgICAgbm9kZUlkLFxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5yaWNoVGV4dENvbnRlbnRcclxuICAgICAgICApXHJcbiAgICAgICAgcmljaFRleHQucHJpbWFyeUNhbGxCYWNrID0gY29udGVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgY2FtZXJhTmFtZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FtZXJhLW5hbWUnKVswXVxyXG4gICAgICBsZXQgY2FtZXJhU2VsZWN0RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICdjYW1lcmEtc2VsZWN0J1xyXG4gICAgICApWzBdXHJcbiAgICAgIGNhbWVyYU5hbWVFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgY2FtZXJhTmFtZSA9IGNhbWVyYU5hbWVFbG0udmFsdWVcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoY2FtZXJhTmFtZSlcclxuICAgICAgY2FtZXJhU2VsZWN0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KGNhbWVyYU5hbWUpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBsZXQgbmFtZUVsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmxpZS1uYW1lJylbMF1cclxuICAgICAgLy8gbmFtZUVsbS52YWx1ZSA9IHRoaXMub3B0aW9ucy5maWxlTmFtZVxyXG4gICAgICAvLyBuYW1lRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCk9PntcclxuICAgICAgLy8gICB0aGlzLm9wdGlvbnMuZmlsZU5hbWUgPSBuYW1lRWxtLnZhbHVlXHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgICAvLyBsZXQgc2VsZWN0RWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dC1zZWxlY3QnKVswXVxyXG4gICAgICAvLyBsZXQgb3B0aW9uID0gJydcclxuICAgICAgLy8gZm9yKGxldCBrZXkgaW4gdGhpcy5kYXRhQXJyYXlbMF0uYXR0cikge1xyXG4gICAgICAvLyAgIGxldCBvID0gYDxvcHRpb24gdmFsdWU9XCIke2tleX1cIj4ke2tleX08L29wdGlvbj5gXHJcbiAgICAgIC8vICAgb3B0aW9uID0gb3B0aW9uICsgb1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIHNlbGVjdEVsbS5pbm5lckhUTUwgPSBvcHRpb25cclxuICAgICAgLy8gc2VsZWN0RWxtLnZhbHVlID0gdGhpcy5vcHRpb25zLmZpZWxkXHJcbiAgICAgIC8vIHNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpPT57XHJcbiAgICAgIC8vICAgdGhpcy5vcHRpb25zLmZpZWxkID0gc2VsZWN0RWxtLnZhbHVlXHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgICAvLyB0aGlzLl9lbG1zLmZpbGVOYW1lID0gbmFtZUVsbVxyXG4gICAgICAvLyB0aGlzLl9lbG1zLmZpZWxkID0gc2VsZWN0RWxtXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0Q29udGVudEJ5SWQobm9kZUlkLCBjb250ZW50KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmlkID09PSBub2RlSWQpIHtcclxuICAgICAgICB0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0uY29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maWxlTmFtZVxyXG4gICAgdGhpcy5maWVsZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpZWxkXHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVMaW5rQnlJZChub2RlSWQsIGxpbmssIGkpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ICYmXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUgJiZcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5pZCA9PSBub2RlSWRcclxuICAgICkge1xyXG4gICAgICBpZiAoaSB8fCBpID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHlcclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV1cclxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgW2kgKyAxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdLnZhbHVlID0gbGlua1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50LnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgICB1cmw6IGxpbmtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTGlua0J5SWQoXHJcbiAgICAgICAgICBub2RlSWQsXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QXR0cmlidXRlTGlua0J5SWQobm9kZUlkLCBkYXRhKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCAmJlxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlICYmXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUuaWQgPT0gbm9kZUlkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSBkYXRhXHJcbiAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50XHJcbiAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXVxyXG4gICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICAgIGlmICh0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgaSA8IHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDtcclxuICAgICAgICBpKytcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHRyID1cclxuICAgICAgICAgIGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICtcclxuICAgICAgICAgIGA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgK1xyXG4gICAgICAgICAgYDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0RlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgbGV0IGZ1biA9IHtcclxuICAgICAgICBsaW5rRWRpdDogYXN5bmMgaW5kZXggPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRBdHRyaWJ1dGVMaW5rQnlJZChcclxuICAgICAgICAgICAgbm9kZUlkLFxyXG4gICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LWxpbmsnKVsxXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGZpbGUtc2VsZWN0XCIgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJmaWxlU2VsZWN0XCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAgICdpbnB1dCdcclxuICAgICAgICAgICAgICApWzBdLnZhbHVlID0gdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICAgJ2lucHV0J1xyXG4gICAgICAgICAgICAgIClbMF0udmFsdWUgPSB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuW20udmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlua0RlbGV0ZTogaSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTGlua0J5SWQoXHJcbiAgICAgICAgICAgIG5vZGVJZCxcclxuICAgICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKFxyXG4gICAgICAgICAgICBub2RlSWQsXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUxpbmtCeUlkKFxyXG4gICAgICAgICAgICBub2RlSWQsXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5ldmVudCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuZXZlbnQuY2xpY2tBZGRMaW5rICYmXHJcbiAgICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5ldmVudC5jbGlja0FkZExpbmsobm9kZUlkLCBpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5bbS52YWx1ZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUFycmF5W2ldLmF0dHIuaWQgPT09IG5vZGVJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFBcnJheVtpXS5jb250ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm9wdF9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHZcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTm9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFcclxuICB9XHJcblxyXG4gIG9wZW5BbGxOb2RlTGlzdCgpIHtcclxuICAgIE9wZW5BbGxOb2RlTGlzdCh0aGlzKVxyXG4gIH1cclxuICBvcGVuTm9kZUxpc3RCeUlkKGlkKSB7XHJcbiAgICBPcGVuTm9kZUxpc3RCeUlkKHRoaXMsIGlkKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVRhYmxlQ29udGVudCh0aGF0KSB7XHJcbiAgICBsZXQgdHJzRWxtID0gJydcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5jdXJyZW50RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHJFbG0gPSAnPHRyIGNsYXNzPVwiZWwtdGFibGVfX3Jvd1wiPidcclxuICAgICAgbGV0IHRkRWxtID0gJydcclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoYXQuY3VycmVudERhdGFbaV0uYXR0cikge1xyXG4gICAgICAgIHRkRWxtID1cclxuICAgICAgICAgIHRkRWxtICtcclxuICAgICAgICAgIGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke3RoYXQuY3VycmVudERhdGFbaV0uYXR0cltrZXldfTwvZGl2PjwvdGQ+YFxyXG4gICAgICB9XHJcbiAgICAgIHRyRWxtID0gdHJFbG0gKyB0ZEVsbSArICc8L3RyPidcclxuICAgICAgdHJzRWxtID0gdHJzRWxtICsgdHJFbG1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnNFbG1cclxuICB9XHJcblxyXG4gIGZseVRvKGlkLCBvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkudHlwZSA9PT0gJ1BvaW50Jykge1xyXG4gICAgICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgICAgIGxuZzogdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxyXG4gICAgICAgICAgICAgIGxhdDogdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXHJcbiAgICAgICAgICAgIH0pLnRoZW4oaGVpZ2h0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuY2FtZXJhLmZseVRvKHtcclxuICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBvcHRpb25zLm9yaWVudGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeS5jb29yZGluYXRlc1sxXSxcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0ICsgKG9wdGlvbnMuaGVpZ2h0IHx8IDUwMClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LnJhbmdlXHJcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgICAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHsgbG5nOiByYW5nZVswXSwgbGF0OiByYW5nZVsxXSB9KS50aGVuKFxyXG4gICAgICAgICAgICAgICAgaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocmFuZ2VbMF0sIHJhbmdlWzFdLCBoKVxyXG4gICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7IGxuZzogcmFuZ2VbMl0sIGxhdDogcmFuZ2VbM10gfSkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICBoMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZVsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VbM10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgyXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGEueCwgYS55LCBhLnopXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgQm91bmRpbmdTcGhlcmUgPSBDZXNpdW0uQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCb3VuZGluZ1NwaGVyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTkwLjApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJlxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiZcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvblxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgb3JpZW50YXRpb24gPSB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLmhlYWRpbmcgfHwgMC4wXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyhcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjBcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICByb2xsOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgICBsZXQgbGF0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXRcclxuICAgICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5jYW1lcmEuZmx5VG8oe1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5yYW5nZSkge1xyXG4gICAgICAgICAgbGV0IGFycmF5ID0gW11cclxuICAgICAgICAgIHRoaXMuZ2V0Q2xhbXBUb0hlaWdodCh7XHJcbiAgICAgICAgICAgIGxuZzogdGhpcy5yYW5nZVswXSxcclxuICAgICAgICAgICAgbGF0OiB0aGlzLnJhbmdlWzFdXHJcbiAgICAgICAgICB9KS50aGVuKGggPT4ge1xyXG4gICAgICAgICAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKFxyXG4gICAgICAgICAgICAgIHRoaXMucmFuZ2VbMF0sXHJcbiAgICAgICAgICAgICAgdGhpcy5yYW5nZVsxXSxcclxuICAgICAgICAgICAgICBoXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgYXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgICB0aGlzLmdldENsYW1wVG9IZWlnaHQoe1xyXG4gICAgICAgICAgICAgIGxuZzogdGhpcy5yYW5nZVsyXSxcclxuICAgICAgICAgICAgICBsYXQ6IHRoaXMucmFuZ2VbM11cclxuICAgICAgICAgICAgfSkudGhlbihoMiA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGEgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VbMl0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlWzNdLFxyXG4gICAgICAgICAgICAgICAgaDJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgYXJyYXkucHVzaChhLngsIGEueSwgYS56KVxyXG4gICAgICAgICAgICAgIGxldCBCb3VuZGluZ1NwaGVyZSA9IENlc2l1bS5Cb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMoYXJyYXkpXHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUb0JvdW5kaW5nU3BoZXJlKEJvdW5kaW5nU3BoZXJlLCB7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgICAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucygtOTAuMCksXHJcbiAgICAgICAgICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTaG93KHN0YXR1cywgaWQpIHtcclxuICAgIC8vIGxldCBlbmV0aXR5ID0gdGhpcy5lbnRpdHkuZW50aXRpZXMuZ2V0QnlJZChpZClcclxuICAgIC8vIGlmKGVuZXRpdHkpIHtcclxuICAgIC8vICAgZW5ldGl0eS5zaG93ID0gc3RhdHVzXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuXHJcbiAgICAvLyB9XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLmlkICYmXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQuc3RhcnRzV2l0aChpZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gc3RhdHVzXHJcbiAgICAgICAgICB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uX2N1c3RvbVNob3cgPSBzdGF0dXNcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZCwgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLmlkKVxyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHN5bmNEYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHN0YXR1c1xyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhpcy5lbnRpdHkuc2hvdyA9IHN0YXR1c1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5LmVudGl0aWVzLnZhbHVlc1tpXS5zaG93ID0gc3RhdHVzXHJcbiAgICAgICAgdGhpcy5lbnRpdHkuZW50aXRpZXMudmFsdWVzW2ldLl9jdXN0b21TaG93ID0gc3RhdHVzXHJcbiAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkLCB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXNbaV0uaWQpXHJcbiAgICAgIH1cclxuICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNob3dJbWcoc3RhdHVzLCBpbmRleCkge1xyXG4gICAgaWYgKGluZGV4IHx8IGluZGV4ID09PSAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbWdFbnRpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaSA9PSBpbmRleCkge1xyXG4gICAgICAgICAgdGhpcy5pbWdFbnRpdHlbaV0uc2hvdyA9IHN0YXR1c1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbWdFbnRpdHkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmltZ0VudGl0eVtpXS5zaG93ID0gc3RhdHVzXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbW92ZSgpIHtcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICB0aGlzLmVudGl0eS5lbnRpdGllcy52YWx1ZXMuZm9yRWFjaChlbmV0aXR5ID0+IHtcclxuICAgICAgICByZW1vdmVfZW50aXR5X2Zyb21fY2x1c3Rlcih0aGlzLnNkay52aWV3ZXIsIGVuZXRpdHkpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLiN0ZXh0RW50aXR5ID0gW11cclxuICAgIC8vIHRoaXMuI3RleHRFbnRpdHkgPSBbXVxyXG4gICAgLy8gdGhpcy52aWV3ZXIuZGF0YVNvdXJjZXMucmVtb3ZlKHRoaXMuZW50aXR5LCB0cnVlKVxyXG4gICAgdGhpcy5yZW1vdmVJbWFnZSgpXHJcbiAgICB0aGlzLmVudGl0eSA9IG51bGxcclxuICAgIHRoaXMuZ2VvanNvbiA9IHt9XHJcbiAgICB0aGlzLmRhdGEgPSB7fVxyXG5cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcblxyXG4gICAgYXdhaXQgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgYXdhaXQgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICB9XHJcblxyXG4gIHJlbW92ZUltYWdlKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmltZ0VudGl0eS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuaW1nRW50aXR5W2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbWdFbnRpdHkgPSBbXVxyXG4gIH1cclxuXHJcbiAgY2FtZXJhU2VsZWN0KGNhbWVyYU5hbWUsIHBhZ2UpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB7XHJcbiAgICAgICcxJzogJ+a1t+W6tycsXHJcbiAgICAgICcyJzogJ+Wkp+WNjidcclxuICAgIH1cclxuICAgIGxldCBob3N0ID0gdGhpcy5vcHRpb25zLmhvc3RcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ICYmXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJlxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBwYWdpbmF0aW9uRWxtID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAncGFnaW5hdGlvbidcclxuICAgICAgKVswXVxyXG4gICAgICBsZXQgYXR0cmlidXRlQ2FtZXJhRWxtID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAnYXR0cmlidXRlLWNvbnRlbnQtY2FtZXJhJ1xyXG4gICAgICApWzBdXHJcbiAgICAgIGlmICghcGFnaW5hdGlvbkVsbSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICghYXR0cmlidXRlQ2FtZXJhRWxtKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIDEsIDEwLCAxKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdXJsID0gJydcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgY2FtZXJhTmFtZTogY2FtZXJhTmFtZSxcclxuICAgICAgcGFnZTogIXBhZ2UgfHwgdHlwZW9mIHBhZ2UgPT09ICdvYmplY3QnID8gMSA6IHBhZ2UsXHJcbiAgICAgIHBhZ2VTaXplOiA1XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpXHJcbiAgICBpZiAoaG9zdC5lbmRzV2l0aCgneWplYXJ0aDQuMCcpKVxyXG4gICAgICB1cmwgPSBgJHtob3N0fS9hcGkvdjEvY2FtZXJhRGF0YS9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgZWxzZSB1cmwgPSBgJHtob3N0fS95amVhcnRoNC4wL2FwaS92MS9jYW1lcmFEYXRhL2xpc3Q/JHtxdWVyeVN0cmluZ31gXHJcbiAgICAvLyB1cmwgPSB0aGlzLm9wdGlvbnMucGF0aFxyXG4gICAgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIHRva2VuOiBnZXRUb2tlbigpLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGdldFRva2VuKClcclxuICAgICAgfVxyXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwIHx8IGRhdGEuY29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuX0RpYWxvZ09iamVjdCB8fFxyXG4gICAgICAgICAgICAgICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHxcclxuICAgICAgICAgICAgICAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBhZ2luYXRpb25FbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICdwYWdpbmF0aW9uJ1xyXG4gICAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICAgJ2NhbWVyYS10YWJsZSdcclxuICAgICAgICAgICAgKVswXVxyXG4gICAgICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0ICYmIGRhdGEuZGF0YS5saXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihcclxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkVsbSxcclxuICAgICAgICAgICAgICAgICAgZGF0YS5kYXRhLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAxMCxcclxuICAgICAgICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QoY2FtZXJhTmFtZSwgcGFnZUluZGV4KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgICAgICAgICAnbm9uZSdcclxuICAgICAgICAgICAgICAgIHRhYmxlQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1mbGV4J1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRhdGEubGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdHIgPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiJHtkYXRhLmRhdGEubGlzdFtpXS5JRH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+57uR5a6aPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj4ke2RhdGEuZGF0YS5saXN0W2ldLmNhbWVyYU5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7IG1pbi13aWR0aDogODBweDtcIj4ke3R5cGVbZGF0YS5kYXRhLmxpc3RbaV0udHlwZV1cclxuICAgICAgICAgICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cIndpZHRoOiAxMjZweDsgZmxleDogMCAxMjZweDttaW4td2lkdGg6IDEyNnB4O1wiPiR7ZGF0YS5kYXRhLmxpc3RbaV0uaXBcclxuICAgICAgICAgICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7bWluLXdpZHRoOiA4MHB4O1wiPiR7ZGF0YS5kYXRhLmxpc3RbaV0ucG9ydFxyXG4gICAgICAgICAgICAgICAgICAgIH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+JHtkYXRhLmRhdGEubGlzdFtpXS51c2VyTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7ZGF0YS5kYXRhLmxpc3RbaV0ucGFzc1dvcmR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgIC5jcmVhdGVSYW5nZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrYm94ID0gdHJFbG0ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJylcclxuICAgICAgICAgICAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEubGlzdFtpXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3QXJyYXkgPSB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLklEICE9PSBkYXRhLmRhdGEubGlzdFtpXS5JRFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYSA9IG5ld0FycmF5XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcblxyXG4gICAgICAgICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtIDwgdGhpcy5fRGlhbG9nT2JqZWN0LmF0dHJpYnV0ZS5jYW1lcmEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIG0rK1xyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuYXR0cmlidXRlLmNhbWVyYVttXS5JRCA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGF0YS5saXN0W2ldLklEXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihcclxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkVsbSxcclxuICAgICAgICAgICAgICAgICAgZGF0YS5kYXRhLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAxMCxcclxuICAgICAgICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFTZWxlY3QoY2FtZXJhTmFtZSwgcGFnZUluZGV4KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCAxLCAxMCwgMSlcclxuICAgICAgICAgICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgICAgICAgJ2ZsZXgnXHJcbiAgICAgICAgICAgICAgdGFibGVDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWQoY2FsbGJhY2spIHtcclxuICAgIGlmICh0aGlzLiNsb2FkZWQpIHtcclxuICAgICAgY2FsbGJhY2soKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jbG9hZEV2ZW50ID0gY2FsbGJhY2tcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZsaWNrZXIoKSB7IH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBN0JBO0FBQUE7QUFBQTtBQUFBO0FBK0JBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBOUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUZBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNaQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdkJBO0FBd0JBO0FBY0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFHQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF0SUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUxBO0FBQUE7QUFBQTtBQUFBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFpQkE7QUFDQTtBQUNBO0FBcUZBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXZQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBS0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFsQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbURBO0FBN0RBO0FBQUE7QUFBQTtBQUFBO0FBOERBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQVZBO0FBQUE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWtCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFLQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFwREE7QUFBQTtBQUFBO0FBcURBO0FBQ0E7QUFLQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBbEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUVBO0FBQUE7QUFFQTtBQWlCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkRBO0FBQUE7QUFBQTtBQW9EQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUF4MkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBcWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBdVhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/Vector/index.js\n"); /***/ }), /***/ "./src/Obj/Base/Vector/openAllNodeList.js": /*!************************************************!*\ !*** ./src/Obj/Base/Vector/openAllNodeList.js ***! \************************************************/ /*! exports provided: openAllNodeList */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openAllNodeList\", function() { return openAllNodeList; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _BaseDialog_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../BaseDialog/index */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Element_Pagination__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Element/Pagination */ \"./src/Obj/Element/Pagination.js\");\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\nvar _DialogObject;\nvar openAllNodeList = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(that) {\n var total, page, pageSize, currentData, createTableContent, dataArrayFilter, trsElm, box, searchElm, talbeElm, headerElm, hcolgroupElm, theadElm, bodyElm, bcolgroupElm, i, key, tbodyElm, emptyElm, emptyNode, headerWrapper, bodyWrapper, paginationElm, search;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n total = 0;\n page = 1;\n pageSize = 20;\n currentData = [];\n if (_DialogObject && !_DialogObject.isDestroy) {\n _DialogObject.close();\n _DialogObject = null;\n }\n createTableContent = function createTableContent() {\n var trsElm = '';\n for (var _i = 0; _i < currentData.length; _i++) {\n var trElm = '';\n var tdElm = '';\n if ('fid' in currentData[_i].properties) {\n tdElm = \"
      \").concat(currentData[_i].properties.fid, \"
      \");\n }\n for (var key in currentData[_i].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n tdElm = tdElm + \"
      \").concat(currentData[_i].properties[key], \"
      \");\n }\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n };\n _context.next = 8;\n return new _BaseDialog_index__WEBPACK_IMPORTED_MODULE_4__[\"default\"](that.viewer._container, {\n title: '',\n left: '17%',\n top: '100px'\n });\n case 8:\n _DialogObject = _context.sent;\n _context.next = 11;\n return _DialogObject.init();\n case 11:\n dataArrayFilter = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(that.geojson.features);\n total = dataArrayFilter.length;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n trsElm = createTableContent();\n box = document.createElement('div');\n box.style.height = '100%';\n searchElm = '
      ';\n talbeElm = '
      ';\n headerElm = '
      ';\n hcolgroupElm = '';\n theadElm = '';\n bodyElm = '
      ';\n bcolgroupElm = '';\n i = 1; // thead\n if ('fid' in that.geojson.features[0].properties) {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n for (key in that.geojson.features[0].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n }\n //tbody\n tbodyElm = '';\n tbodyElm = tbodyElm + trsElm + '';\n //empty\n emptyElm = '
      暂无数据
      ';\n hcolgroupElm = hcolgroupElm + '';\n bcolgroupElm = bcolgroupElm + '';\n theadElm = theadElm + '';\n headerElm = headerElm + hcolgroupElm + theadElm + '
      fid
      \").concat(key, \"
      ';\n bodyElm = bodyElm + bcolgroupElm + tbodyElm + '' + emptyElm + '
      ';\n talbeElm = talbeElm + headerElm + bodyElm + '';\n box.innerHTML = searchElm + talbeElm + '
      ';\n emptyNode = box.getElementsByClassName('el-table__empty-block')[0];\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n // this.viewer._container.appendChild(box)\n _DialogObject.contentAppChild(box);\n headerWrapper = box.getElementsByClassName('el-table__header-wrapper')[0];\n bodyWrapper = box.getElementsByClassName('el-table__body-wrapper')[0];\n bodyWrapper.addEventListener('scroll', function (e) {\n headerWrapper.scrollLeft = e.target.scrollLeft;\n });\n _DialogObject._element.title.style.height = '40px';\n _DialogObject._element.body.style.width = '65%';\n _DialogObject._element.body.style.height = '80%';\n _DialogObject._element.content.style.height = 'calc(100% - 40px)';\n _DialogObject._element.content.style.overflow = 'hidden';\n _DialogObject._element.foot.style.display = 'none';\n bodyWrapper.style.height = \"calc(100% - \".concat(headerWrapper.offsetHeight, \"px)\");\n paginationElm = box.getElementsByClassName('pagination')[0];\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_5__[\"generatePagination\"])(paginationElm, total, pageSize, page, function (pageIndex) {\n page = pageIndex;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n });\n search = function search() {\n var input = box.getElementsByClassName('search-box')[0].getElementsByTagName('input')[0];\n var array = [];\n for (var _i2 = 0; _i2 < that.geojson.features.length; _i2++) {\n for (var _key in that.geojson.features[_i2].properties) {\n var str = that.geojson.features[_i2].properties[_key] + '';\n if (str.indexOf(input.value) != -1) {\n array.push(that.geojson.features[_i2]);\n break;\n }\n }\n }\n dataArrayFilter = array;\n total = dataArrayFilter.length;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n Object(_Element_Pagination__WEBPACK_IMPORTED_MODULE_5__[\"generatePagination\"])(paginationElm, total, pageSize, page, function (pageIndex) {\n page = pageIndex;\n currentData = dataArrayFilter.slice(pageSize * (page - 1), pageSize * page);\n var trsElm = createTableContent();\n box.getElementsByTagName('tbody')[0].innerHTML = trsElm;\n if (currentData.length == 0) {\n emptyNode.style.display = 'flex';\n } else {\n emptyNode.style.display = 'none';\n }\n });\n };\n box.getElementsByClassName('search')[0].addEventListener('click', function () {\n pageSize = 20;\n page = 1;\n search();\n });\n box.getElementsByClassName('export')[0].addEventListener('click', function () {\n var data = [];\n for (var _i3 = 0; _i3 < that.geojson.features.length; _i3++) {\n data.push(_objectSpread(_objectSpread({}, that.geojson.features[_i3].properties), {}, {\n 'positions': JSON.stringify(that.geojson.features[_i3].geometry.coordinates)\n }));\n }\n that.exportExcel(data);\n });\n case 55:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function openAllNodeList(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVmVjdG9yL29wZW5BbGxOb2RlTGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9WZWN0b3Ivb3BlbkFsbE5vZGVMaXN0LmpzPzYwMDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpYWxvZyBmcm9tIFwiLi4vLi4vLi4vQmFzZURpYWxvZy9pbmRleFwiO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVBhZ2luYXRpb24gfSBmcm9tIFwiLi4vLi4vRWxlbWVudC9QYWdpbmF0aW9uXCI7XHJcblxyXG5sZXQgX0RpYWxvZ09iamVjdFxyXG5cclxuY29uc3Qgb3BlbkFsbE5vZGVMaXN0ID0gYXN5bmMgKHRoYXQpID0+IHtcclxuICBsZXQgdG90YWwgPSAwXHJcbiAgbGV0IHBhZ2UgPSAxXHJcbiAgbGV0IHBhZ2VTaXplID0gMjBcclxuICBsZXQgY3VycmVudERhdGEgPSBbXVxyXG5cclxuICBpZiAoX0RpYWxvZ09iamVjdCAmJiAhX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IGNyZWF0ZVRhYmxlQ29udGVudCA9ICgpID0+IHtcclxuICAgIGxldCB0cnNFbG0gPSAnJ1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdHJFbG0gPSAnPHRyIGNsYXNzPVwiZWwtdGFibGVfX3Jvd1wiPidcclxuICAgICAgbGV0IHRkRWxtID0gJydcclxuICAgICAgaWYgKCdmaWQnIGluIGN1cnJlbnREYXRhW2ldLnByb3BlcnRpZXMpIHtcclxuICAgICAgICB0ZEVsbSA9IGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2N1cnJlbnREYXRhW2ldLnByb3BlcnRpZXMuZmlkfTwvZGl2PjwvdGQ+YFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ2lkJyAmJiBrZXkgIT09ICdJRCcgJiYga2V5ICE9PSAnZmlkJykge1xyXG4gICAgICAgICAgdGRFbG0gPSB0ZEVsbSArIGA8dGQgcm93c3Bhbj1cIjFcIiBjb2xzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2N1cnJlbnREYXRhW2ldLnByb3BlcnRpZXNba2V5XX08L2Rpdj48L3RkPmBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdHJFbG0gPSB0ckVsbSArIHRkRWxtICsgJzwvdHI+J1xyXG4gICAgICB0cnNFbG0gPSB0cnNFbG0gKyB0ckVsbVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyc0VsbVxyXG4gIH1cclxuXHJcbiAgX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgdGl0bGU6ICcnLCBsZWZ0OiAnMTclJywgdG9wOiAnMTAwcHgnXHJcbiAgfSlcclxuICBhd2FpdCBfRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gIGxldCBkYXRhQXJyYXlGaWx0ZXIgPSBbLi4udGhhdC5nZW9qc29uLmZlYXR1cmVzXVxyXG4gIHRvdGFsID0gZGF0YUFycmF5RmlsdGVyLmxlbmd0aFxyXG4gIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG5cclxuICBsZXQgdHJzRWxtID0gY3JlYXRlVGFibGVDb250ZW50KClcclxuXHJcbiAgbGV0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgYm94LnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIGxldCBzZWFyY2hFbG0gPSAnPGRpdiBjbGFzcz1cInNlYXJjaC1ib3hcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7bWFyZ2luLWJvdHRvbTogMTBweDtcIj48aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCLovpPlhaXlhbPplK7lrZfmkJzntKJcIiBzdHlsZT1cIndpZHRoOiAxODBweDsgbWFyZ2luLXJpZ2h0OiAxMHB4O1wiPjxidXR0b24gY2xhc3M9XCJidG4gc2VhcmNoXCI+5pCc57SiPC9idXR0b24+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6MjBweDtcIiBjbGFzcz1cImVsLWJ1dHRvbiBlbC1idXR0b24tLXByaW1hcnkgaXMtcGxhaW4gZXhwb3J0XCI+PHNwYW4+5a+85Ye6PC9zcGFuPjwvYnV0dG9uPjwvZGl2PidcclxuICBsZXQgdGFsYmVFbG0gPSAnPGRpdiBjbGFzcz1cImVsLXRhYmxlIGVsLXRhYmxlLS1maXQgZWwtdGFibGUtLWJvcmRlciBlbC10YWJsZS0tc2Nyb2xsYWJsZS14IGVsLXRhYmxlLS1zY3JvbGxhYmxlLXkgZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXIgZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvblwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpO1wiPidcclxuICBsZXQgaGVhZGVyRWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9faGVhZGVyLXdyYXBwZXJcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2hlYWRlclwiIHN0eWxlPVwid2lkdGg6IDEyMTNweDtcIj4nXHJcbiAgbGV0IGhjb2xncm91cEVsbSA9ICc8Y29sZ3JvdXA+J1xyXG4gIGxldCB0aGVhZEVsbSA9ICc8dGhlYWQgY2xhc3M9XCJoYXMtZ3V0dGVyXCI+PHRyPidcclxuICBsZXQgYm9keUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGVfX2JvZHktd3JhcHBlciBpcy1zY3JvbGxpbmctbm9uZVwiIHN0eWxlPVwiaGVpZ2h0OiA2MjBweDtcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2JvZHlcIiBzdHlsZT1cIndpZHRoOiAxMTg2cHg7XCI+J1xyXG4gIGxldCBiY29sZ3JvdXBFbG0gPSAnPGNvbGdyb3VwPidcclxuXHJcbiAgbGV0IGkgPSAxXHJcbiAgLy8gdGhlYWRcclxuICBpZiAoJ2ZpZCcgaW4gdGhhdC5nZW9qc29uLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMpIHtcclxuICAgIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICBiY29sZ3JvdXBFbG0gPSBiY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgdGhlYWRFbG0gPSB0aGVhZEVsbSArIGA8dGggY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiIGNsYXNzPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfSAgICAgaXMtbGVhZiBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+ZmlkPC9kaXY+PC90aD5gXHJcbiAgICBpKytcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAoa2V5ICE9PSAnaWQnICYmIGtleSAhPT0gJ0lEJyAmJiBrZXkgIT09ICdmaWQnKSB7XHJcbiAgICAgIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICAgIGJjb2xncm91cEVsbSA9IGJjb2xncm91cEVsbSArIGA8Y29sIG5hbWU9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9XCIgd2lkdGg9XCIxNTBcIj5gXHJcbiAgICAgIHRoZWFkRWxtID0gdGhlYWRFbG0gKyBgPHRoIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICAgIGlzLWxlYWYgZWwtdGFibGVfX2NlbGxcIj48ZGl2IGNsYXNzPVwiY2VsbFwiPiR7a2V5fTwvZGl2PjwvdGg+YFxyXG4gICAgICBpKytcclxuICAgIH1cclxuICB9XHJcbiAgLy90Ym9keVxyXG4gIGxldCB0Ym9keUVsbSA9ICc8dGJvZHk+J1xyXG4gIHRib2R5RWxtID0gdGJvZHlFbG0gKyB0cnNFbG0gKyAnPC90Ym9keT4nXHJcbiAgLy9lbXB0eVxyXG4gIGxldCBlbXB0eUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGVfX2VtcHR5LWJsb2NrXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+PHNwYW4gY2xhc3M9XCJlbC10YWJsZV9fZW1wdHktdGV4dFwiPuaaguaXoOaVsOaNrjwvc3Bhbj48L2Rpdj4nXHJcblxyXG4gIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArICc8Y29sIG5hbWU9XCJndXR0ZXJcIiB3aWR0aD1cIjE3XCI+PC9jb2xncm91cD4nXHJcbiAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgJzwvY29sZ3JvdXA+J1xyXG4gIHRoZWFkRWxtID0gdGhlYWRFbG0gKyAnPC90cj48L3RoZWFkPidcclxuICBoZWFkZXJFbG0gPSBoZWFkZXJFbG0gKyBoY29sZ3JvdXBFbG0gKyB0aGVhZEVsbSArICc8L3RhYmxlPjwvZGl2PidcclxuICBib2R5RWxtID0gYm9keUVsbSArIGJjb2xncm91cEVsbSArIHRib2R5RWxtICsgJzwvdGFibGU+JyArIGVtcHR5RWxtICsgJzwvZGl2PidcclxuICB0YWxiZUVsbSA9IHRhbGJlRWxtICsgaGVhZGVyRWxtICsgYm9keUVsbSArICc8L2Rpdj4nXHJcblxyXG5cclxuICBib3guaW5uZXJIVE1MID0gc2VhcmNoRWxtICsgdGFsYmVFbG0gKyAnPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIj48L2Rpdj4nXHJcbiAgbGV0IGVtcHR5Tm9kZSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlbC10YWJsZV9fZW1wdHktYmxvY2snKVswXVxyXG4gIGlmIChjdXJyZW50RGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBlbXB0eU5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gIH1cclxuICAvLyB0aGlzLnZpZXdlci5fY29udGFpbmVyLmFwcGVuZENoaWxkKGJveClcclxuICBfRGlhbG9nT2JqZWN0LmNvbnRlbnRBcHBDaGlsZChib3gpXHJcbiAgbGV0IGhlYWRlcldyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2hlYWRlci13cmFwcGVyJylbMF1cclxuICBsZXQgYm9keVdyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2JvZHktd3JhcHBlcicpWzBdXHJcbiAgYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGhlYWRlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IGUudGFyZ2V0LnNjcm9sbExlZnRcclxuICB9KTtcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LnRpdGxlLnN0eWxlLmhlaWdodCA9ICc0MHB4J1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICc2NSUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICc4MCUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnN0eWxlLmhlaWdodCA9ICdjYWxjKDEwMCUgLSA0MHB4KSdcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuZm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcblxyXG4gIGJvZHlXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGBjYWxjKDEwMCUgLSAke2hlYWRlcldyYXBwZXIub2Zmc2V0SGVpZ2h0fXB4KWBcclxuICBsZXQgcGFnaW5hdGlvbkVsbSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwYWdpbmF0aW9uJylbMF1cclxuICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgdG90YWwsIHBhZ2VTaXplLCBwYWdlLCAocGFnZUluZGV4KSA9PiB7XHJcbiAgICBwYWdlID0gcGFnZUluZGV4XHJcbiAgICBjdXJyZW50RGF0YSA9IGRhdGFBcnJheUZpbHRlci5zbGljZShwYWdlU2l6ZSAqIChwYWdlIC0gMSksIHBhZ2VTaXplICogcGFnZSlcclxuICAgIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQoKVxyXG4gICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgaWYgKGN1cnJlbnREYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICB9KTtcclxuICBjb25zdCBzZWFyY2ggPSAoKSA9PiB7XHJcbiAgICBsZXQgaW5wdXQgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2VhcmNoLWJveCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0Lmdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IHN0ciA9IHRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzW2tleV0gKyAnJ1xyXG4gICAgICAgIGlmIChzdHIuaW5kZXhPZihpbnB1dC52YWx1ZSkgIT0gLTEpIHtcclxuICAgICAgICAgIGFycmF5LnB1c2godGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRhdGFBcnJheUZpbHRlciA9IGFycmF5XHJcbiAgICB0b3RhbCA9IGRhdGFBcnJheUZpbHRlci5sZW5ndGhcclxuICAgIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG4gICAgaWYgKGN1cnJlbnREYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZW1wdHlOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQoKVxyXG4gICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIHRvdGFsLCBwYWdlU2l6ZSwgcGFnZSwgKHBhZ2VJbmRleCkgPT4ge1xyXG4gICAgICBwYWdlID0gcGFnZUluZGV4XHJcbiAgICAgIGN1cnJlbnREYXRhID0gZGF0YUFycmF5RmlsdGVyLnNsaWNlKHBhZ2VTaXplICogKHBhZ2UgLSAxKSwgcGFnZVNpemUgKiBwYWdlKVxyXG4gICAgICBsZXQgdHJzRWxtID0gY3JlYXRlVGFibGVDb250ZW50KClcclxuICAgICAgYm94LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdLmlubmVySFRNTCA9IHRyc0VsbVxyXG4gICAgICBpZiAoY3VycmVudERhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICBlbXB0eU5vZGUuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVtcHR5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2VhcmNoJylbMF0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBwYWdlU2l6ZSA9IDIwXHJcbiAgICBwYWdlID0gMVxyXG4gICAgc2VhcmNoKClcclxuICB9KVxyXG4gIGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHBvcnQnKVswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgIGxldCBkYXRhID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGRhdGEucHVzaCh7IC4uLnRoYXQuZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLCAncG9zaXRpb25zJzogSlNPTi5zdHJpbmdpZnkodGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LmNvb3JkaW5hdGVzKSB9KVxyXG4gICAgfVxyXG4gICAgdGhhdC5leHBvcnRFeGNlbChkYXRhKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7IG9wZW5BbGxOb2RlTGlzdCB9Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFGQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBcEtBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/Vector/openAllNodeList.js\n"); /***/ }), /***/ "./src/Obj/Base/Vector/openNodeListById.js": /*!*************************************************!*\ !*** ./src/Obj/Base/Vector/openNodeListById.js ***! \*************************************************/ /*! exports provided: openNodeListById */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openNodeListById\", function() { return openNodeListById; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _BaseDialog_index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../BaseDialog/index */ \"./src/BaseDialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n\n\n\n\nvar _DialogObject;\nvar openNodeListById = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(that, id) {\n var currentData, createTableContent, flag, _i2, trsElm, box, talbeElm, headerElm, hcolgroupElm, theadElm, bodyElm, bcolgroupElm, i, key, tbodyElm, tabsElm, tabPaneElm, _i3, url, _tabPaneElm, tabsNode, tabContentPane, _i4, headerWrapper, bodyWrapper;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (_DialogObject && !_DialogObject.isDestroy) {\n _DialogObject.close();\n _DialogObject = null;\n }\n currentData = [];\n createTableContent = function createTableContent() {\n var trsElm = '';\n for (var _i = 0; _i < currentData.length; _i++) {\n var trElm = '';\n var tdElm = '';\n if ('fid' in currentData[_i].properties) {\n tdElm = \"
      \").concat(currentData[_i].properties.fid, \"
      \");\n }\n for (var key in currentData[_i].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n tdElm = tdElm + \"
      \").concat(currentData[_i].properties[key], \"
      \");\n }\n }\n trElm = trElm + tdElm + '';\n trsElm = trsElm + trElm;\n }\n return trsElm;\n };\n flag = false;\n _i2 = 0;\n case 5:\n if (!(_i2 < that.geojson.features.length)) {\n _context.next = 13;\n break;\n }\n if (!(that.geojson.features[_i2].properties.id && that.geojson.features[_i2].properties.id == id)) {\n _context.next = 10;\n break;\n }\n currentData = [that.geojson.features[_i2]];\n flag = true;\n return _context.abrupt(\"break\", 13);\n case 10:\n _i2++;\n _context.next = 5;\n break;\n case 13:\n if (flag) {\n _context.next = 16;\n break;\n }\n window.ELEMENT && window.ELEMENT.Message({\n message: '数据不存在!',\n type: 'warning',\n duration: 1500\n });\n return _context.abrupt(\"return\");\n case 16:\n _context.next = 18;\n return new _BaseDialog_index__WEBPACK_IMPORTED_MODULE_2__[\"default\"](that.viewer._container, {\n title: id,\n left: '17%',\n top: '100px'\n });\n case 18:\n _DialogObject = _context.sent;\n _context.next = 21;\n return _DialogObject.init();\n case 21:\n trsElm = createTableContent(that);\n box = document.createElement('div');\n box.style.height = '100%';\n talbeElm = '
      ';\n headerElm = '
      ';\n hcolgroupElm = '';\n theadElm = '';\n bodyElm = '
      ';\n bcolgroupElm = '';\n i = 1; // thead\n if ('fid' in that.geojson.features[0].properties) {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n for (key in that.geojson.features[0].properties) {\n if (key !== 'id' && key !== 'ID' && key !== 'fid') {\n hcolgroupElm = hcolgroupElm + \"\");\n bcolgroupElm = bcolgroupElm + \"\");\n theadElm = theadElm + \"\");\n i++;\n }\n }\n //tbody\n tbodyElm = '';\n tbodyElm = tbodyElm + trsElm + '';\n hcolgroupElm = hcolgroupElm + '';\n bcolgroupElm = bcolgroupElm + '';\n theadElm = theadElm + '';\n headerElm = headerElm + hcolgroupElm + theadElm + '
      fid
      \").concat(key, \"
      ';\n bodyElm = bodyElm + bcolgroupElm + tbodyElm + '
      ';\n talbeElm = talbeElm + headerElm + bodyElm + '';\n tabsElm = \"\\n \\n \\n \".concat(talbeElm + '
      ', \"\\n
      \\n \");\n if (currentData[0].content && currentData[0].content.richTextContent) {\n tabPaneElm = \"\\n \\n \".concat(currentData[0].content.richTextContent, \"\\n \\n \");\n tabsElm = tabsElm + tabPaneElm;\n }\n if (currentData[0].content && currentData[0].content.link && currentData[0].content.link.content && currentData[0].content.link.content.length > 0) {\n for (_i3 = 0; _i3 < currentData[0].content.link.content.length; _i3++) {\n url = currentData[0].content.link.content[_i3].url;\n _tabPaneElm = \"\\n \\n \\n \\n \");\n tabsElm = tabsElm + _tabPaneElm;\n }\n }\n tabsElm = tabsElm + '
      ';\n box.innerHTML = tabsElm;\n // that.viewer._container.appendChild(box)\n _DialogObject.contentAppChild(box);\n new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('shp-list-id-tabs');\n tabsNode = box.getElementsByClassName('DIV-cy-tabs')[0];\n tabsNode.style.height = '100%';\n tabsNode.style.display = 'flex';\n tabsNode.style.flexDirection = 'column';\n tabsNode.getElementsByClassName('DIV-cy-tab-content')[0].style.flex = '1';\n tabContentPane = tabsNode.getElementsByClassName('DIV-cy-tab-content-pane');\n for (_i4 = 0; _i4 < tabContentPane.length; _i4++) {\n tabContentPane[_i4].style.height = '100%';\n }\n headerWrapper = box.getElementsByClassName('el-table__header-wrapper')[0];\n bodyWrapper = box.getElementsByClassName('el-table__body-wrapper')[0];\n bodyWrapper.addEventListener('scroll', function (e) {\n headerWrapper.scrollLeft = e.target.scrollLeft;\n });\n _DialogObject._element.title.style.height = '40px';\n _DialogObject._element.body.style.width = '65%';\n _DialogObject._element.body.style.height = '80%';\n _DialogObject._element.content.style.height = 'calc(100% - 40px)';\n _DialogObject._element.foot.style.display = 'none';\n bodyWrapper.style.height = \"calc(100% - \".concat(headerWrapper.offsetHeight, \"px)\");\n case 64:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function openNodeListById(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvVmVjdG9yL29wZW5Ob2RlTGlzdEJ5SWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvVmVjdG9yL29wZW5Ob2RlTGlzdEJ5SWQuanM/MzUzMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlhbG9nIGZyb20gXCIuLi8uLi8uLi9CYXNlRGlhbG9nL2luZGV4XCI7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5cclxubGV0IF9EaWFsb2dPYmplY3RcclxuXHJcbmNvbnN0IG9wZW5Ob2RlTGlzdEJ5SWQgPSBhc3luYyAodGhhdCwgaWQpID0+IHtcclxuICBpZiAoX0RpYWxvZ09iamVjdCAmJiAhX0RpYWxvZ09iamVjdC5pc0Rlc3Ryb3kpIHtcclxuICAgIF9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICB9XHJcbiAgbGV0IGN1cnJlbnREYXRhID0gW11cclxuICBjb25zdCBjcmVhdGVUYWJsZUNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICBsZXQgdHJzRWxtID0gJydcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyRWxtID0gJzx0ciBjbGFzcz1cImVsLXRhYmxlX19yb3dcIj4nXHJcbiAgICAgIGxldCB0ZEVsbSA9ICcnXHJcbiAgICAgIGlmICgnZmlkJyBpbiBjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdGRFbG0gPSBgPHRkIHJvd3NwYW49XCIxXCIgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+JHtjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzLmZpZH08L2Rpdj48L3RkPmBcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gY3VycmVudERhdGFbaV0ucHJvcGVydGllcykge1xyXG4gICAgICAgIGlmIChrZXkgIT09ICdpZCcgJiYga2V5ICE9PSAnSUQnICYmIGtleSAhPT0gJ2ZpZCcpIHtcclxuICAgICAgICAgIHRkRWxtID0gdGRFbG0gKyBgPHRkIHJvd3NwYW49XCIxXCIgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICBlbC10YWJsZV9fY2VsbFwiPjxkaXYgY2xhc3M9XCJjZWxsXCI+JHtjdXJyZW50RGF0YVtpXS5wcm9wZXJ0aWVzW2tleV19PC9kaXY+PC90ZD5gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRyRWxtID0gdHJFbG0gKyB0ZEVsbSArICc8L3RyPidcclxuICAgICAgdHJzRWxtID0gdHJzRWxtICsgdHJFbG1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnNFbG1cclxuICB9XHJcbiAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5nZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAodGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWQgJiYgdGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMuaWQgPT0gaWQpIHtcclxuICAgICAgY3VycmVudERhdGEgPSBbdGhhdC5nZW9qc29uLmZlYXR1cmVzW2ldXVxyXG4gICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoIWZsYWcpIHtcclxuICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICBtZXNzYWdlOiAn5pWw5o2u5LiN5a2Y5Zyo77yBJyxcclxuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhhdC52aWV3ZXIuX2NvbnRhaW5lciwge1xyXG4gICAgdGl0bGU6IGlkLCBsZWZ0OiAnMTclJywgdG9wOiAnMTAwcHgnXHJcbiAgfSlcclxuICBhd2FpdCBfRGlhbG9nT2JqZWN0LmluaXQoKVxyXG4gIGxldCB0cnNFbG0gPSBjcmVhdGVUYWJsZUNvbnRlbnQodGhhdClcclxuXHJcbiAgbGV0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgYm94LnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIGxldCB0YWxiZUVsbSA9ICc8ZGl2IGNsYXNzPVwiZWwtdGFibGUgZWwtdGFibGUtLWZpdCBlbC10YWJsZS0tYm9yZGVyIGVsLXRhYmxlLS1zY3JvbGxhYmxlLXggZWwtdGFibGUtLXNjcm9sbGFibGUteSBlbC10YWJsZS0tZW5hYmxlLXJvdy1ob3ZlciBlbC10YWJsZS0tZW5hYmxlLXJvdy10cmFuc2l0aW9uXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPidcclxuICBsZXQgaGVhZGVyRWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9faGVhZGVyLXdyYXBwZXJcIj48dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIGNsYXNzPVwiZWwtdGFibGVfX2hlYWRlclwiIHN0eWxlPVwid2lkdGg6IDkzMHB4O1wiPidcclxuICBsZXQgaGNvbGdyb3VwRWxtID0gJzxjb2xncm91cD4nXHJcbiAgbGV0IHRoZWFkRWxtID0gJzx0aGVhZCBjbGFzcz1cImhhcy1ndXR0ZXJcIj48dHI+J1xyXG4gIGxldCBib2R5RWxtID0gJzxkaXYgY2xhc3M9XCJlbC10YWJsZV9fYm9keS13cmFwcGVyIGlzLXNjcm9sbGluZy1ub25lXCIgc3R5bGU9XCJoZWlnaHQ6IDYyMHB4O1wiPjx0YWJsZSBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBib3JkZXI9XCIwXCIgY2xhc3M9XCJlbC10YWJsZV9fYm9keVwiIHN0eWxlPVwid2lkdGg6IDkxM3B4O1wiPidcclxuICBsZXQgYmNvbGdyb3VwRWxtID0gJzxjb2xncm91cD4nXHJcblxyXG4gIGxldCBpID0gMVxyXG4gIC8vIHRoZWFkXHJcbiAgaWYgKCdmaWQnIGluIHRoYXQuZ2VvanNvbi5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBoY29sZ3JvdXBFbG0gPSBoY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgYDxjb2wgbmFtZT1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX1cIiB3aWR0aD1cIjE1MFwiPmBcclxuICAgIHRoZWFkRWxtID0gdGhlYWRFbG0gKyBgPHRoIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIiBjbGFzcz1cImVsLXRhYmxlXzFfY29sdW1uXyR7aX0gICAgIGlzLWxlYWYgZWwtdGFibGVfX2NlbGxcIj48ZGl2IGNsYXNzPVwiY2VsbFwiPmZpZDwvZGl2PjwvdGg+YFxyXG4gICAgaSsrXHJcbiAgfVxyXG4gIGZvciAobGV0IGtleSBpbiB0aGF0Lmdlb2pzb24uZmVhdHVyZXNbMF0ucHJvcGVydGllcykge1xyXG4gICAgaWYgKGtleSAhPT0gJ2lkJyAmJiBrZXkgIT09ICdJRCcgJiYga2V5ICE9PSAnZmlkJykge1xyXG4gICAgICBoY29sZ3JvdXBFbG0gPSBoY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgICBiY29sZ3JvdXBFbG0gPSBiY29sZ3JvdXBFbG0gKyBgPGNvbCBuYW1lPVwiZWwtdGFibGVfMV9jb2x1bW5fJHtpfVwiIHdpZHRoPVwiMTUwXCI+YFxyXG4gICAgICB0aGVhZEVsbSA9IHRoZWFkRWxtICsgYDx0aCBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCIgY2xhc3M9XCJlbC10YWJsZV8xX2NvbHVtbl8ke2l9ICAgICBpcy1sZWFmIGVsLXRhYmxlX19jZWxsXCI+PGRpdiBjbGFzcz1cImNlbGxcIj4ke2tleX08L2Rpdj48L3RoPmBcclxuICAgICAgaSsrXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vdGJvZHlcclxuICBsZXQgdGJvZHlFbG0gPSAnPHRib2R5PidcclxuICB0Ym9keUVsbSA9IHRib2R5RWxtICsgdHJzRWxtICsgJzwvdGJvZHk+J1xyXG4gIGhjb2xncm91cEVsbSA9IGhjb2xncm91cEVsbSArICc8Y29sIG5hbWU9XCJndXR0ZXJcIiB3aWR0aD1cIjE3XCI+PC9jb2xncm91cD4nXHJcbiAgYmNvbGdyb3VwRWxtID0gYmNvbGdyb3VwRWxtICsgJzwvY29sZ3JvdXA+J1xyXG4gIHRoZWFkRWxtID0gdGhlYWRFbG0gKyAnPC90cj48L3RoZWFkPidcclxuICBoZWFkZXJFbG0gPSBoZWFkZXJFbG0gKyBoY29sZ3JvdXBFbG0gKyB0aGVhZEVsbSArICc8L3RhYmxlPjwvZGl2PidcclxuICBib2R5RWxtID0gYm9keUVsbSArIGJjb2xncm91cEVsbSArIHRib2R5RWxtICsgJzwvdGFibGU+PC9kaXY+J1xyXG4gIHRhbGJlRWxtID0gdGFsYmVFbG0gKyBoZWFkZXJFbG0gKyBib2R5RWxtICsgJzwvZGl2PidcclxuXHJcbiAgbGV0IHRhYnNFbG0gPSBgXHJcbiAgICA8RElWLWN5LXRhYnMgaWQ9XCJzaHAtbGlzdC1pZC10YWJzXCI+XHJcbiAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5bGe5oCn5YiX6KGoXCI+XHJcbiAgICAgICR7dGFsYmVFbG0gKyAnPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIj48L2Rpdj4nfVxyXG4gICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgYFxyXG4gIGlmIChjdXJyZW50RGF0YVswXS5jb250ZW50ICYmIGN1cnJlbnREYXRhWzBdLmNvbnRlbnQucmljaFRleHRDb250ZW50KSB7XHJcbiAgICBsZXQgdGFiUGFuZUVsbSA9IGBcclxuICAgICAgPERJVi1jeS10YWItcGFuZSBjbGFzcz1cImVkaXRvci1jb250ZW50LXZpZXdcIiBsYWJlbD1cIuWvjOaWh+acrOS/oeaBr1wiPlxyXG4gICAgICAke2N1cnJlbnREYXRhWzBdLmNvbnRlbnQucmljaFRleHRDb250ZW50fVxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIGBcclxuICAgIHRhYnNFbG0gPSB0YWJzRWxtICsgdGFiUGFuZUVsbVxyXG4gIH1cclxuICBpZiAoY3VycmVudERhdGFbMF0uY29udGVudCAmJiBjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsgJiYgY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnQgJiYgY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsuY29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdXJsID0gY3VycmVudERhdGFbMF0uY29udGVudC5saW5rLmNvbnRlbnRbaV0udXJsXHJcbiAgICAgIGxldCB0YWJQYW5lRWxtID0gYFxyXG4gICAgICA8RElWLWN5LXRhYi1wYW5lIGNsYXNzPVwiZWRpdG9yLWNvbnRlbnQtdmlld1wiIGxhYmVsPVwiJHtjdXJyZW50RGF0YVswXS5jb250ZW50LmxpbmsuY29udGVudFtpXS5uYW1lfVwiPlxyXG4gICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPlxyXG4gICAgICA8L0RJVi1jeS10YWItcGFuZT5cclxuICAgIGBcclxuICAgICAgdGFic0VsbSA9IHRhYnNFbG0gKyB0YWJQYW5lRWxtXHJcbiAgICB9XHJcbiAgfVxyXG4gIHRhYnNFbG0gPSB0YWJzRWxtICsgJzwvRElWLWN5LXRhYnM+J1xyXG4gIGJveC5pbm5lckhUTUwgPSB0YWJzRWxtXHJcbiAgLy8gdGhhdC52aWV3ZXIuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChib3gpXHJcbiAgX0RpYWxvZ09iamVjdC5jb250ZW50QXBwQ2hpbGQoYm94KVxyXG4gIG5ldyBjeV90YWJzKCdzaHAtbGlzdC1pZC10YWJzJylcclxuICBsZXQgdGFic05vZGUgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnRElWLWN5LXRhYnMnKVswXVxyXG4gIHRhYnNOb2RlLnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xyXG4gIHRhYnNOb2RlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICB0YWJzTm9kZS5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XHJcbiAgdGFic05vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnRElWLWN5LXRhYi1jb250ZW50JylbMF0uc3R5bGUuZmxleCA9ICcxJ1xyXG4gIGxldCB0YWJDb250ZW50UGFuZSA9IHRhYnNOb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ0RJVi1jeS10YWItY29udGVudC1wYW5lJylcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvbnRlbnRQYW5lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB0YWJDb250ZW50UGFuZVtpXS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcclxuICB9XHJcbiAgbGV0IGhlYWRlcldyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2hlYWRlci13cmFwcGVyJylbMF1cclxuICBsZXQgYm9keVdyYXBwZXIgPSBib3guZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2JvZHktd3JhcHBlcicpWzBdXHJcbiAgYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGhlYWRlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IGUudGFyZ2V0LnNjcm9sbExlZnRcclxuICB9KTtcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LnRpdGxlLnN0eWxlLmhlaWdodCA9ICc0MHB4J1xyXG4gIF9EaWFsb2dPYmplY3QuX2VsZW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICc2NSUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICc4MCUnXHJcbiAgX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LnN0eWxlLmhlaWdodCA9ICdjYWxjKDEwMCUgLSA0MHB4KSdcclxuICBfRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmZvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG5cclxuICBib2R5V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtoZWFkZXJXcmFwcGVyLm9mZnNldEhlaWdodH1weClgXHJcbn1cclxuXHJcbmV4cG9ydCB7IG9wZW5Ob2RlTGlzdEJ5SWQgfSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXBJQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/Vector/openNodeListById.js\n"); /***/ }), /***/ "./src/Obj/Base/WallRealStereoscopic/_element.js": /*!*******************************************************!*\ !*** ./src/Obj/Base/WallRealStereoscopic/_element.js ***! \*******************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
      \\n
      \\n
      \\n \\u540D\\u79F0\\n \\n
      \\n
      \\n \\u989C\\u8272\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n \\u5BBD\\u5EA6\\n
      \\n \\n m\\n \\n
      \\n
      \\n
      \\n \\u62C9\\u4F38\\u9AD8\\u5EA6\\n
      \\n \\n m\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\u62D0\\u89D2\\u7C7B\\u578B\\n
      \\n
      \\n
      \\n \\u5899\\u4F53\\u6837\\u5F0F\\n
      \\n
      \\n
      \\n
      \\n
      \\n \\u5899\\u4F53\\u95ED\\u5408\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
      \\n
      \\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFJlYWxTdGVyZW9zY29waWMvX2VsZW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvV2FsbFJlYWxTdGVyZW9zY29waWMvX2VsZW1lbnQuanM/ODMzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZWxtX2h0bWwnXHJcblxyXG5mdW5jdGlvbiBodG1sKHRoYXQpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ZCN56ewPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBtYXhsZW5ndGg9XCI0MFwiIHR5cGU9XCJ0ZXh0XCIgQG1vZGVsPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuminOiJsjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWuveW6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgZGF0YS1taW49XCIwLjAxXCIgbWF4PVwiOTk5OTk5XCIgQG1vZGVsPVwid2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mi4nkvLjpq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJleHRydWRlZEhlaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29ybmVyLXR5cGUtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5ouQ6KeS57G75Z6LPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvcm5lci10eXBlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIG1hdGVyaWFsLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWimeS9k+agt+W8jzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXRlcmlhbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lopnkvZPpl63lkIg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibm9zZVRvVGFpbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdi1pdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8RElWLWN5LXRhYnMgaWQ9XCJyYWRhci1zY2FuLWVkaXQtdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuWxnuaAp+S/oeaBr1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7YXR0cmlidXRlRWxtKHRoYXQpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH5rOo6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMSgpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgICAgICA8RElWLWN5LXRhYi1wYW5lIGxhYmVsPVwi5qCH562+6aOO5qC8XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFN0eWxlRWxtMigpfVxyXG4gICAgICAgICAgICAgICAgPC9ESVYtY3ktdGFiLXBhbmU+XHJcbiAgICAgICAgICAgIDwvRElWLWN5LXRhYnM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuZXhwb3J0IHsgaHRtbCB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFzRUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallRealStereoscopic/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/WallRealStereoscopic/eventBinding.js": /*!***********************************************************!*\ !*** ./src/Obj/Base/WallRealStereoscopic/eventBinding.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n var blurEvent = function blurEvent() {};\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n var v = Number(value);\n if (e.target.max && v > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && v < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && v < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n blurEvent = function blurEvent(e) {\n var value = e.target.value;\n if (e.target.type == 'number' && (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n that[m.value] = value;\n };\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n elements[i].addEventListener('blur', function (e) {\n blurEvent(e);\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFJlYWxTdGVyZW9zY29waWMvZXZlbnRCaW5kaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1dhbGxSZWFsU3RlcmVvc2NvcGljL2V2ZW50QmluZGluZy5qcz9kN2I2Il0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIGV2ZW50QmluZGluZyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB7fVxyXG4gIH1cclxuICBzdGF0aWMgZXZlbnQgPSB7fVxyXG5cclxuICBnZXRFdmVudChuYW1lKSB7XHJcbiAgICByZXR1cm4gZXZlbnRCaW5kaW5nLmV2ZW50W25hbWVdXHJcbiAgfVxyXG5cclxuICBnZXRFdmVudEFsbCgpIHtcclxuICAgIHJldHVybiBldmVudEJpbmRpbmcuZXZlbnRcclxuICB9XHJcblxyXG4gIHNldEV2ZW50KG5hbWUsIGV2ZW50KSB7XHJcbiAgICBldmVudEJpbmRpbmcuZXZlbnRbbmFtZV0gPSBldmVudFxyXG4gIH1cclxuXHJcbiAgb24odGhhdCwgZWxlbWVudHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IEV2ZW50ID0gW11cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGxldCBibHVyRXZlbnQgPSAoKT0+e31cclxuICAgICAgaWYgKCFlbGVtZW50c1tpXSB8fCFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWU7IFxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7IHRoYXRbbS52YWx1ZV0gPSBlLnRhcmdldC5jaGVja2VkIH0pXHJcbiAgICAgICAgICAgICAgZWxlbWVudHNbaV0uY2hlY2tlZCA9IHRoYXRbbS52YWx1ZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBFdmVudC5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAhPSAnLicgJiYgKGUuZGF0YSAhPSAnLScgfHwgZS50YXJnZXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoKGUudGFyZ2V0Lm1heCkgJiYgdj5OdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZigoZS50YXJnZXQubWluKSAmJiB2PE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKChlLnRhcmdldC5kYXRhc2V0Lm1pbikgJiYgdjxOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGJsdXJFdmVudCA9IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSAmJiAoZS50YXJnZXQudmFsdWUgfHwgKGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZS50YXJnZXQuZGF0YXNldC5udWxsICE9PSAnJyAmJiAhQm9vbGVhbihlLnRhcmdldC5kYXRhc2V0Lm51bGwpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudHNbaV0ubm9kZU5hbWU9PSdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zcmMgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZWxlbWVudFttLnZhbHVlXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXS5wdXNoKGVsZW1lbnRzW2ldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFttLnZhbHVlXSA9IFtlbGVtZW50c1tpXV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjbGljayc6IHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoYXRbbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdKGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVtb3ZlTmFtZS5wdXNoKG0ubmFtZSlcclxuICAgICAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ0BjaGFuZ2UnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIEV2ZW50LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIGlmKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUhPScnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxlbWVudHNbaV0uYXR0cmlidXRlc1ttXSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIGZvcihsZXQgbj0wO248cmVtb3ZlTmFtZS5sZW5ndGg7bisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgICAgIGJsdXJFdmVudChlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBFdmVudEJpbmRpbmcgPSBuZXcgZXZlbnRCaW5kaW5nKCk7XHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50QmluZGluZzsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4RkE7QUFBQTtBQUFBO0FBd0ZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuSEE7QUFBQTtBQU1BO0FBOEdBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallRealStereoscopic/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/WallRealStereoscopic/index.js": /*!****************************************************!*\ !*** ./src/Obj/Base/WallRealStereoscopic/index.js ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/WallRealStereoscopic/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/WallRealStereoscopic/eventBinding.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Materail_PolylineImageTrailMaterialProperty__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../Materail/PolylineImageTrailMaterialProperty */ \"./src/Obj/Materail/PolylineImageTrailMaterialProperty.js\");\n/* harmony import */ var _Materail_FlowPictureMaterialProperty__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../Materail/FlowPictureMaterialProperty */ \"./src/Obj/Materail/FlowPictureMaterialProperty.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n2 = 0, F = function F() {}; return { s: F, n: function n() { return _n2 >= r.length ? { done: !0 } : { done: !1, value: r[_n2++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 实体墙\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar WallRealStereoscopic = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 实体围墙\r\n * @param options {object} 墙属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.name {string} 名称\r\n * @param options.color=\"#ffffff\" {string} 颜色\r\n * @param options.width=0.24 {number} 宽\r\n * @param options.show=true {boolean} 显隐\r\n * @param options.noseToTail=false {boolean} 首尾相连\r\n * @param options.extrudedHeight=2.4 {number} 拉伸高度\r\n * @param options.cornerType=0 {string} 拐角类型;0:直角;1:斜角;2:圆角\r\n * @param options.material=0 {number} 材质,0:纯色墙;1:红砖;2:黄砖;3:灰瓷\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function WallRealStereoscopic(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, WallRealStereoscopic);\n _this2 = _callSuper(this, WallRealStereoscopic, [sdk, options]);\n _this2._elms = {};\n _this2.options.color = options.color || \"#ffffff\";\n _this2.options.width = options.width || 0.24;\n _this2.options['nose-to-tail'] = options['nose-to-tail'] || false;\n _this2.options.extrudedHeight = options.extrudedHeight || 2.4;\n _this2.cornerType = options.cornerType;\n _this2.options.positions = options.positions;\n _this2.options.material = Number(options.material) || 0;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.entity;\n _this2.nodePoints = [];\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.instruct = options.instruct || \"\";\n _this2.options.operatingPoint = options.operatingPoint || \"\";\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera.content = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.Dialog = _Dialog;\n if (!_this2.options.positions || _this2.options.positions.length < 2) {\n _this2._error = '最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n WallRealStereoscopic.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(WallRealStereoscopic, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(WallRealStereoscopic, [{\n key: \"type\",\n get: function get() {\n return 'WallRealStereoscopic';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n if (this.entity) {\n for (var i = 0; i < this.entity.values.length; i++) {\n if (this.entity.values[i].polylineVolume) {\n var wall = this.entity.values[i];\n wall.polylineVolume.material = this.getMaterial(wall.id);\n }\n if (this.entity.values[i].polygon) {\n var top = this.entity.values[i];\n top.polygon.material = Cesium.Color.fromCssColorString(this.options.color);\n }\n }\n }\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: false,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"width\",\n get: function get() {\n return this.options.width;\n },\n set: function set(v) {\n this.options.width = v;\n if (this.options.width <= 0.01) {\n this.options.width = 0.01;\n }\n this.update();\n this._elms.width && this._elms.width.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"cornerType\",\n get: function get() {\n return this.options.cornerType;\n },\n set: function set(v) {\n switch (v) {\n case 0:\n case '0':\n v = 0;\n break;\n case 1:\n case '1':\n v = 1;\n break;\n case 2:\n case '2':\n v = 2;\n break;\n default:\n v = 0;\n break;\n }\n this.options.cornerType = v;\n this.update();\n // this.entity.polylineVolume.cornerType = Cesium.CornerType[this.options.cornerType]\n this._elms.cornerType && this._elms.cornerType.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"material\",\n get: function get() {\n return this.options.material;\n },\n set: function set(v) {\n this.options.material = Number(v);\n if (this.entity) {\n for (var i = 0; i < this.entity.values.length; i++) {\n if (this.entity.values[i].polylineVolume) {\n var wall = this.entity.values[i];\n wall.polylineVolume.material = this.getMaterial(wall.id);\n }\n }\n }\n this._elms.material && this._elms.material.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options['nose-to-tail'];\n },\n set: function set(v) {\n this.options['nose-to-tail'] = v;\n this.update();\n this.material = this.material;\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"extrudedHeight\",\n get: function get() {\n return this.options.extrudedHeight;\n },\n set: function set(v) {\n this.options.extrudedHeight = v;\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat, this.options.positions[0].alt + this.options.extrudedHeight];\n this.update();\n this._elms.extrudedHeight && this._elms.extrudedHeight.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this4.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this4.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this4._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"instruct\",\n get: function get() {\n return this.options.instruct;\n },\n set: function set(v) {\n this.options.instruct = v;\n this._elms.instruct && this._elms.instruct.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"operatingPoint\",\n get: function get() {\n return this.options.operatingPoint;\n },\n set: function set(v) {\n this.options.operatingPoint = v;\n this._elms.operatingPoint && this._elms.operatingPoint.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this8 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
      \\n
      \" + this.options.attribute.link.content[i].name + \"
      \\n
      \" + this.options.attribute.link.content[i].url + \"
      \\n
      \\n \\n \\n
      \\n
      \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this8.options.attribute.link.content;\n case 2:\n _this8.attributeLink = _context3.sent;\n table = _this8._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this8.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this8.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this8.options.attribute.link.content.splice(i, 1);\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this8.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this8.attributeLink = _this8.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
      \\n
      \" + this.options.attribute.vr.content[i].name + \"
      \\n
      \" + this.options.attribute.vr.content[i].url + \"
      \\n
      \\n \\n \\n
      \\n
      \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this9.options.attribute.vr.content;\n case 2:\n _this9.attributeVr = _context6.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this9.options.attribute.vr.content.splice(i, 1);\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeVr = _this9.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n if (_loop8()) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n }, {\n key: \"calculatePositions3\",\n value: function calculatePositions3() {\n var optionsPositions = this.deepCopyObj(this.options.positions);\n if (this.noseToTail) {\n optionsPositions.push(optionsPositions[0], optionsPositions[1]);\n }\n var pos1 = [];\n var pos2 = [];\n var positions = [];\n var forward = [];\n var reverse = [];\n for (var i = 0; i < optionsPositions.length - 1; i++) {\n var pot1 = turf.point([optionsPositions[i].lng, optionsPositions[i].lat]);\n var pot2 = turf.point([optionsPositions[i + 1].lng, optionsPositions[i + 1].lat]);\n var bearing = turf.rhumbBearing(pot1, pot2);\n var destination = turf.destination(pot1, this.options.width / 2 / 1000, bearing + 90, {\n units: 'kilometers'\n });\n var destination2 = turf.destination(pot2, this.options.width / 2 / 1000, bearing + 90, {\n units: 'kilometers'\n });\n var destination3 = turf.destination(pot1, this.options.width / 2 / 1000, bearing - 90, {\n units: 'kilometers'\n });\n var destination4 = turf.destination(pot2, this.options.width / 2 / 1000, bearing - 90, {\n units: 'kilometers'\n });\n var coordinates = destination.geometry.coordinates;\n var coordinates2 = destination2.geometry.coordinates;\n var coordinates3 = destination3.geometry.coordinates;\n var coordinates4 = destination4.geometry.coordinates;\n coordinates[2] = optionsPositions[i].alt;\n coordinates2[2] = optionsPositions[i + 1].alt;\n coordinates3[2] = optionsPositions[i].alt;\n coordinates4[2] = optionsPositions[i + 1].alt;\n pos1.push(coordinates, coordinates2);\n pos2.push(coordinates3, coordinates4);\n }\n\n // 直角\n if (this.cornerType === 0) {} else if (this.cornerType === 1) {\n // 斜角\n for (var _i5 = 0; _i5 < pos1.length - 3; _i5 += 2) {\n if (_i5 == 0) {\n forward.push(pos1[_i5]);\n reverse.push(pos2[_i5]);\n }\n forward.push(pos1[_i5 + 1], pos1[_i5 + 2]);\n reverse.push(pos2[_i5 + 1], pos2[_i5 + 2]);\n if (_i5 == pos1.length - 4) {\n forward.push(pos1[_i5 + 3]);\n reverse.push(pos2[_i5 + 3]);\n }\n }\n } else if (this.cornerType === 2) {\n // 圆角\n for (var _i6 = 0; _i6 < pos1.length - 3; _i6 += 2) {\n var center = optionsPositions[_i6 / 2 + 1];\n var _pot = turf.point(pos1[_i6 + 1]);\n var _pot2 = turf.point(pos2[_i6 + 1]);\n var bearing1 = turf.rhumbBearing(_pot, _pot2);\n var pot3 = turf.point(pos1[_i6 + 2]);\n var pot4 = turf.point(pos2[_i6 + 2]);\n var bearing2 = turf.rhumbBearing(pot3, pot4);\n console.log('bearing1, bearing2', bearing1 - bearing2);\n var face = true;\n if (Math.sin(Cesium.Math.toRadians(bearing1 - bearing2)) > 0) {\n var temporary = bearing1;\n bearing1 = bearing2 + 180;\n bearing2 = temporary + 180;\n face = false;\n }\n var sector = turf.sector([center.lng, center.lat, center.alt], this.options.width / 1000 / 2, bearing1, bearing2, {\n units: 'kilometers'\n });\n console.log('sector', sector);\n if (_i6 == 0) {\n forward.push(pos1[_i6]);\n reverse.push(pos2[_i6]);\n }\n console.log('face', face);\n if (face) {\n forward.push(pos1[_i6 + 1], pos1[_i6 + 2]);\n for (var n = 1; n < sector.geometry.coordinates[0].length - 1; n++) {\n reverse.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][n]), [pos1[_i6 + 1][2]]));\n // this.sdk.viewer.entities.add({\n // position: Cesium.Cartesian3.fromDegrees(...sector.geometry.coordinates[0][n], pos1[i + 1][2]),\n // // billboard: {\n // // image: this.getSourceRootPath() + '/img/point.png',\n // // width: 15,\n // // height: 15,\n // // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // // },\n // label: {\n // text: n+'',\n // font: '12px Microsoft YaHei',\n // fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // }\n // })\n }\n } else {\n for (var _n = sector.geometry.coordinates[0].length - 2; _n > 0; _n--) {\n forward.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][_n]), [pos1[_i6 + 1][2]]));\n }\n reverse.push(pos2[_i6 + 1], pos2[_i6 + 2]);\n }\n if (_i6 == pos1.length - 4) {\n forward.push(pos1[_i6 + 3]);\n reverse.push(pos2[_i6 + 3]);\n }\n }\n\n // for (let i = 0; i < pos1.length - 3; i += 2) {\n // if (i == 0) {\n // forward.push(pos1[i])\n // reverse.push(pos2[i])\n // }\n\n // forward.push(pos1[i + 1], pos1[i + 2])\n // reverse.push(pos2[i + 1], pos2[i + 2])\n\n // if (i == pos1.length - 4) {\n // forward.push(pos1[i + 3])\n // reverse.push(pos2[i + 3])\n // }\n\n // let pot1 = turf.point(pos1[i])\n // let pot2 = turf.point(pos1[i + 1])\n // let bearing1 = turf.rhumbBearing(pot1, pot2);\n // let pot3 = turf.point(pos1[i + 2])\n // let pot4 = turf.point(pos1[i + 3])\n // let bearing2 = turf.rhumbBearing(pot3, pot4);\n\n // let line1 = turf.lineString([pos1[i], pos1[i + 1]]);\n // let line2 = turf.lineString([pos1[i + 2], pos1[i + 3]]);\n // let intersects = turf.lineIntersect(line1, line2);\n // if (i == 0) {\n // forward.push(pos1[i])\n // reverse.push(pos2[i])\n // }\n\n // if (intersects.features[0]) {\n // forward.push([...intersects.features[0].geometry.coordinates, pos1[i + 1][2]])\n // let sector = turf.sector(intersects.features[0].geometry.coordinates, this.options.width / 1000, bearing1 - 90, bearing2 - 90, { units: 'kilometers' });\n // for (let n = 1; n < sector.geometry.coordinates[0].length - 1; n++) {\n // reverse.push([...sector.geometry.coordinates[0][n], pos1[i + 1][2]])\n // }\n // }\n // else {\n // let pot1 = turf.point(pos2[i])\n // let pot2 = turf.point(pos2[i + 1])\n // let bearing1 = turf.rhumbBearing(pot1, pot2);\n // let pot3 = turf.point(pos2[i + 2])\n // let pot4 = turf.point(pos2[i + 3])\n // let bearing2 = turf.rhumbBearing(pot3, pot4);\n\n // let line1 = turf.lineString([pos2[i], pos2[i + 1]]);\n // let line2 = turf.lineString([pos2[i + 2], pos2[i + 3]]);\n // let intersects = turf.lineIntersect(line1, line2);\n // if (intersects.features[0]) {\n // reverse.push([...intersects.features[0].geometry.coordinates, pos2[i + 1][2]])\n // let sector = turf.sector(intersects.features[0].geometry.coordinates, this.options.width / 1000, bearing2 + 90, bearing1 + 90, { units: 'kilometers' });\n // for (let n = sector.geometry.coordinates[0].length - 2; n >= 1; n--) {\n // forward.push([...sector.geometry.coordinates[0][n], pos2[i + 1][2]])\n // }\n // }\n // }\n // if (i == pos1.length - 4) {\n // forward.push(pos1[i + 3])\n // reverse.push(pos2[i + 3])\n // }\n\n // }\n }\n positions = [].concat(forward);\n for (var _i7 = reverse.length - 1; _i7 >= 0; _i7--) {\n positions.push(reverse[_i7]);\n }\n positions.push(positions[0]);\n\n // for (let i = 0; i < positions.length; i++) {\n // this.sdk.viewer.entities.add({\n // position: Cesium.Cartesian3.fromDegrees(...positions[i]),\n // label: {\n // text: i+'',\n // font: '18px Microsoft YaHei',\n // fillColor: Cesium.Color.fromCssColorString('#f1e605'),\n // style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n // verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n // disableDepthTestDistance: Number.POSITIVE_INFINITY,\n // }\n // })\n // }\n\n console.log('positions', positions);\n return positions;\n }\n }, {\n key: \"calculatePositions2\",\n value: function calculatePositions2() {\n // let collection = new Cesium.EntityCollection()\n var positions = [];\n for (var i = 0; i < this.options.positions.length - 2; i++) {\n var bearing = (180 - caculateAngle(this.options.positions[i], this.options.positions[i + 1], this.options.positions[i + 2])) / 2;\n var width = Math.tan(bearing * Math.PI / 180) * (this.options.width / 2);\n console.log('width', width, bearing);\n var line1 = turf.lineString([[this.options.positions[1].lng, this.options.positions[1].lat], [this.options.positions[0].lng, this.options.positions[0].lat]]);\n var line2 = turf.lineString([[this.options.positions[1].lng, this.options.positions[1].lat], [this.options.positions[2].lng, this.options.positions[2].lat]]);\n var sliced1 = turf.lineSliceAlong(line1, 0, width / 1000, {\n units: 'kilometers'\n });\n var sliced2 = turf.lineSliceAlong(line2, 0, width / 1000, {\n units: 'kilometers'\n });\n var pos1 = sliced1.geometry.coordinates[sliced1.geometry.coordinates.length - 1];\n var pos2 = sliced2.geometry.coordinates[sliced2.geometry.coordinates.length - 1];\n pos1[2] = this.options.positions[i + 1].alt;\n pos2[2] = this.options.positions[i + 1].alt;\n positions.push([pos1, pos2]);\n this.sdk.viewer.entities.add({\n position: Cesium.Cartesian3.fromDegrees(pos1[0], pos1[1], pos1[2]),\n billboard: {\n image: this.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n this.sdk.viewer.entities.add({\n position: Cesium.Cartesian3.fromDegrees(pos2[0], pos2[1], pos2[2]),\n billboard: {\n image: this.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n }\n function caculateAngle(p1, p2, p3) {\n var point1 = turf.point([p1.lng, p1.lat]);\n var point2 = turf.point([p2.lng, p2.lat]);\n var point3 = turf.point([p3.lng, p3.lat]);\n var options = {\n units: 'kilometers'\n };\n var distance1 = turf.rhumbDistance(point1, point2, options);\n var distance2 = turf.rhumbDistance(point3, point2, options);\n var distance = distance1;\n if (distance1 > distance2) {\n distance = distance2;\n }\n var bearing1 = turf.rhumbBearing(point1, point2);\n var bearing2 = turf.rhumbBearing(point3, point2);\n var bearing = Math.abs((bearing1 - bearing2 + 360) % 360);\n if (bearing > 180) {\n bearing = 360 - bearing;\n }\n return bearing;\n }\n return positions;\n }\n }, {\n key: \"calculatePositions\",\n value: function calculatePositions() {\n var optionsPositions = this.deepCopyObj(this.options.positions);\n if (this.noseToTail) {\n optionsPositions.push(optionsPositions[0], optionsPositions[1]);\n }\n var pos1 = [];\n var pos2 = [];\n var positions = [];\n for (var i = 0; i < optionsPositions.length - 1; i++) {\n var pot1 = turf.point([optionsPositions[i].lng, optionsPositions[i].lat]);\n var pot2 = turf.point([optionsPositions[i + 1].lng, optionsPositions[i + 1].lat]);\n var bearing = turf.rhumbBearing(pot1, pot2);\n var destination = turf.destination(pot1, this.options.width / 2 / 1000, bearing + 90, {\n units: 'kilometers'\n });\n var destination2 = turf.destination(pot2, this.options.width / 2 / 1000, bearing + 90, {\n units: 'kilometers'\n });\n var destination3 = turf.destination(pot1, this.options.width / 2 / 1000, bearing - 90, {\n units: 'kilometers'\n });\n var destination4 = turf.destination(pot2, this.options.width / 2 / 1000, bearing - 90, {\n units: 'kilometers'\n });\n var coordinates = destination.geometry.coordinates;\n var coordinates2 = destination2.geometry.coordinates;\n var coordinates3 = destination3.geometry.coordinates;\n var coordinates4 = destination4.geometry.coordinates;\n coordinates[2] = optionsPositions[i].alt;\n coordinates2[2] = optionsPositions[i + 1].alt;\n coordinates3[2] = optionsPositions[i].alt;\n coordinates4[2] = optionsPositions[i + 1].alt;\n pos1.push([coordinates, coordinates2, coordinates4, coordinates3, coordinates]);\n }\n positions.push(pos1[0]);\n if (this.cornerType === 0) {\n // 直角\n for (var _i8 = 1; _i8 < pos1.length; _i8++) {\n var center = optionsPositions[_i8];\n var _pot3 = turf.point(pos1[_i8 - 1][1]);\n var _pot4 = turf.point(pos1[_i8 - 1][2]);\n var bearing1 = turf.rhumbBearing(_pot3, _pot4);\n var pot3 = turf.point(pos1[_i8][0]);\n var pot4 = turf.point(pos1[_i8][3]);\n var bearing2 = turf.rhumbBearing(pot3, pot4);\n var face = true;\n if (Math.sin(Cesium.Math.toRadians(bearing1 - bearing2)) > 0) {\n var temporary = bearing1;\n bearing1 = bearing2 + 180;\n bearing2 = temporary + 180;\n face = false;\n }\n var bearing3 = Math.abs(bearing1 - bearing2);\n if (bearing3 > 180) {\n bearing3 = 360 - bearing3;\n }\n var distance = this.options.width / 2 / Math.cos(Cesium.Math.toRadians(bearing3 / 2));\n if (distance > this.options.width * 5) {\n distance = this.options.width * 5;\n }\n var sector = turf.sector([center.lng, center.lat], this.options.width / 1000 / 2, bearing1, bearing2, {\n units: 'kilometers',\n steps: 3600\n });\n var point1 = turf.point([center.lng, center.lat]);\n var point2 = turf.point(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][Math.ceil(sector.geometry.coordinates[0].length / 2)]));\n var _bearing = turf.bearing(point1, point2);\n var _destination = turf.destination(point1, distance / 1000, _bearing, {\n units: 'kilometers'\n });\n var array = [];\n array.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][0]), [center.alt]));\n array.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][1]), [center.alt]));\n array.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(_destination.geometry.coordinates), [center.alt]));\n array.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sector.geometry.coordinates[0][sector.geometry.coordinates[0].length - 2]), [center.alt]));\n positions.push(array);\n positions.push(pos1[_i8]);\n }\n } else if (this.cornerType === 1) {\n // 斜角\n for (var _i9 = 1; _i9 < pos1.length; _i9++) {\n positions.push([pos1[_i9 - 1][2], pos1[_i9][0], pos1[_i9 - 1][1], pos1[_i9][3], pos1[_i9 - 1][2]]);\n positions.push(pos1[_i9]);\n }\n } else if (this.cornerType === 2) {\n // 圆角\n for (var _i10 = 1; _i10 < pos1.length; _i10++) {\n var _center = optionsPositions[_i10];\n var _pot5 = turf.point(pos1[_i10 - 1][1]);\n var _pot6 = turf.point(pos1[_i10 - 1][2]);\n var _bearing2 = turf.rhumbBearing(_pot5, _pot6);\n var _pot7 = turf.point(pos1[_i10][0]);\n var _pot8 = turf.point(pos1[_i10][3]);\n var _bearing3 = turf.rhumbBearing(_pot7, _pot8);\n if (Math.sin(Cesium.Math.toRadians(_bearing2 - _bearing3)) > 0) {\n var _temporary = _bearing2;\n _bearing2 = _bearing3 + 180;\n _bearing3 = _temporary + 180;\n }\n var _sector = turf.sector([_center.lng, _center.lat], this.options.width / 1000 / 2, _bearing2, _bearing3, {\n units: 'kilometers'\n });\n var _array = [];\n for (var n = 0; n < _sector.geometry.coordinates[0].length - 1; n++) {\n _array.push([].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(_sector.geometry.coordinates[0][n]), [_center.alt]));\n }\n positions.push(_array);\n positions.push(pos1[_i10]);\n }\n }\n return positions;\n }\n\n //创建\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3(state) {\n var _this10 = this;\n var _this, contentElm, cornerTypeList, legpCornerType, iActiveElm, legpCornerTypeInput, i, materialList, legpMaterial, iActiveElm2, legpMaterialInput, _i12, tabsElm, colorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 67;\n break;\n }\n _context7.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.sdk, this.options, {\n title: '实体墙属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this10.name = _this10.name.trim();\n if (!_this10.name) {\n _this10.name = '未命名对象';\n }\n _this10.options.label.position = {\n lng: _this10.label.position[0],\n lat: _this10.label.position[1],\n alt: _this10.label.position[2]\n };\n _this10.originalOptions = _this10.deepCopyObj(_this10.options);\n _this10._DialogObject.close();\n _this10.Dialog.confirmCallBack && _this10.Dialog.confirmCallBack(_this10.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(_this10.sdk, _this10.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"syncSplitData\"])(_this10.sdk, _this10.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this10.reset();\n _this10.Dialog.resetCallBack && _this10.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this10.Dialog.removeCallBack && _this10.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this10.reset();\n _this10.Dialog.closeCallBack && _this10.Dialog.closeCallBack();\n for (var i = 0; i < _this10.nodePoints.length; i++) {\n _this10.sdk.viewer.entities.remove(_this10.nodePoints[i]);\n }\n _this10.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n _this10.event && _this10.event.destroy();\n _this10.event && _this10.tip.destroy();\n },\n showCallBack: function showCallBack(show) {\n _this10.options.show = show;\n _this10.originalOptions.show = show;\n _this10.show = show;\n _this10.Dialog.showCallBack && _this10.Dialog.showCallBack();\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n WallRealStereoscopic.nodeEdit(_this10);\n }\n });\n case 6:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' wall-stereoscopic';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_12__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n\n // 拐角类型下拉\n cornerTypeList = [{\n name: '直角',\n value: '直角',\n key: 0,\n icon: 'yj-icon-zj'\n }, {\n name: '斜角',\n value: '斜角',\n key: 1,\n icon: 'yj-icon-xj'\n }, {\n name: '圆角',\n value: '圆角',\n key: 2,\n icon: 'yj-icon-yj'\n }];\n legpCornerType = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(contentElm.getElementsByClassName('corner-type-box')[0], \".corner-type\");\n legpCornerType.legp_search(cornerTypeList);\n iActiveElm = document.createElement('i');\n iActiveElm.className = \"icon-active\";\n contentElm.getElementsByClassName('corner-type')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm);\n legpCornerTypeInput = contentElm.getElementsByClassName('corner-type')[0].getElementsByTagName('input')[0];\n i = 0;\n case 22:\n if (!(i < cornerTypeList.length)) {\n _context7.next = 31;\n break;\n }\n if (!(cornerTypeList[i].key === this.cornerType)) {\n _context7.next = 28;\n break;\n }\n legpCornerType.legp_searchActive(cornerTypeList[i].value);\n legpCornerTypeInput.value = cornerTypeList[i].value;\n iActiveElm.innerHTML = \"\");\n return _context7.abrupt(\"break\", 31);\n case 28:\n i++;\n _context7.next = 22;\n break;\n case 31:\n legpCornerTypeInput.addEventListener('input', function (e, c) {\n for (var _i11 = 0; _i11 < cornerTypeList.length; _i11++) {\n if (cornerTypeList[_i11].value === legpCornerTypeInput.value) {\n _this10.cornerType = cornerTypeList[_i11].key;\n iActiveElm.innerHTML = \"\");\n break;\n }\n }\n });\n\n // 材质下拉\n materialList = [{\n name: '纯色墙',\n value: '纯色墙',\n key: 0,\n icon: 'icon-wall'\n }, {\n name: '红砖墙',\n value: '红砖墙',\n key: 1,\n icon: 'icon-wall-brick1'\n }, {\n name: '黄砖墙',\n value: '黄砖墙',\n key: 2,\n icon: 'icon-wall-brick2'\n }, {\n name: '灰瓷墙',\n value: '灰瓷墙',\n key: 3,\n icon: 'icon-wall-brick3'\n }];\n legpMaterial = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(contentElm.getElementsByClassName('material-box')[0], \".material\");\n legpMaterial.legp_search(materialList);\n iActiveElm2 = document.createElement('i');\n iActiveElm2.className = \"icon icon-active\";\n contentElm.getElementsByClassName('material')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm2);\n legpMaterialInput = contentElm.getElementsByClassName('material')[0].getElementsByTagName('input')[0];\n _i12 = 0;\n case 40:\n if (!(_i12 < materialList.length)) {\n _context7.next = 49;\n break;\n }\n if (!(materialList[_i12].key === this.material)) {\n _context7.next = 46;\n break;\n }\n legpMaterial.legp_searchActive(materialList[_i12].value);\n legpMaterialInput.value = materialList[_i12].value;\n iActiveElm2.className = \"icon icon-active \".concat(materialList[_i12].icon);\n return _context7.abrupt(\"break\", 49);\n case 46:\n _i12++;\n _context7.next = 40;\n break;\n case 49:\n legpMaterialInput.addEventListener('input', function (e, c) {\n for (var _i13 = 0; _i13 < materialList.length; _i13++) {\n if (materialList[_i13].value === legpMaterialInput.value) {\n _this10.material = materialList[_i13].key;\n iActiveElm2.className = \"icon icon-active \".concat(materialList[_i13].icon);\n break;\n }\n }\n });\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('radar-scan-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: false,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this10.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this10.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this10.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this10.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this10.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this10.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_15__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_15__[\"default\"].element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this10.attributeLink = _this10.options.attribute.link.content;\n _this10.ISCSelect && _this10.ISCSelect();\n _this10.goodsSelect && _this10.goodsSelect();\n _this10.cameraSelect && _this10.cameraSelect();\n _this10.attributeVr = _this10.options.attribute.vr.content;\n var tagData = _this10.attributeSelect;\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0], \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeElm = _this10._DialogObject._element.content.getElementsByClassName('attribute-select')[0];\n if (!attributeElm) {\n return;\n }\n var attributeSelectElm = _this10._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i14 = 0; _i14 < tagData.length; _i14++) {\n if (tagData[_i14].key === _this10.options.attributeType) {\n attributeSelectElm.value = tagData[_i14].value;\n legpObject.legp_searchActive(tagData[_i14].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i15 = 0; _i15 < tagData.length; _i15++) {\n if (tagData[_i15].value === attributeSelectElm.value) {\n _this10.attributeType = tagData[_i15].key;\n break;\n }\n }\n });\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_20__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_19__[\"legp\"])(_this10._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this10._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this10.labelFontFamily].value;\n for (var _i16 = 0; _i16 < fontData.length; _i16++) {\n if (fontData[_i16].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i16].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i17 = 0; _i17 < fontData.length; _i17++) {\n if (fontData[_i17].value === fontDataLegpElm.value) {\n _this10.labelFontFamily = fontData[_i17].key;\n break;\n }\n }\n });\n _this10._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context7.next = 68;\n break;\n case 67:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 68:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.width = this.originalOptions.width;\n this.cornerType = this.originalOptions.cornerType;\n this.extrudedHeight = this.originalOptions.extrudedHeight;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.instruct = this.originalOptions.instruct;\n this.operatingPoint = this.originalOptions.operatingPoint;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n var positions = this.options.positions;\n var fromDegreesArray = [];\n var minimumHeights = [];\n var maximumHeights = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n minimumHeights.push(positions[i].alt);\n maximumHeights.push(positions[i].alt + this.options.extrudedHeight);\n }\n // this.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4() {\n var i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label.remove();\n for (i = 0; i < this.entity.values.length; i++) {\n this.sdk.viewer.entities.remove(this.entity.values[i]);\n }\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"instructSubmit\",\n value: function instructSubmit() {\n this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct);\n this.originalOptions.instruct = this.instruct;\n }\n }, {\n key: \"operatingPointSubmit\",\n value: function operatingPointSubmit() {\n this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint);\n this.originalOptions.operatingPoint = this.operatingPoint;\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n }, {\n key: \"getMaterial\",\n value: function getMaterial(id) {\n var _this11 = this;\n var material;\n var img;\n switch (this.options.material) {\n case 0:\n material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n break;\n case 1:\n case 2:\n case 3:\n case 4:\n // material = new Cesium.CustomMaterialSource({\n // image: './image/arrow.png',\n // repeat: new Cesium.Cartesian2(10, 1.0),\n // color: this.options.color,\n // duration: this.options.duration\n // })\n\n switch (this.options.material) {\n case 1:\n img = 'brick1';\n break;\n case 2:\n img = 'brick2';\n break;\n case 3:\n img = 'brick3';\n break;\n case 4:\n img = 'brick4';\n break;\n }\n material = new Cesium.CustomMaterialSource({\n image: this.getSourceRootPath() + \"/img/material/\".concat(img, \".png\"),\n color: this.options.color,\n is2D: false,\n repeats: new Cesium.CallbackProperty(function () {\n var repeat = [['1.0', 1.0, 1.0]];\n if (!_this11.entity) {\n return repeat;\n }\n var entity = _this11.entity.getById(id);\n if (!entity || !entity.polylineVolume) {\n return repeat;\n }\n var positionProperty = entity.polylineVolume.positions;\n var positions = positionProperty.getValue();\n if (!Cesium.defined(positions)) {\n return repeat;\n }\n var totalDistance = 0;\n var distances = [];\n repeat = [];\n for (var i = 0; i < positions.length - 1; ++i) {\n var distance = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n distances.push(distance);\n totalDistance += distance;\n }\n var imgProportion = 45 / 45; // 图片长宽比例\n var totalRepeatX = totalDistance / _this11.options.extrudedHeight;\n totalRepeatX = totalRepeatX / imgProportion;\n var totalRatio = 0;\n for (var _i18 = 0; _i18 < distances.length; _i18++) {\n var ratio = distances[_i18] / totalDistance;\n totalRatio += ratio;\n var repeatX = ratio * totalRepeatX;\n var repeatY = 1.0;\n repeat.push([((_i18 + 1) / distances.length).toFixed(30), repeatX, repeatY]);\n }\n return repeat;\n }, false),\n isTranslucent: false,\n duration: 0\n });\n break;\n }\n return material;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this12 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_11__[\"default\"].primaryCallBack = function (content) {\n _this12.options.richTextContent = content;\n };\n }\n }, {\n key: \"update\",\n value: function update() {\n if (this.entity) {\n var positions = this.calculatePositions();\n var wallPositions = [];\n var topPositions = [];\n for (var i = 0; i < this.entity.values.length; i++) {\n this.sdk.viewer.entities.remove(this.entity.values[i]);\n }\n this.entity.removeAll();\n for (var _i19 = 0; _i19 < positions.length; _i19++) {\n var fromDegreesArray = [];\n var fromDegreesArray2 = [];\n for (var n = 0; n < positions[_i19].length; n++) {\n fromDegreesArray.push(positions[_i19][n][0], positions[_i19][n][1], positions[_i19][n][2]);\n fromDegreesArray2.push(positions[_i19][n][0], positions[_i19][n][1], positions[_i19][n][2] + this.options.extrudedHeight);\n }\n wallPositions.push(fromDegreesArray);\n topPositions.push(fromDegreesArray2);\n var wall = this.sdk.viewer.entities.add({\n id: this.options.id + '-' + WallRealStereoscopic.randomString(12),\n polylineVolume: {\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(wallPositions[_i19]),\n shape: [{\n x: -0.0000001,\n y: -this.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: -this.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: this.options.extrudedHeight / 2\n }, {\n x: -0.0000001,\n y: this.options.extrudedHeight / 2\n }],\n cornerType: Cesium.CornerType.MITERED\n }\n });\n var top = this.sdk.viewer.entities.add({\n id: this.options.id + '-' + WallRealStereoscopic.randomString(12),\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(topPositions[_i19])),\n perPositionHeight: true,\n material: Cesium.Color.fromCssColorString(this.options.color)\n }\n });\n this.entity.add(wall);\n this.entity.add(top);\n wall.polylineVolume.material = this.getMaterial(wall.id);\n }\n }\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _Cesium$Cartesian,\n _this13 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var points = [];\n for (var i = 0; i < this.options.positions.length; i++) {\n points.push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n var line = turf.lineString(points);\n var length = turf.length(line, {\n units: 'kilometers'\n });\n var sliced = turf.lineSliceAlong(line, 0, length / 2, {\n units: 'kilometers'\n });\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]).concat([this.options.positions[0].alt + this.options.extrudedHeight]));\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this13.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"createLabel\",\n value: function createLabel(that) {\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_14__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n ground: false,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n });\n }\n }, {\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5(that) {\n var positions, maximumHeights, minimumHeights, i, fromDegreesArray, fromDegreesArray2, n, wall, top;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n // console.log(new Cesium.CustomMaterialSource(), new Cesium.PolylineTrailLinkMaterialProperty())\n // let positions = that.options.positions\n // let fromDegreesArray = []\n // let minimumHeights = []\n // let maximumHeights = []\n // for (let i = 0; i < positions.length; i++) {\n // fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt)\n // minimumHeights.push(positions[i].alt)\n // maximumHeights.push(positions[i].alt + that.options.extrudedHeight)\n // }\n\n that.entity = new Cesium.EntityCollection();\n positions = that.calculatePositions();\n maximumHeights = [];\n minimumHeights = [];\n for (i = 0; i < positions.length; i++) {\n fromDegreesArray = [];\n fromDegreesArray2 = [];\n for (n = 0; n < positions[i].length; n++) {\n fromDegreesArray.push(positions[i][n][0], positions[i][n][1], positions[i][n][2]);\n fromDegreesArray2.push(positions[i][n][0], positions[i][n][1], positions[i][n][2] + that.options.extrudedHeight);\n }\n wall = that.sdk.viewer.entities.add({\n id: that.options.id + '-' + WallRealStereoscopic.randomString(12),\n polylineVolume: {\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n shape: [{\n x: -0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: that.options.extrudedHeight / 2\n }, {\n x: -0.0000001,\n y: that.options.extrudedHeight / 2\n }],\n cornerType: Cesium.CornerType.MITERED\n }\n });\n top = that.sdk.viewer.entities.add({\n id: that.options.id + '-' + WallRealStereoscopic.randomString(12),\n polygon: {\n hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray2),\n perPositionHeight: true,\n material: Cesium.Color.fromCssColorString(that.options.color)\n }\n });\n that.entity.add(wall);\n that.entity.add(top);\n wall.polylineVolume.material = that.getMaterial(wall.id);\n }\n that.entity.show = that.options.show;\n WallRealStereoscopic.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_18__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_23__[\"setSplitDirection\"])(0, that.options.id);\n }\n case 9:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5);\n }));\n function create(_x4) {\n return _create.apply(this, arguments);\n }\n return create;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n var update = function update() {\n var isCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (that.entity) {\n var _positions = that.calculatePositions();\n for (var i = 0; i < that.entity.values.length; i++) {\n that.sdk.viewer.entities.remove(that.entity.values[i]);\n }\n that.entity.removeAll();\n wallPositions = [];\n topPositions = [];\n var _loop9 = function _loop9(_i20) {\n var fromDegreesArray = [];\n var fromDegreesArray2 = [];\n for (var n = 0; n < _positions[_i20].length; n++) {\n fromDegreesArray.push(_positions[_i20][n][0], _positions[_i20][n][1], _positions[_i20][n][2]);\n fromDegreesArray2.push(_positions[_i20][n][0], _positions[_i20][n][1], _positions[_i20][n][2] + that.options.extrudedHeight);\n }\n wallPositions.push(fromDegreesArray);\n topPositions.push(fromDegreesArray2);\n var wall = that.sdk.viewer.entities.add({\n id: that.options.id + '-' + WallRealStereoscopic.randomString(12),\n polylineVolume: {\n positions: isCallback ? new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArrayHeights(wallPositions[_i20]);\n }, false) : Cesium.Cartesian3.fromDegreesArrayHeights(wallPositions[_i20]),\n shape: [{\n x: -0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: that.options.extrudedHeight / 2\n }, {\n x: -0.0000001,\n y: that.options.extrudedHeight / 2\n }],\n cornerType: Cesium.CornerType.MITERED\n }\n });\n var top = that.sdk.viewer.entities.add({\n id: that.options.id + '-' + WallRealStereoscopic.randomString(12),\n polygon: {\n hierarchy: isCallback ? new Cesium.CallbackProperty(function () {\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(topPositions[_i20]));\n }, false) : new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(topPositions[_i20])),\n perPositionHeight: true,\n material: Cesium.Color.fromCssColorString(that.options.color)\n }\n });\n that.entity.add(wall);\n that.entity.add(top);\n wall.polylineVolume.material = that.getMaterial(wall.id);\n };\n for (var _i20 = 0; _i20 < _positions.length; _i20++) {\n _loop9(_i20);\n }\n }\n };\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_16__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var positions = that.options.positions;\n var fromDegreesArray = [];\n var fromDegreesArray2 = [];\n var array = [];\n var wallPositions = [];\n var topPositions = [];\n var isAdd = false;\n var firstMove = true;\n var leftEvent = function leftEvent(movement, cartesian) {\n firstMove = true;\n if (selectPoint) {\n isAdd = true;\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(that.entity.values));\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n originalPosition = that.options.positions[selectPoint.index];\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, that.options.positions[selectPoint.index].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n update(true);\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n that.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n that.material = that.material;\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键开始,右键结束,CTRL+右键撤销');\n originalPosition = that.cartesian3Towgs84(selectPoint.position._value, that.sdk.viewer);\n // that.entity.polylineVolume.positions = new Cesium.CallbackProperty(function () {\n // return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n // }, false)\n update(true);\n }\n }\n };\n var rightEvent = function rightEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = originalPosition;\n if (isAdd) {\n that.options.positions.splice(selectPoint.index, 1);\n }\n update();\n cb(null, that.options.positions);\n }\n // that.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n for (var i = 0; i < that.nodePoints.length; i++) {\n that.sdk.viewer.entities.remove(that.nodePoints[i]);\n }\n that.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n that.material = that.material;\n };\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(that.entity.values));\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n var _positions2 = that.calculatePositions();\n for (var i = 0; i < _positions2.length; i++) {\n var _fromDegreesArray = [];\n var _fromDegreesArray2 = [];\n for (var n = 0; n < _positions2[i].length; n++) {\n _fromDegreesArray.push(_positions2[i][n][0], _positions2[i][n][1], _positions2[i][n][2]);\n _fromDegreesArray2.push(_positions2[i][n][0], _positions2[i][n][1], _positions2[i][n][2] + that.options.extrudedHeight);\n }\n wallPositions[i] = _fromDegreesArray;\n topPositions[i] = _fromDegreesArray2;\n }\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n // if (firstMove) {\n // firstMove = false\n // that.material = that.material\n // return\n // }\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n firstMove = true;\n that.options.positions.pop();\n update(true);\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = 0;\n }\n }\n that.nodePoints.pop();\n }\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n for (var i = 0; i < that.options.positions.length; i++) {\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: i,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[i].lng, that.options.positions[i].lat, that.options.positions[i].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n }\n }\n }\n }, {\n key: \"randomString\",\n value: function randomString(e) {\n e = e || 32;\n var t = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678',\n a = t.length,\n n = '';\n for (var i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));\n return n;\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (WallRealStereoscopic);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFJlYWxTdGVyZW9zY29waWMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvV2FsbFJlYWxTdGVyZW9zY29waWMvaW5kZXguanM/Yzk3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGRlc2NyaXB0aW9uIOWunuS9k+WimVxyXG4gKi9cclxuaW1wb3J0IHsgZ2V0SG9zdCB9IGZyb20gXCIuLi8uLi8uLi9vblwiO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IGN5X3RhYnMgZnJvbSBcIi4uLy4uL0VsZW1lbnQvY3lfaHRtbF90YWJzXCI7XHJcbmltcG9ydCByaWNoVGV4dCBmcm9tIFwiLi4vLi4vRWxlbWVudC9yaWNoVGV4dFwiO1xyXG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vX2VsZW1lbnRcIjtcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCBMYWJlbE9iamVjdCBmcm9tICcuLi9MYWJlbE9iamVjdCdcclxuaW1wb3J0IEV2ZW50QmluZGluZyBmcm9tICcuL2V2ZW50QmluZGluZydcclxuaW1wb3J0IE1vdXNlRXZlbnQgZnJvbSAnLi4vLi4vLi4vRXZlbnQnXHJcbmltcG9ydCBNb3VzZVRpcCBmcm9tICcuLi8uLi8uLi9Nb3VzZVRpcCdcclxuaW1wb3J0IHsgc3luY0RhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvTXVsdGlWaWV3cG9ydE1vZGUnXHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuLi8uLi9FbGVtZW50L2RhdGFsaXN0JztcclxuaW1wb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHlOYW1lIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9mb250U2VsZWN0J1xyXG5pbXBvcnQgUG9seWxpbmVJbWFnZVRyYWlsTWF0ZXJpYWxQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vTWF0ZXJhaWwvUG9seWxpbmVJbWFnZVRyYWlsTWF0ZXJpYWxQcm9wZXJ0eVwiO1xyXG5pbXBvcnQgRmxvd1BpY3R1cmVNYXRlcmlhbFByb3BlcnR5IGZyb20gXCIuLi8uLi9NYXRlcmFpbC9GbG93UGljdHVyZU1hdGVyaWFsUHJvcGVydHlcIjtcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIHNldEFjdGl2ZUlkIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuJ1xyXG5cclxuY2xhc3MgV2FsbFJlYWxTdGVyZW9zY29waWMgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrXHJcbiAgICogQGRlc2NyaXB0aW9uIOWunuS9k+WbtOWimVxyXG4gICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IOWimeWxnuaAp1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmlkIHtzdHJpbmd9IOWUr+S4gOagh+ivhlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWUge3N0cmluZ30g5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY29sb3I9XCIjZmZmZmZmXCIge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMud2lkdGg9MC4yNCB7bnVtYmVyfSDlrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5vc2VUb1RhaWw9ZmFsc2Uge2Jvb2xlYW59IOmmluWwvuebuOi/nlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0PTIuNCB7bnVtYmVyfSDmi4nkvLjpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb3JuZXJUeXBlPTAge3N0cmluZ30g5ouQ6KeS57G75Z6LOzDvvJrnm7Top5LvvJsx77ya5pac6KeS77ybMu+8muWchuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1hdGVyaWFsPTAge251bWJlcn0g5p2Q6LSo77yMMO+8mue6r+iJsuWime+8mzHvvJrnuqLnoJbvvJsy77ya6buE56CW77ybM++8mueBsOeTt1xyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMucG9zaXRpb25zIOW/heWhq++8jOe7j+e6rOW6puWSjOmrmOW6pueahOWIl+ihqO+8jOWAvOS6pOabvyBbe2xvbixsYXQsYWx0fSwuLi5dXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwge29iamVjdH0g5qCH562+5a+56LGhXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwudGV4dCB7c3RyaW5nfSDmoIfnrb7mlofmnKxcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5zaG93IHtzdHJpbmd9IOagh+etvuaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtzdHJpbmd9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uIHtvYmplY3R9IOagh+etvuS9jee9rlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRTaXplPTIwIHtudW1iZXJ9IOWtl+S9k+Wkp+Wwj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZvbnRGYW1pbHk9MCB7bnVtYmVyfSDlrZfkvZPpobkgMO+8mum7keS9k++8mzHvvJrmgJ3mupDpu5HkvZPvvJsy77ya5bqe6Zeo5q2j6YGT5qCH6aKY5L2T77ybM++8muaVsOm7keS9k1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmNvbG9yPSNmZmZmZmYge3N0cmluZ30g5a2X5L2T6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZVdpZHRoPTQge251bWJlcn0g5byV57q/5a69XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubGluZUNvbG9yPSMwMGZmZmY4MCB7c3RyaW5nfSDlvJXnur/popzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldD0yMCB7bnVtYmVyfSDlrZfkvZPlgY/np7so5byV57q/6ZW/5bqmKVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcj1bJyMwMGZmZmY4MCcsICcjMDBmZmZmODAnXSB7YXJyYXl9IOiDjOaZr+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSB7Ym9vbGVhbn0g6Led56a757yp5pS+XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwubmVhcj0yMDAwIHtudW1iZXJ9IOinhumHjue8qeaUvuacgOi/kei3neemu1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLmZhcj0xMDAwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+c6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlIHtvYmplY3R9IOWxnuaAp+WGheWuuVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rPXt9IOmTvuaOpVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQ9W11dIHthcnJheX0g6ZO+5o6l5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLm5hbWUge3N0cmluZ30g6ZO+5o6l5ZCN56ewXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtdLnVybCB7c3RyaW5nfSDpk77mjqXlnLDlnYBcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5yaWNoVGV4dENvbnRlbnQge3N0cmluZ30g5a+M5paH5pys5YaF5a65XHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldyB7b2JqZWN0fSDpu5jorqTop4bop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uIHtvYmplY3R9IOm7mOiupOinhuinkuaWueS9jVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB7bnVtYmVyfSDoiKrlkJHop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnBpdGNoIHtudW1iZXJ9IOS/r+S7sOinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucm9sbCB7bnVtYmVyfSDnv7vmu5rop5JcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ge29iamVjdH0g6KeG6KeS55u45a+55L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihzZGssIG9wdGlvbnMsIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IG9wdGlvbnMuY29sb3IgfHwgXCIjZmZmZmZmXCJcclxuICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgMC4yNFxyXG4gICAgdGhpcy5vcHRpb25zWydub3NlLXRvLXRhaWwnXSA9IG9wdGlvbnNbJ25vc2UtdG8tdGFpbCddIHx8IGZhbHNlXHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgPSBvcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IHx8IDIuNFxyXG4gICAgdGhpcy5jb3JuZXJUeXBlID0gb3B0aW9ucy5jb3JuZXJUeXBlXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIHRoaXMub3B0aW9ucy5tYXRlcmlhbCA9IE51bWJlcihvcHRpb25zLm1hdGVyaWFsKSB8fCAwXHJcbiAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IChvcHRpb25zLnNob3cgfHwgb3B0aW9ucy5zaG93ID09PSBmYWxzZSkgPyBvcHRpb25zLnNob3cgOiB0cnVlXHJcbiAgICB0aGlzLmVudGl0eVxyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmluc3RydWN0ID0gb3B0aW9ucy5pbnN0cnVjdCB8fCBcIlwiXHJcbiAgICB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSBvcHRpb25zLm9wZXJhdGluZ1BvaW50IHx8IFwiXCJcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlID0gb3B0aW9ucy5hdHRyaWJ1dGVUeXBlIHx8ICdyaWNoVGV4dCdcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn5pyA5bCR6ZyA6KaB5Lik5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICBXYWxsUmVhbFN0ZXJlb3Njb3BpYy5jcmVhdGUodGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuICdXYWxsUmVhbFN0ZXJlb3Njb3BpYydcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVMYWJlbCh0aGF0KSB7XHJcbiAgICAvLyDmoIfnrb5cclxuICAgIHRoYXQubGFiZWwgPSBuZXcgTGFiZWxPYmplY3QodGhhdC5zZGssIHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3cgPyB0aGF0Lm9wdGlvbnMubGFiZWwuc2hvdyA6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHQgKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdLFxyXG4gICAgICB0ZXh0OiB0aGF0Lm9wdGlvbnMubmFtZSxcclxuICAgICAgZm9udFNpemU6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250U2l6ZSxcclxuICAgICAgZm9udEZhbWlseTogdGhhdC5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHksXHJcbiAgICAgIGNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwuY29sb3IsXHJcbiAgICAgIGdyb3VuZDogZmFsc2UsXHJcbiAgICAgIHBpeGVsT2Zmc2V0OiB0aGF0Lm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgbGluZUNvbG9yOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZUNvbG9yLFxyXG4gICAgICBsaW5lV2lkdGg6IHRoYXQub3B0aW9ucy5sYWJlbC5saW5lV2lkdGgsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogdGhhdC5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSxcclxuICAgICAgbmVhcjogdGhhdC5vcHRpb25zLmxhYmVsLm5lYXIsXHJcbiAgICAgIGZhcjogdGhhdC5vcHRpb25zLmxhYmVsLmZhclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICB9XHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHZcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmVudGl0eS52YWx1ZXNbaV0ucG9seWxpbmVWb2x1bWUpIHtcclxuICAgICAgICAgIGxldCB3YWxsID0gdGhpcy5lbnRpdHkudmFsdWVzW2ldXHJcbiAgICAgICAgICB3YWxsLnBvbHlsaW5lVm9sdW1lLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbCh3YWxsLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5lbnRpdHkudmFsdWVzW2ldLnBvbHlnb24pIHtcclxuICAgICAgICAgIGxldCB0b3AgPSB0aGlzLmVudGl0eS52YWx1ZXNbaV1cclxuICAgICAgICAgIHRvcC5wb2x5Z29uLm1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2VsbXMuY29sb3IpIHtcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiBmYWxzZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB2LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmNvbG9yW2ldID0gY29sb3JQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB3aWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMud2lkdGhcclxuICB9XHJcbiAgc2V0IHdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHZcclxuICAgIGlmICh0aGlzLm9wdGlvbnMud2lkdGggPD0gMC4wMSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSAwLjAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB0aGlzLl9lbG1zLndpZHRoICYmIHRoaXMuX2VsbXMud2lkdGguZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBjb3JuZXJUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb3JuZXJUeXBlXHJcbiAgfVxyXG4gIHNldCBjb3JuZXJUeXBlKHYpIHtcclxuICAgIHN3aXRjaCAodikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIHYgPSAwXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgdiA9IDFcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgICB2ID0gMlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHYgPSAwXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29ybmVyVHlwZSA9IHZcclxuICAgIHRoaXMudXBkYXRlKClcclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lVm9sdW1lLmNvcm5lclR5cGUgPSBDZXNpdW0uQ29ybmVyVHlwZVt0aGlzLm9wdGlvbnMuY29ybmVyVHlwZV1cclxuICAgIHRoaXMuX2VsbXMuY29ybmVyVHlwZSAmJiB0aGlzLl9lbG1zLmNvcm5lclR5cGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBtYXRlcmlhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWF0ZXJpYWxcclxuICB9XHJcbiAgc2V0IG1hdGVyaWFsKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5tYXRlcmlhbCA9IE51bWJlcih2KVxyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5LnZhbHVlc1tpXS5wb2x5bGluZVZvbHVtZSkge1xyXG4gICAgICAgICAgbGV0IHdhbGwgPSB0aGlzLmVudGl0eS52YWx1ZXNbaV1cclxuICAgICAgICAgIHdhbGwucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHdhbGwuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLm1hdGVyaWFsICYmIHRoaXMuX2VsbXMubWF0ZXJpYWwuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBub3NlVG9UYWlsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1snbm9zZS10by10YWlsJ11cclxuICB9XHJcblxyXG4gIHNldCBub3NlVG9UYWlsKHYpIHtcclxuICAgIHRoaXMub3B0aW9uc1snbm9zZS10by10YWlsJ10gPSB2XHJcbiAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFxyXG4gICAgdGhpcy5fZWxtcy5ub3NlVG9UYWlsICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubm9zZVRvVGFpbC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBleHRydWRlZEhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRcclxuICB9XHJcbiAgc2V0IGV4dHJ1ZGVkSGVpZ2h0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCA9IHZcclxuICAgIHRoaXMubGFiZWwucG9zaXRpb24gPSBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodF1cclxuICAgIHRoaXMudXBkYXRlKClcclxuICAgIHRoaXMuX2VsbXMuZXh0cnVkZWRIZWlnaHQgJiYgdGhpcy5fZWxtcy5leHRydWRlZEhlaWdodC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsU2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2hvd1xyXG4gIH1cclxuICBzZXQgbGFiZWxTaG93KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ID0gdlxyXG4gICAgaWYgKHRoaXMuc2hvdyAmJiAhdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMpIHtcclxuICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdlxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2hvdyAmJiB0aGlzLl9lbG1zLmxhYmVsU2hvdy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250RmFtaWx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5XHJcbiAgfVxyXG5cclxuICBzZXQgbGFiZWxGb250RmFtaWx5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5ID0gdiB8fCAwXHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLmZvbnRGYW1pbHkgPSB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSlcclxuXHJcbiAgICBsZXQgbmFtZSA9IGdldEZvbnRGYW1pbHlOYW1lKHRoaXMubGFiZWxGb250RmFtaWx5KSB8fCAnJ1xyXG4gICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgJiZcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLnZhbHVlID0gbmFtZVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbENvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvciA9IHZcclxuICAgIHRoaXMubGFiZWwuY29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbENvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3JbaV0gPSBsYWJlbENvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGb250U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICB9XHJcbiAgc2V0IGxhYmVsRm9udFNpemUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplID0gdlxyXG4gICAgdGhpcy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250U2l6ZSAmJiB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlXHJcbiAgfVxyXG4gIHNldCBsYWJlbFNjYWxlQnlEaXN0YW5jZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlICYmIHRoaXMuX2VsbXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTmVhcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubmVhclxyXG4gIH1cclxuICBzZXQgbGFiZWxOZWFyKHYpIHtcclxuICAgIGxldCBuZWFyID0gdlxyXG4gICAgaWYgKG5lYXIgPiB0aGlzLmxhYmVsRmFyKSB7XHJcbiAgICAgIG5lYXIgPSB0aGlzLmxhYmVsRmFyXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMubGFiZWwubmVhciA9IG5lYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxOZWFyICYmIHRoaXMuX2VsbXMubGFiZWxOZWFyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IG5lYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxGYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZhclxyXG4gIH1cclxuICBzZXQgbGFiZWxGYXIodikge1xyXG4gICAgbGV0IGZhciA9IHZcclxuICAgIGlmIChmYXIgPCB0aGlzLmxhYmVsTmVhcikge1xyXG4gICAgICBmYXIgPSB0aGlzLmxhYmVsTmVhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmZhciA9IGZhclxyXG4gICAgdGhpcy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGYXIgJiYgdGhpcy5fZWxtcy5sYWJlbEZhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBmYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxMaW5lV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gIH1cclxuICBzZXQgbGFiZWxMaW5lV2lkdGgodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMubGFiZWwubGluZVdpZHRoID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aCAmJiB0aGlzLl9lbG1zLmxhYmVsTGluZVdpZHRoLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxQaXhlbE9mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICB9XHJcbiAgc2V0IGxhYmVsUGl4ZWxPZmZzZXQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0ID0gdlxyXG4gICAgdGhpcy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxQaXhlbE9mZnNldCAmJiB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IGxhYmVsTGluZUNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZUNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVDb2xvciA9IHZcclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbExpbmVDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMCwyNTUsMjU1LDAuNSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yW2ldID0gbGluZUNvbG9yUGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt2LCB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXV1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQpIHtcclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFtpXSA9IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1cclxuICB9XHJcbiAgc2V0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV0gPSB2XHJcbiAgICB0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvciA9IFt0aGlzLmxhYmVsLmJhY2tncm91bmRDb2xvclswXSwgdl1cclxuICAgIGlmICh0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvckVuZFBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGluc3RydWN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbnN0cnVjdFxyXG4gIH1cclxuICBzZXQgaW5zdHJ1Y3Qodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmluc3RydWN0ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5pbnN0cnVjdCAmJiB0aGlzLl9lbG1zLmluc3RydWN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgb3BlcmF0aW5nUG9pbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wZXJhdGluZ1BvaW50XHJcbiAgfVxyXG4gIHNldCBvcGVyYXRpbmdQb2ludCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLm9wZXJhdGluZ1BvaW50ICYmIHRoaXMuX2VsbXMub3BlcmF0aW5nUG9pbnQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlVHlwZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IHZcclxuICAgIHRoaXMuX2VsbXMuYXR0cmlidXRlVHlwZSAmJiB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICAgIGxldCBhdHRyaWJ1dGVDb250ZW50ID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQnKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChhdHRyaWJ1dGVDb250ZW50W2ldLmNsYXNzTmFtZS5pbmRleE9mKCdhdHRyaWJ1dGUtY29udGVudC0nICsgdikgPiAtMSkge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYXR0cmlidXRlQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUxpbmsodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS5uYW1lICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+YCArIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwibGlua0VkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtEZWxldGVcIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gXHJcbiAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICB9XHJcbiAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICBsZXQgZnVuID0ge1xyXG4gICAgICBsaW5rRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1saW5rJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLnVybFxyXG4gICAgICAgICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXSh7IG5hbWU6IHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUsIHVybDogdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSB9LCBpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBsaW5rRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpbGVTZWxlY3Q6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWxlRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmaWxlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgZmlsZUVsbS5jbGljaygpXHJcbiAgICAgICAgZmlsZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICAgIGZpbGVFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVTZWxlY3QgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgIGxldCB0ZCA9IGl0ZW1bZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgIHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYnRuID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBidG4ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICBpZiAoIWJ0bltuXSB8fCAhYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtIG9mIGJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBpZiAobS5uYW1lID09PSAnQGNsaWNrJykge1xyXG4gICAgICAgICAgICBidG5bbl0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZ1blttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1blttLnZhbHVlXShpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlQ2FtZXJhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVDYW1lcmEodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVJU0MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUlTQyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50ID0gdlxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZVZyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVZyKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHZcclxuICAgIGlmICghdGhpcy5fRGlhbG9nT2JqZWN0IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJykubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdGFibGUgPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRyID0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0udXJsICsgYDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckVkaXRcIj7nvJbovpE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cInZyRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgdnJFZGl0OiBhc3luYyAoaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gYXdhaXQgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaXRlbVtpXS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dCBsaW5rLWVkaXRcIiB0eXBlPVwidGV4dFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUVkaXRcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxFZGl0XCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICBpdGVtW2ldLmlubmVySFRNTCA9IGh0bWxcclxuICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxtID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rLWVkaXQnKVswXVxyXG4gICAgICAgICAgICB0ZXh0YXJlYUVsbS5zdHlsZS5oZWlnaHQgPSAoaGVpZ2h0IC0gMTApICsgJ3B4J1xyXG4gICAgICAgICAgICBsZXQgdGQgPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICAgICAgdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0ubmFtZVxyXG4gICAgICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdnJEZWxldGU6IChpKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnNwbGljZShpLCAxKVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbmZpcm1FZGl0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHZhbHVlLm5hbWUgJiYgdmFsdWUubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBsZXQgdXJsID0gdmFsdWUudXJsICYmIHZhbHVlLnVybC5yZXBsYWNlKC9cXHMvZywgXCJcIilcclxuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpXSA9IHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LkVMRU1FTlQgJiYgd2luZG93LkVMRU1FTlQuTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICflkI3np7DmiJbpk77mjqXkuI3og73kuLrnqbrvvIEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBjYW5jZWxFZGl0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUdvb2RzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZUdvb2RzKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVBvc2l0aW9uczMoKSB7XHJcbiAgICBsZXQgb3B0aW9uc1Bvc2l0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIGlmICh0aGlzLm5vc2VUb1RhaWwpIHtcclxuICAgICAgb3B0aW9uc1Bvc2l0aW9ucy5wdXNoKG9wdGlvbnNQb3NpdGlvbnNbMF0sIG9wdGlvbnNQb3NpdGlvbnNbMV0pXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zMSA9IFtdXHJcbiAgICBsZXQgcG9zMiA9IFtdXHJcbiAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgIGxldCBmb3J3YXJkID0gW11cclxuICAgIGxldCByZXZlcnNlID0gW11cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnNQb3NpdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3QxID0gdHVyZi5wb2ludChbb3B0aW9uc1Bvc2l0aW9uc1tpXS5sbmcsIG9wdGlvbnNQb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgICAgbGV0IHBvdDIgPSB0dXJmLnBvaW50KFtvcHRpb25zUG9zaXRpb25zW2kgKyAxXS5sbmcsIG9wdGlvbnNQb3NpdGlvbnNbaSArIDFdLmxhdF0pXHJcbiAgICAgIGxldCBiZWFyaW5nID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MSwgcG90Mik7XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbiA9IHR1cmYuZGVzdGluYXRpb24ocG90MSwgdGhpcy5vcHRpb25zLndpZHRoIC8gMiAvIDEwMDAsIGJlYXJpbmcgKyA5MCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgZGVzdGluYXRpb24yID0gdHVyZi5kZXN0aW5hdGlvbihwb3QyLCB0aGlzLm9wdGlvbnMud2lkdGggLyAyIC8gMTAwMCwgYmVhcmluZyArIDkwLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbjMgPSB0dXJmLmRlc3RpbmF0aW9uKHBvdDEsIHRoaXMub3B0aW9ucy53aWR0aCAvIDIgLyAxMDAwLCBiZWFyaW5nIC0gOTAsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uNCA9IHR1cmYuZGVzdGluYXRpb24ocG90MiwgdGhpcy5vcHRpb25zLndpZHRoIC8gMiAvIDEwMDAsIGJlYXJpbmcgLSA5MCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgY29vcmRpbmF0ZXMgPSBkZXN0aW5hdGlvbi5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBsZXQgY29vcmRpbmF0ZXMyID0gZGVzdGluYXRpb24yLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGxldCBjb29yZGluYXRlczMgPSBkZXN0aW5hdGlvbjMuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgbGV0IGNvb3JkaW5hdGVzNCA9IGRlc3RpbmF0aW9uNC5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb29yZGluYXRlc1syXSA9IG9wdGlvbnNQb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgIGNvb3JkaW5hdGVzMlsyXSA9IG9wdGlvbnNQb3NpdGlvbnNbaSArIDFdLmFsdFxyXG4gICAgICBjb29yZGluYXRlczNbMl0gPSBvcHRpb25zUG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICBjb29yZGluYXRlczRbMl0gPSBvcHRpb25zUG9zaXRpb25zW2kgKyAxXS5hbHRcclxuICAgICAgcG9zMS5wdXNoKGNvb3JkaW5hdGVzLCBjb29yZGluYXRlczIpXHJcbiAgICAgIHBvczIucHVzaChjb29yZGluYXRlczMsIGNvb3JkaW5hdGVzNClcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm7Top5JcclxuICAgIGlmICh0aGlzLmNvcm5lclR5cGUgPT09IDApIHsgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb3JuZXJUeXBlID09PSAxKSB7XHJcbiAgICAgIC8vIOaWnOinklxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvczEubGVuZ3RoIC0gMzsgaSArPSAyKSB7XHJcblxyXG4gICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgIGZvcndhcmQucHVzaChwb3MxW2ldKVxyXG4gICAgICAgICAgcmV2ZXJzZS5wdXNoKHBvczJbaV0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3J3YXJkLnB1c2gocG9zMVtpICsgMV0sIHBvczFbaSArIDJdKVxyXG4gICAgICAgIHJldmVyc2UucHVzaChwb3MyW2kgKyAxXSwgcG9zMltpICsgMl0pXHJcblxyXG4gICAgICAgIGlmIChpID09IHBvczEubGVuZ3RoIC0gNCkge1xyXG4gICAgICAgICAgZm9yd2FyZC5wdXNoKHBvczFbaSArIDNdKVxyXG4gICAgICAgICAgcmV2ZXJzZS5wdXNoKHBvczJbaSArIDNdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuY29ybmVyVHlwZSA9PT0gMikge1xyXG4gICAgICAvLyDlnIbop5JcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3MxLmxlbmd0aCAtIDM7IGkgKz0gMikge1xyXG4gICAgICAgIGxldCBjZW50ZXIgPSBvcHRpb25zUG9zaXRpb25zWyhpIC8gMikgKyAxXVxyXG4gICAgICAgIGxldCBwb3QxID0gdHVyZi5wb2ludChwb3MxW2kgKyAxXSlcclxuICAgICAgICBsZXQgcG90MiA9IHR1cmYucG9pbnQocG9zMltpICsgMV0pXHJcbiAgICAgICAgbGV0IGJlYXJpbmcxID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MSwgcG90Mik7XHJcbiAgICAgICAgbGV0IHBvdDMgPSB0dXJmLnBvaW50KHBvczFbaSArIDJdKVxyXG4gICAgICAgIGxldCBwb3Q0ID0gdHVyZi5wb2ludChwb3MyW2kgKyAyXSlcclxuICAgICAgICBsZXQgYmVhcmluZzIgPSB0dXJmLnJodW1iQmVhcmluZyhwb3QzLCBwb3Q0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnYmVhcmluZzEsIGJlYXJpbmcyJywgKGJlYXJpbmcxIC0gYmVhcmluZzIpKVxyXG4gICAgICAgIGxldCBmYWNlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChNYXRoLnNpbihDZXNpdW0uTWF0aC50b1JhZGlhbnMoYmVhcmluZzEgLSBiZWFyaW5nMikpID4gMCkge1xyXG4gICAgICAgICAgbGV0IHRlbXBvcmFyeSA9IGJlYXJpbmcxXHJcbiAgICAgICAgICBiZWFyaW5nMSA9IGJlYXJpbmcyICsgMTgwXHJcbiAgICAgICAgICBiZWFyaW5nMiA9IHRlbXBvcmFyeSArIDE4MFxyXG4gICAgICAgICAgZmFjZSA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWN0b3IgPSB0dXJmLnNlY3RvcihbY2VudGVyLmxuZywgY2VudGVyLmxhdCwgY2VudGVyLmFsdF0sIHRoaXMub3B0aW9ucy53aWR0aCAvIDEwMDAgLyAyLCBiZWFyaW5nMSwgYmVhcmluZzIsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2VjdG9yJywgc2VjdG9yKVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgZm9yd2FyZC5wdXNoKHBvczFbaV0pXHJcbiAgICAgICAgICByZXZlcnNlLnB1c2gocG9zMltpXSlcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnZmFjZScsIGZhY2UpXHJcbiAgICAgICAgaWYgKGZhY2UpIHtcclxuICAgICAgICAgIGZvcndhcmQucHVzaChwb3MxW2kgKyAxXSwgcG9zMVtpICsgMl0pXHJcbiAgICAgICAgICBmb3IgKGxldCBuID0gMTsgbiA8IHNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5sZW5ndGggLSAxOyBuKyspIHtcclxuICAgICAgICAgICAgcmV2ZXJzZS5wdXNoKFsuLi5zZWN0b3IuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1bbl0sIHBvczFbaSArIDFdWzJdXSlcclxuICAgICAgICAgICAgLy8gdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICAgIC8vICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKC4uLnNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXVtuXSwgcG9zMVtpICsgMV1bMl0pLFxyXG4gICAgICAgICAgICAvLyAgIC8vIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAvLyAgIC8vICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICAgIC8vICAgLy8gICB3aWR0aDogMTUsXHJcbiAgICAgICAgICAgIC8vICAgLy8gICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAvLyAgIC8vICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICAgIC8vICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gICBsYWJlbDoge1xyXG4gICAgICAgICAgICAvLyAgICAgdGV4dDogbisnJyxcclxuICAgICAgICAgICAgLy8gICAgIGZvbnQ6ICcxMnB4IE1pY3Jvc29mdCBZYUhlaScsXHJcbiAgICAgICAgICAgIC8vICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcoJyNmMWU2MDUnKSxcclxuICAgICAgICAgICAgLy8gICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgICAgICAgICAvLyAgICAgaG9yaXpvbnRhbE9yaWdpbjogQ2VzaXVtLkhvcml6b250YWxPcmlnaW4uQ0VOVEVSLFxyXG4gICAgICAgICAgICAvLyAgICAgdmVydGljYWxPcmlnaW46IENlc2l1bS5WZXJ0aWNhbE9yaWdpbi5CT1RUT00sXHJcbiAgICAgICAgICAgIC8vICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgbiA9IHNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5sZW5ndGggLSAyOyBuID4gMDsgbi0tKSB7XHJcbiAgICAgICAgICAgIGZvcndhcmQucHVzaChbLi4uc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdW25dLCBwb3MxW2kgKyAxXVsyXV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXZlcnNlLnB1c2gocG9zMltpICsgMV0sIHBvczJbaSArIDJdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGkgPT0gcG9zMS5sZW5ndGggLSA0KSB7XHJcbiAgICAgICAgICBmb3J3YXJkLnB1c2gocG9zMVtpICsgM10pXHJcbiAgICAgICAgICByZXZlcnNlLnB1c2gocG9zMltpICsgM10pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvczEubGVuZ3RoIC0gMzsgaSArPSAyKSB7XHJcbiAgICAgIC8vICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAvLyAgICAgZm9yd2FyZC5wdXNoKHBvczFbaV0pXHJcbiAgICAgIC8vICAgICByZXZlcnNlLnB1c2gocG9zMltpXSlcclxuICAgICAgLy8gICB9XHJcblxyXG4gICAgICAvLyAgIGZvcndhcmQucHVzaChwb3MxW2kgKyAxXSwgcG9zMVtpICsgMl0pXHJcbiAgICAgIC8vICAgcmV2ZXJzZS5wdXNoKHBvczJbaSArIDFdLCBwb3MyW2kgKyAyXSlcclxuXHJcbiAgICAgIC8vICAgaWYgKGkgPT0gcG9zMS5sZW5ndGggLSA0KSB7XHJcbiAgICAgIC8vICAgICBmb3J3YXJkLnB1c2gocG9zMVtpICsgM10pXHJcbiAgICAgIC8vICAgICByZXZlcnNlLnB1c2gocG9zMltpICsgM10pXHJcbiAgICAgIC8vICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAvLyAgIGxldCBwb3QxID0gdHVyZi5wb2ludChwb3MxW2ldKVxyXG4gICAgICAvLyAgIGxldCBwb3QyID0gdHVyZi5wb2ludChwb3MxW2kgKyAxXSlcclxuICAgICAgLy8gICBsZXQgYmVhcmluZzEgPSB0dXJmLnJodW1iQmVhcmluZyhwb3QxLCBwb3QyKTtcclxuICAgICAgLy8gICBsZXQgcG90MyA9IHR1cmYucG9pbnQocG9zMVtpICsgMl0pXHJcbiAgICAgIC8vICAgbGV0IHBvdDQgPSB0dXJmLnBvaW50KHBvczFbaSArIDNdKVxyXG4gICAgICAvLyAgIGxldCBiZWFyaW5nMiA9IHR1cmYucmh1bWJCZWFyaW5nKHBvdDMsIHBvdDQpO1xyXG5cclxuICAgICAgLy8gICBsZXQgbGluZTEgPSB0dXJmLmxpbmVTdHJpbmcoW3BvczFbaV0sIHBvczFbaSArIDFdXSk7XHJcbiAgICAgIC8vICAgbGV0IGxpbmUyID0gdHVyZi5saW5lU3RyaW5nKFtwb3MxW2kgKyAyXSwgcG9zMVtpICsgM11dKTtcclxuICAgICAgLy8gICBsZXQgaW50ZXJzZWN0cyA9IHR1cmYubGluZUludGVyc2VjdChsaW5lMSwgbGluZTIpO1xyXG4gICAgICAvLyAgIGlmIChpID09IDApIHtcclxuICAgICAgLy8gICAgIGZvcndhcmQucHVzaChwb3MxW2ldKVxyXG4gICAgICAvLyAgICAgcmV2ZXJzZS5wdXNoKHBvczJbaV0pXHJcbiAgICAgIC8vICAgfVxyXG5cclxuICAgICAgLy8gICBpZiAoaW50ZXJzZWN0cy5mZWF0dXJlc1swXSkge1xyXG4gICAgICAvLyAgICAgZm9yd2FyZC5wdXNoKFsuLi5pbnRlcnNlY3RzLmZlYXR1cmVzWzBdLmdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb3MxW2kgKyAxXVsyXV0pXHJcbiAgICAgIC8vICAgICBsZXQgc2VjdG9yID0gdHVyZi5zZWN0b3IoaW50ZXJzZWN0cy5mZWF0dXJlc1swXS5nZW9tZXRyeS5jb29yZGluYXRlcywgdGhpcy5vcHRpb25zLndpZHRoIC8gMTAwMCwgYmVhcmluZzEgLSA5MCwgYmVhcmluZzIgLSA5MCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICAvLyAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBzZWN0b3IuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0ubGVuZ3RoIC0gMTsgbisrKSB7XHJcbiAgICAgIC8vICAgICAgIHJldmVyc2UucHVzaChbLi4uc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdW25dLCBwb3MxW2kgKyAxXVsyXV0pXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAvLyAgICAgbGV0IHBvdDEgPSB0dXJmLnBvaW50KHBvczJbaV0pXHJcbiAgICAgIC8vICAgICBsZXQgcG90MiA9IHR1cmYucG9pbnQocG9zMltpICsgMV0pXHJcbiAgICAgIC8vICAgICBsZXQgYmVhcmluZzEgPSB0dXJmLnJodW1iQmVhcmluZyhwb3QxLCBwb3QyKTtcclxuICAgICAgLy8gICAgIGxldCBwb3QzID0gdHVyZi5wb2ludChwb3MyW2kgKyAyXSlcclxuICAgICAgLy8gICAgIGxldCBwb3Q0ID0gdHVyZi5wb2ludChwb3MyW2kgKyAzXSlcclxuICAgICAgLy8gICAgIGxldCBiZWFyaW5nMiA9IHR1cmYucmh1bWJCZWFyaW5nKHBvdDMsIHBvdDQpO1xyXG5cclxuICAgICAgLy8gICAgIGxldCBsaW5lMSA9IHR1cmYubGluZVN0cmluZyhbcG9zMltpXSwgcG9zMltpICsgMV1dKTtcclxuICAgICAgLy8gICAgIGxldCBsaW5lMiA9IHR1cmYubGluZVN0cmluZyhbcG9zMltpICsgMl0sIHBvczJbaSArIDNdXSk7XHJcbiAgICAgIC8vICAgICBsZXQgaW50ZXJzZWN0cyA9IHR1cmYubGluZUludGVyc2VjdChsaW5lMSwgbGluZTIpO1xyXG4gICAgICAvLyAgICAgaWYgKGludGVyc2VjdHMuZmVhdHVyZXNbMF0pIHtcclxuICAgICAgLy8gICAgICAgcmV2ZXJzZS5wdXNoKFsuLi5pbnRlcnNlY3RzLmZlYXR1cmVzWzBdLmdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb3MyW2kgKyAxXVsyXV0pXHJcbiAgICAgIC8vICAgICAgIGxldCBzZWN0b3IgPSB0dXJmLnNlY3RvcihpbnRlcnNlY3RzLmZlYXR1cmVzWzBdLmdlb21ldHJ5LmNvb3JkaW5hdGVzLCB0aGlzLm9wdGlvbnMud2lkdGggLyAxMDAwLCBiZWFyaW5nMiArIDkwLCBiZWFyaW5nMSArIDkwLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgIC8vICAgICAgIGZvciAobGV0IG4gPSBzZWN0b3IuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0ubGVuZ3RoIC0gMjsgbiA+PSAxOyBuLS0pIHtcclxuICAgICAgLy8gICAgICAgICBmb3J3YXJkLnB1c2goWy4uLnNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXVtuXSwgcG9zMltpICsgMV1bMl1dKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmIChpID09IHBvczEubGVuZ3RoIC0gNCkge1xyXG4gICAgICAvLyAgICAgZm9yd2FyZC5wdXNoKHBvczFbaSArIDNdKVxyXG4gICAgICAvLyAgICAgcmV2ZXJzZS5wdXNoKHBvczJbaSArIDNdKVxyXG4gICAgICAvLyAgIH1cclxuXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3NpdGlvbnMgPSBbLi4uZm9yd2FyZF1cclxuICAgIGZvciAobGV0IGkgPSByZXZlcnNlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHJldmVyc2VbaV0pXHJcbiAgICB9XHJcbiAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbnNbMF0pXHJcblxyXG5cclxuXHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgIC8vICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMoLi4ucG9zaXRpb25zW2ldKSxcclxuICAgIC8vICAgICAgIGxhYmVsOiB7XHJcbiAgICAvLyAgICAgICAgICAgdGV4dDogaSsnJyxcclxuICAgIC8vICAgICAgICAgICBmb250OiAnMThweCBNaWNyb3NvZnQgWWFIZWknLFxyXG4gICAgLy8gICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZygnI2YxZTYwNScpLFxyXG4gICAgLy8gICAgICAgICAgIHN0eWxlOiBDZXNpdW0uTGFiZWxTdHlsZS5GSUxMX0FORF9PVVRMSU5FLFxyXG4gICAgLy8gICAgICAgICAgIGhvcml6b250YWxPcmlnaW46IENlc2l1bS5Ib3Jpem9udGFsT3JpZ2luLkNFTlRFUixcclxuICAgIC8vICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpbjogQ2VzaXVtLlZlcnRpY2FsT3JpZ2luLkJPVFRPTSxcclxuICAgIC8vICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdwb3NpdGlvbnMnLCBwb3NpdGlvbnMpXHJcbiAgICByZXR1cm4gcG9zaXRpb25zXHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVQb3NpdGlvbnMyKCkge1xyXG4gICAgLy8gbGV0IGNvbGxlY3Rpb24gPSBuZXcgQ2VzaXVtLkVudGl0eUNvbGxlY3Rpb24oKVxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoIC0gMjsgaSsrKSB7XHJcbiAgICAgIGxldCBiZWFyaW5nID0gKDE4MCAtIGNhY3VsYXRlQW5nbGUodGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpXSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpICsgMV0sIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbaSArIDJdKSkgLyAyXHJcbiAgICAgIGxldCB3aWR0aCA9IE1hdGgudGFuKChiZWFyaW5nKSAqIE1hdGguUEkgLyAxODApICogKHRoaXMub3B0aW9ucy53aWR0aCAvIDIpXHJcbiAgICAgIGNvbnNvbGUubG9nKCd3aWR0aCcsIHdpZHRoLCBiZWFyaW5nKVxyXG4gICAgICBsZXQgbGluZTEgPSB0dXJmLmxpbmVTdHJpbmcoW1t0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1sxXS5sYXRdLCBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0XV0pO1xyXG4gICAgICBsZXQgbGluZTIgPSB0dXJmLmxpbmVTdHJpbmcoW1t0aGlzLm9wdGlvbnMucG9zaXRpb25zWzFdLmxuZywgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1sxXS5sYXRdLCBbdGhpcy5vcHRpb25zLnBvc2l0aW9uc1syXS5sbmcsIHRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMl0ubGF0XV0pO1xyXG4gICAgICBsZXQgc2xpY2VkMSA9IHR1cmYubGluZVNsaWNlQWxvbmcobGluZTEsIDAsIHdpZHRoIC8gMTAwMCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgc2xpY2VkMiA9IHR1cmYubGluZVNsaWNlQWxvbmcobGluZTIsIDAsIHdpZHRoIC8gMTAwMCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgcG9zMSA9IHNsaWNlZDEuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkMS5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXVxyXG4gICAgICBsZXQgcG9zMiA9IHNsaWNlZDIuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkMi5nZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGggLSAxXVxyXG4gICAgICBwb3MxWzJdID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1tpICsgMV0uYWx0XHJcbiAgICAgIHBvczJbMl0gPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2kgKyAxXS5hbHRcclxuICAgICAgcG9zaXRpb25zLnB1c2goW3BvczEsIHBvczJdKVxyXG4gICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMocG9zMVswXSwgcG9zMVsxXSwgcG9zMVsyXSksXHJcbiAgICAgICAgYmlsbGJvYXJkOiB7XHJcbiAgICAgICAgICBpbWFnZTogdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgIGhlaWdodDogMTUsXHJcbiAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgcG9zaXRpb246IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvczJbMF0sIHBvczJbMV0sIHBvczJbMl0pLFxyXG4gICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0U291cmNlUm9vdFBhdGgoKSArICcvaW1nL3BvaW50LnBuZycsXHJcbiAgICAgICAgICB3aWR0aDogMTUsXHJcbiAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgZGlzYWJsZURlcHRoVGVzdERpc3RhbmNlOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLndpdGhBbHBoYSgwLjk5KVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FjdWxhdGVBbmdsZShwMSwgcDIsIHAzKSB7XHJcbiAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFtwMS5sbmcsIHAxLmxhdF0pO1xyXG4gICAgICBsZXQgcG9pbnQyID0gdHVyZi5wb2ludChbcDIubG5nLCBwMi5sYXRdKTtcclxuICAgICAgbGV0IHBvaW50MyA9IHR1cmYucG9pbnQoW3AzLmxuZywgcDMubGF0XSk7XHJcbiAgICAgIGxldCBvcHRpb25zID0geyB1bml0czogJ2tpbG9tZXRlcnMnIH07XHJcbiAgICAgIGxldCBkaXN0YW5jZTEgPSB0dXJmLnJodW1iRGlzdGFuY2UocG9pbnQxLCBwb2ludDIsIG9wdGlvbnMpO1xyXG4gICAgICBsZXQgZGlzdGFuY2UyID0gdHVyZi5yaHVtYkRpc3RhbmNlKHBvaW50MywgcG9pbnQyLCBvcHRpb25zKTtcclxuICAgICAgbGV0IGRpc3RhbmNlID0gZGlzdGFuY2UxXHJcbiAgICAgIGlmIChkaXN0YW5jZTEgPiBkaXN0YW5jZTIpIHtcclxuICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlMlxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYmVhcmluZzEgPSB0dXJmLnJodW1iQmVhcmluZyhwb2ludDEsIHBvaW50MilcclxuICAgICAgbGV0IGJlYXJpbmcyID0gdHVyZi5yaHVtYkJlYXJpbmcocG9pbnQzLCBwb2ludDIpXHJcblxyXG4gICAgICBsZXQgYmVhcmluZyA9IE1hdGguYWJzKCgoYmVhcmluZzEgLSBiZWFyaW5nMikgKyAzNjApICUgMzYwKVxyXG4gICAgICBpZiAoYmVhcmluZyA+IDE4MCkge1xyXG4gICAgICAgIGJlYXJpbmcgPSAzNjAgLSBiZWFyaW5nXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJlYXJpbmdcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9zaXRpb25zXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVQb3NpdGlvbnMoKSB7XHJcbiAgICBsZXQgb3B0aW9uc1Bvc2l0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgIGlmICh0aGlzLm5vc2VUb1RhaWwpIHtcclxuICAgICAgb3B0aW9uc1Bvc2l0aW9ucy5wdXNoKG9wdGlvbnNQb3NpdGlvbnNbMF0sIG9wdGlvbnNQb3NpdGlvbnNbMV0pXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zMSA9IFtdXHJcbiAgICBsZXQgcG9zMiA9IFtdXHJcbiAgICBsZXQgcG9zaXRpb25zID0gW11cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnNQb3NpdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGxldCBwb3QxID0gdHVyZi5wb2ludChbb3B0aW9uc1Bvc2l0aW9uc1tpXS5sbmcsIG9wdGlvbnNQb3NpdGlvbnNbaV0ubGF0XSlcclxuICAgICAgbGV0IHBvdDIgPSB0dXJmLnBvaW50KFtvcHRpb25zUG9zaXRpb25zW2kgKyAxXS5sbmcsIG9wdGlvbnNQb3NpdGlvbnNbaSArIDFdLmxhdF0pXHJcbiAgICAgIGxldCBiZWFyaW5nID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MSwgcG90Mik7XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbiA9IHR1cmYuZGVzdGluYXRpb24ocG90MSwgdGhpcy5vcHRpb25zLndpZHRoIC8gMiAvIDEwMDAsIGJlYXJpbmcgKyA5MCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgZGVzdGluYXRpb24yID0gdHVyZi5kZXN0aW5hdGlvbihwb3QyLCB0aGlzLm9wdGlvbnMud2lkdGggLyAyIC8gMTAwMCwgYmVhcmluZyArIDkwLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvbjMgPSB0dXJmLmRlc3RpbmF0aW9uKHBvdDEsIHRoaXMub3B0aW9ucy53aWR0aCAvIDIgLyAxMDAwLCBiZWFyaW5nIC0gOTAsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uNCA9IHR1cmYuZGVzdGluYXRpb24ocG90MiwgdGhpcy5vcHRpb25zLndpZHRoIC8gMiAvIDEwMDAsIGJlYXJpbmcgLSA5MCwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG4gICAgICBsZXQgY29vcmRpbmF0ZXMgPSBkZXN0aW5hdGlvbi5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBsZXQgY29vcmRpbmF0ZXMyID0gZGVzdGluYXRpb24yLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgIGxldCBjb29yZGluYXRlczMgPSBkZXN0aW5hdGlvbjMuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcclxuICAgICAgbGV0IGNvb3JkaW5hdGVzNCA9IGRlc3RpbmF0aW9uNC5nZW9tZXRyeS5jb29yZGluYXRlc1xyXG4gICAgICBjb29yZGluYXRlc1syXSA9IG9wdGlvbnNQb3NpdGlvbnNbaV0uYWx0XHJcbiAgICAgIGNvb3JkaW5hdGVzMlsyXSA9IG9wdGlvbnNQb3NpdGlvbnNbaSArIDFdLmFsdFxyXG4gICAgICBjb29yZGluYXRlczNbMl0gPSBvcHRpb25zUG9zaXRpb25zW2ldLmFsdFxyXG4gICAgICBjb29yZGluYXRlczRbMl0gPSBvcHRpb25zUG9zaXRpb25zW2kgKyAxXS5hbHRcclxuXHJcbiAgICAgIHBvczEucHVzaChbY29vcmRpbmF0ZXMsIGNvb3JkaW5hdGVzMiwgY29vcmRpbmF0ZXM0LCBjb29yZGluYXRlczMsIGNvb3JkaW5hdGVzXSlcclxuICAgIH1cclxuXHJcbiAgICBwb3NpdGlvbnMucHVzaChwb3MxWzBdKVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5jb3JuZXJUeXBlID09PSAwKSB7XHJcbiAgICAgIC8vIOebtOinklxyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBvczEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2VudGVyID0gb3B0aW9uc1Bvc2l0aW9uc1tpXVxyXG4gICAgICAgIGxldCBwb3QxID0gdHVyZi5wb2ludChwb3MxW2kgLSAxXVsxXSlcclxuICAgICAgICBsZXQgcG90MiA9IHR1cmYucG9pbnQocG9zMVtpIC0gMV1bMl0pXHJcbiAgICAgICAgbGV0IGJlYXJpbmcxID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MSwgcG90Mik7XHJcbiAgICAgICAgbGV0IHBvdDMgPSB0dXJmLnBvaW50KHBvczFbaV1bMF0pXHJcbiAgICAgICAgbGV0IHBvdDQgPSB0dXJmLnBvaW50KHBvczFbaV1bM10pXHJcbiAgICAgICAgbGV0IGJlYXJpbmcyID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MywgcG90NCk7XHJcbiAgICAgICAgbGV0IGZhY2UgPSB0cnVlXHJcbiAgICAgICAgaWYgKE1hdGguc2luKENlc2l1bS5NYXRoLnRvUmFkaWFucyhiZWFyaW5nMSAtIGJlYXJpbmcyKSkgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgdGVtcG9yYXJ5ID0gYmVhcmluZzFcclxuICAgICAgICAgIGJlYXJpbmcxID0gYmVhcmluZzIgKyAxODBcclxuICAgICAgICAgIGJlYXJpbmcyID0gdGVtcG9yYXJ5ICsgMTgwXHJcbiAgICAgICAgICBmYWNlID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGJlYXJpbmczID0gTWF0aC5hYnMoYmVhcmluZzEgLSBiZWFyaW5nMilcclxuICAgICAgICBpZiAoYmVhcmluZzMgPiAxODApIHtcclxuICAgICAgICAgIGJlYXJpbmczID0gMzYwIC0gYmVhcmluZzNcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gKHRoaXMub3B0aW9ucy53aWR0aCAvIDIpIC8gTWF0aC5jb3MoQ2VzaXVtLk1hdGgudG9SYWRpYW5zKGJlYXJpbmczIC8gMikpXHJcbiAgICAgICAgaWYgKGRpc3RhbmNlID4gdGhpcy5vcHRpb25zLndpZHRoICogNSkge1xyXG4gICAgICAgICAgZGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMud2lkdGggKiA1XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2VjdG9yID0gdHVyZi5zZWN0b3IoW2NlbnRlci5sbmcsIGNlbnRlci5sYXRdLCB0aGlzLm9wdGlvbnMud2lkdGggLyAxMDAwIC8gMiwgYmVhcmluZzEsIGJlYXJpbmcyLCB7IHVuaXRzOiAna2lsb21ldGVycycsIHN0ZXBzOiAzNjAwIH0pO1xyXG4gICAgICAgIGxldCBwb2ludDEgPSB0dXJmLnBvaW50KFtjZW50ZXIubG5nLCBjZW50ZXIubGF0XSk7XHJcbiAgICAgICAgbGV0IHBvaW50MiA9IHR1cmYucG9pbnQoWy4uLnNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXVtNYXRoLmNlaWwoc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLmxlbmd0aCAvIDIpXV0pO1xyXG5cclxuICAgICAgICBsZXQgYmVhcmluZyA9IHR1cmYuYmVhcmluZyhwb2ludDEsIHBvaW50Mik7XHJcbiAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gdHVyZi5kZXN0aW5hdGlvbihwb2ludDEsIGRpc3RhbmNlIC8gMTAwMCwgYmVhcmluZywgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pO1xyXG5cclxuICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgIGFycmF5LnB1c2goWy4uLnNlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXVswXSwgY2VudGVyLmFsdF0pXHJcbiAgICAgICAgYXJyYXkucHVzaChbLi4uc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdWzFdLCBjZW50ZXIuYWx0XSlcclxuICAgICAgICBhcnJheS5wdXNoKFsuLi5kZXN0aW5hdGlvbi5nZW9tZXRyeS5jb29yZGluYXRlcywgY2VudGVyLmFsdF0pXHJcbiAgICAgICAgYXJyYXkucHVzaChbLi4uc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdW3NlY3Rvci5nZW9tZXRyeS5jb29yZGluYXRlc1swXS5sZW5ndGggLSAyXSwgY2VudGVyLmFsdF0pXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYXJyYXkpXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocG9zMVtpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb3JuZXJUeXBlID09PSAxKSB7XHJcbiAgICAgIC8vIOaWnOinklxyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBvczEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChbcG9zMVtpIC0gMV1bMl0sIHBvczFbaV1bMF0sIHBvczFbaSAtIDFdWzFdLCBwb3MxW2ldWzNdLCBwb3MxW2kgLSAxXVsyXV0pXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocG9zMVtpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb3JuZXJUeXBlID09PSAyKSB7XHJcbiAgICAgIC8vIOWchuinklxyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBvczEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2VudGVyID0gb3B0aW9uc1Bvc2l0aW9uc1tpXVxyXG4gICAgICAgIGxldCBwb3QxID0gdHVyZi5wb2ludChwb3MxW2kgLSAxXVsxXSlcclxuICAgICAgICBsZXQgcG90MiA9IHR1cmYucG9pbnQocG9zMVtpIC0gMV1bMl0pXHJcbiAgICAgICAgbGV0IGJlYXJpbmcxID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MSwgcG90Mik7XHJcbiAgICAgICAgbGV0IHBvdDMgPSB0dXJmLnBvaW50KHBvczFbaV1bMF0pXHJcbiAgICAgICAgbGV0IHBvdDQgPSB0dXJmLnBvaW50KHBvczFbaV1bM10pXHJcbiAgICAgICAgbGV0IGJlYXJpbmcyID0gdHVyZi5yaHVtYkJlYXJpbmcocG90MywgcG90NCk7XHJcbiAgICAgICAgaWYgKE1hdGguc2luKENlc2l1bS5NYXRoLnRvUmFkaWFucyhiZWFyaW5nMSAtIGJlYXJpbmcyKSkgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgdGVtcG9yYXJ5ID0gYmVhcmluZzFcclxuICAgICAgICAgIGJlYXJpbmcxID0gYmVhcmluZzIgKyAxODBcclxuICAgICAgICAgIGJlYXJpbmcyID0gdGVtcG9yYXJ5ICsgMTgwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWN0b3IgPSB0dXJmLnNlY3RvcihbY2VudGVyLmxuZywgY2VudGVyLmxhdF0sIHRoaXMub3B0aW9ucy53aWR0aCAvIDEwMDAgLyAyLCBiZWFyaW5nMSwgYmVhcmluZzIsIHsgdW5pdHM6ICdraWxvbWV0ZXJzJyB9KTtcclxuICAgICAgICBsZXQgYXJyYXkgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLmxlbmd0aCAtIDE7IG4rKykge1xyXG4gICAgICAgICAgYXJyYXkucHVzaChbLi4uc2VjdG9yLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdW25dLCBjZW50ZXIuYWx0XSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYXJyYXkpXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocG9zMVtpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvc2l0aW9uc1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvL+WIm+W7ulxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUodGhhdCkge1xyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2UoKSwgbmV3IENlc2l1bS5Qb2x5bGluZVRyYWlsTGlua01hdGVyaWFsUHJvcGVydHkoKSlcclxuICAgIC8vIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAvLyBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAvLyBsZXQgbWluaW11bUhlaWdodHMgPSBbXVxyXG4gICAgLy8gbGV0IG1heGltdW1IZWlnaHRzID0gW11cclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgLy8gICBtaW5pbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAvLyAgIG1heGltdW1IZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmFsdCArIHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodClcclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGF0LmVudGl0eSA9IG5ldyBDZXNpdW0uRW50aXR5Q29sbGVjdGlvbigpXHJcblxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQuY2FsY3VsYXRlUG9zaXRpb25zKClcclxuICAgIGxldCBtYXhpbXVtSGVpZ2h0cyA9IFtdXHJcbiAgICBsZXQgbWluaW11bUhlaWdodHMgPSBbXVxyXG5cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcG9zaXRpb25zW2ldLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXVtuXVswXSwgcG9zaXRpb25zW2ldW25dWzFdLCBwb3NpdGlvbnNbaV1bbl1bMl0pXHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheTIucHVzaChwb3NpdGlvbnNbaV1bbl1bMF0sIHBvc2l0aW9uc1tpXVtuXVsxXSwgcG9zaXRpb25zW2ldW25dWzJdICsgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0KVxyXG4gICAgICB9XHJcbiAgICAgIGxldCB3YWxsID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCArICctJyArIFdhbGxSZWFsU3RlcmVvc2NvcGljLnJhbmRvbVN0cmluZygxMiksXHJcbiAgICAgICAgcG9seWxpbmVWb2x1bWU6IHtcclxuICAgICAgICAgIHBvc2l0aW9uczogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSksXHJcbiAgICAgICAgICBzaGFwZTogW1xyXG4gICAgICAgICAgICB7IHg6IC0wLjAwMDAwMDEsIHk6IC10aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICAgIHsgeDogMC4wMDAwMDAxLCB5OiAtdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAgICB7IHg6IDAuMDAwMDAwMSwgeTogdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAgICB7IHg6IC0wLjAwMDAwMDEsIHk6IHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBjb3JuZXJUeXBlOiBDZXNpdW0uQ29ybmVyVHlwZS5NSVRFUkVEXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IHRvcCA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQgKyAnLScgKyBXYWxsUmVhbFN0ZXJlb3Njb3BpYy5yYW5kb21TdHJpbmcoMTIpLFxyXG4gICAgICAgIHBvbHlnb246IHtcclxuICAgICAgICAgIGhpZXJhcmNoeTogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheTIpLFxyXG4gICAgICAgICAgcGVyUG9zaXRpb25IZWlnaHQ6IHRydWUsXHJcbiAgICAgICAgICBtYXRlcmlhbDogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgdGhhdC5lbnRpdHkuYWRkKHdhbGwpXHJcbiAgICAgIHRoYXQuZW50aXR5LmFkZCh0b3ApXHJcbiAgICAgIHdhbGwucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGF0LmdldE1hdGVyaWFsKHdhbGwuaWQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5lbnRpdHkuc2hvdyA9IHRoYXQub3B0aW9ucy5zaG93XHJcblxyXG4gICAgV2FsbFJlYWxTdGVyZW9zY29waWMuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g57yW6L6R5qGGXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpc1xyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gYXdhaXQgbmV3IERpYWxvZyh0aGlzLnNkaywgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgdGl0bGU6ICflrp7kvZPlopnlsZ7mgKcnLCBsZWZ0OiAnMTgwcHgnLCB0b3A6ICcxMDBweCcsXHJcbiAgICAgICAgY29uZmlybUNhbGxCYWNrOiAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnRyaW0oKVxyXG4gICAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYW1lID0gJ+acquWRveWQjeWvueixoSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbC5wb3NpdGlvbiA9IHsgbG5nOiB0aGlzLmxhYmVsLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMubGFiZWwucG9zaXRpb25bMV0sIGFsdDogdGhpcy5sYWJlbC5wb3NpdGlvblsyXSB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5ub2RlUG9pbnRzW2ldKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyhmYWxzZSlcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy5ldmVudC5kZXN0cm95KClcclxuICAgICAgICAgIHRoaXMuZXZlbnQgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q2FsbEJhY2s6IChzaG93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlY29uZGFyeUVkaXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgV2FsbFJlYWxTdGVyZW9zY29waWMubm9kZUVkaXQodGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgd2FsbC1zdGVyZW9zY29waWMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUlTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOaLkOinkuexu+Wei+S4i+aLiVxyXG4gICAgICBsZXQgY29ybmVyVHlwZUxpc3QgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJzxzdmcgY2xhc3M9XCJpY29uLXpqXCI+PHVzZSB4bGluazpocmVmPVwiI3lqLWljb24tempcIj48L3VzZT48L3N2Zz7nm7Top5InLFxyXG4gICAgICAgICAgdmFsdWU6ICfnm7Top5InLFxyXG4gICAgICAgICAga2V5OiAwLFxyXG4gICAgICAgICAgaWNvbjogJ3lqLWljb24temonXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnPHN2ZyBjbGFzcz1cImljb24teGpcIj48dXNlIHhsaW5rOmhyZWY9XCIjeWotaWNvbi14alwiPjwvdXNlPjwvc3ZnPuaWnOinkicsXHJcbiAgICAgICAgICB2YWx1ZTogJ+aWnOinkicsXHJcbiAgICAgICAgICBrZXk6IDEsXHJcbiAgICAgICAgICBpY29uOiAneWotaWNvbi14aidcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICc8c3ZnIGNsYXNzPVwiaWNvbi15alwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXlqXCI+PC91c2U+PC9zdmc+5ZyG6KeSJyxcclxuICAgICAgICAgIHZhbHVlOiAn5ZyG6KeSJyxcclxuICAgICAgICAgIGtleTogMixcclxuICAgICAgICAgIGljb246ICd5ai1pY29uLXlqJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIF1cclxuXHJcbiAgICAgIGxldCBsZWdwQ29ybmVyVHlwZSA9IGxlZ3AoY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb3JuZXItdHlwZS1ib3gnKVswXSwgXCIuY29ybmVyLXR5cGVcIilcclxuICAgICAgbGVncENvcm5lclR5cGUubGVncF9zZWFyY2goY29ybmVyVHlwZUxpc3QpXHJcbiAgICAgIGxldCBpQWN0aXZlRWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpXHJcbiAgICAgIGlBY3RpdmVFbG0uY2xhc3NOYW1lID0gXCJpY29uLWFjdGl2ZVwiXHJcbiAgICAgIGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29ybmVyLXR5cGUnKVswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjeV9kYXRhbGlzdCcpWzBdLmFwcGVuZENoaWxkKGlBY3RpdmVFbG0pXHJcbiAgICAgIGxldCBsZWdwQ29ybmVyVHlwZUlucHV0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb3JuZXItdHlwZScpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29ybmVyVHlwZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY29ybmVyVHlwZUxpc3RbaV0ua2V5ID09PSB0aGlzLmNvcm5lclR5cGUpIHtcclxuICAgICAgICAgIGxlZ3BDb3JuZXJUeXBlLmxlZ3Bfc2VhcmNoQWN0aXZlKGNvcm5lclR5cGVMaXN0W2ldLnZhbHVlKVxyXG4gICAgICAgICAgbGVncENvcm5lclR5cGVJbnB1dC52YWx1ZSA9IGNvcm5lclR5cGVMaXN0W2ldLnZhbHVlXHJcbiAgICAgICAgICBpQWN0aXZlRWxtLmlubmVySFRNTCA9IGA8c3ZnIGNsYXNzPVwiJHtjb3JuZXJUeXBlTGlzdFtpXS5pY29ufVwiPjx1c2UgeGxpbms6aHJlZj1cIiMke2Nvcm5lclR5cGVMaXN0W2ldLmljb259XCI+PC91c2U+PC9zdmc+YFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGVncENvcm5lclR5cGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlLCBjKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JuZXJUeXBlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGNvcm5lclR5cGVMaXN0W2ldLnZhbHVlID09PSBsZWdwQ29ybmVyVHlwZUlucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ybmVyVHlwZSA9IGNvcm5lclR5cGVMaXN0W2ldLmtleVxyXG4gICAgICAgICAgICBpQWN0aXZlRWxtLmlubmVySFRNTCA9IGA8c3ZnIGNsYXNzPVwiJHtjb3JuZXJUeXBlTGlzdFtpXS5pY29ufVwiPjx1c2UgeGxpbms6aHJlZj1cIiMke2Nvcm5lclR5cGVMaXN0W2ldLmljb259XCI+PC91c2U+PC9zdmc+YFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcblxyXG4gICAgICAvLyDmnZDotKjkuIvmi4lcclxuICAgICAgbGV0IG1hdGVyaWFsTGlzdCA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGljb24td2FsbFwiPjwvaT7nuq/oibLlopknLFxyXG4gICAgICAgICAgdmFsdWU6ICfnuq/oibLlopknLFxyXG4gICAgICAgICAga2V5OiAwLFxyXG4gICAgICAgICAgaWNvbjogJ2ljb24td2FsbCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gaWNvbi13YWxsLWJyaWNrMVwiPjwvaT7nuqLnoJblopknLFxyXG4gICAgICAgICAgdmFsdWU6ICfnuqLnoJblopknLFxyXG4gICAgICAgICAga2V5OiAxLFxyXG4gICAgICAgICAgaWNvbjogJ2ljb24td2FsbC1icmljazEnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGljb24td2FsbC1icmljazJcIj48L2k+6buE56CW5aKZJyxcclxuICAgICAgICAgIHZhbHVlOiAn6buE56CW5aKZJyxcclxuICAgICAgICAgIGtleTogMixcclxuICAgICAgICAgIGljb246ICdpY29uLXdhbGwtYnJpY2syJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBpY29uLXdhbGwtYnJpY2szXCI+PC9pPueBsOeTt+WimScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+eBsOeTt+WimScsXHJcbiAgICAgICAgICBrZXk6IDMsXHJcbiAgICAgICAgICBpY29uOiAnaWNvbi13YWxsLWJyaWNrMydcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuXHJcbiAgICAgIGxldCBsZWdwTWF0ZXJpYWwgPSBsZWdwKGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWF0ZXJpYWwtYm94JylbMF0sIFwiLm1hdGVyaWFsXCIpXHJcbiAgICAgIGxlZ3BNYXRlcmlhbC5sZWdwX3NlYXJjaChtYXRlcmlhbExpc3QpXHJcbiAgICAgIGxldCBpQWN0aXZlRWxtMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxyXG4gICAgICBpQWN0aXZlRWxtMi5jbGFzc05hbWUgPSBcImljb24gaWNvbi1hY3RpdmVcIlxyXG4gICAgICBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21hdGVyaWFsJylbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3lfZGF0YWxpc3QnKVswXS5hcHBlbmRDaGlsZChpQWN0aXZlRWxtMilcclxuICAgICAgbGV0IGxlZ3BNYXRlcmlhbElucHV0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXRlcmlhbCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0ZXJpYWxMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsTGlzdFtpXS5rZXkgPT09IHRoaXMubWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGxlZ3BNYXRlcmlhbC5sZWdwX3NlYXJjaEFjdGl2ZShtYXRlcmlhbExpc3RbaV0udmFsdWUpXHJcbiAgICAgICAgICBsZWdwTWF0ZXJpYWxJbnB1dC52YWx1ZSA9IG1hdGVyaWFsTGlzdFtpXS52YWx1ZVxyXG4gICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHttYXRlcmlhbExpc3RbaV0uaWNvbn1gXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZWdwTWF0ZXJpYWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlLCBjKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRlcmlhbExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChtYXRlcmlhbExpc3RbaV0udmFsdWUgPT09IGxlZ3BNYXRlcmlhbElucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbExpc3RbaV0ua2V5XHJcbiAgICAgICAgICAgIGlBY3RpdmVFbG0yLmNsYXNzTmFtZSA9IGBpY29uIGljb24tYWN0aXZlICR7bWF0ZXJpYWxMaXN0W2ldLmljb259YFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdyYWRhci1zY2FuLWVkaXQtdGFicycsIHVuZGVmaW5lZCwgdGhpcy5zZGspXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiBmYWxzZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclxyXG4gICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsaW5lQ29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsTGluZUNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsTGluZUNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IGNvbG9yXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvckVuZFwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsXHJcbiAgICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsXHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGxldCBhbGxfZWxtID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIilcclxuICAgICAgRXZlbnRCaW5kaW5nLm9uKHRoaXMsIGFsbF9lbG0pXHJcbiAgICAgIHRoaXMuX2VsbXMgPSBFdmVudEJpbmRpbmcuZWxlbWVudFxyXG4gICAgICB0aGlzLl9lbG1zLmNvbG9yID0gW2NvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IgPSBbbGFiZWxDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvciA9IFtsaW5lQ29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IFtsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gW2xhYmVsQmFja2dyb3VuZENvbG9yRW5kUGlja2VyXVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgICAgICB0aGlzLklTQ1NlbGVjdCAmJiB0aGlzLklTQ1NlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuICAgICAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWdEYXRhID0gdGhpcy5hdHRyaWJ1dGVTZWxlY3RcclxuICAgICAgICBsZXQgbGVncE9iamVjdCA9IGxlZ3AodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdC1ib3gnKVswXSwgXCIuYXR0cmlidXRlLXNlbGVjdFwiKVxyXG4gICAgICAgIGxlZ3BPYmplY3QubGVncF9zZWFyY2godGFnRGF0YSlcclxuICAgICAgICBsZXQgYXR0cmlidXRlRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdXHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVFbG0pIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYXR0cmlidXRlU2VsZWN0RWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAodGFnRGF0YVtpXS5rZXkgPT09IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSA9IHRhZ0RhdGFbaV0udmFsdWVcclxuICAgICAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZSh0YWdEYXRhW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRyaWJ1dGVTZWxlY3RFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRhZ0RhdGFbaV0udmFsdWUgPT09IGF0dHJpYnV0ZVNlbGVjdEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRhZ0RhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGxldCBmb250RGF0YSA9IGdldEZvbnRMaXN0KClcclxuICAgICAgICBsZXQgZm9udE9iamVjdCA9IGxlZ3AoXHJcbiAgICAgICAgICB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAnZm9udC1zZWxlY3QtYm94J1xyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgICcuZm9udC1zZWxlY3QnXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm9udE9iamVjdCkge1xyXG4gICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaChmb250RGF0YSlcclxuICAgICAgICAgIGxldCBmb250RGF0YUxlZ3BFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9udC1zZWxlY3QnKVswXVxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICAgIGZvbnREYXRhTGVncEVsbS52YWx1ZSA9IGZvbnREYXRhW3RoaXMubGFiZWxGb250RmFtaWx5XS52YWx1ZVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT0gZm9udERhdGFMZWdwRWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZm9udE9iamVjdC5sZWdwX3NlYXJjaEFjdGl2ZShmb250RGF0YVtpXS52YWx1ZSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAoZm9udERhdGFbaV0udmFsdWUgPT09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZvbnRGYW1pbHkgPSBmb250RGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5fZWxtcy5sYWJlbEZvbnRGYW1pbHkgPSBbZm9udERhdGFMZWdwRWxtXVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLndpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMud2lkdGhcclxuICAgIHRoaXMuY29ybmVyVHlwZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvcm5lclR5cGVcclxuICAgIHRoaXMuZXh0cnVkZWRIZWlnaHQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5leHRydWRlZEhlaWdodFxyXG4gICAgdGhpcy5sYWJlbFNob3cgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zaG93XHJcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gICAgdGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udFNpemVcclxuICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gICAgdGhpcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gICAgdGhpcy5sYWJlbE5lYXIgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5uZWFyXHJcbiAgICB0aGlzLmxhYmVsRmFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuZmFyXHJcbiAgICB0aGlzLmxhYmVsTGluZVdpZHRoID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubGluZVdpZHRoXHJcbiAgICB0aGlzLmxhYmVsUGl4ZWxPZmZzZXQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldFxyXG4gICAgdGhpcy5sYWJlbExpbmVDb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVDb2xvclxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdXHJcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgICB0aGlzLmluc3RydWN0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3RcclxuICAgIHRoaXMub3BlcmF0aW5nUG9pbnQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVMaW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVHb29kcyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuZ29vZHMuY29udGVudFxyXG4gICAgdGhpcy5hdHRyaWJ1dGVJU0MgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50XHJcbiAgICB0aGlzLmNhbWVyYVNlbGVjdCAmJiB0aGlzLmNhbWVyYVNlbGVjdCgpXHJcbiAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG5cclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBsZXQgbWluaW11bUhlaWdodHMgPSBbXVxyXG4gICAgbGV0IG1heGltdW1IZWlnaHRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICBtaW5pbXVtSGVpZ2h0cy5wdXNoKHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICAgIG1heGltdW1IZWlnaHRzLnB1c2gocG9zaXRpb25zW2ldLmFsdCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodClcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZW50aXR5LnBvbHlsaW5lVm9sdW1lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICB0aGlzLnRpcCAmJiB0aGlzLnRpcC5kZXN0cm95KClcclxuICAgIHRoaXMubGFiZWwucmVtb3ZlKClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbnRpdHkudmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkudmFsdWVzW2ldKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgaW5zdHJ1Y3RTdWJtaXQoKSB7XHJcbiAgICB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCAmJiB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCh0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0LCB0aGlzLmluc3RydWN0KVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3QgPSB0aGlzLmluc3RydWN0XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpbmdQb2ludFN1Ym1pdCgpIHtcclxuICAgIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0ICYmIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0KHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQsIHRoaXMub3BlcmF0aW5nUG9pbnQpXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHRoaXMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBfYWRkUnIoKSB7XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRWcigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVScih2cikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgIHVybDogdnJcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgfVxyXG5cclxuICBnZXRNYXRlcmlhbChpZCkge1xyXG4gICAgbGV0IG1hdGVyaWFsXHJcbiAgICBsZXQgaW1nXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5tYXRlcmlhbCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgbWF0ZXJpYWwgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5jb2xvcilcclxuICAgICAgICBpZiAodGhpcy5zZGsudmlld2VyLnNjZW5lLm1vZGUgPT09IDIpIHtcclxuICAgICAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21Db2xvck1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICAvLyBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2Uoe1xyXG4gICAgICAgIC8vICAgaW1hZ2U6ICcuL2ltYWdlL2Fycm93LnBuZycsXHJcbiAgICAgICAgLy8gICByZXBlYXQ6IG5ldyBDZXNpdW0uQ2FydGVzaWFuMigxMCwgMS4wKSxcclxuICAgICAgICAvLyAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgLy8gICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLmR1cmF0aW9uXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMubWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaW1nID0gJ2JyaWNrMSdcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgaW1nID0gJ2JyaWNrMidcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgaW1nID0gJ2JyaWNrMydcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgaW1nID0gJ2JyaWNrNCdcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21NYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgICBpbWFnZTogdGhpcy5nZXRTb3VyY2VSb290UGF0aCgpICsgYC9pbWcvbWF0ZXJpYWwvJHtpbWd9LnBuZ2AsXHJcbiAgICAgICAgICBjb2xvcjogdGhpcy5vcHRpb25zLmNvbG9yLFxyXG4gICAgICAgICAgaXMyRDogZmFsc2UsXHJcbiAgICAgICAgICByZXBlYXRzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVwZWF0ID0gW1snMS4wJywgMS4wLCAxLjBdXVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcGVhdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGlzLmVudGl0eS5nZXRCeUlkKGlkKVxyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LnBvbHlsaW5lVm9sdW1lKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcGVhdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvblByb3BlcnR5ID0gZW50aXR5LnBvbHlsaW5lVm9sdW1lLnBvc2l0aW9ucztcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHBvc2l0aW9uUHJvcGVydHkuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKCFDZXNpdW0uZGVmaW5lZChwb3NpdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcGVhdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRvdGFsRGlzdGFuY2UgPSAwO1xyXG4gICAgICAgICAgICBsZXQgZGlzdGFuY2VzID0gW11cclxuICAgICAgICAgICAgcmVwZWF0ID0gW11cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zW2kgKyAxXSlcclxuICAgICAgICAgICAgICBkaXN0YW5jZXMucHVzaChkaXN0YW5jZSlcclxuICAgICAgICAgICAgICB0b3RhbERpc3RhbmNlICs9IGRpc3RhbmNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaW1nUHJvcG9ydGlvbiA9IDQ1IC8gNDUgLy8g5Zu+54mH6ZW/5a695q+U5L6LXHJcbiAgICAgICAgICAgIGxldCB0b3RhbFJlcGVhdFggPSB0b3RhbERpc3RhbmNlIC8gdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0O1xyXG4gICAgICAgICAgICB0b3RhbFJlcGVhdFggPSB0b3RhbFJlcGVhdFggLyBpbWdQcm9wb3J0aW9uXHJcblxyXG4gICAgICAgICAgICBsZXQgdG90YWxSYXRpbyA9IDBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgcmF0aW8gPSAoZGlzdGFuY2VzW2ldIC8gdG90YWxEaXN0YW5jZSlcclxuICAgICAgICAgICAgICB0b3RhbFJhdGlvICs9IHJhdGlvXHJcbiAgICAgICAgICAgICAgbGV0IHJlcGVhdFggPSByYXRpbyAqIHRvdGFsUmVwZWF0WFxyXG4gICAgICAgICAgICAgIGxldCByZXBlYXRZID0gMS4wXHJcbiAgICAgICAgICAgICAgcmVwZWF0LnB1c2goWygoaSArIDEpIC8gZGlzdGFuY2VzLmxlbmd0aCkudG9GaXhlZCgzMCksIHJlcGVhdFgsIHJlcGVhdFldKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXBlYXRcclxuICAgICAgICAgIH0sIGZhbHNlKSxcclxuICAgICAgICAgIGlzVHJhbnNsdWNlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgZHVyYXRpb246IDAsXHJcbiAgICAgICAgfSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBtYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5omT5byA5a+M5paH5pys5qGGXHJcbiAgICovXHJcbiAgb3BlblJpY2hUZXh0RWRpdG9yKGUpIHtcclxuICAgIHJpY2hUZXh0Lm9wZW4odGhpcy5vcHRpb25zLmlkLCB0aGlzLm9wdGlvbnMubmFtZSwgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudClcclxuICAgIHJpY2hUZXh0LnByaW1hcnlDYWxsQmFjayA9IChjb250ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5yaWNoVGV4dENvbnRlbnQgPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9kZUVkaXQodGhhdCwgY2IgPSAoKSA9PiB7IH0pIHtcclxuICAgIGlmIChZSi5NZWFzdXJlLkdldE1lYXN1cmVTdGF0dXMoKSkge1xyXG4gICAgICBjYign5LiK5LiA5qyh5rWL6YeP5pyq57uT5p2fJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFlKLk1lYXN1cmUuU2V0TWVhc3VyZVN0YXR1cyh0cnVlKVxyXG4gICAgICB0aGF0LnRpcCA9IG5ldyBNb3VzZVRpcCgn6K+36YCJ5oup5LiA5Liq6aG254K577yM5Y+z6ZSu5Y+W5raIJywgdGhhdC5zZGspXHJcbiAgICAgIHRoYXQuZXZlbnQgPSBuZXcgTW91c2VFdmVudCh0aGF0LnNkaylcclxuICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgbGV0IHNlbGVjdFBvaW50XHJcbiAgICAgIGxldCBvcmlnaW5hbFBvc2l0aW9uXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5MiA9IFtdXHJcbiAgICAgIGxldCBhcnJheSA9IFtdXHJcbiAgICAgIGxldCB3YWxsUG9zaXRpb25zID0gW11cclxuICAgICAgbGV0IHRvcFBvc2l0aW9ucyA9IFtdXHJcblxyXG4gICAgICBsZXQgaXNBZGQgPSBmYWxzZVxyXG4gICAgICBsZXQgZmlyc3RNb3ZlID0gdHJ1ZVxyXG4gICAgICBsZXQgbGVmdEV2ZW50ID0gKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBmaXJzdE1vdmUgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICBpc0FkZCA9IHRydWVcclxuICAgICAgICAgIGxldCBwb3MzID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoY2FydGVzaWFuLCBbLi4udGhhdC5lbnRpdHkudmFsdWVzXSlcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdCksXHJcbiAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdKVxyXG5cclxuICAgICAgICAgIHVwZGF0ZSh0cnVlKVxyXG4gICAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0ICsgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0XVxyXG4gICAgICAgICAgdGhhdC50aXAuc2V0UG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueCxcclxuICAgICAgICAgICAgbW92ZW1lbnQucG9zaXRpb24ueVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhhdC5tYXRlcmlhbCA9IHRoYXQubWF0ZXJpYWxcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgcGljayA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5waWNrKG1vdmVtZW50LnBvc2l0aW9uKTtcclxuICAgICAgICAgIGlmIChwaWNrICYmIHBpY2suaWQgJiYgcGljay5pZC5uYW1lICYmIHBpY2suaWQubmFtZSA9PT0gJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdFBvaW50ID0gcGljay5pZFxyXG4gICAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMuc3BsaWNlKHBpY2suaWQuaW5kZXgsIDEpXHJcbiAgICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUocGljay5pZClcclxuICAgICAgICAgICAgdGhhdC50aXAuc2V0X3RleHQoJ+W3pumUruW8gOWni++8jOWPs+mUrue7k+adn++8jENUUkwr5Y+z6ZSu5pKk6ZSAJylcclxuICAgICAgICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQoc2VsZWN0UG9pbnQucG9zaXRpb24uX3ZhbHVlLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICAgIC8vIHRoYXQuZW50aXR5LnBvbHlsaW5lVm9sdW1lLnBvc2l0aW9ucyA9IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vICAgcmV0dXJuIENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICAgIC8vIH0sIGZhbHNlKVxyXG4gICAgICAgICAgICB1cGRhdGUodHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJpZ2h0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1cGRhdGUoKVxyXG4gICAgICAgICAgY2IobnVsbCwgdGhhdC5vcHRpb25zLnBvc2l0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhhdC5lbnRpdHkucG9seWxpbmVWb2x1bWUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHQgKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5ub2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoYXQubm9kZVBvaW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5ub2RlUG9pbnRzID0gW11cclxuICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgdGhhdC5ldmVudC5kZXN0cm95KClcclxuICAgICAgICB0aGF0LnRpcC5kZXN0cm95KClcclxuICAgICAgICB0aGF0Lm1hdGVyaWFsID0gdGhhdC5tYXRlcmlhbFxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoaXNDYWxsYmFjayA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHRoYXQuZW50aXR5KSB7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5jYWxjdWxhdGVQb3NpdGlvbnMoKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LmVudGl0eS52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0LmVudGl0eS52YWx1ZXNbaV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0LmVudGl0eS5yZW1vdmVBbGwoKVxyXG5cclxuICAgICAgICAgIHdhbGxQb3NpdGlvbnMgPSBbXVxyXG4gICAgICAgICAgdG9wUG9zaXRpb25zID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwb3NpdGlvbnNbaV0ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldW25dWzBdLCBwb3NpdGlvbnNbaV1bbl1bMV0sIHBvc2l0aW9uc1tpXVtuXVsyXSlcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKHBvc2l0aW9uc1tpXVtuXVswXSwgcG9zaXRpb25zW2ldW25dWzFdLCBwb3NpdGlvbnNbaV1bbl1bMl0gKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2FsbFBvc2l0aW9ucy5wdXNoKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgICAgIHRvcFBvc2l0aW9ucy5wdXNoKGZyb21EZWdyZWVzQXJyYXkyKVxyXG4gICAgICAgICAgICBsZXQgd2FsbCA9IHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5hZGQoe1xyXG4gICAgICAgICAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQgKyAnLScgKyBXYWxsUmVhbFN0ZXJlb3Njb3BpYy5yYW5kb21TdHJpbmcoMTIpLFxyXG4gICAgICAgICAgICAgIHBvbHlsaW5lVm9sdW1lOiB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IGlzQ2FsbGJhY2sgPyBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMod2FsbFBvc2l0aW9uc1tpXSlcclxuICAgICAgICAgICAgICAgIH0sIGZhbHNlKSA6IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKHdhbGxQb3NpdGlvbnNbaV0pLFxyXG4gICAgICAgICAgICAgICAgc2hhcGU6IFtcclxuICAgICAgICAgICAgICAgICAgeyB4OiAtMC4wMDAwMDAxLCB5OiAtdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAgICAgICAgICB7IHg6IDAuMDAwMDAwMSwgeTogLXRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgICAgICAgICAgeyB4OiAwLjAwMDAwMDEsIHk6IHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgICAgICAgICAgeyB4OiAtMC4wMDAwMDAxLCB5OiB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgY29ybmVyVHlwZTogQ2VzaXVtLkNvcm5lclR5cGUuTUlURVJFRFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGxldCB0b3AgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgICBpZDogdGhhdC5vcHRpb25zLmlkICsgJy0nICsgV2FsbFJlYWxTdGVyZW9zY29waWMucmFuZG9tU3RyaW5nKDEyKSxcclxuICAgICAgICAgICAgICBwb2x5Z29uOiB7XHJcbiAgICAgICAgICAgICAgICBoaWVyYXJjaHk6IGlzQ2FsbGJhY2sgPyBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENlc2l1bS5Qb2x5Z29uSGllcmFyY2h5KENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKHRvcFBvc2l0aW9uc1tpXSkpXHJcbiAgICAgICAgICAgICAgICB9LCBmYWxzZSkgOiBuZXcgQ2VzaXVtLlBvbHlnb25IaWVyYXJjaHkoQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHModG9wUG9zaXRpb25zW2ldKSksXHJcbiAgICAgICAgICAgICAgICBwZXJQb3NpdGlvbkhlaWdodDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoYXQub3B0aW9ucy5jb2xvcilcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGF0LmVudGl0eS5hZGQod2FsbClcclxuICAgICAgICAgICAgdGhhdC5lbnRpdHkuYWRkKHRvcClcclxuICAgICAgICAgICAgd2FsbC5wb2x5bGluZVZvbHVtZS5tYXRlcmlhbCA9IHRoYXQuZ2V0TWF0ZXJpYWwod2FsbC5pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfbGVmdChsZWZ0RXZlbnQpXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0KHJpZ2h0RXZlbnQpXHJcblxyXG5cclxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9tb3ZlKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICBsZXQgcG9zMyA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KGNhcnRlc2lhbiwgWy4uLnRoYXQuZW50aXR5LnZhbHVlc10pXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XSA9IHRoYXQuY2FydGVzaWFuM1Rvd2dzODQocG9zMywgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IHRoYXQuY2FsY3VsYXRlUG9zaXRpb25zKClcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgICAgbGV0IGZyb21EZWdyZWVzQXJyYXkyID0gW11cclxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwb3NpdGlvbnNbaV0ubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldW25dWzBdLCBwb3NpdGlvbnNbaV1bbl1bMV0sIHBvc2l0aW9uc1tpXVtuXVsyXSlcclxuICAgICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5Mi5wdXNoKHBvc2l0aW9uc1tpXVtuXVswXSwgcG9zaXRpb25zW2ldW25dWzFdLCBwb3NpdGlvbnNbaV1bbl1bMl0gKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2FsbFBvc2l0aW9uc1tpXSA9IGZyb21EZWdyZWVzQXJyYXlcclxuICAgICAgICAgICAgdG9wUG9zaXRpb25zW2ldID0gZnJvbURlZ3JlZXNBcnJheTJcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGF0LmxhYmVsLnBvc2l0aW9uID0gW3RoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHQgKyB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdXHJcbiAgICAgICAgICAvLyBpZiAoZmlyc3RNb3ZlKSB7XHJcbiAgICAgICAgICAvLyAgIGZpcnN0TW92ZSA9IGZhbHNlXHJcbiAgICAgICAgICAvLyAgIHRoYXQubWF0ZXJpYWwgPSB0aGF0Lm1hdGVyaWFsXHJcbiAgICAgICAgICAvLyAgIHJldHVyblxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0LnRpcC5zZXRQb3NpdGlvbihcclxuICAgICAgICAgIGNhcnRlc2lhbixcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLngsXHJcbiAgICAgICAgICBtb3ZlbWVudC5lbmRQb3NpdGlvbi55XHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9yaWdodF9rZXlib2FyZF9jdHJsKChtb3ZlbWVudCwgY2FydGVzaWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFBvaW50KSB7XHJcbiAgICAgICAgICBmaXJzdE1vdmUgPSB0cnVlXHJcbiAgICAgICAgICB0aGF0Lm9wdGlvbnMucG9zaXRpb25zLnBvcCgpXHJcbiAgICAgICAgICB1cGRhdGUodHJ1ZSlcclxuICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC5ub2RlUG9pbnRzW3RoYXQubm9kZVBvaW50cy5sZW5ndGggLSAxXSlcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludC5pbmRleCA9PT0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSB0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFBvaW50LmluZGV4ID0gMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHJpZ2h0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0KSxcclxuICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5jYWxjdWxhdGVQb3NpdGlvbnMoKVxyXG4gICAgICBsZXQgd2FsbFBvc2l0aW9ucyA9IFtdXHJcbiAgICAgIGxldCB0b3BQb3NpdGlvbnMgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50aXR5LnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhpcy5lbnRpdHkudmFsdWVzW2ldKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW50aXR5LnJlbW92ZUFsbCgpXHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICBsZXQgZnJvbURlZ3JlZXNBcnJheTIgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcG9zaXRpb25zW2ldLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldW25dWzBdLCBwb3NpdGlvbnNbaV1bbl1bMV0sIHBvc2l0aW9uc1tpXVtuXVsyXSlcclxuICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkyLnB1c2gocG9zaXRpb25zW2ldW25dWzBdLCBwb3NpdGlvbnNbaV1bbl1bMV0sIHBvc2l0aW9uc1tpXVtuXVsyXSArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodClcclxuICAgICAgICB9XHJcbiAgICAgICAgd2FsbFBvc2l0aW9ucy5wdXNoKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgdG9wUG9zaXRpb25zLnB1c2goZnJvbURlZ3JlZXNBcnJheTIpXHJcbiAgICAgICAgbGV0IHdhbGwgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQgKyAnLScgKyBXYWxsUmVhbFN0ZXJlb3Njb3BpYy5yYW5kb21TdHJpbmcoMTIpLFxyXG4gICAgICAgICAgcG9seWxpbmVWb2x1bWU6IHtcclxuICAgICAgICAgICAgcG9zaXRpb25zOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyh3YWxsUG9zaXRpb25zW2ldKSxcclxuICAgICAgICAgICAgc2hhcGU6IFtcclxuICAgICAgICAgICAgICB7IHg6IC0wLjAwMDAwMDEsIHk6IC10aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICAgICAgeyB4OiAwLjAwMDAwMDEsIHk6IC10aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICAgICAgeyB4OiAwLjAwMDAwMDEsIHk6IHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgICAgICB7IHg6IC0wLjAwMDAwMDEsIHk6IHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgY29ybmVyVHlwZTogQ2VzaXVtLkNvcm5lclR5cGUuTUlURVJFRFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCB0b3AgPSB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnMuaWQgKyAnLScgKyBXYWxsUmVhbFN0ZXJlb3Njb3BpYy5yYW5kb21TdHJpbmcoMTIpLFxyXG4gICAgICAgICAgcG9seWdvbjoge1xyXG4gICAgICAgICAgICBoaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyh0b3BQb3NpdGlvbnNbaV0pKSxcclxuICAgICAgICAgICAgcGVyUG9zaXRpb25IZWlnaHQ6IHRydWUsXHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHRoaXMub3B0aW9ucy5jb2xvcilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmVudGl0eS5hZGQod2FsbClcclxuICAgICAgICB0aGlzLmVudGl0eS5hZGQodG9wKVxyXG4gICAgICAgIHdhbGwucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKHdhbGwuaWQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG4gICAgbGV0IHBvaW50cyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9pbnRzLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhwb2ludHMpXHJcbiAgICBsZXQgbGVuZ3RoID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pXHJcbiAgICBsZXQgc2xpY2VkID0gdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lLCAwLCBsZW5ndGggLyAyLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5zbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aCAtIDFdLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJhbmRvbVN0cmluZyhlKSB7XHJcbiAgICBlID0gZSB8fCAzMlxyXG4gICAgdmFyIHQgPSAnQUJDREVGR0hKS01OUFFSU1RXWFlaYWJjZGVmaGlqa21ucHJzdHd4eXoyMzQ1Njc4JyxcclxuICAgICAgYSA9IHQubGVuZ3RoLFxyXG4gICAgICBuID0gJydcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZTsgaSsrKSBuICs9IHQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGEpKVxyXG4gICAgcmV0dXJuIG5cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFdhbGxSZWFsU3RlcmVvc2NvcGljXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBd0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQUFBO0FBUUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUErREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF6Q0E7QUEwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXJUQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFkQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBd09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXY3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThpQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTVEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRrQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQW9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQ0E7QUFBQTtBQUFBO0FBc0NBO0FBQ0E7QUFwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFxREE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallRealStereoscopic/index.js\n"); /***/ }), /***/ "./src/Obj/Base/WallStereoscopic/_element.js": /*!***************************************************!*\ !*** ./src/Obj/Base/WallStereoscopic/_element.js ***! \***************************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony import */ var _Element_elm_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Element/elm_html */ \"./src/Obj/Element/elm_html.js\");\n\nfunction html(that) {\n return \"\\n \\n
      \\n
      \\n
      \\n \\u540D\\u79F0\\n \\n
      \\n
      \\n \\u989C\\u8272\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n \\u62C9\\u4F38\\u9AD8\\u5EA6\\n
      \\n \\n m\\n \\n
      \\n
      \\n
      \\n \\u6750\\u8D28\\u6837\\u5F0F\\n
      \\n
      \\n
      \\n
      \\n
      \\n \\u5899\\u4F53\\u95ED\\u5408\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n \\n \".concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"attributeElm\"])(that), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm1\"])(), \"\\n \\n \\n \").concat(Object(_Element_elm_html__WEBPACK_IMPORTED_MODULE_0__[\"labelStyleElm2\"])(), \"\\n \\n \\n
      \\n
      \\n \\n \");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFN0ZXJlb3Njb3BpYy9fZWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9XYWxsU3RlcmVvc2NvcGljL19lbGVtZW50LmpzPzExYzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlRWxtLCBsYWJlbFN0eWxlRWxtMSwgbGFiZWxTdHlsZUVsbTIgfSBmcm9tICcuLi8uLi9FbGVtZW50L2VsbV9odG1sJ1xyXG5cclxuZnVuY3Rpb24gaHRtbCh0aGF0KSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mi4nkvLjpq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTk5OTlcIiBAbW9kZWw9XCJleHRydWRlZEhlaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBtYXRlcmlhbC1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mnZDotKjmoLflvI88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0ZXJpYWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5aKZ5L2T6Zet5ZCIPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLXN3aXRjaFwiIHR5cGU9XCJjaGVja2JveFwiIEBtb2RlbD1cIm5vc2VUb1RhaWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPERJVi1jeS10YWJzIGlkPVwicmFkYXItc2Nhbi1lZGl0LXRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxESVYtY3ktdGFiLXBhbmUgbGFiZWw9XCLlsZ7mgKfkv6Hmga9cIj5cclxuICAgICAgICAgICAgICAgICAgICAke2F0dHJpYnV0ZUVsbSh0aGF0KX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+azqOmjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTEoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICAgICAgPERJVi1jeS10YWItcGFuZSBsYWJlbD1cIuagh+etvumjjuagvFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWxTdHlsZUVsbTIoKX1cclxuICAgICAgICAgICAgICAgIDwvRElWLWN5LXRhYi1wYW5lPlxyXG4gICAgICAgICAgICA8L0RJVi1jeS10YWJzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgYFxyXG59XHJcbmV4cG9ydCB7IGh0bWwgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBd0RBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallStereoscopic/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/WallStereoscopic/eventBinding.js": /*!*******************************************************!*\ !*** ./src/Obj/Base/WallStereoscopic/eventBinding.js ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar eventBinding = /*#__PURE__*/function () {\n function eventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, eventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(eventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return eventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return eventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n eventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n var _loop = function _loop() {\n var Event = [];\n var isEvent = false;\n var removeName = [];\n var blurEvent = function blurEvent() {};\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop2 = function _loop2() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number') {\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n var v = Number(value);\n if (e.target.max && v > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && v < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n that[m.value] = value;\n }\n } else {\n that[m.value] = value;\n }\n });\n blurEvent = function blurEvent(e) {\n var value = e.target.value;\n if (e.target.type == 'number' && (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n that[m.value] = value;\n };\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n elements[i].addEventListener('click', function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n // elements[i].attributes.removeNamedItem(m.name)\n break;\n }\n case '@change':\n {\n isEvent = true;\n Event.push(function (e) {\n var value = e.target.value;\n if (e.target.type == 'number' && value != '') {\n value = Number(value);\n e.target.value = value;\n }\n if (typeof that[m.value] === 'function') {\n that[m.value](e, value);\n }\n });\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var ventType = 'input';\n if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {\n ventType = 'change';\n }\n elements[i].addEventListener(ventType, function (e) {\n for (var t = 0; t < Event.length; t++) {\n Event[t](e);\n }\n });\n elements[i].addEventListener('blur', function (e) {\n blurEvent(e);\n });\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(eventBinding, \"event\", {});\nvar EventBinding = new eventBinding();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFN0ZXJlb3Njb3BpYy9ldmVudEJpbmRpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvV2FsbFN0ZXJlb3Njb3BpYy9ldmVudEJpbmRpbmcuanM/Y2VlYSJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBldmVudEJpbmRpbmcge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5lbGVtZW50ID0ge31cclxuICB9XHJcbiAgc3RhdGljIGV2ZW50ID0ge31cclxuXHJcbiAgZ2V0RXZlbnQobmFtZSkge1xyXG4gICAgcmV0dXJuIGV2ZW50QmluZGluZy5ldmVudFtuYW1lXVxyXG4gIH1cclxuXHJcbiAgZ2V0RXZlbnRBbGwoKSB7XHJcbiAgICByZXR1cm4gZXZlbnRCaW5kaW5nLmV2ZW50XHJcbiAgfVxyXG5cclxuICBzZXRFdmVudChuYW1lLCBldmVudCkge1xyXG4gICAgZXZlbnRCaW5kaW5nLmV2ZW50W25hbWVdID0gZXZlbnRcclxuICB9XHJcblxyXG4gIG9uKHRoYXQsIGVsZW1lbnRzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBFdmVudCA9IFtdXHJcbiAgICAgIGxldCBpc0V2ZW50ID0gZmFsc2VcclxuICAgICAgbGV0IHJlbW92ZU5hbWUgPSBbXVxyXG4gICAgICBsZXQgYmx1ckV2ZW50ID0gKCkgPT4geyB9XHJcbiAgICAgIGlmICghZWxlbWVudHNbaV0gfHwgIWVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBzd2l0Y2ggKG0ubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSAnQG1vZGVsJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC50eXBlID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nICYmIChlLmRhdGEgIT0gJy0nIHx8IGUudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2ID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHYgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgYmx1ckV2ZW50ID0gKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicpICYmIChlLnRhcmdldC52YWx1ZSB8fCAoZS50YXJnZXQuZGF0YXNldC5udWxsICE9PSAndW5kZWZpbmVkJyAmJiBlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICcnICYmICFCb29sZWFuKGUudGFyZ2V0LmRhdGFzZXQubnVsbCkpKSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5tYXgpICYmIHZhbHVlID4gTnVtYmVyKGUudGFyZ2V0Lm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldC5kYXRhc2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5taW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50W20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW1vdmVOYW1lLnB1c2gobS5uYW1lKVxyXG4gICAgICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNoYW5nZSc6IHtcclxuICAgICAgICAgICAgaXNFdmVudCA9IHRydWVcclxuICAgICAgICAgICAgRXZlbnQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnR5cGUgPT0gJ251bWJlcicgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh0aGF0W20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhhdFttLnZhbHVlXShlLCB2YWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZW1vdmVOYW1lLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBsZXQgdmVudFR5cGUgPSAnaW5wdXQnXHJcbiAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnRhZ05hbWUgIT0gJ0lOUFVUJyB8fCBlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgIHZlbnRUeXBlID0gJ2NoYW5nZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcih2ZW50VHlwZSwgKGUpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgRXZlbnQubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgRXZlbnRbdF0oZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgICAgIGJsdXJFdmVudChlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBFdmVudEJpbmRpbmcgPSBuZXcgZXZlbnRCaW5kaW5nKCk7XHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50QmluZGluZzsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2RkE7QUFBQTtBQUFBO0FBdUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsSEE7QUFBQTtBQU1BO0FBNkdBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallStereoscopic/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Base/WallStereoscopic/index.js": /*!************************************************!*\ !*** ./src/Obj/Base/WallStereoscopic/index.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Element/cy_html_tabs */ \"./src/Obj/Element/cy_html_tabs.js\");\n/* harmony import */ var _Element_richText__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/richText */ \"./src/Obj/Element/richText.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/WallStereoscopic/_element.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _LabelObject__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../LabelObject */ \"./src/Obj/Base/LabelObject/index.js\");\n/* harmony import */ var _eventBinding__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./eventBinding */ \"./src/Obj/Base/WallStereoscopic/eventBinding.js\");\n/* harmony import */ var _Event__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../Event */ \"./src/Event/index.js\");\n/* harmony import */ var _MouseTip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../MouseTip */ \"./src/MouseTip/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Element_datalist__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../Element/datalist */ \"./src/Obj/Element/datalist.js\");\n/* harmony import */ var _Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../Element/fontSelect */ \"./src/Obj/Element/fontSelect.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n\n\n\n\n\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar WallStereoscopic = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk\r\n * @description 电子围墙\r\n * @param options {object} 墙属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.name {string} 名称\r\n * @param options.color=\"#00d9ff\" {string} 颜色\r\n * @param options.show=true {boolean} 显隐\r\n * @param options.extrudedHeight=2.4 {number} 拉伸高度\r\n * @param options.noseToTail=false {boolean} 首尾相连\r\n * @param options.material=0 {number} 材质,0:纯色墙;1:上升墙;2:箭头墙;3:警戒墙\r\n * @param options.duration=1000 {number} 持续时间\r\n * @param {Array.} options.positions 必填,经纬度和高度的列表,值交替 [{lon,lat,alt},...]\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.label {object} 标签对象\r\n * @param options.label.text {string} 标签文本\r\n * @param options.label.show {string} 标签显隐\r\n * @param options.label.position {string} 标签位置\r\n * @param options.label.position {object} 标签位置\r\n * @param options.label.position.lng {number} 经度\r\n * @param options.label.position.lat {number} 纬度\r\n * @param options.label.position.alt {number} 高度\r\n * @param options.label.fontSize=20 {number} 字体大小\r\n * @param options.label.fontFamily=0 {number} 字体项 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体\r\n * @param options.label.color=#ffffff {string} 字体颜色\r\n * @param options.label.lineWidth=4 {number} 引线宽\r\n * @param options.label.lineColor=#00ffff80 {string} 引线颜色\r\n * @param options.label.pixelOffset=20 {number} 字体偏移(引线长度)\r\n * @param options.label.backgroundColor=['#00ffff80', '#00ffff80'] {array} 背景颜色\r\n * @param options.label.scaleByDistance {boolean} 距离缩放\r\n * @param options.label.near=2000 {number} 视野缩放最近距离\r\n * @param options.label.far=100000 {number} 视野缩放最远距离\r\n * @param options.attribute {object} 属性内容\r\n * @param {object} options.attribute.link={} 链接\r\n * @param options.attribute.link.content=[]] {array} 链接内容\r\n * @param options.attribute.link.content[].name {string} 链接名称\r\n * @param options.attribute.link.content[].url {string} 链接地址\r\n * @param options.richTextContent {string} 富文本内容\r\n * @param options.customView {object} 默认视角\r\n * @param options.customView.orientation {object} 默认视角方位\r\n * @param options.customView.orientation.heading {number} 航向角\r\n * @param options.customView.orientation.pitch {number} 俯仰角\r\n * @param options.customView.orientation.roll {number} 翻滚角\r\n * @param options.customView.relativePosition {object} 视角相对位置\r\n * @param options.customView.relativePosition.lng {number} 经度\r\n * @param options.customView.relativePosition.lat {number} 纬度\r\n * @param options.customView.relativePosition.alt {number} 高度\r\n * */\n function WallStereoscopic(sdk, options) {\n var _this2;\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, WallStereoscopic);\n _this2 = _callSuper(this, WallStereoscopic, [sdk, options]);\n _this2.options.color = options.color || \"#ff0000\";\n _this2.options.extrudedHeight = options.extrudedHeight || 2.4;\n _this2.options.positions = options.positions;\n _this2.options.material = Number(options.material) || Number(options.material) === 0 ? Number(options.material) : 3;\n _this2.options.duration = options.duration || options.duration === 0 ? options.duration : 1000;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.options['nose-to-tail'] = options['nose-to-tail'] || false;\n _this2.entity;\n _this2.nodePoints = [];\n options.label = options.label || {};\n _this2.options.label = {\n text: _this2.options.name,\n show: options.label.show || false,\n position: options.label.position,\n fontSize: options.label.fontSize || options.label.fontSize === 0 ? options.label.fontSize : 20,\n fontFamily: options.label.fontFamily ? options.label.fontFamily : 0,\n color: options.label.color || '#ffffff',\n lineWidth: options.label.lineWidth || options.label.lineWidth === 0 ? options.label.lineWidth : 4,\n pixelOffset: options.label.pixelOffset || options.label.pixelOffset === 0 ? options.label.pixelOffset : 20,\n backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'],\n lineColor: options.label.lineColor || '#00ffff80',\n scaleByDistance: options.label.scaleByDistance || false,\n near: options.label.near || options.label.near === 0 ? options.label.near : 2000,\n far: options.label.far || options.label.far === 0 ? options.label.far : 100000\n };\n _this2.options.instruct = options.instruct || \"\";\n _this2.options.operatingPoint = options.operatingPoint || \"\";\n _this2.options.attribute = options.attribute || {};\n _this2.options.attribute.vr = _this2.options.attribute.vr || {};\n _this2.options.attribute.vr.content = _this2.options.attribute.vr.content || [];\n _this2.options.attribute.link = _this2.options.attribute.link || {};\n _this2.options.attribute.link.content = _this2.options.attribute.link.content || [];\n _this2.options.attribute.camera = _this2.options.attribute.camera || {};\n _this2.options.attribute.camera = _this2.options.attribute.camera.content || [];\n _this2.options.attribute.ISC = _this2.options.attribute.ISC || {};\n _this2.options.attribute.ISC.content = _this2.options.attribute.ISC.content || [];\n _this2.options.attribute.goods = _this2.options.attribute.goods || {};\n _this2.options.attribute.goods.content = _this2.options.attribute.goods.content || [];\n _this2.options.attributeType = options.attributeType || 'richText';\n _this2.Dialog = _Dialog;\n _this2._elms = {};\n if (!_this2.options.positions || _this2.options.positions.length < 2) {\n _this2._error = '最少需要两个坐标!';\n console.warn(_this2._error);\n window.ELEMENT && window.ELEMENT.Message({\n message: _this2._error,\n type: 'warning',\n duration: 1500\n });\n } else {\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n WallStereoscopic.create(_this2);\n }\n return _this2;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(WallStereoscopic, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(WallStereoscopic, [{\n key: \"type\",\n get: function get() {\n return 'wallStereoscopic';\n }\n }, {\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v || '#ff0000';\n this.entity.polylineVolume.material = this.getMaterial();\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var colorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this3.options.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = colorPicker;\n });\n }\n }\n }, {\n key: \"material\",\n get: function get() {\n return this.options.material;\n },\n set: function set(v) {\n var _this4 = this;\n this.options.material = Number(v) || Number(v) === 0 ? Number(v) : 3;\n this.entity.polylineVolume.material = this.getMaterial();\n this._elms.material && this._elms.material.forEach(function (item) {\n item.value = _this4.options.material;\n });\n }\n }, {\n key: \"noseToTail\",\n get: function get() {\n return this.options['nose-to-tail'];\n },\n set: function set(v) {\n this.options['nose-to-tail'] = v;\n var positions = this.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n if (v) {\n fromDegreesArray.push(positions[0].lng, positions[0].lat, positions[0].alt);\n }\n this.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.material = this.material;\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"extrudedHeight\",\n get: function get() {\n return this.options.extrudedHeight;\n },\n set: function set(v) {\n this.options.extrudedHeight = v;\n this.label.position = [this.options.positions[0].lng, this.options.positions[0].lat, this.options.positions[0].alt + this.options.extrudedHeight];\n this.entity.polylineVolume.shape = [{\n x: -0.0000001,\n y: -this.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: -this.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: this.options.extrudedHeight / 2\n }, {\n x: -0.0000001,\n y: this.options.extrudedHeight / 2\n }];\n this._elms.extrudedHeight && this._elms.extrudedHeight.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelShow\",\n get: function get() {\n return this.options.label.show;\n },\n set: function set(v) {\n this.options.label.show = v;\n if (this.show && !this.showView || this.showView == 3) {\n this.label.show = v;\n } else {\n this.label.show = false;\n }\n this._elms.labelShow && this._elms.labelShow.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelFontFamily\",\n get: function get() {\n return this.options.label.fontFamily;\n },\n set: function set(v) {\n this.options.label.fontFamily = v || 0;\n this.label && (this.label.fontFamily = this.options.label.fontFamily);\n var name = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontFamilyName\"])(this.labelFontFamily) || '';\n this._elms.labelFontFamily && this._elms.labelFontFamily.forEach(function (item) {\n item.value = name;\n });\n }\n }, {\n key: \"labelColor\",\n get: function get() {\n return this.options.label.color;\n },\n set: function set(v) {\n var _this5 = this;\n this.options.label.color = v;\n this.label.color = v;\n if (this._elms.labelColor) {\n this._elms.labelColor.forEach(function (item, i) {\n var labelColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this5.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this5.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this5.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this5._elms.labelColor[i] = labelColorPicker;\n });\n }\n }\n }, {\n key: \"labelFontSize\",\n get: function get() {\n return this.options.label.fontSize;\n },\n set: function set(v) {\n this.options.label.fontSize = v;\n this.label.fontSize = v;\n this._elms.labelFontSize && this._elms.labelFontSize.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelScaleByDistance\",\n get: function get() {\n return this.options.label.scaleByDistance;\n },\n set: function set(v) {\n this.options.label.scaleByDistance = v;\n this.label.scaleByDistance = v;\n this._elms.labelScaleByDistance && this._elms.labelScaleByDistance.forEach(function (item) {\n item.checked = v;\n });\n }\n }, {\n key: \"labelNear\",\n get: function get() {\n return this.options.label.near;\n },\n set: function set(v) {\n var near = v;\n if (near > this.labelFar) {\n near = this.labelFar;\n }\n this.options.label.near = near;\n this.label.near = near;\n this._elms.labelNear && this._elms.labelNear.forEach(function (item) {\n item.value = near;\n });\n }\n }, {\n key: \"labelFar\",\n get: function get() {\n return this.options.label.far;\n },\n set: function set(v) {\n var far = v;\n if (far < this.labelNear) {\n far = this.labelNear;\n }\n this.options.label.far = far;\n this.label.far = far;\n this._elms.labelFar && this._elms.labelFar.forEach(function (item) {\n item.value = far;\n });\n }\n }, {\n key: \"labelLineWidth\",\n get: function get() {\n return this.options.label.lineWidth;\n },\n set: function set(v) {\n this.options.label.lineWidth = v;\n this.label.lineWidth = v;\n this._elms.labelLineWidth && this._elms.labelLineWidth.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelPixelOffset\",\n get: function get() {\n return this.options.label.pixelOffset;\n },\n set: function set(v) {\n this.options.label.pixelOffset = v;\n this.label.pixelOffset = v;\n this._elms.labelPixelOffset && this._elms.labelPixelOffset.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"labelLineColor\",\n get: function get() {\n return this.options.label.lineColor;\n },\n set: function set(v) {\n var _this6 = this;\n this.options.label.lineColor = v;\n this.label.lineColor = v;\n if (this._elms.labelLineColor) {\n this._elms.labelLineColor.forEach(function (item, i) {\n var lineColorPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this6.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this6.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this6.labelLineColor = 'rgba(0,255,255,0.5)';\n } //点击清空按钮事件回调\n });\n _this6._elms.labelLineColor[i] = lineColorPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorStart\",\n get: function get() {\n return this.options.label.backgroundColor[0];\n },\n set: function set(v) {\n var _this7 = this;\n this.options.label.backgroundColor[0] = v;\n this.label.backgroundColor = [v, this.label.backgroundColor[1]];\n if (this._elms.labelBackgroundColorStart) {\n this._elms.labelBackgroundColorStart.forEach(function (item, i) {\n var labelBackgroundColorStartPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this7.labelBackgroundColorStart,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this7.labelBackgroundColorStart = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this7.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this7._elms.labelBackgroundColorStart[i] = labelBackgroundColorStartPicker;\n });\n }\n }\n }, {\n key: \"labelBackgroundColorEnd\",\n get: function get() {\n return this.options.label.backgroundColor[1];\n },\n set: function set(v) {\n var _this8 = this;\n this.options.label.backgroundColor[1] = v;\n this.label.backgroundColor = [this.label.backgroundColor[0], v];\n if (this._elms.labelBackgroundColorEnd) {\n this._elms.labelBackgroundColorEnd.forEach(function (item, i) {\n var labelBackgroundColorEndPicker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: _this8.labelBackgroundColorEnd,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this8.labelBackgroundColorEnd = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this8.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this8._elms.labelBackgroundColorEnd[i] = labelBackgroundColorEndPicker;\n });\n }\n }\n }, {\n key: \"instruct\",\n get: function get() {\n return this.options.instruct;\n },\n set: function set(v) {\n this.options.instruct = v;\n this._elms.instruct && this._elms.instruct.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"operatingPoint\",\n get: function get() {\n return this.options.operatingPoint;\n },\n set: function set(v) {\n this.options.operatingPoint = v;\n this._elms.operatingPoint && this._elms.operatingPoint.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"attributeType\",\n get: function get() {\n return this.options.attributeType;\n },\n set: function set(v) {\n this.options.attributeType = v;\n this._elms.attributeType && this._elms.attributeType.forEach(function (item) {\n item.value = v;\n });\n var attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content');\n for (var i = 0; i < attributeContent.length; i++) {\n if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {\n attributeContent[i].style.display = 'block';\n } else {\n attributeContent[i].style.display = 'none';\n }\n }\n }\n }, {\n key: \"attributeLink\",\n get: function get() {\n return this.options.attribute.link.content;\n },\n set: function set(v) {\n var _this9 = this;\n this.options.attribute.link.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.link.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.link.content.length; i++) {\n var tr = \"\\n
      \\n
      \" + this.options.attribute.link.content[i].name + \"
      \\n
      \" + this.options.attribute.link.content[i].url + \"
      \\n
      \\n \\n \\n
      \\n
      \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n linkEdit: function () {\n var _linkEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(index) {\n var table, tableContent, item, _loop, _i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this9.options.attribute.link.content;\n case 2:\n _this9.attributeLink = _context3.sent;\n table = _this9._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop(_i) {\n var height, _html, textareaElm, td, btn, n, _iterator, _step, _loop2;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(index === _i)) {\n _context2.next = 36;\n break;\n }\n height = item[_i].offsetHeight;\n _html = \"\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \";\n item[_i].innerHTML = _html;\n textareaElm = item[_i].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this9.options.attribute.link.content[index].url;\n btn = item[_i].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context2.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context2.next = 14;\n break;\n }\n return _context2.abrupt(\"continue\", 32);\n case 14:\n _iterator = _createForOfIteratorHelper(btn[n].attributes);\n _context2.prev = 15;\n _loop2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop2() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop2$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n m = _step.value;\n if (!(m.name === '@click')) {\n _context.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _loop2);\n });\n _iterator.s();\n case 18:\n if ((_step = _iterator.n()).done) {\n _context2.next = 24;\n break;\n }\n return _context2.delegateYield(_loop2(), \"t0\", 20);\n case 20:\n if (!_context2.t0) {\n _context2.next = 22;\n break;\n }\n return _context2.abrupt(\"break\", 24);\n case 22:\n _context2.next = 18;\n break;\n case 24:\n _context2.next = 29;\n break;\n case 26:\n _context2.prev = 26;\n _context2.t1 = _context2[\"catch\"](15);\n _iterator.e(_context2.t1);\n case 29:\n _context2.prev = 29;\n _iterator.f();\n return _context2.finish(29);\n case 32:\n n++;\n _context2.next = 11;\n break;\n case 35:\n return _context2.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context2.stop();\n }\n }, _loop, null, [[15, 26, 29, 32]]);\n });\n _i = 0;\n case 8:\n if (!(_i < item.length)) {\n _context3.next = 15;\n break;\n }\n return _context3.delegateYield(_loop(_i), \"t0\", 10);\n case 10:\n if (!_context3.t0) {\n _context3.next = 12;\n break;\n }\n return _context3.abrupt(\"break\", 15);\n case 12:\n _i++;\n _context3.next = 8;\n break;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }, _callee);\n }));\n function linkEdit(_x) {\n return _linkEdit.apply(this, arguments);\n }\n return linkEdit;\n }(),\n linkDelete: function linkDelete(i) {\n _this9.options.attribute.link.content.splice(i, 1);\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this9.options.attribute.link.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n cancelEdit: function cancelEdit() {\n _this9.attributeLink = _this9.options.attribute.link.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect);\n fileElm.addEventListener('change', _fileSelect);\n }\n };\n var _fileSelect = function _fileSelect(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop3 = function _loop3(_i2) {\n var btn = item[_i2].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n if (!btn[n] || !btn[n].attributes) {\n continue;\n }\n var _iterator2 = _createForOfIteratorHelper(btn[n].attributes),\n _step2;\n try {\n var _loop4 = function _loop4() {\n var m = _step2.value;\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i2);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n };\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n if (_loop4()) break;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n };\n for (var _i2 = 0; _i2 < item.length; _i2++) {\n _loop3(_i2);\n }\n }\n }, {\n key: \"attributeCamera\",\n get: function get() {\n return this.options.attribute.camera.content;\n },\n set: function set(v) {\n this.options.attribute.camera.content = v;\n }\n }, {\n key: \"attributeISC\",\n get: function get() {\n return this.options.attribute.ISC.content;\n },\n set: function set(v) {\n this.options.attribute.ISC.content = v;\n }\n }, {\n key: \"attributeVr\",\n get: function get() {\n return this.options.attribute.vr.content;\n },\n set: function set(v) {\n var _this10 = this;\n this.options.attribute.vr.content = v;\n if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {\n return;\n }\n var table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (this.options.attribute.vr.content.length > 0) {\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n }\n for (var i = 0; i < this.options.attribute.vr.content.length; i++) {\n var tr = \"\\n
      \\n
      \" + this.options.attribute.vr.content[i].name + \"
      \\n
      \" + this.options.attribute.vr.content[i].url + \"
      \\n
      \\n \\n \\n
      \\n
      \";\n var trElm = document.createRange().createContextualFragment(tr);\n tableContent.appendChild(trElm);\n }\n var item = tableContent.getElementsByClassName('tr');\n var fun = {\n vrEdit: function () {\n var _vrEdit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2(index) {\n var table, tableContent, item, _loop5, _i3;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _this10.options.attribute.vr.content;\n case 2:\n _this10.attributeVr = _context6.sent;\n table = _this10._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0];\n tableContent = table.getElementsByClassName('table-body')[0];\n item = tableContent.getElementsByClassName('tr');\n _loop5 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop5(_i3) {\n var height, _html2, textareaElm, td, btn, n, _iterator3, _step3, _loop6;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n if (!(index === _i3)) {\n _context5.next = 36;\n break;\n }\n height = item[_i3].offsetHeight;\n _html2 = \"\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \";\n item[_i3].innerHTML = _html2;\n textareaElm = item[_i3].getElementsByClassName('link-edit')[0];\n textareaElm.style.height = height - 10 + 'px';\n td = item[_i3].getElementsByClassName('td');\n td[0].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].name;\n td[1].getElementsByClassName('input')[0].value = _this10.options.attribute.vr.content[index].url;\n btn = item[_i3].getElementsByTagName('button');\n n = 0;\n case 11:\n if (!(n < btn.length)) {\n _context5.next = 35;\n break;\n }\n if (!(!btn[n] || !btn[n].attributes)) {\n _context5.next = 14;\n break;\n }\n return _context5.abrupt(\"continue\", 32);\n case 14:\n _iterator3 = _createForOfIteratorHelper(btn[n].attributes);\n _context5.prev = 15;\n _loop6 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _loop6() {\n var m;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _loop6$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n m = _step3.value;\n if (!(m.name === '@click')) {\n _context4.next = 5;\n break;\n }\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value]({\n name: td[0].getElementsByClassName('input')[0].value,\n url: td[1].getElementsByClassName('input')[0].value\n }, _i3);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return _context4.abrupt(\"return\", 1);\n case 5:\n case \"end\":\n return _context4.stop();\n }\n }, _loop6);\n });\n _iterator3.s();\n case 18:\n if ((_step3 = _iterator3.n()).done) {\n _context5.next = 24;\n break;\n }\n return _context5.delegateYield(_loop6(), \"t0\", 20);\n case 20:\n if (!_context5.t0) {\n _context5.next = 22;\n break;\n }\n return _context5.abrupt(\"break\", 24);\n case 22:\n _context5.next = 18;\n break;\n case 24:\n _context5.next = 29;\n break;\n case 26:\n _context5.prev = 26;\n _context5.t1 = _context5[\"catch\"](15);\n _iterator3.e(_context5.t1);\n case 29:\n _context5.prev = 29;\n _iterator3.f();\n return _context5.finish(29);\n case 32:\n n++;\n _context5.next = 11;\n break;\n case 35:\n return _context5.abrupt(\"return\", 1);\n case 36:\n case \"end\":\n return _context5.stop();\n }\n }, _loop5, null, [[15, 26, 29, 32]]);\n });\n _i3 = 0;\n case 8:\n if (!(_i3 < item.length)) {\n _context6.next = 15;\n break;\n }\n return _context6.delegateYield(_loop5(_i3), \"t0\", 10);\n case 10:\n if (!_context6.t0) {\n _context6.next = 12;\n break;\n }\n return _context6.abrupt(\"break\", 15);\n case 12:\n _i3++;\n _context6.next = 8;\n break;\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }, _callee2);\n }));\n function vrEdit(_x2) {\n return _vrEdit.apply(this, arguments);\n }\n return vrEdit;\n }(),\n vrDelete: function vrDelete(i) {\n _this10.options.attribute.vr.content.splice(i, 1);\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n confirmEdit: function confirmEdit(value, i) {\n var name = value.name && value.name.replace(/\\s/g, \"\");\n var url = value.url && value.url.replace(/\\s/g, \"\");\n if (name && url) {\n _this10.options.attribute.vr.content[i] = value;\n } else {\n window.ELEMENT && window.ELEMENT.Message({\n message: '名称或链接不能为空!',\n type: 'warning',\n duration: 1500\n });\n }\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n cancelEdit: function cancelEdit() {\n _this10.attributeVr = _this10.options.attribute.vr.content;\n },\n fileSelect: function fileSelect(value, i) {\n var fileElm = item[i].getElementsByClassName('file-select')[0];\n fileElm.click();\n fileElm.removeEventListener('change', _fileSelect2);\n fileElm.addEventListener('change', _fileSelect2);\n }\n };\n var _fileSelect2 = function _fileSelect2(event) {\n if (event.target.value) {\n var td = item[event.target.getAttribute('index')].getElementsByClassName('td');\n td[1].getElementsByClassName('input')[0].value = event.target.value;\n event.target.value = null;\n }\n };\n var _loop7 = function _loop7(_i4) {\n var btn = item[_i4].getElementsByTagName('button');\n for (var n = 0; n < btn.length; n++) {\n var _iterator4 = _createForOfIteratorHelper(btn[n].attributes),\n _step4;\n try {\n var _loop8 = function _loop8() {\n var m = _step4.value;\n if (!btn[n] || !btn[n].attributes) {\n return 0; // continue\n }\n if (m.name === '@click') {\n btn[n].addEventListener('click', function (e) {\n if (typeof fun[m.value] === 'function') {\n fun[m.value](_i4);\n }\n });\n btn[n].attributes.removeNamedItem(m.name);\n return 1; // break\n }\n },\n _ret;\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n _ret = _loop8();\n if (_ret === 0) continue;\n if (_ret === 1) break;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n };\n for (var _i4 = 0; _i4 < item.length; _i4++) {\n _loop7(_i4);\n }\n }\n }, {\n key: \"attributeGoods\",\n get: function get() {\n return this.options.attribute.goods.content;\n },\n set: function set(v) {\n this.options.attribute.goods.content = v;\n }\n\n //创建\n }, {\n key: \"edit\",\n value: // 编辑框\n function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3(state) {\n var _this11 = this;\n var _this, contentElm, materialList, legpMaterial, iActiveElm2, legpMaterialInput, i, tabsElm, colorPicker, labelColorPicker, lineColorPicker, labelBackgroundColorStartPicker, labelBackgroundColorEndPicker, all_elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context7.next = 49;\n break;\n }\n _context7.next = 6;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk, this.options, {\n title: '电子围墙属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this11.name = _this11.name.trim();\n if (!_this11.name) {\n _this11.name = '未命名对象';\n }\n _this11.options.label.position = {\n lng: _this11.label.position[0],\n lat: _this11.label.position[1],\n alt: _this11.label.position[2]\n };\n _this11.originalOptions = _this11.deepCopyObj(_this11.options);\n _this11._DialogObject.close();\n _this11.Dialog.confirmCallBack && _this11.Dialog.confirmCallBack(_this11.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(_this11.sdk, _this11.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"syncSplitData\"])(_this11.sdk, _this11.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this11.reset();\n _this11.Dialog.resetCallBack && _this11.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this11.Dialog.removeCallBack && _this11.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this11.reset();\n _this11.Dialog.closeCallBack && _this11.Dialog.closeCallBack();\n for (var i = 0; i < _this11.nodePoints.length; i++) {\n _this11.sdk.viewer.entities.remove(_this11.nodePoints[i]);\n }\n _this11.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n _this11.event && _this11.event.destroy();\n _this11.event && _this11.tip.destroy();\n },\n showCallBack: function showCallBack(show) {\n _this11.options.show = show;\n _this11.originalOptions.show = show;\n _this11.show = show;\n _this11.Dialog.showCallBack && _this11.Dialog.showCallBack();\n },\n secondaryEditCallBack: function secondaryEditCallBack() {\n WallStereoscopic.nodeEdit(_this11);\n }\n });\n case 6:\n this._DialogObject = _context7.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' wall-stereoscopic';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_11__[\"html\"])(this);\n this._DialogObject.contentAppChild(contentElm);\n this.attributeType = this.options.attributeType;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeISC = this.options.attribute.ISC.content;\n\n // 材质下拉\n materialList = [{\n name: '纯色墙',\n value: '纯色墙',\n key: 0,\n icon: 'icon-wall'\n }, {\n name: '上升墙',\n value: '上升墙',\n key: 1,\n icon: 'icon-wall-gradient'\n }, {\n name: '箭头墙',\n value: '箭头墙',\n key: 2,\n icon: 'icon-wall-arrow'\n }, {\n name: '警戒墙',\n value: '警戒墙',\n key: 3,\n icon: 'icon-wall-warn'\n }];\n legpMaterial = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(contentElm.getElementsByClassName('material-box')[0], \".material\");\n legpMaterial.legp_search(materialList);\n iActiveElm2 = document.createElement('i');\n iActiveElm2.className = \"icon icon-active\";\n contentElm.getElementsByClassName('material')[0].getElementsByClassName('cy_datalist')[0].appendChild(iActiveElm2);\n legpMaterialInput = contentElm.getElementsByClassName('material')[0].getElementsByTagName('input')[0];\n i = 0;\n case 22:\n if (!(i < materialList.length)) {\n _context7.next = 31;\n break;\n }\n if (!(materialList[i].key === this.material)) {\n _context7.next = 28;\n break;\n }\n legpMaterial.legp_searchActive(materialList[i].value);\n legpMaterialInput.value = materialList[i].value;\n iActiveElm2.className = \"icon icon-active \".concat(materialList[i].icon);\n return _context7.abrupt(\"break\", 31);\n case 28:\n i++;\n _context7.next = 22;\n break;\n case 31:\n legpMaterialInput.addEventListener('input', function (e, c) {\n for (var _i5 = 0; _i5 < materialList.length; _i5++) {\n if (materialList[_i5].value === legpMaterialInput.value) {\n _this11.material = materialList[_i5].key;\n iActiveElm2.className = \"icon icon-active \".concat(materialList[_i5].icon);\n break;\n }\n }\n });\n\n // 创建标签页\n tabsElm = new _Element_cy_html_tabs__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('radar-scan-edit-tabs', undefined, this.sdk); // 颜色组件\n colorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n lineColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelLineColor\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.labelLineColor,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this11.labelLineColor = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this11.labelLineColor = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n labelBackgroundColorStartPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorStart\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorStart,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorStart = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorStart = 'rgba(255,255,255,1)';\n }\n });\n labelBackgroundColorEndPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"labelBackgroundColorEnd\")[0],\n size: 'mini',\n alpha: true,\n defaultColor: this.labelBackgroundColorEnd,\n disabled: false,\n openPickerAni: 'opacity',\n sure: function sure(color) {\n _this11.labelBackgroundColorEnd = color;\n },\n clear: function clear() {\n _this11.labelBackgroundColorEnd = 'rgba(255,255,255,1)';\n }\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].on(this, all_elm);\n this._elms = _eventBinding__WEBPACK_IMPORTED_MODULE_14__[\"default\"].element;\n this._elms.color = [colorPicker];\n this._elms.labelColor = [labelColorPicker];\n this._elms.labelLineColor = [lineColorPicker];\n this._elms.labelBackgroundColorStart = [labelBackgroundColorStartPicker];\n this._elms.labelBackgroundColorEnd = [labelBackgroundColorEndPicker];\n setTimeout(function () {\n _this11.attributeLink = _this11.options.attribute.link.content;\n _this11.ISCSelect && _this11.ISCSelect();\n _this11.goodsSelect && _this11.goodsSelect();\n _this11.cameraSelect && _this11.cameraSelect();\n _this11.attributeVr = _this11.options.attribute.vr.content;\n var tagData = _this11.attributeSelect;\n var legpObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this11._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0], \".attribute-select\");\n legpObject.legp_search(tagData);\n var attributeElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select')[0];\n if (!attributeElm) {\n return;\n }\n var attributeSelectElm = _this11._DialogObject._element.content.getElementsByClassName('attribute-select')[0].getElementsByTagName('input')[0];\n for (var _i6 = 0; _i6 < tagData.length; _i6++) {\n if (tagData[_i6].key === _this11.options.attributeType) {\n attributeSelectElm.value = tagData[_i6].value;\n legpObject.legp_searchActive(tagData[_i6].value);\n break;\n }\n }\n attributeSelectElm.addEventListener('input', function () {\n for (var _i7 = 0; _i7 < tagData.length; _i7++) {\n if (tagData[_i7].value === attributeSelectElm.value) {\n _this11.attributeType = tagData[_i7].key;\n break;\n }\n }\n });\n var fontData = Object(_Element_fontSelect__WEBPACK_IMPORTED_MODULE_19__[\"getFontList\"])();\n var fontObject = Object(_Element_datalist__WEBPACK_IMPORTED_MODULE_18__[\"legp\"])(_this11._DialogObject._element.content.getElementsByClassName('font-select-box')[0], '.font-select');\n if (fontObject) {\n fontObject.legp_search(fontData);\n var fontDataLegpElm = _this11._DialogObject._element.content.getElementsByClassName('font-select')[0].getElementsByTagName('input')[0];\n fontDataLegpElm.value = fontData[_this11.labelFontFamily].value;\n for (var _i8 = 0; _i8 < fontData.length; _i8++) {\n if (fontData[_i8].value == fontDataLegpElm.value) {\n fontObject.legp_searchActive(fontData[_i8].value);\n break;\n }\n }\n fontDataLegpElm.addEventListener('input', function () {\n for (var _i9 = 0; _i9 < fontData.length; _i9++) {\n if (fontData[_i9].value === fontDataLegpElm.value) {\n _this11.labelFontFamily = fontData[_i9].key;\n break;\n }\n }\n });\n _this11._elms.labelFontFamily = [fontDataLegpElm];\n }\n }, 0);\n _context7.next = 50;\n break;\n case 49:\n if (this._DialogObject && this._DialogObject.remove) {\n this._DialogObject.remove();\n this._DialogObject = null;\n }\n case 50:\n case \"end\":\n return _context7.stop();\n }\n }, _callee3, this);\n }));\n function edit(_x3) {\n return _edit.apply(this, arguments);\n }\n return edit;\n }()\n }, {\n key: \"reset\",\n value: function reset() {\n var _this12 = this;\n if (!this.entity) {\n return;\n }\n this.options = this.deepCopyObj(this.originalOptions);\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.extrudedHeight = this.originalOptions.extrudedHeight;\n this.labelShow = this.originalOptions.label.show;\n this.labelColor = this.originalOptions.label.color;\n this.labelFontSize = this.originalOptions.label.fontSize;\n this.labelFontFamily = this.originalOptions.label.fontFamily;\n this.labelScaleByDistance = this.originalOptions.label.scaleByDistance;\n this.labelNear = this.originalOptions.label.near;\n this.labelFar = this.originalOptions.label.far;\n this.labelLineWidth = this.originalOptions.label.lineWidth;\n this.labelPixelOffset = this.originalOptions.label.pixelOffset;\n this.labelLineColor = this.originalOptions.label.lineColor;\n this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0];\n this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1];\n this.instruct = this.originalOptions.instruct;\n this.operatingPoint = this.originalOptions.operatingPoint;\n this.attributeLink = this.options.attribute.link.content;\n this.attributeVr = this.options.attribute.vr.content;\n this.attributeCamera = this.options.attribute.camera.content;\n this.attributeGoods = this.options.attribute.goods.content;\n this.attributeISC = this.options.attribute.ISC.content;\n this.cameraSelect && this.cameraSelect();\n this.goodsSelect && this.goodsSelect();\n var positions = this.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n if (this.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n this.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n this.material = this.material;\n this._elms.noseToTail && this._elms.noseToTail.forEach(function (item) {\n item.checked = _this12.noseToTail;\n });\n }\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n this.label.remove();\n this.sdk.viewer.entities.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context8.next = 8;\n return this.sdk.removeIncetance(this.options.id);\n case 8:\n _context8.next = 10;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(this.sdk, this.options.id);\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }, _callee4, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"instructSubmit\",\n value: function instructSubmit() {\n this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct);\n this.originalOptions.instruct = this.instruct;\n }\n }, {\n key: \"operatingPointSubmit\",\n value: function operatingPointSubmit() {\n this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint);\n this.originalOptions.operatingPoint = this.operatingPoint;\n }\n }, {\n key: \"_addLink\",\n value: function _addLink() {\n // document.getElementsByClassName\n if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '';\n this.attributeLink = this.options.attribute.link.content;\n } else {\n this.Dialog.clickAddLink && this.Dialog.clickAddLink();\n }\n }\n }, {\n key: \"addAttributeLink\",\n value: function addAttributeLink(link) {\n this.options.attribute.link.content.push({\n name: '链接',\n url: link\n });\n this.attributeLink = this.options.attribute.link.content;\n }\n }, {\n key: \"_addRr\",\n value: function _addRr() {\n if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value\n });\n this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '';\n this.attributeVr = this.options.attribute.vr.content;\n } else {\n this.Dialog.clickAddVr && this.Dialog.clickAddVr();\n }\n }\n }, {\n key: \"addAttributeRr\",\n value: function addAttributeRr(vr) {\n this.options.attribute.vr.content.push({\n name: '全景图',\n url: vr\n });\n this.attributeVr = this.options.attribute.vr.content;\n }\n }, {\n key: \"getMaterial\",\n value: function getMaterial() {\n var _this13 = this;\n var material;\n switch (this.options.material) {\n case 0:\n material = Cesium.Color.fromCssColorString(this.options.color);\n if (this.sdk.viewer.scene.mode === 2) {\n material = new Cesium.CustomColorMaterialSource({\n color: this.options.color\n });\n }\n break;\n case 1:\n material = new Cesium.PolylineTrailLinkMaterialProperty({\n color: Cesium.Color.fromCssColorString(this.options.color),\n duration: this.options.duration\n });\n break;\n case 2:\n case 3:\n // material = new Cesium.CustomMaterialSource({\n // image: './image/arrow.png',\n // repeat: new Cesium.Cartesian2(10, 1.0),\n // color: this.options.color,\n // duration: this.options.duration\n // })\n var img;\n switch (this.options.material) {\n case 2:\n img = 'arrow';\n break;\n case 3:\n img = 'warn';\n break;\n }\n material = new Cesium.CustomMaterialSource({\n image: this.getSourceRootPath() + \"/img/material/\".concat(img, \".png\"),\n color: this.options.color,\n repeats: new Cesium.CallbackProperty(function () {\n var repeat = [[1.0, 1.0, 1.0]];\n if (!_this13.entity || !_this13.entity.polylineVolume) {\n return repeat;\n }\n var positionProperty = _this13.entity.polylineVolume.positions;\n var positions = positionProperty.getValue();\n if (!Cesium.defined(positions)) {\n return repeat;\n }\n var totalDistance = 0;\n var distances = [];\n repeat = [];\n var flag = false;\n for (var i = 0; i < positions.length - 1; ++i) {\n var distance = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n if (distance >= 100000) {\n flag = true;\n }\n distances.push(distance);\n totalDistance += distance;\n }\n var imgProportion = 45 / 45; // 图片长宽比例\n var totalRepeatX = totalDistance / _this13.options.extrudedHeight;\n totalRepeatX = totalRepeatX / imgProportion;\n if (flag) {\n for (var _i10 = 0; _i10 < distances.length; _i10++) {\n var repeatY = 1.0;\n repeat.push([((_i10 + 1) / distances.length).toFixed(30), totalRepeatX / 5, repeatY]);\n }\n } else {\n var totalRatio = 0;\n for (var _i11 = 0; _i11 < distances.length; _i11++) {\n var ratio = distances[_i11] / totalDistance;\n totalRatio += ratio;\n var repeatX = ratio * totalRepeatX;\n var _repeatY = 1.0;\n repeat.push([((_i11 + 1) / distances.length).toFixed(30), repeatX, _repeatY]);\n }\n }\n return repeat;\n }, false),\n duration: this.options.duration\n });\n break;\n }\n return material;\n }\n\n /**\r\n * 打开富文本框\r\n */\n }, {\n key: \"openRichTextEditor\",\n value: function openRichTextEditor(e) {\n var _this14 = this;\n _Element_richText__WEBPACK_IMPORTED_MODULE_10__[\"default\"].open(this.options.id, this.options.name, this.options.richTextContent);\n _Element_richText__WEBPACK_IMPORTED_MODULE_10__[\"default\"].primaryCallBack = function (content) {\n _this14.options.richTextContent = content;\n };\n }\n }, {\n key: \"setDIV\",\n value: function setDIV() {\n var _Cesium$Cartesian,\n _this15 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n domid: \"\",\n x: 10,\n y: 10\n };\n options.x = options.x || options.x === 0 ? options.x : 10;\n options.y = options.y || options.y === 0 ? options.y : 10;\n var points = [];\n for (var i = 0; i < this.options.positions.length; i++) {\n points.push([this.options.positions[i].lng, this.options.positions[i].lat]);\n }\n var line = turf.lineString(points);\n var length = turf.length(line, {\n units: 'kilometers'\n });\n var sliced = turf.lineSliceAlong(line, 0, length / 2, {\n units: 'kilometers'\n });\n var siteInfoDom = document.getElementById(options.domid);\n var siteInfoPosition = (_Cesium$Cartesian = Cesium.Cartesian3).fromDegrees.apply(_Cesium$Cartesian, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(sliced.geometry.coordinates[sliced.geometry.coordinates.length - 1]).concat([this.options.positions[0].alt + this.options.extrudedHeight]));\n this.sdk.viewer.scene.postRender.addEventListener(function (percentage) {\n //转换到屏幕坐标\n if (siteInfoDom.style.display === 'block' || siteInfoDom.style.display === '') {\n var winpos = _this15.sdk.viewer.scene.cartesianToCanvasCoordinates(siteInfoPosition);\n if (winpos) {\n siteInfoDom.style.left = (winpos.x + options.x).toFixed(0) + 'px';\n siteInfoDom.style.top = (winpos.y + options.y).toFixed(0) + 'px';\n }\n }\n });\n }\n }], [{\n key: \"createLabel\",\n value: function createLabel(that) {\n // 标签\n that.label = new _LabelObject__WEBPACK_IMPORTED_MODULE_13__[\"default\"](that.sdk, {\n id: that.options.id,\n show: that.options.show ? that.options.label.show : false,\n position: [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight],\n text: that.options.name,\n fontSize: that.options.label.fontSize,\n fontFamily: that.options.label.fontFamily,\n color: that.options.label.color,\n ground: false,\n pixelOffset: that.options.label.pixelOffset,\n backgroundColor: that.options.label.backgroundColor,\n lineColor: that.options.label.lineColor,\n lineWidth: that.options.label.lineWidth,\n scaleByDistance: that.options.label.scaleByDistance,\n near: that.options.label.near,\n far: that.options.label.far\n });\n }\n }, {\n key: \"create\",\n value: function () {\n var _create = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee5(that) {\n var positions, fromDegreesArray, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee5$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n // console.log(new Cesium.CustomMaterialSource(), new Cesium.PolylineTrailLinkMaterialProperty())\n positions = that.options.positions;\n fromDegreesArray = [];\n for (i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n if (that.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n that.entity = that.sdk.viewer.entities.add({\n id: that.options.id,\n show: that.options.show,\n polylineVolume: {\n positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n // height: new Cesium.CallbackProperty(function () {\n // return that.options.height\n // }, false),\n // extrudedHeight: new Cesium.CallbackProperty(function () {\n // return that.options.extrudedHeight\n // }, false),\n shape: [{\n x: -0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: -that.options.extrudedHeight / 2\n }, {\n x: 0.0000001,\n y: that.options.extrudedHeight / 2\n }, {\n x: -0.0000001,\n y: that.options.extrudedHeight / 2\n }],\n cornerType: Cesium.CornerType.MITERED\n }\n // wall: {\n // positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray),\n // maximumHeights: maximumHeights,\n // minimumHeights: minimumHeights,\n // material: new Cesium.PolylineTrailLinkMaterialProperty({duration: 1500}),\n // outline: true,\n // outlineColor: Cesium.Color.BLACK,\n // }\n });\n that.entity.polylineVolume.material = that.getMaterial();\n WallStereoscopic.createLabel(that);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_17__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_20__[\"setSplitDirection\"])(0, that.options.id);\n }\n case 9:\n case \"end\":\n return _context9.stop();\n }\n }, _callee5);\n }));\n function create(_x4) {\n return _create.apply(this, arguments);\n }\n return create;\n }()\n }, {\n key: \"nodeEdit\",\n value: function nodeEdit(that) {\n var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n if (YJ.Measure.GetMeasureStatus()) {\n cb('上一次测量未结束');\n } else {\n YJ.Measure.SetMeasureStatus(true);\n that.tip = new _MouseTip__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('请选择一个顶点,右键取消', that.sdk);\n that.event = new _Event__WEBPACK_IMPORTED_MODULE_15__[\"default\"](that.sdk);\n that.nodePoints = [];\n var selectPoint;\n var originalPosition;\n var positions = that.options.positions;\n var fromDegreesArray = [];\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt);\n }\n if (that.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n var isAdd = false;\n var leftEvent = function leftEvent(movement, cartesian) {\n if (selectPoint) {\n isAdd = true;\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, [that.entity]);\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n originalPosition = that.options.positions[selectPoint.index];\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[selectPoint.index].lng, that.options.positions[selectPoint.index].lat, that.options.positions[selectPoint.index].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.splice(selectPoint.index, 0, entity);\n that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]);\n var _positions = that.options.positions;\n fromDegreesArray = [];\n for (var _i12 = 0; _i12 < _positions.length; _i12++) {\n fromDegreesArray.push(_positions[_i12].lng, _positions[_i12].lat, _positions[_i12].alt);\n }\n if (that.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n that.tip.setPosition(cartesian, movement.position.x, movement.position.y);\n that.material = that.material;\n } else {\n var pick = that.sdk.viewer.scene.pick(movement.position);\n if (pick && pick.id && pick.id.name && pick.id.name === 'node-secondary-edit-point') {\n selectPoint = pick.id;\n that.nodePoints.splice(pick.id.index, 1);\n that.sdk.viewer.entities.remove(pick.id);\n that.tip.set_text('左键开始,右键结束,CTRL+右键撤销');\n originalPosition = that.cartesian3Towgs84(selectPoint.position._value, that.sdk.viewer);\n that.entity.polylineVolume.positions = new Cesium.CallbackProperty(function () {\n return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n }, false);\n }\n }\n };\n var rightEvent = function rightEvent(movement, cartesian) {\n if (selectPoint) {\n that.options.positions[selectPoint.index] = originalPosition;\n if (isAdd) {\n that.options.positions.splice(selectPoint.index, 1);\n }\n cb(null, that.options.positions);\n }\n var positions = that.options.positions;\n fromDegreesArray = [];\n for (var _i13 = 0; _i13 < positions.length; _i13++) {\n fromDegreesArray.push(positions[_i13].lng, positions[_i13].lat, positions[_i13].alt);\n }\n if (that.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n that.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray);\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n for (var _i14 = 0; _i14 < that.nodePoints.length; _i14++) {\n that.sdk.viewer.entities.remove(that.nodePoints[_i14]);\n }\n that.nodePoints = [];\n YJ.Measure.SetMeasureStatus(false);\n that.event.destroy();\n that.tip.destroy();\n that.material = that.material;\n };\n that.event.mouse_left(leftEvent);\n that.event.mouse_right(rightEvent);\n var pop = false;\n that.event.mouse_move(function (movement, cartesian) {\n if (selectPoint) {\n var pos3 = that.sdk.viewer.scene.clampToHeight(cartesian, [that.entity]);\n that.options.positions[selectPoint.index] = that.cartesian3Towgs84(pos3, that.sdk.viewer);\n var _positions2 = that.options.positions;\n fromDegreesArray = [];\n for (var _i15 = 0; _i15 < _positions2.length; _i15++) {\n fromDegreesArray.push(_positions2[_i15].lng, _positions2[_i15].lat, _positions2[_i15].alt);\n }\n if (that.noseToTail) {\n fromDegreesArray.push(fromDegreesArray[0], fromDegreesArray[1], fromDegreesArray[2]);\n }\n that.label.position = [that.options.positions[0].lng, that.options.positions[0].lat, that.options.positions[0].alt + that.options.extrudedHeight];\n if (pop) {\n pop = false;\n that.material = that.material;\n return;\n }\n }\n that.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y);\n });\n that.event.mouse_right_keyboard_ctrl(function (movement, cartesian) {\n if (selectPoint) {\n pop = true;\n that.options.positions.pop();\n that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1]);\n if (selectPoint.index === that.options.positions.length) {\n if (that.nodePoints[selectPoint.index - 1]) {\n selectPoint = that.nodePoints[selectPoint.index - 1];\n } else {\n selectPoint.index = 0;\n }\n }\n that.nodePoints.pop();\n }\n });\n that.event.gesture_pinck_start(function (movement, cartesian) {\n var startTime = new Date();\n var pos = {\n position: {\n x: (movement.position1.x + movement.position2.x) / 2,\n y: (movement.position1.y + movement.position2.y) / 2\n }\n };\n that.event.gesture_pinck_end(function () {\n var endTime = new Date();\n if (endTime - startTime >= 500) {\n // 长按取消\n rightEvent(pos, cartesian);\n } else {\n leftEvent(pos, cartesian);\n }\n });\n });\n for (var _i16 = 0; _i16 < that.options.positions.length; _i16++) {\n var entity = that.sdk.viewer.entities.add({\n name: 'node-secondary-edit-point',\n index: _i16,\n position: Cesium.Cartesian3.fromDegrees(that.options.positions[_i16].lng, that.options.positions[_i16].lat, that.options.positions[_i16].alt),\n billboard: {\n image: that.getSourceRootPath() + '/img/point.png',\n width: 15,\n height: 15,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n color: Cesium.Color.WHITE.withAlpha(0.99)\n }\n });\n that.nodePoints.push(entity);\n }\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (WallStereoscopic);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2FsbFN0ZXJlb3Njb3BpYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovQmFzZS9XYWxsU3RlcmVvc2NvcGljL2luZGV4LmpzPzE0ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpYWxvZyBmcm9tICcuLi8uLi9FbGVtZW50L0RpYWxvZyc7XHJcbmltcG9ydCBjeV90YWJzIGZyb20gXCIuLi8uLi9FbGVtZW50L2N5X2h0bWxfdGFic1wiO1xyXG5pbXBvcnQgcmljaFRleHQgZnJvbSBcIi4uLy4uL0VsZW1lbnQvcmljaFRleHRcIjtcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgTGFiZWxPYmplY3QgZnJvbSAnLi4vTGFiZWxPYmplY3QnXHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi9ldmVudEJpbmRpbmcnXHJcbmltcG9ydCBNb3VzZUV2ZW50IGZyb20gJy4uLy4uLy4uL0V2ZW50J1xyXG5pbXBvcnQgTW91c2VUaXAgZnJvbSAnLi4vLi4vLi4vTW91c2VUaXAnXHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBsZWdwIH0gZnJvbSAnLi4vLi4vRWxlbWVudC9kYXRhbGlzdCc7XHJcbmltcG9ydCB7IGdldEZvbnRMaXN0LCBnZXRGb250RmFtaWx5TmFtZSB9IGZyb20gJy4uLy4uL0VsZW1lbnQvZm9udFNlbGVjdCdcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcblxyXG5jbGFzcyBXYWxsU3RlcmVvc2NvcGljIGV4dGVuZHMgQmFzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNka1xyXG4gICAqIEBkZXNjcmlwdGlvbiDnlLXlrZDlm7TloplcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDlopnlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5uYW1lIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPVwiIzAwZDlmZlwiIHtzdHJpbmd9IOminOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnNob3c9dHJ1ZSB7Ym9vbGVhbn0g5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZXh0cnVkZWRIZWlnaHQ9Mi40IHtudW1iZXJ9IOaLieS8uOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5vc2VUb1RhaWw9ZmFsc2Uge2Jvb2xlYW59IOmmluWwvuebuOi/nlxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm1hdGVyaWFsPTAge251bWJlcn0g5p2Q6LSo77yMMO+8mue6r+iJsuWime+8mzHvvJrkuIrljYflopnvvJsy77ya566t5aS05aKZ77ybM++8muitpuaIkuWimVxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmR1cmF0aW9uPTEwMDAge251bWJlcn0g5oyB57ut5pe26Ze0XHJcbiAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gb3B0aW9ucy5wb3NpdGlvbnMg5b+F5aGr77yM57uP57qs5bqm5ZKM6auY5bqm55qE5YiX6KGo77yM5YC85Lqk5pu/IFt7bG9uLGxhdCxhbHR9LC4uLl1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sbmcge251bWJlcn0g57uP5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10ubGF0IHtudW1iZXJ9IOe6rOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbCB7b2JqZWN0fSDmoIfnrb7lr7nosaFcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC50ZXh0IHtzdHJpbmd9IOagh+etvuaWh+acrFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnNob3cge3N0cmluZ30g5qCH562+5pi+6ZqQXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge3N0cmluZ30g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ge29iamVjdH0g5qCH562+5L2N572uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwucG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLmxhdCB7bnVtYmVyfSDnuqzluqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5wb3NpdGlvbi5hbHQge251bWJlcn0g6auY5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udFNpemU9MjAge251bWJlcn0g5a2X5L2T5aSn5bCPXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZm9udEZhbWlseT0wIHtudW1iZXJ9IOWtl+S9k+mhuSAw77ya6buR5L2T77ybMe+8muaAnea6kOm7keS9k++8mzLvvJrlup7pl6jmraPpgZPmoIfpopjkvZPvvJsz77ya5pWw6buR5L2TXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuY29sb3I9I2ZmZmZmZiB7c3RyaW5nfSDlrZfkvZPpopzoibJcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGg9NCB7bnVtYmVyfSDlvJXnur/lrr1cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5saW5lQ29sb3I9IzAwZmZmZjgwIHtzdHJpbmd9IOW8lee6v+minOiJslxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0PTIwIHtudW1iZXJ9IOWtl+S9k+WBj+enuyjlvJXnur/plb/luqYpXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yPVsnIzAwZmZmZjgwJywgJyMwMGZmZmY4MCddIHthcnJheX0g6IOM5pmv6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuc2NhbGVCeURpc3RhbmNlIHtib29sZWFufSDot53nprvnvKnmlL5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5sYWJlbC5uZWFyPTIwMDAge251bWJlcn0g6KeG6YeO57yp5pS+5pyA6L+R6Led56a7XHJcbiAgICogQHBhcmFtIG9wdGlvbnMubGFiZWwuZmFyPTEwMDAwMCB7bnVtYmVyfSDop4bph47nvKnmlL7mnIDov5zot53nprtcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUge29iamVjdH0g5bGe5oCn5YaF5a65XHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuYXR0cmlidXRlLmxpbms9e30g6ZO+5o6lXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudD1bXV0ge2FycmF5fSDpk77mjqXlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10ubmFtZSB7c3RyaW5nfSDpk77mjqXlkI3np7BcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W10udXJsIHtzdHJpbmd9IOmTvuaOpeWcsOWdgFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnJpY2hUZXh0Q29udGVudCB7c3RyaW5nfSDlr4zmlofmnKzlhoXlrrlcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3IHtvYmplY3R9IOm7mOiupOinhuinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ge29iamVjdH0g6buY6K6k6KeG6KeS5pa55L2NXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHtudW1iZXJ9IOiIquWQkeinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2gge251bWJlcn0g5L+v5Luw6KeSXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHtudW1iZXJ9IOe/u+a7muinklxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbiB7b2JqZWN0fSDop4bop5Lnm7jlr7nkvY3nva5cclxuICAgKiBAcGFyYW0gb3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nIHtudW1iZXJ9IOe7j+W6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdCB7bnVtYmVyfSDpq5jluqZcclxuICAgKiAqL1xyXG4gIGNvbnN0cnVjdG9yKHNkaywgb3B0aW9ucywgX0RpYWxvZyA9IHt9KSB7XHJcbiAgICBzdXBlcihzZGssIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbG9yID0gb3B0aW9ucy5jb2xvciB8fCBcIiNmZjAwMDBcIlxyXG4gICAgdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0ID0gb3B0aW9ucy5leHRydWRlZEhlaWdodCB8fCAyLjRcclxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbnMgPSBvcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgdGhpcy5vcHRpb25zLm1hdGVyaWFsID0gKE51bWJlcihvcHRpb25zLm1hdGVyaWFsKSB8fCBOdW1iZXIob3B0aW9ucy5tYXRlcmlhbCkgPT09IDApID8gTnVtYmVyKG9wdGlvbnMubWF0ZXJpYWwpIDogM1xyXG4gICAgdGhpcy5vcHRpb25zLmR1cmF0aW9uID0gKG9wdGlvbnMuZHVyYXRpb24gfHwgb3B0aW9ucy5kdXJhdGlvbiA9PT0gMCkgPyBvcHRpb25zLmR1cmF0aW9uIDogMTAwMFxyXG4gICAgdGhpcy5vcHRpb25zLnNob3cgPSAob3B0aW9ucy5zaG93IHx8IG9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpID8gb3B0aW9ucy5zaG93IDogdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zWydub3NlLXRvLXRhaWwnXSA9IG9wdGlvbnNbJ25vc2UtdG8tdGFpbCddIHx8IGZhbHNlXHJcbiAgICB0aGlzLmVudGl0eVxyXG4gICAgdGhpcy5ub2RlUG9pbnRzID0gW11cclxuICAgIG9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwgPSB7XHJcbiAgICAgIHRleHQ6IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICBzaG93OiBvcHRpb25zLmxhYmVsLnNob3cgfHwgZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiBvcHRpb25zLmxhYmVsLnBvc2l0aW9uLFxyXG4gICAgICBmb250U2l6ZTogKG9wdGlvbnMubGFiZWwuZm9udFNpemUgfHwgb3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLmZvbnRTaXplIDogMjAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA/IG9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA6IDAsXHJcbiAgICAgIGNvbG9yOiBvcHRpb25zLmxhYmVsLmNvbG9yIHx8ICcjZmZmZmZmJyxcclxuICAgICAgbGluZVdpZHRoOiAob3B0aW9ucy5sYWJlbC5saW5lV2lkdGggfHwgb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPT09IDApID8gb3B0aW9ucy5sYWJlbC5saW5lV2lkdGggOiA0LFxyXG4gICAgICBwaXhlbE9mZnNldDogKG9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXQgfHwgb3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9PT0gMCkgPyBvcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0IDogMjAsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgfHwgWycjMDBmZmZmODAnLCAnIzAwZmZmZjgwJ10sXHJcbiAgICAgIGxpbmVDb2xvcjogb3B0aW9ucy5sYWJlbC5saW5lQ29sb3IgfHwgJyMwMGZmZmY4MCcsXHJcbiAgICAgIHNjYWxlQnlEaXN0YW5jZTogb3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UgfHwgZmFsc2UsXHJcbiAgICAgIG5lYXI6IChvcHRpb25zLmxhYmVsLm5lYXIgfHwgb3B0aW9ucy5sYWJlbC5uZWFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwubmVhciA6IDIwMDAsXHJcbiAgICAgIGZhcjogKG9wdGlvbnMubGFiZWwuZmFyIHx8IG9wdGlvbnMubGFiZWwuZmFyID09PSAwKSA/IG9wdGlvbnMubGFiZWwuZmFyIDogMTAwMDAwLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmluc3RydWN0ID0gb3B0aW9ucy5pbnN0cnVjdCB8fCBcIlwiXHJcbiAgICB0aGlzLm9wdGlvbnMub3BlcmF0aW5nUG9pbnQgPSBvcHRpb25zLm9wZXJhdGluZ1BvaW50IHx8IFwiXCJcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUgPSBvcHRpb25zLmF0dHJpYnV0ZSB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudCB8fCBbXVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnQgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLklTQy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5nb29kcy5jb250ZW50IHx8IFtdXHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZSA9IG9wdGlvbnMuYXR0cmlidXRlVHlwZSB8fCAncmljaFRleHQnXHJcbiAgICB0aGlzLkRpYWxvZyA9IF9EaWFsb2dcclxuICAgIHRoaXMuX2VsbXMgPSB7fTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnBvc2l0aW9ucyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5fZXJyb3IgPSAn5pyA5bCR6ZyA6KaB5Lik5Liq5Z2Q5qCH77yBJ1xyXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5fZXJyb3IpXHJcbiAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuX2Vycm9yLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgICBXYWxsU3RlcmVvc2NvcGljLmNyZWF0ZSh0aGlzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHR5cGUoKSB7XHJcbiAgICByZXR1cm4gJ3dhbGxTdGVyZW9zY29waWMnXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlTGFiZWwodGhhdCkge1xyXG4gICAgLy8g5qCH562+XHJcbiAgICB0aGF0LmxhYmVsID0gbmV3IExhYmVsT2JqZWN0KHRoYXQuc2RrLCB7XHJcbiAgICAgIGlkOiB0aGF0Lm9wdGlvbnMuaWQsXHJcbiAgICAgIHNob3c6IHRoYXQub3B0aW9ucy5zaG93ID8gdGhhdC5vcHRpb25zLmxhYmVsLnNob3cgOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0ICsgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0XSxcclxuICAgICAgdGV4dDogdGhhdC5vcHRpb25zLm5hbWUsXHJcbiAgICAgIGZvbnRTaXplOiB0aGF0Lm9wdGlvbnMubGFiZWwuZm9udFNpemUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IHRoYXQub3B0aW9ucy5sYWJlbC5mb250RmFtaWx5LFxyXG4gICAgICBjb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmNvbG9yLFxyXG4gICAgICBncm91bmQ6IGZhbHNlLFxyXG4gICAgICBwaXhlbE9mZnNldDogdGhhdC5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoYXQub3B0aW9ucy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgIGxpbmVDb2xvcjogdGhhdC5vcHRpb25zLmxhYmVsLmxpbmVDb2xvcixcclxuICAgICAgbGluZVdpZHRoOiB0aGF0Lm9wdGlvbnMubGFiZWwubGluZVdpZHRoLFxyXG4gICAgICBzY2FsZUJ5RGlzdGFuY2U6IHRoYXQub3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2UsXHJcbiAgICAgIG5lYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5uZWFyLFxyXG4gICAgICBmYXI6IHRoYXQub3B0aW9ucy5sYWJlbC5mYXJcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbG9yXHJcbiAgfVxyXG4gIHNldCBjb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSB2IHx8ICcjZmYwMDAwJ1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKClcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBjb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICAgIGVsOiBpdGVtLmVsLFxyXG4gICAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuX2VsbXMuY29sb3JbaV0gPSBjb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1hdGVyaWFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tYXRlcmlhbFxyXG4gIH1cclxuICBzZXQgbWF0ZXJpYWwodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm1hdGVyaWFsID0gKE51bWJlcih2KSB8fCBOdW1iZXIodikgPT09IDApID8gTnVtYmVyKHYpIDogM1xyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsKClcclxuICAgIHRoaXMuX2VsbXMubWF0ZXJpYWwgJiYgdGhpcy5fZWxtcy5tYXRlcmlhbC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLm9wdGlvbnMubWF0ZXJpYWxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbm9zZVRvVGFpbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbJ25vc2UtdG8tdGFpbCddXHJcbiAgfVxyXG5cclxuICBzZXQgbm9zZVRvVGFpbCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnNbJ25vc2UtdG8tdGFpbCddID0gdlxyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbnNcclxuICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgfVxyXG4gICAgaWYgKHYpIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1swXS5sbmcsIHBvc2l0aW9uc1swXS5sYXQsIHBvc2l0aW9uc1swXS5hbHQpXHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZVZvbHVtZS5wb3NpdGlvbnMgPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgdGhpcy5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxcclxuICAgIHRoaXMuX2VsbXMubm9zZVRvVGFpbCAmJlxyXG4gICAgICB0aGlzLl9lbG1zLm5vc2VUb1RhaWwuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgZXh0cnVkZWRIZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0XHJcbiAgfVxyXG4gIHNldCBleHRydWRlZEhlaWdodCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgPSB2XHJcbiAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmxhdCwgdGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXS5hbHQgKyB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRdXHJcbiAgICB0aGlzLmVudGl0eS5wb2x5bGluZVZvbHVtZS5zaGFwZSA9IFtcclxuICAgICAgeyB4OiAtMC4wMDAwMDAxLCB5OiAtdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICB7IHg6IDAuMDAwMDAwMSwgeTogLXRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgeyB4OiAwLjAwMDAwMDEsIHk6IHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgeyB4OiAtMC4wMDAwMDAxLCB5OiB0aGlzLm9wdGlvbnMuZXh0cnVkZWRIZWlnaHQgLyAyIH0sXHJcbiAgICBdXHJcbiAgICB0aGlzLl9lbG1zLmV4dHJ1ZGVkSGVpZ2h0ICYmIHRoaXMuX2VsbXMuZXh0cnVkZWRIZWlnaHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbFNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNob3dcclxuICB9XHJcbiAgc2V0IGxhYmVsU2hvdyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuc2hvdyA9IHZcclxuICAgIGlmICh0aGlzLnNob3cgJiYgIXRoaXMuc2hvd1ZpZXcgfHwgdGhpcy5zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgIHRoaXMubGFiZWwuc2hvdyA9IHZcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxhYmVsLnNob3cgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNob3cgJiYgdGhpcy5fZWxtcy5sYWJlbFNob3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udEZhbWlseSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseVxyXG4gIH1cclxuXHJcbiAgc2V0IGxhYmVsRm9udEZhbWlseSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuZm9udEZhbWlseSA9IHYgfHwgMFxyXG4gICAgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5mb250RmFtaWx5ID0gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRGYW1pbHkpXHJcblxyXG4gICAgbGV0IG5hbWUgPSBnZXRGb250RmFtaWx5TmFtZSh0aGlzLmxhYmVsRm9udEZhbWlseSkgfHwgJydcclxuICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ICYmXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IG5hbWVcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5jb2xvclxyXG4gIH1cclxuICBzZXQgbGFiZWxDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuY29sb3IgPSB2XHJcbiAgICB0aGlzLmxhYmVsLmNvbG9yID0gdlxyXG4gICAgaWYgKHRoaXMuX2VsbXMubGFiZWxDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQ29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbENvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxDb2xvcixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICAgIH0sLy/ngrnlh7vnoa7orqTmjInpkq7kuovku7blm57osINcclxuICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbENvbG9yW2ldID0gbGFiZWxDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRm9udFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgfVxyXG4gIHNldCBsYWJlbEZvbnRTaXplKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mb250U2l6ZSA9IHZcclxuICAgIHRoaXMubGFiZWwuZm9udFNpemUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRm9udFNpemUgJiYgdGhpcy5fZWxtcy5sYWJlbEZvbnRTaXplLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZVxyXG4gIH1cclxuICBzZXQgbGFiZWxTY2FsZUJ5RGlzdGFuY2Uodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLnNjYWxlQnlEaXN0YW5jZSA9IHZcclxuICAgIHRoaXMubGFiZWwuc2NhbGVCeURpc3RhbmNlID0gdlxyXG4gICAgdGhpcy5fZWxtcy5sYWJlbFNjYWxlQnlEaXN0YW5jZSAmJiB0aGlzLl9lbG1zLmxhYmVsU2NhbGVCeURpc3RhbmNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbE5lYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLm5lYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsTmVhcih2KSB7XHJcbiAgICBsZXQgbmVhciA9IHZcclxuICAgIGlmIChuZWFyID4gdGhpcy5sYWJlbEZhcikge1xyXG4gICAgICBuZWFyID0gdGhpcy5sYWJlbEZhclxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLmxhYmVsLm5lYXIgPSBuZWFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsTmVhciAmJiB0aGlzLl9lbG1zLmxhYmVsTmVhci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSBuZWFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsRmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5mYXJcclxuICB9XHJcbiAgc2V0IGxhYmVsRmFyKHYpIHtcclxuICAgIGxldCBmYXIgPSB2XHJcbiAgICBpZiAoZmFyIDwgdGhpcy5sYWJlbE5lYXIpIHtcclxuICAgICAgZmFyID0gdGhpcy5sYWJlbE5lYXJcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5mYXIgPSBmYXJcclxuICAgIHRoaXMubGFiZWwuZmFyID0gZmFyXHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsRmFyICYmIHRoaXMuX2VsbXMubGFiZWxGYXIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gZmFyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsTGluZVdpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGhcclxuICB9XHJcbiAgc2V0IGxhYmVsTGluZVdpZHRoKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5saW5lV2lkdGggPSB2XHJcbiAgICB0aGlzLmxhYmVsLmxpbmVXaWR0aCA9IHZcclxuICAgIHRoaXMuX2VsbXMubGFiZWxMaW5lV2lkdGggJiYgdGhpcy5fZWxtcy5sYWJlbExpbmVXaWR0aC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsUGl4ZWxPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLnBpeGVsT2Zmc2V0XHJcbiAgfVxyXG4gIHNldCBsYWJlbFBpeGVsT2Zmc2V0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbC5waXhlbE9mZnNldCA9IHZcclxuICAgIHRoaXMubGFiZWwucGl4ZWxPZmZzZXQgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmxhYmVsUGl4ZWxPZmZzZXQgJiYgdGhpcy5fZWxtcy5sYWJlbFBpeGVsT2Zmc2V0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldCBsYWJlbExpbmVDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yXHJcbiAgfVxyXG4gIHNldCBsYWJlbExpbmVDb2xvcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwubGluZUNvbG9yID0gdlxyXG4gICAgdGhpcy5sYWJlbC5saW5lQ29sb3IgPSB2XHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcikge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGluZUNvbG9yUGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgICAgZWw6IGl0ZW0uZWwsXHJcbiAgICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsLy/mmK/lkKbnpoHmraLmiZPlvIDpopzoibLpgInmi6nlmahcclxuICAgICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbExpbmVDb2xvciA9ICdyZ2JhKDAsMjU1LDI1NSwwLjUpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5sYWJlbExpbmVDb2xvcltpXSA9IGxpbmVDb2xvclBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gIH1cclxuICBzZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzBdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdiwgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMV1dXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0KSB7XHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0LFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgICBvcGVuUGlja2VyQW5pOiAnb3BhY2l0eScsLy/miZPlvIDpopzoibLpgInmi6nlmajliqjnlLtcclxuICAgICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSBjb2xvclxyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRbaV0gPSBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdXHJcbiAgfVxyXG4gIHNldCBsYWJlbEJhY2tncm91bmRDb2xvckVuZCh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMubGFiZWwuYmFja2dyb3VuZENvbG9yWzFdID0gdlxyXG4gICAgdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBbdGhpcy5sYWJlbC5iYWNrZ3JvdW5kQ29sb3JbMF0sIHZdXHJcbiAgICBpZiAodGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCkge1xyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCxcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IGNvbG9yXHJcbiAgICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9lbG1zLmxhYmVsQmFja2dyb3VuZENvbG9yRW5kW2ldID0gbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpbnN0cnVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5zdHJ1Y3RcclxuICB9XHJcbiAgc2V0IGluc3RydWN0KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5pbnN0cnVjdCA9IHZcclxuICAgIHRoaXMuX2VsbXMuaW5zdHJ1Y3QgJiYgdGhpcy5fZWxtcy5pbnN0cnVjdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9wZXJhdGluZ1BvaW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcGVyYXRpbmdQb2ludFxyXG4gIH1cclxuICBzZXQgb3BlcmF0aW5nUG9pbnQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm9wZXJhdGluZ1BvaW50ID0gdlxyXG4gICAgdGhpcy5fZWxtcy5vcGVyYXRpbmdQb2ludCAmJiB0aGlzLl9lbG1zLm9wZXJhdGluZ1BvaW50LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgc2V0IGF0dHJpYnV0ZVR5cGUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUgPSB2XHJcbiAgICB0aGlzLl9lbG1zLmF0dHJpYnV0ZVR5cGUgJiYgdGhpcy5fZWxtcy5hdHRyaWJ1dGVUeXBlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgICBsZXQgYXR0cmlidXRlQ29udGVudCA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50JylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGVudFtpXS5jbGFzc05hbWUuaW5kZXhPZignYXR0cmlidXRlLWNvbnRlbnQtJyArIHYpID4gLTEpIHtcclxuICAgICAgICBhdHRyaWJ1dGVDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF0dHJpYnV0ZUNvbnRlbnRbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVMaW5rKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50ID0gdlxyXG4gICAgaWYgKCF0aGlzLl9EaWFsb2dPYmplY3QgfHwgIXRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQgfHwgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgIHRhYmxlQ29udGVudC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0ubmFtZSArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPmAgKyB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFtpXS51cmwgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImxpbmtFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJsaW5rRGVsZXRlXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG4gICAgfVxyXG4gICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgbGV0IGZ1biA9IHtcclxuICAgICAgbGlua0VkaXQ6IGFzeW5jIChpbmRleCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtbGluaycpWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlJylbMF1cclxuICAgICAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0YWJsZUNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHInKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtW2ldLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImlucHV0IGxpbmstZWRpdFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtRWRpdFwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbEVkaXRcIj7lj5bmtog8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgIGl0ZW1baV0uaW5uZXJIVE1MID0gaHRtbFxyXG4gICAgICAgICAgICBsZXQgdGV4dGFyZWFFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmstZWRpdCcpWzBdXHJcbiAgICAgICAgICAgIHRleHRhcmVhRWxtLnN0eWxlLmhlaWdodCA9IChoZWlnaHQgLSAxMCkgKyAncHgnXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGQnKVxyXG4gICAgICAgICAgICB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50W2luZGV4XS51cmxcclxuICAgICAgICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oeyBuYW1lOiB0ZFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlLCB1cmw6IHRkWzFdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgfSwgaSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbGlua0RlbGV0ZTogKGkpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY29uZmlybUVkaXQ6ICh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdmFsdWUubmFtZSAmJiB2YWx1ZS5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGxldCB1cmwgPSB2YWx1ZS51cmwgJiYgdmFsdWUudXJsLnJlcGxhY2UoL1xccy9nLCBcIlwiKVxyXG4gICAgICAgIGlmIChuYW1lICYmIHVybCkge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbEVkaXQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICB9LFxyXG4gICAgICBmaWxlU2VsZWN0OiAodmFsdWUsIGkpID0+IHtcclxuICAgICAgICBsZXQgZmlsZUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmlsZS1zZWxlY3QnKVswXVxyXG4gICAgICAgIGZpbGVFbG0uY2xpY2soKVxyXG4gICAgICAgIGZpbGVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZmlsZVNlbGVjdClcclxuICAgICAgICBmaWxlRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBmaWxlU2VsZWN0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBpdGVtW2V2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2luZGV4JyldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RkJylcclxuICAgICAgICB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGJ0biA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpXHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgYnRuLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgaWYgKCFidG5bbl0gfHwgIWJ0bltuXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbSBvZiBidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgaWYgKG0ubmFtZSA9PT0gJ0BjbGljaycpIHtcclxuICAgICAgICAgICAgYnRuW25dLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5bbS52YWx1ZV0pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5bbS52YWx1ZV0oaSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5bbl0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0obS5uYW1lKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHJpYnV0ZUNhbWVyYSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmNhbWVyYS5jb250ZW50XHJcbiAgfVxyXG5cclxuICBzZXQgYXR0cmlidXRlQ2FtZXJhKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlSVNDKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVJU0Modikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudCA9IHZcclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVWcigpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVWcih2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQgPSB2XHJcbiAgICBpZiAoIXRoaXMuX0RpYWxvZ09iamVjdCB8fCAhdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC12cicpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtdnInKVsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZScpWzBdXHJcbiAgICBsZXQgdGFibGVDb250ZW50ID0gdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtYm9keScpWzBdXHJcbiAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0ciA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLm5hbWUgKyBgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj5gICsgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50W2ldLnVybCArIGA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwidnJFZGl0XCI+57yW6L6RPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ2ckRlbGV0ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGFibGVDb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RyJylcclxuICAgIGxldCBmdW4gPSB7XHJcbiAgICAgIHZyRWRpdDogYXN5bmMgKGluZGV4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IGF3YWl0IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgICAgIGxldCB0YWJsZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2F0dHJpYnV0ZS1jb250ZW50LXZyJylbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUnKVswXVxyXG4gICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICBsZXQgaXRlbSA9IHRhYmxlQ29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0cicpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGl0ZW1baV0ub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQgbGluay1lZGl0XCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1FZGl0XCI+56Gu6K6kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsRWRpdFwiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgaXRlbVtpXS5pbm5lckhUTUwgPSBodG1sXHJcbiAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsbSA9IGl0ZW1baV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluay1lZGl0JylbMF1cclxuICAgICAgICAgICAgdGV4dGFyZWFFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIDEwKSArICdweCdcclxuICAgICAgICAgICAgbGV0IHRkID0gaXRlbVtpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgICAgIHRkWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0JylbMF0udmFsdWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaW5kZXhdLm5hbWVcclxuICAgICAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFtpbmRleF0udXJsXHJcbiAgICAgICAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKHsgbmFtZTogdGRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSwgdXJsOiB0ZFsxXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dCcpWzBdLnZhbHVlIH0sIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZyRGVsZXRlOiAoaSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudC5zcGxpY2UoaSwgMSlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb25maXJtRWRpdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB2YWx1ZS5uYW1lICYmIHZhbHVlLm5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHVybCA9IHZhbHVlLnVybCAmJiB2YWx1ZS51cmwucmVwbGFjZSgvXFxzL2csIFwiXCIpXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRbaV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5FTEVNRU5UICYmIHdpbmRvdy5FTEVNRU5ULk1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAn5ZCN56ew5oiW6ZO+5o6l5LiN6IO95Li656m677yBJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlVnIgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLnZyLmNvbnRlbnRcclxuICAgICAgfSxcclxuICAgICAgZmlsZVNlbGVjdDogKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVFbG0gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZpbGUtc2VsZWN0JylbMF1cclxuICAgICAgICBmaWxlRWxtLmNsaWNrKClcclxuICAgICAgICBmaWxlRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbGVTZWxlY3QpXHJcbiAgICAgICAgZmlsZUVsbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmaWxlU2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsZVNlbGVjdCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRkID0gaXRlbVtldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdpbmRleCcpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0ZCcpXHJcbiAgICAgICAgdGRbMV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXQnKVswXS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBidG4gPSBpdGVtW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJ0bi5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgIGZvciAobGV0IG0gb2YgYnRuW25dLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGlmICghYnRuW25dIHx8ICFidG5bbl0uYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtLm5hbWUgPT09ICdAY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGJ0bltuXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZnVuW20udmFsdWVdKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZnVuW20udmFsdWVdKGkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnRuW25dLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG0ubmFtZSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhdHRyaWJ1dGVHb29kcygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICB9XHJcblxyXG4gIHNldCBhdHRyaWJ1dGVHb29kcyh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnQgPSB2XHJcbiAgfVxyXG5cclxuICAvL+WIm+W7ulxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUodGhhdCkge1xyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKG5ldyBDZXNpdW0uQ3VzdG9tTWF0ZXJpYWxTb3VyY2UoKSwgbmV3IENlc2l1bS5Qb2x5bGluZVRyYWlsTGlua01hdGVyaWFsUHJvcGVydHkoKSlcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICBsZXQgZnJvbURlZ3JlZXNBcnJheSA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgIH1cclxuICAgIGlmICh0aGF0Lm5vc2VUb1RhaWwpIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKGZyb21EZWdyZWVzQXJyYXlbMF0sIGZyb21EZWdyZWVzQXJyYXlbMV0sIGZyb21EZWdyZWVzQXJyYXlbMl0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgaWQ6IHRoYXQub3B0aW9ucy5pZCxcclxuICAgICAgc2hvdzogdGhhdC5vcHRpb25zLnNob3csXHJcbiAgICAgIHBvbHlsaW5lVm9sdW1lOiB7XHJcbiAgICAgICAgcG9zaXRpb25zOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KSxcclxuICAgICAgICAvLyBoZWlnaHQ6IG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gICByZXR1cm4gdGhhdC5vcHRpb25zLmhlaWdodFxyXG4gICAgICAgIC8vIH0sIGZhbHNlKSxcclxuICAgICAgICAvLyBleHRydWRlZEhlaWdodDogbmV3IENlc2l1bS5DYWxsYmFja1Byb3BlcnR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyAgIHJldHVybiB0aGF0Lm9wdGlvbnMuZXh0cnVkZWRIZWlnaHRcclxuICAgICAgICAvLyB9LCBmYWxzZSksXHJcbiAgICAgICAgc2hhcGU6IFtcclxuICAgICAgICAgIHsgeDogLTAuMDAwMDAwMSwgeTogLXRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgIHsgeDogMC4wMDAwMDAxLCB5OiAtdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAgeyB4OiAwLjAwMDAwMDEsIHk6IHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodCAvIDIgfSxcclxuICAgICAgICAgIHsgeDogLTAuMDAwMDAwMSwgeTogdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29ybmVyVHlwZTogQ2VzaXVtLkNvcm5lclR5cGUuTUlURVJFRFxyXG4gICAgICB9LFxyXG4gICAgICAvLyB3YWxsOiB7XHJcbiAgICAgIC8vICAgcG9zaXRpb25zOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KSxcclxuICAgICAgLy8gICBtYXhpbXVtSGVpZ2h0czogbWF4aW11bUhlaWdodHMsXHJcbiAgICAgIC8vICAgbWluaW11bUhlaWdodHM6IG1pbmltdW1IZWlnaHRzLFxyXG4gICAgICAvLyAgIG1hdGVyaWFsOiBuZXcgQ2VzaXVtLlBvbHlsaW5lVHJhaWxMaW5rTWF0ZXJpYWxQcm9wZXJ0eSh7ZHVyYXRpb246IDE1MDB9KSxcclxuICAgICAgLy8gICBvdXRsaW5lOiB0cnVlLFxyXG4gICAgICAvLyAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLkJMQUNLLFxyXG4gICAgICAvLyB9XHJcbiAgICB9KVxyXG4gICAgdGhhdC5lbnRpdHkucG9seWxpbmVWb2x1bWUubWF0ZXJpYWwgPSB0aGF0LmdldE1hdGVyaWFsKClcclxuICAgIFdhbGxTdGVyZW9zY29waWMuY3JlYXRlTGFiZWwodGhhdClcclxuICAgIHN5bmNEYXRhKHRoYXQuc2RrLCB0aGF0Lm9wdGlvbnMuaWQpXHJcbiAgICBpZiAodGhhdC5vcHRpb25zLnNob3cpIHtcclxuXHJcbiAgICAgIHNldFNwbGl0RGlyZWN0aW9uKDAsIHRoYXQub3B0aW9ucy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOe8lui+keahhlxyXG4gIGFzeW5jIGVkaXQoc3RhdGUpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXNcclxuICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5kZWVwQ29weU9iaih0aGlzLm9wdGlvbnMpXHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IGF3YWl0IG5ldyBEaWFsb2codGhpcy5zZGssIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn55S15a2Q5Zu05aKZ5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWwucG9zaXRpb24gPSB7IGxuZzogdGhpcy5sYWJlbC5wb3NpdGlvblswXSwgbGF0OiB0aGlzLmxhYmVsLnBvc2l0aW9uWzFdLCBhbHQ6IHRoaXMubGFiZWwucG9zaXRpb25bMl0gfVxyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3B0aW9ucylcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY29uZmlybUNhbGxCYWNrKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgICAgICAgc3luY0RhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICAgIHN5bmNTcGxpdERhdGEodGhpcy5zZGssIHRoaXMub3B0aW9ucy5pZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc2V0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgdGhpcy5EaWFsb2cucmVzZXRDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9zZUNhbGxCYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNsb3NlQ2FsbEJhY2sgJiYgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjaygpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMubm9kZVBvaW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgICBZSi5NZWFzdXJlLlNldE1lYXN1cmVTdGF0dXMoZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50ICYmIHRoaXMuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgICB0aGlzLmV2ZW50ICYmIHRoaXMudGlwLmRlc3Ryb3koKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hvd0NhbGxCYWNrOiAoc2hvdykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSBzaG93XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5zaG93ID0gc2hvd1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuc2hvd0NhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjaygpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWNvbmRhcnlFZGl0Q2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIFdhbGxTdGVyZW9zY29waWMubm9kZUVkaXQodGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSA9IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5ib2R5LmNsYXNzTmFtZSArICcgd2FsbC1zdGVyZW9zY29waWMnXHJcbiAgICAgIGxldCBjb250ZW50RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRlbnRFbG0uaW5uZXJIVE1MID0gaHRtbCh0aGlzKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVUeXBlXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlQ2FtZXJhID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5jYW1lcmEuY29udGVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUlTQyA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuSVNDLmNvbnRlbnRcclxuXHJcbiAgICAgIC8vIOadkOi0qOS4i+aLiVxyXG4gICAgICBsZXQgbWF0ZXJpYWxMaXN0ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gaWNvbi13YWxsXCI+PC9pPue6r+iJsuWimScsXHJcbiAgICAgICAgICB2YWx1ZTogJ+e6r+iJsuWimScsXHJcbiAgICAgICAgICBrZXk6IDAsXHJcbiAgICAgICAgICBpY29uOiAnaWNvbi13YWxsJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJzxpIGNsYXNzPVwiaWNvbiBpY29uLXdhbGwtZ3JhZGllbnRcIj48L2k+5LiK5Y2H5aKZJyxcclxuICAgICAgICAgIHZhbHVlOiAn5LiK5Y2H5aKZJyxcclxuICAgICAgICAgIGtleTogMSxcclxuICAgICAgICAgIGljb246ICdpY29uLXdhbGwtZ3JhZGllbnQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnPGkgY2xhc3M9XCJpY29uIGljb24td2FsbC1hcnJvd1wiPjwvaT7nrq3lpLTlopknLFxyXG4gICAgICAgICAgdmFsdWU6ICfnrq3lpLTlopknLFxyXG4gICAgICAgICAga2V5OiAyLFxyXG4gICAgICAgICAgaWNvbjogJ2ljb24td2FsbC1hcnJvdydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICc8aSBjbGFzcz1cImljb24gaWNvbi13YWxsLXdhcm5cIj48L2k+6K2m5oiS5aKZJyxcclxuICAgICAgICAgIHZhbHVlOiAn6K2m5oiS5aKZJyxcclxuICAgICAgICAgIGtleTogMyxcclxuICAgICAgICAgIGljb246ICdpY29uLXdhbGwtd2FybidcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuXHJcbiAgICAgIGxldCBsZWdwTWF0ZXJpYWwgPSBsZWdwKGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWF0ZXJpYWwtYm94JylbMF0sIFwiLm1hdGVyaWFsXCIpXHJcbiAgICAgIGxlZ3BNYXRlcmlhbC5sZWdwX3NlYXJjaChtYXRlcmlhbExpc3QpXHJcbiAgICAgIGxldCBpQWN0aXZlRWxtMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxyXG4gICAgICBpQWN0aXZlRWxtMi5jbGFzc05hbWUgPSBcImljb24gaWNvbi1hY3RpdmVcIlxyXG4gICAgICBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21hdGVyaWFsJylbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3lfZGF0YWxpc3QnKVswXS5hcHBlbmRDaGlsZChpQWN0aXZlRWxtMilcclxuICAgICAgbGV0IGxlZ3BNYXRlcmlhbElucHV0ID0gY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXRlcmlhbCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0ZXJpYWxMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsTGlzdFtpXS5rZXkgPT09IHRoaXMubWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGxlZ3BNYXRlcmlhbC5sZWdwX3NlYXJjaEFjdGl2ZShtYXRlcmlhbExpc3RbaV0udmFsdWUpXHJcbiAgICAgICAgICBsZWdwTWF0ZXJpYWxJbnB1dC52YWx1ZSA9IG1hdGVyaWFsTGlzdFtpXS52YWx1ZVxyXG4gICAgICAgICAgaUFjdGl2ZUVsbTIuY2xhc3NOYW1lID0gYGljb24gaWNvbi1hY3RpdmUgJHttYXRlcmlhbExpc3RbaV0uaWNvbn1gXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZWdwTWF0ZXJpYWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlLCBjKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRlcmlhbExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChtYXRlcmlhbExpc3RbaV0udmFsdWUgPT09IGxlZ3BNYXRlcmlhbElucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbExpc3RbaV0ua2V5XHJcbiAgICAgICAgICAgIGlBY3RpdmVFbG0yLmNsYXNzTmFtZSA9IGBpY29uIGljb24tYWN0aXZlICR7bWF0ZXJpYWxMaXN0W2ldLmljb259YFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIOWIm+W7uuagh+etvumhtVxyXG4gICAgICBsZXQgdGFic0VsbSA9IG5ldyBjeV90YWJzKCdyYWRhci1zY2FuLWVkaXQtdGFicycsIHVuZGVmaW5lZCwgdGhpcy5zZGspXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgY29sb3JQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImNvbG9yXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgIGFscGhhOiB0cnVlLC8v5piv5ZCm5byA5ZCv6YCP5piO5bqmXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yXHJcbiAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gJ3JnYmEoMjU1LDI1NSwyNTUsMSknXHJcbiAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxDb2xvclwiKVswXSxcclxuICAgICAgICBzaXplOiAnbWluaScsLy/popzoibJib3jnsbvlnotcclxuICAgICAgICBhbHBoYTogdHJ1ZSwvL+aYr+WQpuW8gOWQr+mAj+aYjuW6plxyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogdGhpcy5sYWJlbENvbG9yLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JywvL+aJk+W8gOminOiJsumAieaLqeWZqOWKqOeUu1xyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbENvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgIH0sLy/ngrnlh7vmuIXnqbrmjInpkq7kuovku7blm57osINcclxuICAgICAgfSlcclxuICAgICAgbGV0IGxpbmVDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGFiZWxMaW5lQ29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxMaW5lQ29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsTGluZUNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0UGlja2VyID0gbmV3IFlKQ29sb3JQaWNrZXIoe1xyXG4gICAgICAgIGVsOiBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0XCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLFxyXG4gICAgICAgIHN1cmU6IChjb2xvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gY29sb3JcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yU3RhcnQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgZWw6IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhYmVsQmFja2dyb3VuZENvbG9yRW5kXCIpWzBdLFxyXG4gICAgICAgIHNpemU6ICdtaW5pJyxcclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG9wZW5QaWNrZXJBbmk6ICdvcGFjaXR5JyxcclxuICAgICAgICBzdXJlOiAoY29sb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBjb2xvclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IGFsbF9lbG0gPSBjb250ZW50RWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKVxyXG4gICAgICBFdmVudEJpbmRpbmcub24odGhpcywgYWxsX2VsbSlcclxuICAgICAgdGhpcy5fZWxtcyA9IEV2ZW50QmluZGluZy5lbGVtZW50XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IgPSBbY29sb3JQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxDb2xvciA9IFtsYWJlbENvbG9yUGlja2VyXVxyXG4gICAgICB0aGlzLl9lbG1zLmxhYmVsTGluZUNvbG9yID0gW2xpbmVDb2xvclBpY2tlcl1cclxuICAgICAgdGhpcy5fZWxtcy5sYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0ID0gW2xhYmVsQmFja2dyb3VuZENvbG9yU3RhcnRQaWNrZXJdXHJcbiAgICAgIHRoaXMuX2VsbXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmQgPSBbbGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRQaWNrZXJdXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgICAgIHRoaXMuSVNDU2VsZWN0ICYmIHRoaXMuSVNDU2VsZWN0KClcclxuICAgICAgICB0aGlzLmdvb2RzU2VsZWN0ICYmIHRoaXMuZ29vZHNTZWxlY3QoKVxyXG4gICAgICAgIHRoaXMuY2FtZXJhU2VsZWN0ICYmIHRoaXMuY2FtZXJhU2VsZWN0KClcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICAgICAgbGV0IHRhZ0RhdGEgPSB0aGlzLmF0dHJpYnV0ZVNlbGVjdFxyXG4gICAgICAgIGxldCBsZWdwT2JqZWN0ID0gbGVncCh0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0LWJveCcpWzBdLCBcIi5hdHRyaWJ1dGUtc2VsZWN0XCIpXHJcbiAgICAgICAgbGVncE9iamVjdC5sZWdwX3NlYXJjaCh0YWdEYXRhKVxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF1cclxuICAgICAgICBpZiAoIWF0dHJpYnV0ZUVsbSkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RFbG0gPSB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtc2VsZWN0JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0YWdEYXRhW2ldLmtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVR5cGUpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlID0gdGFnRGF0YVtpXS52YWx1ZVxyXG4gICAgICAgICAgICBsZWdwT2JqZWN0LmxlZ3Bfc2VhcmNoQWN0aXZlKHRhZ0RhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dHJpYnV0ZVNlbGVjdEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGFnRGF0YVtpXS52YWx1ZSA9PT0gYXR0cmlidXRlU2VsZWN0RWxtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGFnRGF0YVtpXS5rZXlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgbGV0IGZvbnREYXRhID0gZ2V0Rm9udExpc3QoKVxyXG4gICAgICAgIGxldCBmb250T2JqZWN0ID0gbGVncChcclxuICAgICAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAgICdmb250LXNlbGVjdC1ib3gnXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgJy5mb250LXNlbGVjdCdcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGZvbnRPYmplY3QpIHtcclxuICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2goZm9udERhdGEpXHJcbiAgICAgICAgICBsZXQgZm9udERhdGFMZWdwRWxtID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZvbnQtc2VsZWN0JylbMF1cclxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdXHJcbiAgICAgICAgICBmb250RGF0YUxlZ3BFbG0udmFsdWUgPSBmb250RGF0YVt0aGlzLmxhYmVsRm9udEZhbWlseV0udmFsdWVcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09IGZvbnREYXRhTGVncEVsbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZvbnRPYmplY3QubGVncF9zZWFyY2hBY3RpdmUoZm9udERhdGFbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9udERhdGFMZWdwRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZvbnREYXRhW2ldLnZhbHVlID09PSBmb250RGF0YUxlZ3BFbG0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGb250RmFtaWx5ID0gZm9udERhdGFbaV0ua2V5XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMuX2VsbXMubGFiZWxGb250RmFtaWx5ID0gW2ZvbnREYXRhTGVncEVsbV1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnJlbW92ZSgpXHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmRlZXBDb3B5T2JqKHRoaXMub3JpZ2luYWxPcHRpb25zKVxyXG4gICAgdGhpcy5uYW1lID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubmFtZVxyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmNvbG9yXHJcbiAgICB0aGlzLmV4dHJ1ZGVkSGVpZ2h0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZXh0cnVkZWRIZWlnaHRcclxuICAgIHRoaXMubGFiZWxTaG93ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuc2hvd1xyXG4gICAgdGhpcy5sYWJlbENvbG9yID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwuY29sb3JcclxuICAgIHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRTaXplXHJcbiAgICB0aGlzLmxhYmVsRm9udEZhbWlseSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZvbnRGYW1pbHlcclxuICAgIHRoaXMubGFiZWxTY2FsZUJ5RGlzdGFuY2UgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5zY2FsZUJ5RGlzdGFuY2VcclxuICAgIHRoaXMubGFiZWxOZWFyID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwubmVhclxyXG4gICAgdGhpcy5sYWJlbEZhciA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmZhclxyXG4gICAgdGhpcy5sYWJlbExpbmVXaWR0aCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmxpbmVXaWR0aFxyXG4gICAgdGhpcy5sYWJlbFBpeGVsT2Zmc2V0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubGFiZWwucGl4ZWxPZmZzZXRcclxuICAgIHRoaXMubGFiZWxMaW5lQ29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5sYWJlbC5saW5lQ29sb3JcclxuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3JTdGFydCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclswXVxyXG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvckVuZCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmxhYmVsLmJhY2tncm91bmRDb2xvclsxXVxyXG4gICAgdGhpcy5pbnN0cnVjdCA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmluc3RydWN0XHJcbiAgICB0aGlzLm9wZXJhdGluZ1BvaW50ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMub3BlcmF0aW5nUG9pbnRcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNhbWVyYSA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUuY2FtZXJhLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlR29vZHMgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmdvb2RzLmNvbnRlbnRcclxuICAgIHRoaXMuYXR0cmlidXRlSVNDID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5JU0MuY29udGVudFxyXG4gICAgdGhpcy5jYW1lcmFTZWxlY3QgJiYgdGhpcy5jYW1lcmFTZWxlY3QoKVxyXG4gICAgdGhpcy5nb29kc1NlbGVjdCAmJiB0aGlzLmdvb2RzU2VsZWN0KClcclxuXHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKHBvc2l0aW9uc1tpXS5sbmcsIHBvc2l0aW9uc1tpXS5sYXQsIHBvc2l0aW9uc1tpXS5hbHQpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3NlVG9UYWlsKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChmcm9tRGVncmVlc0FycmF5WzBdLCBmcm9tRGVncmVlc0FycmF5WzFdLCBmcm9tRGVncmVlc0FycmF5WzJdKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHkucG9seWxpbmVWb2x1bWUucG9zaXRpb25zID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXNBcnJheUhlaWdodHMoZnJvbURlZ3JlZXNBcnJheSlcclxuICAgIHRoaXMubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsXHJcbiAgICB0aGlzLl9lbG1zLm5vc2VUb1RhaWwgJiZcclxuICAgICAgdGhpcy5fZWxtcy5ub3NlVG9UYWlsLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdGhpcy5ub3NlVG9UYWlsXHJcbiAgICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICB0aGlzLmxhYmVsLnJlbW92ZSgpXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgaW5zdHJ1Y3RTdWJtaXQoKSB7XHJcbiAgICB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCAmJiB0aGlzLkRpYWxvZy5pbnN0cnVjdFN1Ym1pdCh0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0LCB0aGlzLmluc3RydWN0KVxyXG4gICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMuaW5zdHJ1Y3QgPSB0aGlzLmluc3RydWN0XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpbmdQb2ludFN1Ym1pdCgpIHtcclxuICAgIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0ICYmIHRoaXMuRGlhbG9nLm9wZXJhdGluZ1BvaW50U3VibWl0KHRoaXMub3B0aW9ucy5pZCwgdGhpcy5vcHRpb25zLmxhYmVsLnRleHQsIHRoaXMub3BlcmF0aW5nUG9pbnQpXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucy5vcGVyYXRpbmdQb2ludCA9IHRoaXMub3BlcmF0aW5nUG9pbnRcclxuICB9XHJcblxyXG4gIF9hZGRMaW5rKCkge1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS5saW5rLmNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgICAgdXJsOiB0aGlzLl9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5rX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmtfYWRkJylbMF0udmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUxpbmsgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkTGluayAmJiB0aGlzLkRpYWxvZy5jbGlja0FkZExpbmsoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXR0cmlidXRlTGluayhsaW5rKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYXR0cmlidXRlLmxpbmsuY29udGVudC5wdXNoKHtcclxuICAgICAgbmFtZTogJ+mTvuaOpScsXHJcbiAgICAgIHVybDogbGlua1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXR0cmlidXRlTGluayA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUubGluay5jb250ZW50XHJcbiAgfVxyXG5cclxuICBfYWRkUnIoKSB7XHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnJfYWRkJylbMF0udmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICAgIG5hbWU6ICflhajmma/lm74nICxcclxuICAgICAgICB1cmw6IHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ZyX2FkZCcpWzBdLnZhbHVlID0gJydcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWciA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGUudnIuY29udGVudFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRGlhbG9nLmNsaWNrQWRkVnIgJiYgdGhpcy5EaWFsb2cuY2xpY2tBZGRWcigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRBdHRyaWJ1dGVScih2cikge1xyXG4gICAgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50LnB1c2goe1xyXG4gICAgICBuYW1lOiAn5YWo5pmv5Zu+JyAsXHJcbiAgICAgIHVybDogdnJcclxuICAgIH0pXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZyID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZS52ci5jb250ZW50XHJcbiAgfVxyXG5cclxuICBnZXRNYXRlcmlhbCgpIHtcclxuICAgIGxldCBtYXRlcmlhbFxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMubWF0ZXJpYWwpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIG1hdGVyaWFsID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpXHJcbiAgICAgICAgaWYgKHRoaXMuc2RrLnZpZXdlci5zY2VuZS5tb2RlID09PSAyKSB7XHJcbiAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBDZXNpdW0uQ3VzdG9tQ29sb3JNYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3JcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLlBvbHlsaW5lVHJhaWxMaW5rTWF0ZXJpYWxQcm9wZXJ0eSh7XHJcbiAgICAgICAgICBjb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGlzLm9wdGlvbnMuY29sb3IpLFxyXG4gICAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIC8vIG1hdGVyaWFsID0gbmV3IENlc2l1bS5DdXN0b21NYXRlcmlhbFNvdXJjZSh7XHJcbiAgICAgICAgLy8gICBpbWFnZTogJy4vaW1hZ2UvYXJyb3cucG5nJyxcclxuICAgICAgICAvLyAgIHJlcGVhdDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKDEwLCAxLjApLFxyXG4gICAgICAgIC8vICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvcixcclxuICAgICAgICAvLyAgIGR1cmF0aW9uOiB0aGlzLm9wdGlvbnMuZHVyYXRpb25cclxuICAgICAgICAvLyB9KVxyXG4gICAgICAgIGxldCBpbWdcclxuICAgICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpbWcgPSAnYXJyb3cnXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIGltZyA9ICd3YXJuJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0ZXJpYWwgPSBuZXcgQ2VzaXVtLkN1c3RvbU1hdGVyaWFsU291cmNlKHtcclxuICAgICAgICAgIGltYWdlOiB0aGlzLmdldFNvdXJjZVJvb3RQYXRoKCkgKyBgL2ltZy9tYXRlcmlhbC8ke2ltZ30ucG5nYCxcclxuICAgICAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IsXHJcbiAgICAgICAgICByZXBlYXRzOiBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVwZWF0ID0gW1sxLjAsIDEuMCwgMS4wXV1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVudGl0eSB8fCAhdGhpcy5lbnRpdHkucG9seWxpbmVWb2x1bWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVwZWF0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uUHJvcGVydHkgPSB0aGlzLmVudGl0eS5wb2x5bGluZVZvbHVtZS5wb3NpdGlvbnM7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSBwb3NpdGlvblByb3BlcnR5LmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICghQ2VzaXVtLmRlZmluZWQocG9zaXRpb25zKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXBlYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0b3RhbERpc3RhbmNlID0gMDtcclxuICAgICAgICAgICAgbGV0IGRpc3RhbmNlcyA9IFtdXHJcbiAgICAgICAgICAgIHJlcGVhdCA9IFtdXHJcblxyXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHBvc2l0aW9uc1tpXSwgcG9zaXRpb25zW2kgKyAxXSlcclxuICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkaXN0YW5jZXMucHVzaChkaXN0YW5jZSlcclxuICAgICAgICAgICAgICB0b3RhbERpc3RhbmNlICs9IGRpc3RhbmNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaW1nUHJvcG9ydGlvbiA9IDQ1IC8gNDUgLy8g5Zu+54mH6ZW/5a695q+U5L6LXHJcbiAgICAgICAgICAgIGxldCB0b3RhbFJlcGVhdFggPSB0b3RhbERpc3RhbmNlIC8gdGhpcy5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0O1xyXG4gICAgICAgICAgICB0b3RhbFJlcGVhdFggPSB0b3RhbFJlcGVhdFggLyBpbWdQcm9wb3J0aW9uXHJcblxyXG4gICAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzdGFuY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVwZWF0WSA9IDEuMFxyXG4gICAgICAgICAgICAgICAgcmVwZWF0LnB1c2goWygoaSArIDEpIC8gZGlzdGFuY2VzLmxlbmd0aCkudG9GaXhlZCgzMCksIHRvdGFsUmVwZWF0WCAvIDUsIHJlcGVhdFldKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdG90YWxSYXRpbyA9IDBcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJhdGlvID0gKGRpc3RhbmNlc1tpXSAvIHRvdGFsRGlzdGFuY2UpXHJcbiAgICAgICAgICAgICAgICB0b3RhbFJhdGlvICs9IHJhdGlvXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVwZWF0WCA9IHJhdGlvICogdG90YWxSZXBlYXRYXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVwZWF0WSA9IDEuMFxyXG4gICAgICAgICAgICAgICAgcmVwZWF0LnB1c2goWygoaSArIDEpIC8gZGlzdGFuY2VzLmxlbmd0aCkudG9GaXhlZCgzMCksIHJlcGVhdFgsIHJlcGVhdFldKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVwZWF0XHJcblxyXG4gICAgICAgICAgfSwgZmFsc2UpLFxyXG4gICAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbixcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiZPlvIDlr4zmlofmnKzmoYZcclxuICAgKi9cclxuICBvcGVuUmljaFRleHRFZGl0b3IoZSkge1xyXG4gICAgcmljaFRleHQub3Blbih0aGlzLm9wdGlvbnMuaWQsIHRoaXMub3B0aW9ucy5uYW1lLCB0aGlzLm9wdGlvbnMucmljaFRleHRDb250ZW50KVxyXG4gICAgcmljaFRleHQucHJpbWFyeUNhbGxCYWNrID0gKGNvbnRlbnQpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25zLnJpY2hUZXh0Q29udGVudCA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBub2RlRWRpdCh0aGF0LCBjYiA9ICgpID0+IHsgfSkge1xyXG4gICAgaWYgKFlKLk1lYXN1cmUuR2V0TWVhc3VyZVN0YXR1cygpKSB7XHJcbiAgICAgIGNiKCfkuIrkuIDmrKHmtYvph4/mnKrnu5PmnZ8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKHRydWUpXHJcbiAgICAgIHRoYXQudGlwID0gbmV3IE1vdXNlVGlwKCfor7fpgInmi6nkuIDkuKrpobbngrnvvIzlj7PplK7lj5bmtognLCB0aGF0LnNkaylcclxuICAgICAgdGhhdC5ldmVudCA9IG5ldyBNb3VzZUV2ZW50KHRoYXQuc2RrKVxyXG4gICAgICB0aGF0Lm5vZGVQb2ludHMgPSBbXVxyXG4gICAgICBsZXQgc2VsZWN0UG9pbnRcclxuICAgICAgbGV0IG9yaWdpbmFsUG9zaXRpb25cclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgIGxldCBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhhdC5ub3NlVG9UYWlsKSB7XHJcbiAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKGZyb21EZWdyZWVzQXJyYXlbMF0sIGZyb21EZWdyZWVzQXJyYXlbMV0sIGZyb21EZWdyZWVzQXJyYXlbMl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpc0FkZCA9IGZhbHNlXHJcbiAgICAgIGxldCBsZWZ0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgaXNBZGQgPSB0cnVlXHJcbiAgICAgICAgICBsZXQgcG9zMyA9IHRoYXQuc2RrLnZpZXdlci5zY2VuZS5jbGFtcFRvSGVpZ2h0KGNhcnRlc2lhbiwgW3RoYXQuZW50aXR5XSlcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdID0gdGhhdC5jYXJ0ZXNpYW4zVG93Z3M4NChwb3MzLCB0aGF0LnNkay52aWV3ZXIpXHJcbiAgICAgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF1cclxuICAgICAgICAgIGxldCBlbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMuYWRkKHtcclxuICAgICAgICAgICAgbmFtZTogJ25vZGUtc2Vjb25kYXJ5LWVkaXQtcG9pbnQnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXModGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0ubG5nLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zW3NlbGVjdFBvaW50LmluZGV4XS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdLmFsdCksXHJcbiAgICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICAgIGltYWdlOiB0aGF0LmdldFNvdXJjZVJvb3RQYXRoKCkgKyAnL2ltZy9wb2ludC5wbmcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxNSxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVEZXB0aFRlc3REaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUud2l0aEFscGhhKDAuOTkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShzZWxlY3RQb2ludC5pbmRleCwgMCwgZW50aXR5KVxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDAsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbc2VsZWN0UG9pbnQuaW5kZXhdKVxyXG5cclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQubm9zZVRvVGFpbCkge1xyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2goZnJvbURlZ3JlZXNBcnJheVswXSwgZnJvbURlZ3JlZXNBcnJheVsxXSwgZnJvbURlZ3JlZXNBcnJheVsyXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdCArIHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodF1cclxuICAgICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYXJ0ZXNpYW4sXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIG1vdmVtZW50LnBvc2l0aW9uLnlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoYXQubWF0ZXJpYWwgPSB0aGF0Lm1hdGVyaWFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHBpY2sgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucGljayhtb3ZlbWVudC5wb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAocGljayAmJiBwaWNrLmlkICYmIHBpY2suaWQubmFtZSAmJiBwaWNrLmlkLm5hbWUgPT09ICdub2RlLXNlY29uZGFyeS1lZGl0LXBvaW50Jykge1xyXG4gICAgICAgICAgICBzZWxlY3RQb2ludCA9IHBpY2suaWRcclxuICAgICAgICAgICAgdGhhdC5ub2RlUG9pbnRzLnNwbGljZShwaWNrLmlkLmluZGV4LCAxKVxyXG4gICAgICAgICAgICB0aGF0LnNkay52aWV3ZXIuZW50aXRpZXMucmVtb3ZlKHBpY2suaWQpXHJcbiAgICAgICAgICAgIHRoYXQudGlwLnNldF90ZXh0KCflt6bplK7lvIDlp4vvvIzlj7PplK7nu5PmnZ/vvIxDVFJMK+WPs+mUruaSpOmUgCcpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb24gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHNlbGVjdFBvaW50LnBvc2l0aW9uLl92YWx1ZSwgdGhhdC5zZGsudmlld2VyKVxyXG4gICAgICAgICAgICB0aGF0LmVudGl0eS5wb2x5bGluZVZvbHVtZS5wb3NpdGlvbnMgPSBuZXcgQ2VzaXVtLkNhbGxiYWNrUHJvcGVydHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5SGVpZ2h0cyhmcm9tRGVncmVlc0FycmF5KVxyXG4gICAgICAgICAgICB9LCBmYWxzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJpZ2h0RXZlbnQgPSAobW92ZW1lbnQsIGNhcnRlc2lhbikgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RQb2ludCkge1xyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSBvcmlnaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5zcGxpY2Uoc2VsZWN0UG9pbnQuaW5kZXgsIDEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYihudWxsLCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgICAgIGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2gocG9zaXRpb25zW2ldLmxuZywgcG9zaXRpb25zW2ldLmxhdCwgcG9zaXRpb25zW2ldLmFsdClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoYXQubm9zZVRvVGFpbCkge1xyXG4gICAgICAgICAgZnJvbURlZ3JlZXNBcnJheS5wdXNoKGZyb21EZWdyZWVzQXJyYXlbMF0sIGZyb21EZWdyZWVzQXJyYXlbMV0sIGZyb21EZWdyZWVzQXJyYXlbMl0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZW50aXR5LnBvbHlsaW5lVm9sdW1lLnBvc2l0aW9ucyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGZyb21EZWdyZWVzQXJyYXkpXHJcbiAgICAgICAgdGhhdC5sYWJlbC5wb3NpdGlvbiA9IFt0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0uYWx0ICsgdGhhdC5vcHRpb25zLmV4dHJ1ZGVkSGVpZ2h0XVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQubm9kZVBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLnJlbW92ZSh0aGF0Lm5vZGVQb2ludHNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQubm9kZVBvaW50cyA9IFtdXHJcbiAgICAgICAgWUouTWVhc3VyZS5TZXRNZWFzdXJlU3RhdHVzKGZhbHNlKVxyXG4gICAgICAgIHRoYXQuZXZlbnQuZGVzdHJveSgpXHJcbiAgICAgICAgdGhhdC50aXAuZGVzdHJveSgpXHJcbiAgICAgICAgdGhhdC5tYXRlcmlhbCA9IHRoYXQubWF0ZXJpYWxcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhhdC5ldmVudC5tb3VzZV9sZWZ0KGxlZnRFdmVudClcclxuXHJcbiAgICAgIHRoYXQuZXZlbnQubW91c2VfcmlnaHQocmlnaHRFdmVudClcclxuXHJcbiAgICAgIGxldCBwb3AgPSBmYWxzZVxyXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX21vdmUoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIGxldCBwb3MzID0gdGhhdC5zZGsudmlld2VyLnNjZW5lLmNsYW1wVG9IZWlnaHQoY2FydGVzaWFuLCBbdGhhdC5lbnRpdHldKVxyXG4gICAgICAgICAgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tzZWxlY3RQb2ludC5pbmRleF0gPSB0aGF0LmNhcnRlc2lhbjNUb3dnczg0KHBvczMsIHRoYXQuc2RrLnZpZXdlcilcclxuICAgICAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGF0Lm9wdGlvbnMucG9zaXRpb25zXHJcbiAgICAgICAgICBmcm9tRGVncmVlc0FycmF5ID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0LCBwb3NpdGlvbnNbaV0uYWx0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoYXQubm9zZVRvVGFpbCkge1xyXG4gICAgICAgICAgICBmcm9tRGVncmVlc0FycmF5LnB1c2goZnJvbURlZ3JlZXNBcnJheVswXSwgZnJvbURlZ3JlZXNBcnJheVsxXSwgZnJvbURlZ3JlZXNBcnJheVsyXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoYXQubGFiZWwucG9zaXRpb24gPSBbdGhhdC5vcHRpb25zLnBvc2l0aW9uc1swXS5sbmcsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbMF0ubGF0LCB0aGF0Lm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdCArIHRoYXQub3B0aW9ucy5leHRydWRlZEhlaWdodF1cclxuICAgICAgICAgIGlmIChwb3ApIHtcclxuICAgICAgICAgICAgcG9wID0gZmFsc2VcclxuICAgICAgICAgICAgdGhhdC5tYXRlcmlhbCA9IHRoYXQubWF0ZXJpYWxcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQudGlwLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgY2FydGVzaWFuLFxyXG4gICAgICAgICAgbW92ZW1lbnQuZW5kUG9zaXRpb24ueCxcclxuICAgICAgICAgIG1vdmVtZW50LmVuZFBvc2l0aW9uLnlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lm1vdXNlX3JpZ2h0X2tleWJvYXJkX2N0cmwoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0UG9pbnQpIHtcclxuICAgICAgICAgIHBvcCA9IHRydWVcclxuICAgICAgICAgIHRoYXQub3B0aW9ucy5wb3NpdGlvbnMucG9wKClcclxuICAgICAgICAgIHRoYXQuc2RrLnZpZXdlci5lbnRpdGllcy5yZW1vdmUodGhhdC5ub2RlUG9pbnRzW3RoYXQubm9kZVBvaW50cy5sZW5ndGggLSAxXSlcclxuICAgICAgICAgIGlmIChzZWxlY3RQb2ludC5pbmRleCA9PT0gdGhhdC5vcHRpb25zLnBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKHRoYXQubm9kZVBvaW50c1tzZWxlY3RQb2ludC5pbmRleCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0UG9pbnQgPSB0aGF0Lm5vZGVQb2ludHNbc2VsZWN0UG9pbnQuaW5kZXggLSAxXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFBvaW50LmluZGV4ID0gMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGF0Lm5vZGVQb2ludHMucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGF0LmV2ZW50Lmdlc3R1cmVfcGluY2tfc3RhcnQoKG1vdmVtZW50LCBjYXJ0ZXNpYW4pID0+IHtcclxuICAgICAgICBsZXQgc3RhcnRUaW1lID0gbmV3IERhdGUoKVxyXG4gICAgICAgIGxldCBwb3MgPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiAobW92ZW1lbnQucG9zaXRpb24xLnggKyBtb3ZlbWVudC5wb3NpdGlvbjIueCkgLyAyLFxyXG4gICAgICAgICAgICB5OiAobW92ZW1lbnQucG9zaXRpb24xLnkgKyBtb3ZlbWVudC5wb3NpdGlvbjIueSkgLyAyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZXZlbnQuZ2VzdHVyZV9waW5ja19lbmQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+PSA1MDApIHtcclxuICAgICAgICAgICAgLy8g6ZW/5oyJ5Y+W5raIXHJcbiAgICAgICAgICAgIHJpZ2h0RXZlbnQocG9zLCBjYXJ0ZXNpYW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEV2ZW50KHBvcywgY2FydGVzaWFuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgZW50aXR5ID0gdGhhdC5zZGsudmlld2VyLmVudGl0aWVzLmFkZCh7XHJcbiAgICAgICAgICBuYW1lOiAnbm9kZS1zZWNvbmRhcnktZWRpdC1wb2ludCcsXHJcbiAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgIHBvc2l0aW9uOiBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyh0aGF0Lm9wdGlvbnMucG9zaXRpb25zW2ldLmxuZywgdGhhdC5vcHRpb25zLnBvc2l0aW9uc1tpXS5sYXQsIHRoYXQub3B0aW9ucy5wb3NpdGlvbnNbaV0uYWx0KSxcclxuICAgICAgICAgIGJpbGxib2FyZDoge1xyXG4gICAgICAgICAgICBpbWFnZTogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvcG9pbnQucG5nJyxcclxuICAgICAgICAgICAgd2lkdGg6IDE1LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDE1LFxyXG4gICAgICAgICAgICBkaXNhYmxlRGVwdGhUZXN0RGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICAgICAgICAgICAgY29sb3I6IENlc2l1bS5Db2xvci5XSElURS53aXRoQWxwaGEoMC45OSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGF0Lm5vZGVQb2ludHMucHVzaChlbnRpdHkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERJVihvcHRpb25zID0geyBkb21pZDogXCJcIiwgeDogMTAsIHk6IDEwIH0pIHtcclxuICAgIG9wdGlvbnMueCA9IChvcHRpb25zLnggfHwgb3B0aW9ucy54ID09PSAwKSA/IG9wdGlvbnMueCA6IDEwXHJcbiAgICBvcHRpb25zLnkgPSAob3B0aW9ucy55IHx8IG9wdGlvbnMueSA9PT0gMCkgPyBvcHRpb25zLnkgOiAxMFxyXG4gICAgbGV0IHBvaW50cyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9pbnRzLnB1c2goW3RoaXMub3B0aW9ucy5wb3NpdGlvbnNbaV0ubG5nLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zW2ldLmxhdF0pXHJcbiAgICB9XHJcbiAgICBsZXQgbGluZSA9IHR1cmYubGluZVN0cmluZyhwb2ludHMpXHJcbiAgICBsZXQgbGVuZ3RoID0gdHVyZi5sZW5ndGgobGluZSwgeyB1bml0czogJ2tpbG9tZXRlcnMnIH0pXHJcbiAgICBsZXQgc2xpY2VkID0gdHVyZi5saW5lU2xpY2VBbG9uZyhsaW5lLCAwLCBsZW5ndGggLyAyLCB7IHVuaXRzOiAna2lsb21ldGVycycgfSk7XHJcbiAgICBsZXQgc2l0ZUluZm9Eb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmRvbWlkKVxyXG4gICAgbGV0IHNpdGVJbmZvUG9zaXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyguLi5zbGljZWQuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbc2xpY2VkLmdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aCAtIDFdLCB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdLmFsdCArIHRoaXMub3B0aW9ucy5leHRydWRlZEhlaWdodClcclxuXHJcbiAgICB0aGlzLnNkay52aWV3ZXIuc2NlbmUucG9zdFJlbmRlci5hZGRFdmVudExpc3RlbmVyKChwZXJjZW50YWdlKSA9PiB7XHJcbiAgICAgIC8v6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHXHJcbiAgICAgIGlmIChzaXRlSW5mb0RvbS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snIHx8IHNpdGVJbmZvRG9tLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgbGV0IHdpbnBvcyA9IHRoaXMuc2RrLnZpZXdlci5zY2VuZS5jYXJ0ZXNpYW5Ub0NhbnZhc0Nvb3JkaW5hdGVzKHNpdGVJbmZvUG9zaXRpb24pO1xyXG4gICAgICAgIGlmICh3aW5wb3MpIHtcclxuICAgICAgICAgIHNpdGVJbmZvRG9tLnN0eWxlLmxlZnQgPSAod2lucG9zLnggKyBvcHRpb25zLngpLnRvRml4ZWQoMCkgKyAncHgnO1xyXG4gICAgICAgICAgc2l0ZUluZm9Eb20uc3R5bGUudG9wID0gKHdpbnBvcy55ICsgb3B0aW9ucy55KS50b0ZpeGVkKDApICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgV2FsbFN0ZXJlb3Njb3BpY1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBd0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQTtBQTdDQTtBQUFBO0FBQUE7QUFBQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFBQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQUFBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBN0NBO0FBQUE7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQWJBO0FBQUE7QUFBQTtBQUVBO0FBU0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWtEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXpDQTtBQTBDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXBRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTRMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUEzMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxbkJBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBL0NBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQTRCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WallStereoscopic/index.js\n"); /***/ }), /***/ "./src/Obj/Base/WaterSurface/_element.js": /*!***********************************************!*\ !*** ./src/Obj/Base/WaterSurface/_element.js ***! \***********************************************/ /*! exports provided: html */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\nfunction html() {\n return \"\\n \\n
      \\n
      \\n
      \\n \\u540D\\u79F0\\n \\n
      \\n
      \\n \\u989C\\u8272\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n \\u9AD8\\u5EA6\\n
      \\n \\n m\\n \\n
      \\n
      \\n
      \\n \\u6C34\\u9762\\u632F\\u5E45\\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\u52A8\\u753B\\u901F\\u5EA6\\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\u6C34\\u9762\\u9891\\u7387\\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2F0ZXJTdXJmYWNlL19lbGVtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1dhdGVyU3VyZmFjZS9fZWxlbWVudC5qcz8zY2QyIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWwoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXYtaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWQjeensDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbWF4bGVuZ3RoPVwiNDBcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7popzoibI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2F0ZXItY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7pq5jluqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIi05OTk5OTk5XCIgbWF4PVwiOTk5OTk5OTk5XCIgQG1vZGVsPVwiaGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5rC06Z2i5oyv5bmFPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIwXCIgbWF4PVwiMTAwXCIgc3RlcD1cIjFcIiBAbW9kZWw9XCJhbXBsaXR1ZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGl2LWl0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7liqjnlLvpgJ/luqY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1heD1cIjEwXCIgbWluPVwiMFwiIHN0ZXA9XCIwLjFcIiBAbW9kZWw9XCJhbmltYXRpb25TcGVlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7msLTpnaLpopHnjoc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbnVtYmVyIGlucHV0LW51bWJlci11bml0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1heD1cIjEwMFwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIEBtb2RlbD1cImZyZXF1ZW5jeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICBgXHJcbn1cclxuXHJcbmV4cG9ydCB7IGh0bWwgfVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBc0RBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Base/WaterSurface/_element.js\n"); /***/ }), /***/ "./src/Obj/Base/WaterSurface/index.js": /*!********************************************!*\ !*** ./src/Obj/Base/WaterSurface/index.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Element/Dialog */ \"./src/Obj/Element/Dialog/index.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_element */ \"./src/Obj/Base/WaterSurface/_element.js\");\n/* harmony import */ var _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Element/Dialog/eventBinding */ \"./src/Obj/Element/Dialog/eventBinding.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../index */ \"./src/Obj/Base/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @description 水面\r\n */\n\n\n\n\n\n\n\nvar WaterSurface = /*#__PURE__*/function (_Base) {\n /**\r\n * @constructor\r\n * @param sdk \r\n * @description 水面\r\n * @param options {object} 面属性\r\n * @param options.id {string} 唯一标识\r\n * @param options.show=true {boolean} 显隐\r\n * @param options.name=未命名对象 {string} 名称\r\n * @param {Array.} options.positions 坐标列表\r\n * @param options.positions[].lng {number} 经度\r\n * @param options.positions[].lat {number} 纬度\r\n * @param options.positions[].alt {number} 高度\r\n * @param options.color=rgba(32,67,135,0.5) {string} 颜色\r\n * @param options.frequency=10 {number} 频率\r\n * @param options.animationSpeed=1 {number} 动画速度\r\n * @param options.amplitude=10 {number} 振幅\r\n * */\n function WaterSurface(sdk) {\n var _this2;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Dialog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, WaterSurface);\n _this2 = _callSuper(this, WaterSurface, [sdk, options]);\n _this2.options.name = options.name || '未命名对象';\n _this2.options.color = options.color || \"rgba(32,67,135,0.5)\";\n _this2.options.positions = options.positions || [];\n _this2.options.frequency = options.frequency || 10;\n _this2.options.animationSpeed = options.animationSpeed || 1;\n _this2.options.amplitude = options.amplitude || 10;\n _this2.options.show = options.show || options.show === false ? options.show : true;\n _this2.Dialog = _Dialog;\n _this2._EventBinding = new _Element_Dialog_eventBinding__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n _this2._elms = {};\n _this2.sdk.addIncetance(_this2.options.id, _this2);\n WaterSurface.create(_this2);\n return _this2;\n }\n\n // 创建水面\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(WaterSurface, _Base);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(WaterSurface, [{\n key: \"color\",\n get: function get() {\n return this.options.color;\n },\n set: function set(v) {\n var _this3 = this;\n this.options.color = v;\n this.entity && (this.entity.appearance.material.uniforms.baseWaterColor = Cesium.Color.fromCssColorString(v));\n if (this._elms.color) {\n this._elms.color.forEach(function (item, i) {\n var picker = new YJColorPicker({\n el: item.el,\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: v,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(c) {\n _this3.color = c;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this3.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n _this3._elms.color[i] = picker;\n });\n }\n }\n }, {\n key: \"frequency\",\n get: function get() {\n return this.options.frequency;\n },\n set: function set(v) {\n this.options.frequency = v;\n this.entity && (this.entity.appearance.material.uniforms.frequency = v * 10);\n this._elms.frequency && this._elms.frequency.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"animationSpeed\",\n get: function get() {\n return this.options.animationSpeed;\n },\n set: function set(v) {\n this.options.animationSpeed = v;\n this.entity && (this.entity.appearance.material.uniforms.animationSpeed = v * 0.01);\n this._elms.animationSpeed && this._elms.animationSpeed.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"amplitude\",\n get: function get() {\n return this.options.amplitude;\n },\n set: function set(v) {\n this.options.amplitude = v;\n this.entity && (this.entity.appearance.material.uniforms.amplitude = v);\n this._elms.amplitude && this._elms.amplitude.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"height\",\n get: function get() {\n return this.options.height;\n },\n set: function set(v) {\n this.options.height = v;\n var positions = this.options.positions[0];\n var a = Cesium.Cartesian3.fromDegrees(positions.lng, positions.lat, v);\n var b = Cesium.Cartesian3.fromDegrees(positions.lng, positions.lat, this.entity.originalHeight);\n this.entity.modelMatrix = Cesium.Matrix4.setTranslation(this.entity.modelMatrix, new Cesium.Cartesian3(a.x - b.x, a.y - b.y, a.z - b.z), new Cesium.Matrix4());\n this._elms.height && this._elms.height.forEach(function (item) {\n item.value = v;\n });\n }\n\n /**\r\n * @description 编辑框\r\n * @param state=false {boolean} 状态: true打开, false关闭\r\n */\n }, {\n key: \"edit\",\n value: (function () {\n var _edit = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var _this4 = this;\n var state,\n _this,\n contentElm,\n waterColorPicker,\n all_elm,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n state = _args.length > 0 && _args[0] !== undefined ? _args[0] : false;\n _this = this;\n this.originalOptions = this.deepCopyObj(this.options);\n\n // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog')\n // for (let i = elms.length - 1; i >= 0; i--) {\n // this.sdk.viewer._container.removeChild(elms[i])\n // }\n\n if (this._DialogObject && this._DialogObject.close) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n if (!state) {\n _context.next = 19;\n break;\n }\n _context.next = 7;\n return new _Element_Dialog__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.sdk, this.originalOptions, {\n title: '水面属性',\n left: '180px',\n top: '100px',\n confirmCallBack: function confirmCallBack(options) {\n _this4.name = _this4.name.trim();\n if (!_this4.name) {\n _this4.name = '未命名对象';\n }\n _this4.originalOptions = _this4.deepCopyObj(_this4.options);\n _this4._DialogObject.close();\n _this4.Dialog.confirmCallBack && _this4.Dialog.confirmCallBack(_this4.originalOptions);\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(_this4.sdk, _this4.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(_this4.sdk, _this4.options.id);\n },\n resetCallBack: function resetCallBack() {\n _this4.reset();\n _this4.Dialog.resetCallBack && _this4.Dialog.resetCallBack();\n },\n removeCallBack: function removeCallBack() {\n _this4.Dialog.removeCallBack && _this4.Dialog.removeCallBack();\n },\n closeCallBack: function closeCallBack() {\n _this4.reset();\n // this.entity.style = new Cesium.Cesium3DTileStyle({\n // color: \"color('rgba(255,255,255,\" + this.newData.transparency + \")')\",\n // show: true,\n // });\n _this4.Dialog.closeCallBack && _this4.Dialog.closeCallBack();\n },\n showCallBack: function showCallBack(show) {\n _this4.show = show;\n _this4.Dialog.showCallBack && _this4.Dialog.showCallBack();\n }\n }, true);\n case 7:\n this._DialogObject = _context.sent;\n this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' water-surface';\n contentElm = document.createElement('div');\n contentElm.innerHTML = Object(_element__WEBPACK_IMPORTED_MODULE_9__[\"html\"])();\n this._DialogObject.contentAppChild(contentElm);\n // 颜色组件\n waterColorPicker = new YJColorPicker({\n el: contentElm.getElementsByClassName(\"water-color\")[0],\n size: 'mini',\n //颜色box类型\n alpha: true,\n //是否开启透明度\n defaultColor: this.color,\n disabled: false,\n //是否禁止打开颜色选择器\n openPickerAni: 'opacity',\n //打开颜色选择器动画\n sure: function sure(color) {\n _this4.color = color;\n },\n //点击确认按钮事件回调\n clear: function clear() {\n _this4.color = 'rgba(255,255,255,1)';\n } //点击清空按钮事件回调\n });\n all_elm = contentElm.getElementsByTagName(\"*\");\n this._EventBinding.on(this, all_elm);\n this._elms = this._EventBinding.element;\n this._elms.color = [waterColorPicker];\n _context.next = 19;\n break;\n case 19:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function edit() {\n return _edit.apply(this, arguments);\n }\n return edit;\n }())\n }, {\n key: \"reset\",\n value: function reset() {\n if (!this.entity) {\n return;\n }\n this.name = this.originalOptions.name;\n this.color = this.originalOptions.color;\n this.frequency = this.originalOptions.frequency;\n this.animationSpeed = this.originalOptions.animationSpeed;\n this.amplitude = this.originalOptions.amplitude;\n this.height = this.originalOptions.height;\n }\n\n /**\r\n * 飞到对应实体\r\n */\n }, {\n key: \"flyTo\",\n value: (function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n rect,\n positions,\n positions84,\n cartesian3,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_14__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 23;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position) {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 16;\n break;\n }\n _context2.next = 15;\n return this.getClampToHeight(position);\n case 15:\n position.alt = _context2.sent;\n case 16:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 28;\n break;\n case 23:\n rect = Cesium.Rectangle.fromCartesianArray(this.entity.geometryInstances.geometry._polygonHierarchy.positions);\n positions = this.sdk.viewer.camera.getRectangleCameraCoordinates(rect);\n positions84 = this.cartesian3Towgs84(positions, this.sdk.viewer);\n cartesian3 = Cesium.Cartesian3.fromDegrees(positions84.lng, positions84.lat, positions84.alt + this.height);\n this.sdk.viewer.camera.flyTo({\n orientation: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-90.0),\n roll: Cesium.Math.toRadians(0.0)\n },\n destination: cartesian3\n });\n case 28:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n /**\r\n * 删除\r\n */\n )\n }, {\n key: \"remove\",\n value: (function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n this.sdk.viewer.scene.primitives.remove(this.entity);\n this.entity = null;\n if (this._DialogObject && !this._DialogObject.isDestroy) {\n this._DialogObject.close();\n this._DialogObject = null;\n }\n _context3.next = 5;\n return this.sdk.removeIncetance(this.options.id);\n case 5:\n _context3.next = 7;\n return Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(this.sdk, this.options.id);\n case 7:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }())\n }, {\n key: \"flicker\",\n value: function flicker() {}\n }], [{\n key: \"create\",\n value: function create(that) {\n var positions = that.options.positions;\n var fromDegreesArray = [];\n var height = positions[0].alt;\n for (var i = 0; i < positions.length; i++) {\n fromDegreesArray.push(positions[i].lng, positions[i].lat);\n if (height < positions[i].alt) {\n height = positions[i].alt;\n }\n }\n if (!that.options.height && that.options.height !== 0) {\n that.options.height = height;\n }\n that.entity = that.sdk.viewer.scene.primitives.add(new Cesium.Primitive({\n id: that.options.id,\n show: that.options.show,\n // allowPicking: false,\n asynchronous: false,\n releaseGeometryInstances: false,\n geometryInstances: new Cesium.GeometryInstance({\n name: \"water-surface\",\n geometry: new Cesium.PolygonGeometry({\n polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)),\n vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,\n height: that.options.height\n // extrudedHeight: 2200,\n // height: 0,\n })\n }),\n appearance: new Cesium.EllipsoidSurfaceAppearance({\n aboveGroud: true,\n material: new Cesium.Material({\n fabric: {\n type: \"Water\",\n uniforms: {\n baseWaterColor: Cesium.Color.fromCssColorString(that.options.color),\n normalMap: that.getSourceRootPath() + '/img/water.png',\n //频率速度设置\n frequency: that.options.frequency * 10,\n animationSpeed: that.options.animationSpeed * 0.01,\n amplitude: that.options.amplitude\n }\n }\n })\n })\n }));\n that.entity.id = that.options.id;\n that.entity.originalHeight = that.options.height;\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_12__[\"syncData\"])(that.sdk, that.options.id);\n if (that.options.show) {\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"setSplitDirection\"])(0, that.options.id);\n }\n }\n }]);\n}(_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (WaterSurface);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvV2F0ZXJTdXJmYWNlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9CYXNlL1dhdGVyU3VyZmFjZS9pbmRleC5qcz80NTllIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZGVzY3JpcHRpb24g5rC06Z2iXHJcbiAqL1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uLy4uL0VsZW1lbnQvRGlhbG9nJztcclxuaW1wb3J0IHsgaHRtbCB9IGZyb20gXCIuL19lbGVtZW50XCI7XHJcbmltcG9ydCBFdmVudEJpbmRpbmcgZnJvbSAnLi4vLi4vRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nJztcclxuaW1wb3J0IEJhc2UgZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IHN5bmNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlJ1xyXG5pbXBvcnQgeyBzZXRTcGxpdERpcmVjdGlvbiwgc3luY1NwbGl0RGF0YSwgc2V0QWN0aXZlSWQgfSBmcm9tICcuLi8uLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW4nXHJcbmltcG9ydCB7IHNldEFjdGl2ZVZpZXdlciwgY2xvc2VSb3RhdGVBcm91bmQsIGNsb3NlVmlld0ZvbGxvdyB9IGZyb20gJy4uLy4uLy4uL0dsb2JhbC9nbG9iYWwnXHJcblxyXG5jbGFzcyBXYXRlclN1cmZhY2UgZXh0ZW5kcyBCYXNlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gc2RrIFxyXG4gICAqIEBkZXNjcmlwdGlvbiDmsLTpnaJcclxuICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSDpnaLlsZ7mgKdcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5pZCB7c3RyaW5nfSDllK/kuIDmoIfor4ZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5zaG93PXRydWUge2Jvb2xlYW59IOaYvumakFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm5hbWU95pyq5ZG95ZCN5a+56LGhIHtzdHJpbmd9IOWQjeensFxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG9iamVjdD59IG9wdGlvbnMucG9zaXRpb25zIOWdkOagh+WIl+ihqFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLnBvc2l0aW9uc1tdLmxuZyB7bnVtYmVyfSDnu4/luqZcclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wb3NpdGlvbnNbXS5sYXQge251bWJlcn0g57qs5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMucG9zaXRpb25zW10uYWx0IHtudW1iZXJ9IOmrmOW6plxyXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbG9yPXJnYmEoMzIsNjcsMTM1LDAuNSkge3N0cmluZ30g6aKc6ImyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuZnJlcXVlbmN5PTEwIHtudW1iZXJ9IOmikeeOh1xyXG4gICAqIEBwYXJhbSBvcHRpb25zLmFuaW1hdGlvblNwZWVkPTEge251bWJlcn0g5Yqo55S76YCf5bqmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMuYW1wbGl0dWRlPTEwIHtudW1iZXJ9IOaMr+W5hVxyXG4gICAqICovXHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30sIF9EaWFsb2cgPSB7fSkge1xyXG4gICAgc3VwZXIoc2RrLCBvcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICB0aGlzLm9wdGlvbnMuY29sb3IgPSBvcHRpb25zLmNvbG9yIHx8IFwicmdiYSgzMiw2NywxMzUsMC41KVwiXHJcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnMgfHwgW11cclxuICAgIHRoaXMub3B0aW9ucy5mcmVxdWVuY3kgPSBvcHRpb25zLmZyZXF1ZW5jeSB8fCAxMFxyXG4gICAgdGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkID0gb3B0aW9ucy5hbmltYXRpb25TcGVlZCB8fCAxXHJcbiAgICB0aGlzLm9wdGlvbnMuYW1wbGl0dWRlID0gb3B0aW9ucy5hbXBsaXR1ZGUgfHwgMTBcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gKG9wdGlvbnMuc2hvdyB8fCBvcHRpb25zLnNob3cgPT09IGZhbHNlKSA/IG9wdGlvbnMuc2hvdyA6IHRydWVcclxuICAgIHRoaXMuRGlhbG9nID0gX0RpYWxvZ1xyXG4gICAgdGhpcy5fRXZlbnRCaW5kaW5nID0gbmV3IEV2ZW50QmluZGluZygpXHJcbiAgICB0aGlzLl9lbG1zID0ge307XHJcbiAgICB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gICAgV2F0ZXJTdXJmYWNlLmNyZWF0ZSh0aGlzKVxyXG4gIH1cclxuXHJcbiAgLy8g5Yib5bu65rC06Z2iXHJcbiAgc3RhdGljIGNyZWF0ZSh0aGF0KSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gdGhhdC5vcHRpb25zLnBvc2l0aW9uc1xyXG4gICAgbGV0IGZyb21EZWdyZWVzQXJyYXkgPSBbXVxyXG4gICAgbGV0IGhlaWdodCA9IHBvc2l0aW9uc1swXS5hbHRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZyb21EZWdyZWVzQXJyYXkucHVzaChwb3NpdGlvbnNbaV0ubG5nLCBwb3NpdGlvbnNbaV0ubGF0KVxyXG4gICAgICBpZiAoaGVpZ2h0IDwgcG9zaXRpb25zW2ldLmFsdCkge1xyXG4gICAgICAgIGhlaWdodCA9IHBvc2l0aW9uc1tpXS5hbHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGF0Lm9wdGlvbnMuaGVpZ2h0ICYmIHRoYXQub3B0aW9ucy5oZWlnaHQgIT09IDApIHtcclxuICAgICAgdGhhdC5vcHRpb25zLmhlaWdodCA9IGhlaWdodFxyXG4gICAgfVxyXG4gICAgdGhhdC5lbnRpdHkgPSB0aGF0LnNkay52aWV3ZXIuc2NlbmUucHJpbWl0aXZlcy5hZGQobmV3IENlc2l1bS5QcmltaXRpdmUoe1xyXG4gICAgICBpZDogdGhhdC5vcHRpb25zLmlkLFxyXG4gICAgICBzaG93OiB0aGF0Lm9wdGlvbnMuc2hvdyxcclxuICAgICAgLy8gYWxsb3dQaWNraW5nOiBmYWxzZSxcclxuICAgICAgYXN5bmNocm9ub3VzOiBmYWxzZSxcclxuICAgICAgcmVsZWFzZUdlb21ldHJ5SW5zdGFuY2VzOiBmYWxzZSxcclxuICAgICAgZ2VvbWV0cnlJbnN0YW5jZXM6IG5ldyBDZXNpdW0uR2VvbWV0cnlJbnN0YW5jZSh7XHJcbiAgICAgICAgbmFtZTogXCJ3YXRlci1zdXJmYWNlXCIsXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDZXNpdW0uUG9seWdvbkdlb21ldHJ5KHtcclxuICAgICAgICAgIHBvbHlnb25IaWVyYXJjaHk6IG5ldyBDZXNpdW0uUG9seWdvbkhpZXJhcmNoeShDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlc0FycmF5KGZyb21EZWdyZWVzQXJyYXkpKSxcclxuICAgICAgICAgIHZlcnRleEZvcm1hdDogQ2VzaXVtLkVsbGlwc29pZFN1cmZhY2VBcHBlYXJhbmNlLlZFUlRFWF9GT1JNQVQsXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoYXQub3B0aW9ucy5oZWlnaHQsXHJcbiAgICAgICAgICAvLyBleHRydWRlZEhlaWdodDogMjIwMCxcclxuICAgICAgICAgIC8vIGhlaWdodDogMCxcclxuICAgICAgICB9KSxcclxuICAgICAgfSksXHJcbiAgICAgIGFwcGVhcmFuY2U6IG5ldyBDZXNpdW0uRWxsaXBzb2lkU3VyZmFjZUFwcGVhcmFuY2Uoe1xyXG4gICAgICAgIGFib3ZlR3JvdWQ6IHRydWUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IG5ldyBDZXNpdW0uTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgZmFicmljOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiV2F0ZXJcIixcclxuICAgICAgICAgICAgdW5pZm9ybXM6IHtcclxuICAgICAgICAgICAgICBiYXNlV2F0ZXJDb2xvcjogQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh0aGF0Lm9wdGlvbnMuY29sb3IpLFxyXG4gICAgICAgICAgICAgIG5vcm1hbE1hcDogdGhhdC5nZXRTb3VyY2VSb290UGF0aCgpICsgJy9pbWcvd2F0ZXIucG5nJyxcclxuICAgICAgICAgICAgICAvL+mikeeOh+mAn+W6puiuvue9rlxyXG4gICAgICAgICAgICAgIGZyZXF1ZW5jeTogdGhhdC5vcHRpb25zLmZyZXF1ZW5jeSAqIDEwLFxyXG4gICAgICAgICAgICAgIGFuaW1hdGlvblNwZWVkOiB0aGF0Lm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQgKiAwLjAxLFxyXG4gICAgICAgICAgICAgIGFtcGxpdHVkZTogdGhhdC5vcHRpb25zLmFtcGxpdHVkZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH0pLFxyXG4gICAgfSkpO1xyXG4gICAgdGhhdC5lbnRpdHkuaWQgPSB0aGF0Lm9wdGlvbnMuaWRcclxuICAgIHRoYXQuZW50aXR5Lm9yaWdpbmFsSGVpZ2h0ID0gdGhhdC5vcHRpb25zLmhlaWdodFxyXG4gICAgc3luY0RhdGEodGhhdC5zZGssIHRoYXQub3B0aW9ucy5pZClcclxuICAgIGlmICh0aGF0Lm9wdGlvbnMuc2hvdykge1xyXG5cclxuICAgICAgc2V0U3BsaXREaXJlY3Rpb24oMCwgdGhhdC5vcHRpb25zLmlkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvclxyXG4gIH1cclxuXHJcbiAgc2V0IGNvbG9yKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5jb2xvciA9IHZcclxuICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5hcHBlYXJhbmNlLm1hdGVyaWFsLnVuaWZvcm1zLmJhc2VXYXRlckNvbG9yID0gQ2VzaXVtLkNvbG9yLmZyb21Dc3NDb2xvclN0cmluZyh2KSlcclxuICAgIGlmICh0aGlzLl9lbG1zLmNvbG9yKSB7XHJcbiAgICAgIHRoaXMuX2VsbXMuY29sb3IuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgIGxldCBwaWNrZXIgPSBuZXcgWUpDb2xvclBpY2tlcih7XHJcbiAgICAgICAgICBlbDogaXRlbS5lbCxcclxuICAgICAgICAgIHNpemU6ICdtaW5pJywvL+minOiJsmJveOexu+Wei1xyXG4gICAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICAgIGRlZmF1bHRDb2xvcjogdixcclxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwvL+aYr+WQpuemgeatouaJk+W8gOminOiJsumAieaLqeWZqFxyXG4gICAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgICBzdXJlOiAoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gY1xyXG4gICAgICAgICAgfSwvL+eCueWHu+ehruiupOaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJ1xyXG4gICAgICAgICAgfSwvL+eCueWHu+a4heepuuaMiemSruS6i+S7tuWbnuiwg1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5fZWxtcy5jb2xvcltpXSA9IHBpY2tlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGZyZXF1ZW5jeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZnJlcXVlbmN5XHJcbiAgfVxyXG5cclxuICBzZXQgZnJlcXVlbmN5KHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5mcmVxdWVuY3kgPSB2XHJcbiAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuYXBwZWFyYW5jZS5tYXRlcmlhbC51bmlmb3Jtcy5mcmVxdWVuY3kgPSB2ICogMTApXHJcbiAgICB0aGlzLl9lbG1zLmZyZXF1ZW5jeSAmJiB0aGlzLl9lbG1zLmZyZXF1ZW5jeS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFuaW1hdGlvblNwZWVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbmltYXRpb25TcGVlZFxyXG4gIH1cclxuXHJcbiAgc2V0IGFuaW1hdGlvblNwZWVkKHYpIHtcclxuICAgIHRoaXMub3B0aW9ucy5hbmltYXRpb25TcGVlZCA9IHZcclxuICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5hcHBlYXJhbmNlLm1hdGVyaWFsLnVuaWZvcm1zLmFuaW1hdGlvblNwZWVkID0gdiAqIDAuMDEpXHJcbiAgICB0aGlzLl9lbG1zLmFuaW1hdGlvblNwZWVkICYmIHRoaXMuX2VsbXMuYW5pbWF0aW9uU3BlZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdlxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBhbXBsaXR1ZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFtcGxpdHVkZVxyXG4gIH1cclxuXHJcbiAgc2V0IGFtcGxpdHVkZSh2KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuYW1wbGl0dWRlID0gdlxyXG4gICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LmFwcGVhcmFuY2UubWF0ZXJpYWwudW5pZm9ybXMuYW1wbGl0dWRlID0gdilcclxuICAgIHRoaXMuX2VsbXMuYW1wbGl0dWRlICYmIHRoaXMuX2VsbXMuYW1wbGl0dWRlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5oZWlnaHRcclxuICB9XHJcblxyXG4gIHNldCBoZWlnaHQodikge1xyXG4gICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IHZcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zWzBdXHJcbiAgICBsZXQgYSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9ucy5sbmcsIHBvc2l0aW9ucy5sYXQsIHYpXHJcbiAgICBsZXQgYiA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9ucy5sbmcsIHBvc2l0aW9ucy5sYXQsIHRoaXMuZW50aXR5Lm9yaWdpbmFsSGVpZ2h0KVxyXG4gICAgdGhpcy5lbnRpdHkubW9kZWxNYXRyaXggPSBDZXNpdW0uTWF0cml4NC5zZXRUcmFuc2xhdGlvbih0aGlzLmVudGl0eS5tb2RlbE1hdHJpeCwgbmV3IENlc2l1bS5DYXJ0ZXNpYW4zKGEueCAtIGIueCwgYS55IC0gYi55LCBhLnogLSBiLnopLCBuZXcgQ2VzaXVtLk1hdHJpeDQoKSlcclxuICAgIHRoaXMuX2VsbXMuaGVpZ2h0ICYmIHRoaXMuX2VsbXMuaGVpZ2h0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS52YWx1ZSA9IHZcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24g57yW6L6R5qGGXHJcbiAgICogQHBhcmFtIHN0YXRlPWZhbHNlIHtib29sZWFufSDnirbmgIE6IHRydWXmiZPlvIAsIGZhbHNl5YWz6ZetXHJcbiAgICovXHJcbiAgYXN5bmMgZWRpdChzdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzXHJcbiAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG5cclxuICAgIC8vIGxldCBlbG1zID0gdGhpcy5zZGsudmlld2VyLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnWUotY3VzdG9tLWJhc2UtZGlhbG9nJylcclxuICAgIC8vIGZvciAobGV0IGkgPSBlbG1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAvLyAgIHRoaXMuc2RrLnZpZXdlci5fY29udGFpbmVyLnJlbW92ZUNoaWxkKGVsbXNbaV0pXHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMuX0RpYWxvZ09iamVjdCAmJiB0aGlzLl9EaWFsb2dPYmplY3QuY2xvc2UpIHtcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QgPSBhd2FpdCBuZXcgRGlhbG9nKHRoaXMuc2RrLCB0aGlzLm9yaWdpbmFsT3B0aW9ucywge1xyXG4gICAgICAgIHRpdGxlOiAn5rC06Z2i5bGe5oCnJywgbGVmdDogJzE4MHB4JywgdG9wOiAnMTAwcHgnLFxyXG4gICAgICAgIGNvbmZpcm1DYWxsQmFjazogKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZS50cmltKClcclxuICAgICAgICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfmnKrlkb3lkI3lr7nosaEnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZGVlcENvcHlPYmoodGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LmNsb3NlKClcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLmNvbmZpcm1DYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jb25maXJtQ2FsbEJhY2sodGhpcy5vcmlnaW5hbE9wdGlvbnMpXHJcbiAgICAgICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRDYWxsQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNldCgpXHJcbiAgICAgICAgICB0aGlzLkRpYWxvZy5yZXNldENhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlc2V0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrICYmIHRoaXMuRGlhbG9nLnJlbW92ZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlQ2FsbEJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKVxyXG4gICAgICAgICAgLy8gdGhpcy5lbnRpdHkuc3R5bGUgPSBuZXcgQ2VzaXVtLkNlc2l1bTNEVGlsZVN0eWxlKHtcclxuICAgICAgICAgIC8vICAgY29sb3I6IFwiY29sb3IoJ3JnYmEoMjU1LDI1NSwyNTUsXCIgKyB0aGlzLm5ld0RhdGEudHJhbnNwYXJlbmN5ICsgXCIpJylcIixcclxuICAgICAgICAgIC8vICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgdGhpcy5EaWFsb2cuY2xvc2VDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5jbG9zZUNhbGxCYWNrKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDYWxsQmFjazogKHNob3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IHNob3dcclxuICAgICAgICAgIHRoaXMuRGlhbG9nLnNob3dDYWxsQmFjayAmJiB0aGlzLkRpYWxvZy5zaG93Q2FsbEJhY2soKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgdHJ1ZSlcclxuICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lID0gdGhpcy5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmJvZHkuY2xhc3NOYW1lICsgJyB3YXRlci1zdXJmYWNlJ1xyXG4gICAgICBsZXQgY29udGVudEVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250ZW50RWxtLmlubmVySFRNTCA9IGh0bWwoKVxyXG4gICAgICB0aGlzLl9EaWFsb2dPYmplY3QuY29udGVudEFwcENoaWxkKGNvbnRlbnRFbG0pXHJcbiAgICAgIC8vIOminOiJsue7hOS7tlxyXG4gICAgICBsZXQgd2F0ZXJDb2xvclBpY2tlciA9IG5ldyBZSkNvbG9yUGlja2VyKHtcclxuICAgICAgICBlbDogY29udGVudEVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwid2F0ZXItY29sb3JcIilbMF0sXHJcbiAgICAgICAgc2l6ZTogJ21pbmknLC8v6aKc6ImyYm9457G75Z6LXHJcbiAgICAgICAgYWxwaGE6IHRydWUsLy/mmK/lkKblvIDlkK/pgI/mmI7luqZcclxuICAgICAgICBkZWZhdWx0Q29sb3I6IHRoaXMuY29sb3IsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLC8v5piv5ZCm56aB5q2i5omT5byA6aKc6Imy6YCJ5oup5ZmoXHJcbiAgICAgICAgb3BlblBpY2tlckFuaTogJ29wYWNpdHknLC8v5omT5byA6aKc6Imy6YCJ5oup5Zmo5Yqo55S7XHJcbiAgICAgICAgc3VyZTogKGNvbG9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3JcclxuICAgICAgICB9LC8v54K55Ye756Gu6K6k5oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb3IgPSAncmdiYSgyNTUsMjU1LDI1NSwxKSdcclxuICAgICAgICB9LC8v54K55Ye75riF56m65oyJ6ZKu5LqL5Lu25Zue6LCDXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBsZXQgYWxsX2VsbSA9IGNvbnRlbnRFbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpXHJcbiAgICAgIHRoaXMuX0V2ZW50QmluZGluZy5vbih0aGlzLCBhbGxfZWxtKVxyXG4gICAgICB0aGlzLl9lbG1zID0gdGhpcy5fRXZlbnRCaW5kaW5nLmVsZW1lbnRcclxuICAgICAgdGhpcy5fZWxtcy5jb2xvciA9IFt3YXRlckNvbG9yUGlja2VyXVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgKHRoaXMuX2VsZW1lbnRfc3R5bGUpIHtcclxuICAgICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnRfc3R5bGUpXHJcbiAgICAgIC8vICAgdGhpcy5fZWxlbWVudF9zdHlsZSA9IG51bGxcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5yZW1vdmUpIHtcclxuICAgICAgLy8gICB0aGlzLl9EaWFsb2dPYmplY3QucmVtb3ZlKClcclxuICAgICAgLy8gICB0aGlzLl9EaWFsb2dPYmplY3QgPSBudWxsXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMubmFtZSA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm5hbWVcclxuICAgIHRoaXMuY29sb3IgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5jb2xvclxyXG4gICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5mcmVxdWVuY3lcclxuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hbmltYXRpb25TcGVlZFxyXG4gICAgdGhpcy5hbXBsaXR1ZGUgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5hbXBsaXR1ZGVcclxuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuaGVpZ2h0XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDpo57liLDlr7nlupTlrp7kvZNcclxuICAgKi9cclxuICBhc3luYyBmbHlUbyhvcHRpb25zID0ge30pIHtcclxuICAgIHNldEFjdGl2ZVZpZXdlcigwKVxyXG4gICAgY2xvc2VSb3RhdGVBcm91bmQodGhpcy5zZGspXHJcbiAgICBjbG9zZVZpZXdGb2xsb3codGhpcy5zZGspXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3ICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24pIHtcclxuICAgICAgbGV0IG9yaWVudGF0aW9uID0ge1xyXG4gICAgICAgIGhlYWRpbmc6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5oZWFkaW5nIHx8IDAuMCksXHJcbiAgICAgICAgcGl0Y2g6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5waXRjaCB8fCAtNjAuMCksXHJcbiAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uLnJvbGwgfHwgMC4wKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG5nID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5sbmdcclxuICAgICAgbGV0IGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0XHJcbiAgICAgIGxldCBhbHQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmFsdFxyXG4gICAgICBsZXQgZGVzdGluYXRpb24gPSBDZXNpdW0uQ2FydGVzaWFuMy5mcm9tRGVncmVlcyhsbmcsIGxhdCwgYWx0KVxyXG5cclxuICAgICAgbGV0IHBvc2l0aW9uID0geyBsbmc6IDAsIGxhdDogMCB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5wb3NpdGlvbnNbMF0gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLmNlbnRlciB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5zdGFydCB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCByZWN0ID0gQ2VzaXVtLlJlY3RhbmdsZS5mcm9tQ2FydGVzaWFuQXJyYXkodGhpcy5lbnRpdHkuZ2VvbWV0cnlJbnN0YW5jZXMuZ2VvbWV0cnkuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zKVxyXG4gICAgICBsZXQgcG9zaXRpb25zID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYS5nZXRSZWN0YW5nbGVDYW1lcmFDb29yZGluYXRlcyhyZWN0KVxyXG4gICAgICBsZXQgcG9zaXRpb25zODQgPSB0aGlzLmNhcnRlc2lhbjNUb3dnczg0KHBvc2l0aW9ucywgdGhpcy5zZGsudmlld2VyKVxyXG4gICAgICB2YXIgY2FydGVzaWFuMyA9IENlc2l1bS5DYXJ0ZXNpYW4zLmZyb21EZWdyZWVzKHBvc2l0aW9uczg0LmxuZywgcG9zaXRpb25zODQubGF0LCBwb3NpdGlvbnM4NC5hbHQgKyB0aGlzLmhlaWdodClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgb3JpZW50YXRpb246IG9wdGlvbnMub3JpZW50YXRpb24gfHwge1xyXG4gICAgICAgICAgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMCksXHJcbiAgICAgICAgICBwaXRjaDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKC05MC4wKSxcclxuICAgICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucygwLjApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXN0aW5hdGlvbjogY2FydGVzaWFuM1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yig6ZmkXHJcbiAgICovXHJcbiAgYXN5bmMgcmVtb3ZlKCkge1xyXG4gICAgdGhpcy5zZGsudmlld2VyLnNjZW5lLnByaW1pdGl2ZXMucmVtb3ZlKHRoaXMuZW50aXR5KVxyXG4gICAgdGhpcy5lbnRpdHkgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmICF0aGlzLl9EaWFsb2dPYmplY3QuaXNEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdC5jbG9zZSgpXHJcbiAgICAgIHRoaXMuX0RpYWxvZ09iamVjdCA9IG51bGxcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2RrLnJlbW92ZUluY2V0YW5jZSh0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICBhd2FpdCBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZmxpY2tlcigpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBXYXRlclN1cmZhY2VcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5REE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWhDQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQWxGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBcEVBO0FBQUE7QUFBQTtBQUFBO0FBc0VBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFUQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBQUE7QUFBQTtBQWhVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUErUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Base/WaterSurface/index.js\n"); /***/ }), /***/ "./src/Obj/Base/index.js": /*!*******************************!*\ !*** ./src/Obj/Base/index.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Tools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Tools */ \"./src/Tools/index.js\");\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Global_ClickCallback__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Global/ClickCallback */ \"./src/Global/ClickCallback/index.js\");\n/* harmony import */ var _Global_SplitScreen_ClickCallback__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../Global/SplitScreen/ClickCallback */ \"./src/Global/SplitScreen/ClickCallback/index.js\");\n/* harmony import */ var _Global_MultiViewportMode_ClickCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../Global/MultiViewportMode/ClickCallback */ \"./src/Global/MultiViewportMode/ClickCallback/index.js\");\n/* harmony import */ var _Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../Global/SplitScreen */ \"./src/Global/SplitScreen/index.js\");\n/* harmony import */ var _Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../Global/MultiViewportMode */ \"./src/Global/MultiViewportMode/index.js\");\n/* harmony import */ var _Global_global__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../Global/global */ \"./src/Global/global.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n/**\r\n * @name: index\r\n * @author: Administrator\r\n * @date: 2023-12-01 12:12\r\n * @description:index\r\n * @update: 2023-12-01 12:12\r\n */\n\n\n\n\n\n\n\n\nvar Base = /*#__PURE__*/function (_Tools) {\n function Base(sdk) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Base);\n _this = _callSuper(this, Base, [sdk, options]);\n if (!sdk || !sdk.viewer) {\n return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(_this);\n }\n // this._splitDirection = -1\n _this.sdk = sdk;\n _this.viewer = sdk.viewer;\n _this.options = _objectSpread({}, options);\n _this.options.id = options.id || _this.randomString();\n _this.entity = null;\n _this.clickCallBack = null;\n _this.rightClickCallBack = null;\n _this.picking = true;\n _this.options.host = _this.options.host || Object(_on__WEBPACK_IMPORTED_MODULE_9__[\"getHost\"])();\n // this._showView = this.options.showView || 0\n _this.setDefaultValue();\n _this._showView;\n\n // this.sdk.addIncetance(this.options.id, this)\n return _this;\n }\n\n // get splitDirection() {\n // return this._splitDirection\n // }\n\n // set splitDirection(v) {\n // switch (v) {\n // case 1:\n // case '1':\n // this._splitDirection = 1\n // break\n // case -1:\n // case '-1':\n // this._splitDirection = -1\n // break\n // default:\n // this._splitDirection = 0\n // break\n // }\n // setSplitDirection(this._splitDirection, this.options.id)\n // }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(Base, _Tools);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Base, [{\n key: \"showView\",\n get: function get() {\n return this._showView;\n },\n set: function set(v) {\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (!sdk2D) {\n this._showView = v;\n if (this.entity) {\n this.entity._showView = v;\n }\n return;\n }\n if (this.sdk === sdk2D) {\n this._showView = 0;\n return;\n }\n if (!this._showView && !this.show) {\n return;\n }\n if (this.sdk === sdk2D) {\n this._showView = 0;\n return;\n }\n if (v != 2 && v != 3) {\n this._showView = 0;\n } else {\n this._showView = v;\n }\n this.isShowView = true;\n\n // if(!this.show) {\n // return\n // }\n\n if (!this._showView) {\n this.show = true;\n } else {\n if (v == 2) {\n this.show = false;\n } else {\n this.show = true;\n }\n }\n }\n }, {\n key: \"name\",\n get: function get() {\n return this.options.name;\n },\n set: function set(v) {\n this.options.name = v;\n this.label && (this.label.text = v);\n this._elms.name && this._elms.name.forEach(function (item) {\n item.value = v;\n });\n }\n }, {\n key: \"show\",\n get: function get() {\n return this.options.show;\n },\n set: function set(v) {\n if (typeof v === \"boolean\") {\n var sdkD = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (!this.isShowView || !sdkD) {\n this.options.show = v;\n if (this.originalOptions) {\n this.originalOptions.show = v;\n }\n }\n this.entity && (this.entity._showView = this.showView);\n if (this.type == 'layer') {\n if (this.entity) {\n this.entity._objectState = this.options.show;\n }\n }\n if (!this.showView || this.showView == 3 || !sdkD) {\n this.entity && (this.entity.show = this.options.show);\n if (this.options.label && this.options.label.show && this.label) {\n this.label.show = this.options.show;\n }\n } else {\n this.entity && (this.entity.show = false);\n if (this.options.label && this.options.label.show && this.label) {\n this.label.show = false;\n }\n }\n if (this._DialogObject && this._DialogObject.showBtn) {\n this._DialogObject.showBtn.checked = this.options.show;\n }\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(this.sdk, this.options.id);\n this.isShowView = false;\n if (this.type == 'layer' && sdkD) {\n var layer2d = sdkD.viewer.imageryLayers._layers[this.layerIndex];\n var layer3d = this.entity;\n if (!layer2d) {\n return;\n }\n if (layer3d._objectState) {\n if (!layer3d._showView || layer3d._showView == 2) {\n layer2d.show = true;\n }\n if (layer3d._showView == 3) {\n layer2d.show = false;\n }\n } else {\n layer2d.show = this.options.show;\n }\n }\n } else {\n console.error(\"参数必须为boolean\");\n }\n }\n }, {\n key: \"attributeSelect\",\n get: function get() {\n return [{\n name: '富文本',\n value: '富文本',\n key: 'richText'\n }, {\n name: '链接',\n value: '链接',\n key: 'link'\n }\n // {\n // name: 'IP摄像头',\n // value: 'IP摄像头',\n // key: 'camera'\n // },\n // {\n // name: 'ISC摄像头',\n // value: 'ISC摄像头',\n // key: 'isc'\n // },\n // {\n // name: '传感器',\n // value: '传感器',\n // key: 'sensor'\n // },\n // {\n // name: '全景图',\n // value: '全景图',\n // key: 'vr'\n // },\n // {\n // name: '物资',\n // value: '物资',\n // key: 'goods'\n // },\n ];\n }\n }, {\n key: \"display\",\n value: function display() {\n this.show = true;\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.show = false;\n }\n\n /**\r\n * 闪烁\r\n * @param {number} times 闪烁一次所需时间\r\n * @param {number} number 闪烁次数\r\n */\n }, {\n key: \"flicker\",\n value: function flicker() {\n var _this2 = this;\n var times = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;\n var number = arguments.length > 1 ? arguments[1] : undefined;\n if (this.flickerAnimate) {\n TWEEN.remove(this.flickerAnimate);\n }\n this.flickerAnimate = new TWEEN.Tween({\n degree: 1\n }).to({\n degree: 0\n }, times / 2).easing(TWEEN.Easing.Linear.None).repeat(number || number === 0 ? number * 2 - 1 : Infinity).yoyo(true).onUpdate(/*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee(r, a) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (_this2.sdk.viewer) {\n _context.next = 3;\n break;\n }\n TWEEN.remove(_this2.flickerAnimate);\n return _context.abrupt(\"return\");\n case 3:\n if (_this2.show) {\n if (r.degree === 1) {\n _this2.entity && (_this2.entity.show = true);\n _this2.labelShow && _this2.label && (_this2.label.show = true);\n _this2.text && _this2.text && (_this2.text.show = true);\n }\n if (r.degree === 0) {\n _this2.entity && (_this2.entity.show = false);\n _this2.labelShow && _this2.label && (_this2.label.show = false);\n _this2.text && _this2.text && (_this2.text.show = false);\n }\n }\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()).onComplete(function (d) {\n TWEEN.remove(_this2.flickerAnimate);\n _this2.flickerAnimate = undefined;\n }).start();\n }\n }, {\n key: \"flyTo\",\n value: function () {\n var _flyTo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n var options,\n orientation,\n lng,\n lat,\n alt,\n destination,\n position,\n range,\n _args2 = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n if (!this._error) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_15__[\"setActiveViewer\"])(0);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_15__[\"closeRotateAround\"])(this.sdk);\n Object(_Global_global__WEBPACK_IMPORTED_MODULE_15__[\"closeViewFollow\"])(this.sdk);\n if (!(this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation)) {\n _context2.next = 25;\n break;\n }\n orientation = {\n heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),\n pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),\n roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)\n };\n lng = this.options.customView.relativePosition.lng;\n lat = this.options.customView.relativePosition.lat;\n alt = this.options.customView.relativePosition.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n position = {\n lng: 0,\n lat: 0\n };\n if (this.options.position && Object.prototype.toString.call(this.options.position) === '[object Object]') {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.line && this.options.line.positions) {\n position = _objectSpread({}, this.options.line.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else if (this.geojson) {\n range = turf.bbox(this.geojson);\n position = {\n lng: range[0],\n lat: range[1]\n };\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context2.next = 18;\n break;\n }\n _context2.next = 17;\n return this.getClampToHeight(position);\n case 17:\n position.alt = _context2.sent;\n case 18:\n lng = this.options.customView.relativePosition.lng + position.lng;\n lat = this.options.customView.relativePosition.lat + position.lat;\n alt = this.options.customView.relativePosition.alt + position.alt;\n destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt);\n this.sdk.viewer.camera.flyTo({\n destination: destination,\n orientation: orientation\n });\n _context2.next = 26;\n break;\n case 25:\n this.sdk.viewer.flyTo(this.entity, {\n offset: options.orientation || {\n heading: Cesium.Math.toRadians(0.0),\n pitch: Cesium.Math.toRadians(-60.0),\n roll: Cesium.Math.toRadians(0.0)\n }\n });\n case 26:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function flyTo() {\n return _flyTo.apply(this, arguments);\n }\n return flyTo;\n }()\n }, {\n key: \"remove\",\n value: function () {\n var _remove = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return this.sdk.removeIncetance(this.options.id);\n case 2:\n this.event && this.event.destroy();\n this.tip && this.tip.destroy();\n Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"syncData\"])(this.sdk, this.options.id);\n Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"syncSplitData\"])(this.sdk, this.options.id);\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function remove() {\n return _remove.apply(this, arguments);\n }\n return remove;\n }()\n }, {\n key: \"onClick\",\n get: function get() {\n return this.clickCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n var sdkD = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"getSdk\"])().sdkD;\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (sdkD && this.sdk === sdkD) {\n if (this.clickCallBack == null && this.options && this.options.id) {\n Object(_Global_SplitScreen_ClickCallback__WEBPACK_IMPORTED_MODULE_11__[\"regLeftClickCallback\"])(this.options.id, this.leftClickCB, this);\n }\n } else if (sdk2D && this.sdk === sdk2D) {\n if (this.clickCallBack == null && this.options && this.options.id) {\n Object(_Global_MultiViewportMode_ClickCallback__WEBPACK_IMPORTED_MODULE_12__[\"regLeftClickCallback\"])(this.options.id, this.leftClickCB, this);\n }\n } else {\n if (this.clickCallBack == null && this.options && this.options.id) {\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"regLeftClickCallback\"])(this.options.id, this.leftClickCB, this);\n }\n }\n this.clickCallBack = val;\n }\n }\n }, {\n key: \"onRightClick\",\n get: function get() {\n return this.rightClickCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n var sdkD = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"getSdk\"])().sdkD;\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (sdkD && this.sdk === sdkD) {\n if (this.rightClickCallBack == null && this.entity && this.entity.id) {\n Object(_Global_SplitScreen_ClickCallback__WEBPACK_IMPORTED_MODULE_11__[\"regRightClickCallback\"])(this.entity.id, this.rightClickCB, this);\n }\n } else if (sdk2D && this.sdk === sdk2D) {\n if (this.clickCallBack == null && this.options && this.options.id) {\n Object(_Global_MultiViewportMode_ClickCallback__WEBPACK_IMPORTED_MODULE_12__[\"regRightClickCallback\"])(this.options.id, this.leftClickCB, this);\n }\n } else {\n if (this.rightClickCallBack == null && this.entity && this.entity.id) {\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"regRightClickCallback\"])(this.entity.id, this.rightClickCB, this);\n }\n }\n this.rightClickCallBack = val;\n }\n }\n }, {\n key: \"onMouseMove\",\n get: function get() {\n return this.mouseMoveCallBack;\n },\n set: function set(val) {\n if (val && typeof val !== 'function') {\n console.error('val:', val, '不是一个function');\n } else {\n var sdkD = Object(_Global_SplitScreen__WEBPACK_IMPORTED_MODULE_13__[\"getSdk\"])().sdkD;\n var sdk2D = Object(_Global_MultiViewportMode__WEBPACK_IMPORTED_MODULE_14__[\"getSdk\"])().sdkD;\n if (sdkD && this.sdk === sdkD) {\n if (this.mouseMoveCallBack == null && this.entity && this.entity.id) {\n Object(_Global_SplitScreen_ClickCallback__WEBPACK_IMPORTED_MODULE_11__[\"regMoveCallback\"])(this.entity.id, this.mouseMoveCB, this);\n }\n } else if (sdk2D && this.sdk === sdk2D) {\n if (this.clickCallBack == null && this.options && this.options.id) {\n Object(_Global_MultiViewportMode_ClickCallback__WEBPACK_IMPORTED_MODULE_12__[\"regMoveCallback\"])(this.options.id, this.leftClickCB, this);\n }\n } else {\n if (this.mouseMoveCallBack == null && this.entity && this.entity.id) {\n Object(_Global_ClickCallback__WEBPACK_IMPORTED_MODULE_10__[\"regMoveCallback\"])(this.entity.id, this.mouseMoveCB, this);\n }\n }\n this.mouseMoveCallBack = val;\n }\n }\n }, {\n key: \"customView\",\n get: function get() {\n return this.options.customView;\n }\n\n // 设置视角\n }, {\n key: \"setCustomView\",\n value: function () {\n var _setCustomView = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee4(val) {\n var camera, cameraPosition84, position, relativePosition, range;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!val) {\n _context4.next = 4;\n break;\n }\n this.options.customView = val;\n _context4.next = 16;\n break;\n case 4:\n camera = this.sdk.viewer.camera;\n cameraPosition84 = this.cartesian3Towgs84(camera.position, this.sdk.viewer);\n position = {\n lng: 0,\n lat: 0\n };\n relativePosition = _objectSpread({}, cameraPosition84);\n if (this.options.position && Object.prototype.toString.call(this.options.position) === '[object Object]') {\n position = _objectSpread({}, this.options.position);\n } else if (this.options.positions) {\n position = _objectSpread({}, this.options.positions[0]);\n } else if (this.options.line && this.options.line.positions) {\n position = _objectSpread({}, this.options.line.positions[0]);\n } else if (this.options.center) {\n position = _objectSpread({}, this.options.center);\n } else if (this.options.start) {\n position = _objectSpread({}, this.options.start);\n } else if (this.geojson) {\n range = turf.bbox(this.geojson);\n position = {\n lng: range[0],\n lat: range[1]\n };\n } else {\n if (this.options.hasOwnProperty('lng')) {\n position.lng = this.options.lng;\n }\n if (this.options.hasOwnProperty('lat')) {\n position.lat = this.options.lat;\n }\n if (this.options.hasOwnProperty('alt')) {\n position.alt = this.options.alt;\n }\n }\n // 如果没有高度值,则获取紧贴高度计算\n if (position.hasOwnProperty('alt')) {\n _context4.next = 13;\n break;\n }\n _context4.next = 12;\n return this.getClampToHeight(position);\n case 12:\n position.alt = _context4.sent;\n case 13:\n relativePosition = {\n lng: cameraPosition84.lng - position.lng,\n lat: cameraPosition84.lat - position.lat,\n alt: cameraPosition84.alt - position.alt\n };\n this.options.customView = {\n orientation: {\n heading: Cesium.Math.toDegrees(camera.heading),\n pitch: Cesium.Math.toDegrees(camera.pitch),\n roll: Cesium.Math.toDegrees(camera.roll)\n },\n relativePosition: relativePosition\n };\n this.originalOptions && (this.originalOptions.customView = this.options.customView);\n case 16:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function setCustomView(_x3) {\n return _setCustomView.apply(this, arguments);\n }\n return setCustomView;\n }() // 重置视角\n }, {\n key: \"resetCustomView\",\n value: function resetCustomView() {\n this.options.customView = undefined;\n }\n\n //每个节点的编辑页面\n }, {\n key: \"edit\",\n value: function edit() {}\n }, {\n key: \"leftClickCB\",\n value: function leftClickCB(mo, id, p, that) {\n if (that.clickCallBack && typeof that.clickCallBack === 'function') {\n that.clickCallBack(mo, id, p);\n }\n }\n }, {\n key: \"rightClickCB\",\n value: function rightClickCB(mo, id, p, that) {\n if (that.rightClickCallBack && typeof that.rightClickCallBack === 'function') {\n that.rightClickCallBack(mo, id, p);\n }\n }\n }, {\n key: \"mouseMoveCB\",\n value: function mouseMoveCB(mo, id, p, that) {\n if (that.mouseMoveCallBack && typeof that.mouseMoveCallBack === 'function') {\n that.mouseMoveCallBack(mo, id, p);\n }\n }\n }, {\n key: \"getGuid\",\n value: function getGuid() {\n return Cesium.createGuid();\n }\n }, {\n key: \"setDefaultValue\",\n value: function setDefaultValue() {\n var _this$options$id, _this$options$show, _this$options$name;\n this.options.id = (_this$options$id = this.options.id) !== null && _this$options$id !== void 0 ? _this$options$id : this.getGuid();\n this.options.show = (_this$options$show = this.options.show) !== null && _this$options$show !== void 0 ? _this$options$show : true;\n this.options.name = (_this$options$name = this.options.name) !== null && _this$options$name !== void 0 ? _this$options$name : \"未命名对象\";\n }\n }, {\n key: \"start\",\n value: function start() {}\n }, {\n key: \"end\",\n value: function end() {}\n }]);\n}(_Tools__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Base);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0Jhc2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0Jhc2UvaW5kZXguanM/ODhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG5hbWU6IGluZGV4XHJcbiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3JcclxuICogQGRhdGU6IDIwMjMtMTItMDEgMTI6MTJcclxuICogQGRlc2NyaXB0aW9u77yaaW5kZXhcclxuICogQHVwZGF0ZTogMjAyMy0xMi0wMSAxMjoxMlxyXG4gKi9cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi8uLi9Ub29sc1wiO1xyXG5pbXBvcnQgeyBnZXRIb3N0LCBnZXRUb2tlbiB9IGZyb20gXCIuLi8uLi9vblwiO1xyXG5pbXBvcnQgeyByZWdMZWZ0Q2xpY2tDYWxsYmFjaywgcmVnUmlnaHRDbGlja0NhbGxiYWNrLCByZWdNb3ZlQ2FsbGJhY2sgfSBmcm9tIFwiLi4vLi4vR2xvYmFsL0NsaWNrQ2FsbGJhY2tcIjtcclxuaW1wb3J0IHsgcmVnTGVmdENsaWNrQ2FsbGJhY2sgYXMgcmVnTGVmdENsaWNrQ2FsbGJhY2syLCByZWdSaWdodENsaWNrQ2FsbGJhY2sgYXMgcmVnUmlnaHRDbGlja0NhbGxiYWNrMiwgcmVnTW92ZUNhbGxiYWNrIGFzIHJlZ01vdmVDYWxsYmFjazIgfSBmcm9tIFwiLi4vLi4vR2xvYmFsL1NwbGl0U2NyZWVuL0NsaWNrQ2FsbGJhY2tcIjtcclxuaW1wb3J0IHsgcmVnTGVmdENsaWNrQ2FsbGJhY2sgYXMgcmVnTGVmdENsaWNrQ2FsbGJhY2szLCByZWdSaWdodENsaWNrQ2FsbGJhY2sgYXMgcmVnUmlnaHRDbGlja0NhbGxiYWNrMywgcmVnTW92ZUNhbGxiYWNrIGFzIHJlZ01vdmVDYWxsYmFjazMgfSBmcm9tIFwiLi4vLi4vR2xvYmFsL011bHRpVmlld3BvcnRNb2RlL0NsaWNrQ2FsbGJhY2tcIjtcclxuaW1wb3J0IHsgc2V0U3BsaXREaXJlY3Rpb24sIHN5bmNTcGxpdERhdGEsIGdldFNkayB9IGZyb20gXCIuLi8uLi9HbG9iYWwvU3BsaXRTY3JlZW5cIjtcclxuaW1wb3J0IHsgc3luY0RhdGEsIGdldFNkayBhcyBnZXQyRFNkayB9IGZyb20gJy4uLy4uL0dsb2JhbC9NdWx0aVZpZXdwb3J0TW9kZSdcclxuaW1wb3J0IHsgc2V0QWN0aXZlVmlld2VyLCBjbG9zZVJvdGF0ZUFyb3VuZCwgY2xvc2VWaWV3Rm9sbG93IH0gZnJvbSAnLi4vLi4vR2xvYmFsL2dsb2JhbCdcclxuXHJcbmNsYXNzIEJhc2UgZXh0ZW5kcyBUb29scyB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKHNkaywgb3B0aW9ucyk7XHJcbiAgICBpZiAoIXNkayB8fCAhc2RrLnZpZXdlcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIC8vIHRoaXMuX3NwbGl0RGlyZWN0aW9uID0gLTFcclxuICAgIHRoaXMuc2RrID0gc2RrXHJcbiAgICB0aGlzLnZpZXdlciA9IHNkay52aWV3ZXJcclxuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9XHJcbiAgICB0aGlzLm9wdGlvbnMuaWQgPSBvcHRpb25zLmlkIHx8IHRoaXMucmFuZG9tU3RyaW5nKClcclxuICAgIHRoaXMuZW50aXR5ID0gbnVsbFxyXG4gICAgdGhpcy5jbGlja0NhbGxCYWNrID0gbnVsbFxyXG4gICAgdGhpcy5yaWdodENsaWNrQ2FsbEJhY2sgPSBudWxsXHJcbiAgICB0aGlzLnBpY2tpbmcgPSB0cnVlXHJcbiAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IHRoaXMub3B0aW9ucy5ob3N0IHx8IGdldEhvc3QoKVxyXG4gICAgLy8gdGhpcy5fc2hvd1ZpZXcgPSB0aGlzLm9wdGlvbnMuc2hvd1ZpZXcgfHwgMFxyXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoKVxyXG4gICAgdGhpcy5fc2hvd1ZpZXdcclxuXHJcbiAgICAvLyB0aGlzLnNkay5hZGRJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkLCB0aGlzKVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHNwbGl0RGlyZWN0aW9uKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3NwbGl0RGlyZWN0aW9uXHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgc3BsaXREaXJlY3Rpb24odikge1xyXG4gIC8vICAgc3dpdGNoICh2KSB7XHJcbiAgLy8gICAgIGNhc2UgMTpcclxuICAvLyAgICAgY2FzZSAnMSc6XHJcbiAgLy8gICAgICAgdGhpcy5fc3BsaXREaXJlY3Rpb24gPSAxXHJcbiAgLy8gICAgICAgYnJlYWtcclxuICAvLyAgICAgY2FzZSAtMTpcclxuICAvLyAgICAgY2FzZSAnLTEnOlxyXG4gIC8vICAgICAgIHRoaXMuX3NwbGl0RGlyZWN0aW9uID0gLTFcclxuICAvLyAgICAgICBicmVha1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIHRoaXMuX3NwbGl0RGlyZWN0aW9uID0gMFxyXG4gIC8vICAgICAgIGJyZWFrXHJcbiAgLy8gICB9XHJcbiAgLy8gICBzZXRTcGxpdERpcmVjdGlvbih0aGlzLl9zcGxpdERpcmVjdGlvbiwgdGhpcy5vcHRpb25zLmlkKVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IHNob3dWaWV3KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dWaWV3XHJcbiAgfVxyXG5cclxuICBzZXQgc2hvd1ZpZXcodikge1xyXG5cclxuXHJcbiAgICBsZXQgc2RrMkQgPSBnZXQyRFNkaygpLnNka0RcclxuICAgIGlmICghc2RrMkQpIHtcclxuICAgICAgdGhpcy5fc2hvd1ZpZXcgPSB2XHJcbiAgICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5Ll9zaG93VmlldyA9IHZcclxuICAgICAgfVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNkayA9PT0gc2RrMkQpIHtcclxuICAgICAgdGhpcy5fc2hvd1ZpZXcgPSAwXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9zaG93VmlldyAmJiAhdGhpcy5zaG93KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2RrID09PSBzZGsyRCkge1xyXG4gICAgICB0aGlzLl9zaG93VmlldyA9IDBcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAodiAhPSAyICYmIHYgIT0gMykge1xyXG4gICAgICB0aGlzLl9zaG93VmlldyA9IDBcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9zaG93VmlldyA9IHZcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzU2hvd1ZpZXcgPSB0cnVlXHJcblxyXG4gICAgLy8gaWYoIXRoaXMuc2hvdykge1xyXG4gICAgLy8gICByZXR1cm5cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3Nob3dWaWV3KSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IHRydWVcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodiA9PSAyKSB7XHJcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3cgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm5hbWVcclxuICB9XHJcbiAgc2V0IG5hbWUodikge1xyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSB2XHJcbiAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsLnRleHQgPSB2KVxyXG4gICAgdGhpcy5fZWxtcy5uYW1lICYmIHRoaXMuX2VsbXMubmFtZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0udmFsdWUgPSB2XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNob3dcclxuICB9XHJcblxyXG4gIHNldCBzaG93KHYpIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgbGV0IHNka0QgPSBnZXQyRFNkaygpLnNka0RcclxuICAgICAgaWYgKCF0aGlzLmlzU2hvd1ZpZXcgfHwgIXNka0QpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHZcclxuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbE9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zLnNob3cgPSB2XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW50aXR5ICYmICh0aGlzLmVudGl0eS5fc2hvd1ZpZXcgPSB0aGlzLnNob3dWaWV3KVxyXG4gICAgICBpZiAodGhpcy50eXBlID09ICdsYXllcicpIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRpdHkpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5Ll9vYmplY3RTdGF0ZSA9IHRoaXMub3B0aW9ucy5zaG93XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93VmlldyB8fCB0aGlzLnNob3dWaWV3ID09IDMgfHwgIXNka0QpIHtcclxuICAgICAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuc2hvdyA9IHRoaXMub3B0aW9ucy5zaG93KVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgJiYgdGhpcy5vcHRpb25zLmxhYmVsLnNob3cgJiYgdGhpcy5sYWJlbCkge1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LnNob3cgPSBmYWxzZSlcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbC5zaG93ICYmIHRoaXMubGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWwuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fRGlhbG9nT2JqZWN0ICYmIHRoaXMuX0RpYWxvZ09iamVjdC5zaG93QnRuKSB7XHJcbiAgICAgICAgdGhpcy5fRGlhbG9nT2JqZWN0LnNob3dCdG4uY2hlY2tlZCA9IHRoaXMub3B0aW9ucy5zaG93XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgICBzeW5jU3BsaXREYXRhKHRoaXMuc2RrLCB0aGlzLm9wdGlvbnMuaWQpXHJcbiAgICAgIHRoaXMuaXNTaG93VmlldyA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAodGhpcy50eXBlID09ICdsYXllcicgJiYgc2RrRCkge1xyXG4gICAgICAgIGxldCBsYXllcjJkID0gc2RrRC52aWV3ZXIuaW1hZ2VyeUxheWVycy5fbGF5ZXJzW3RoaXMubGF5ZXJJbmRleF1cclxuICAgICAgICBsZXQgbGF5ZXIzZCA9IHRoaXMuZW50aXR5XHJcblxyXG4gICAgICAgIGlmICghbGF5ZXIyZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsYXllcjNkLl9vYmplY3RTdGF0ZSkge1xyXG4gICAgICAgICAgaWYgKCFsYXllcjNkLl9zaG93VmlldyB8fCBsYXllcjNkLl9zaG93VmlldyA9PSAyKSB7XHJcbiAgICAgICAgICAgIGxheWVyMmQuc2hvdyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChsYXllcjNkLl9zaG93VmlldyA9PSAzKSB7XHJcbiAgICAgICAgICAgIGxheWVyMmQuc2hvdyA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXIyZC5zaG93ID0gdGhpcy5vcHRpb25zLnNob3dcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLlj4LmlbDlv4XpobvkuLpib29sZWFuXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXR0cmlidXRlU2VsZWN0KCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICflr4zmlofmnKwnLFxyXG4gICAgICAgIHZhbHVlOiAn5a+M5paH5pysJyxcclxuICAgICAgICBrZXk6ICdyaWNoVGV4dCdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICfpk77mjqUnLFxyXG4gICAgICAgIHZhbHVlOiAn6ZO+5o6lJyxcclxuICAgICAgICBrZXk6ICdsaW5rJ1xyXG4gICAgICB9LFxyXG4gICAgICAvLyB7XHJcbiAgICAgIC8vICAgbmFtZTogJ0lQ5pGE5YOP5aS0JyxcclxuICAgICAgLy8gICB2YWx1ZTogJ0lQ5pGE5YOP5aS0JyxcclxuICAgICAgLy8gICBrZXk6ICdjYW1lcmEnXHJcbiAgICAgIC8vIH0sXHJcbiAgICAgIC8vIHtcclxuICAgICAgLy8gICBuYW1lOiAnSVND5pGE5YOP5aS0JyxcclxuICAgICAgLy8gICB2YWx1ZTogJ0lTQ+aRhOWDj+WktCcsXHJcbiAgICAgIC8vICAga2V5OiAnaXNjJ1xyXG4gICAgICAvLyB9LFxyXG4gICAgICAvLyB7XHJcbiAgICAgIC8vICAgbmFtZTogJ+S8oOaEn+WZqCcsXHJcbiAgICAgIC8vICAgdmFsdWU6ICfkvKDmhJ/lmagnLFxyXG4gICAgICAvLyAgIGtleTogJ3NlbnNvcidcclxuICAgICAgLy8gfSxcclxuICAgICAgLy8ge1xyXG4gICAgICAvLyAgIG5hbWU6ICflhajmma/lm74nLFxyXG4gICAgICAvLyAgIHZhbHVlOiAn5YWo5pmv5Zu+JyxcclxuICAgICAgLy8gICBrZXk6ICd2cidcclxuICAgICAgLy8gfSxcclxuICAgICAgLy8ge1xyXG4gICAgICAvLyAgIG5hbWU6ICfnianotYQnLFxyXG4gICAgICAvLyAgIHZhbHVlOiAn54mp6LWEJyxcclxuICAgICAgLy8gICBrZXk6ICdnb29kcydcclxuICAgICAgLy8gfSxcclxuICAgIF1cclxuICB9XHJcblxyXG4gIGRpc3BsYXkoKSB7XHJcbiAgICB0aGlzLnNob3cgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgdGhpcy5zaG93ID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmXqueDgVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lcyDpl6rng4HkuIDmrKHmiYDpnIDml7bpl7RcclxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIOmXqueDgeasoeaVsFxyXG4gICAqL1xyXG4gIGZsaWNrZXIodGltZXMgPSA1MDAsIG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuZmxpY2tlckFuaW1hdGUpIHtcclxuICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuZmxpY2tlckFuaW1hdGUpXHJcbiAgICB9XHJcbiAgICB0aGlzLmZsaWNrZXJBbmltYXRlID0gbmV3IFRXRUVOLlR3ZWVuKHsgZGVncmVlOiAxIH0pLnRvKHsgZGVncmVlOiAwIH0sIHRpbWVzIC8gMikuZWFzaW5nKFRXRUVOLkVhc2luZy5MaW5lYXIuTm9uZSkucmVwZWF0KChudW1iZXIgfHwgbnVtYmVyID09PSAwKSA/IChudW1iZXIgKiAyKSAtIDEgOiBJbmZpbml0eSkueW95byh0cnVlKS5vblVwZGF0ZShhc3luYyAociwgYSkgPT4ge1xyXG4gICAgICAvLyB0aGlzLmVudGl0eS5iaWxsYm9hcmQuY29sb3IgPSBDZXNpdW0uQ29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKGByZ2JhKDI1NSwyNTUsMjU1LCR7ci5kZWdyZWV9KWApXHJcbiAgICAgIGlmICghdGhpcy5zZGsudmlld2VyKSB7XHJcbiAgICAgICAgVFdFRU4ucmVtb3ZlKHRoaXMuZmxpY2tlckFuaW1hdGUpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICAgIGlmIChyLmRlZ3JlZSA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHkgJiYgKHRoaXMuZW50aXR5LnNob3cgPSB0cnVlKVxyXG4gICAgICAgICAgdGhpcy5sYWJlbFNob3cgJiYgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5zaG93ID0gdHJ1ZSlcclxuICAgICAgICAgIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgJiYgKHRoaXMudGV4dC5zaG93ID0gdHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHIuZGVncmVlID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eSAmJiAodGhpcy5lbnRpdHkuc2hvdyA9IGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5sYWJlbFNob3cgJiYgdGhpcy5sYWJlbCAmJiAodGhpcy5sYWJlbC5zaG93ID0gZmFsc2UpXHJcbiAgICAgICAgICB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICYmICh0aGlzLnRleHQuc2hvdyA9IGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkub25Db21wbGV0ZSgoZCkgPT4ge1xyXG4gICAgICBUV0VFTi5yZW1vdmUodGhpcy5mbGlja2VyQW5pbWF0ZSlcclxuICAgICAgdGhpcy5mbGlja2VyQW5pbWF0ZSA9IHVuZGVmaW5lZFxyXG4gICAgfSkuc3RhcnQoKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmx5VG8ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAodGhpcy5fZXJyb3IpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzZXRBY3RpdmVWaWV3ZXIoMClcclxuICAgIGNsb3NlUm90YXRlQXJvdW5kKHRoaXMuc2RrKVxyXG4gICAgY2xvc2VWaWV3Rm9sbG93KHRoaXMuc2RrKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uICYmIHRoaXMub3B0aW9ucy5jdXN0b21WaWV3Lm9yaWVudGF0aW9uKSB7XHJcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IHtcclxuICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24uaGVhZGluZyB8fCAwLjApLFxyXG4gICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnModGhpcy5vcHRpb25zLmN1c3RvbVZpZXcub3JpZW50YXRpb24ucGl0Y2ggfHwgLTYwLjApLFxyXG4gICAgICAgIHJvbGw6IENlc2l1bS5NYXRoLnRvUmFkaWFucyh0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5vcmllbnRhdGlvbi5yb2xsIHx8IDAuMClcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nXHJcbiAgICAgIGxldCBsYXQgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldy5yZWxhdGl2ZVBvc2l0aW9uLmxhdFxyXG4gICAgICBsZXQgYWx0ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcucmVsYXRpdmVQb3NpdGlvbi5hbHRcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuXHJcbiAgICAgIGxldCBwb3NpdGlvbiA9IHsgbG5nOiAwLCBsYXQ6IDAgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLm9wdGlvbnMucG9zaXRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmxpbmUgJiYgdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmdlb2pzb24pIHtcclxuICAgICAgICBsZXQgcmFuZ2UgPSB0dXJmLmJib3godGhpcy5nZW9qc29uKTtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgbG5nOiByYW5nZVswXSwgbGF0OiByYW5nZVsxXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIGxuZyA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubG5nICsgcG9zaXRpb24ubG5nXHJcbiAgICAgIGxhdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24ubGF0ICsgcG9zaXRpb24ubGF0XHJcbiAgICAgIGFsdCA9IHRoaXMub3B0aW9ucy5jdXN0b21WaWV3LnJlbGF0aXZlUG9zaXRpb24uYWx0ICsgcG9zaXRpb24uYWx0XHJcbiAgICAgIGRlc3RpbmF0aW9uID0gQ2VzaXVtLkNhcnRlc2lhbjMuZnJvbURlZ3JlZXMobG5nLCBsYXQsIGFsdClcclxuICAgICAgdGhpcy5zZGsudmlld2VyLmNhbWVyYS5mbHlUbyh7XHJcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2RrLnZpZXdlci5mbHlUbyh0aGlzLmVudGl0eSwge1xyXG4gICAgICAgIG9mZnNldDogb3B0aW9ucy5vcmllbnRhdGlvbiB8fCB7XHJcbiAgICAgICAgICBoZWFkaW5nOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoMC4wKSxcclxuICAgICAgICAgIHBpdGNoOiBDZXNpdW0uTWF0aC50b1JhZGlhbnMoLTYwLjApLFxyXG4gICAgICAgICAgcm9sbDogQ2VzaXVtLk1hdGgudG9SYWRpYW5zKDAuMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmUoKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5yZW1vdmVJbmNldGFuY2UodGhpcy5vcHRpb25zLmlkKVxyXG4gICAgdGhpcy5ldmVudCAmJiB0aGlzLmV2ZW50LmRlc3Ryb3koKVxyXG4gICAgdGhpcy50aXAgJiYgdGhpcy50aXAuZGVzdHJveSgpXHJcbiAgICBzeW5jRGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gICAgc3luY1NwbGl0RGF0YSh0aGlzLnNkaywgdGhpcy5vcHRpb25zLmlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9uQ2xpY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGlja0NhbGxCYWNrXHJcbiAgfVxyXG5cclxuICBzZXQgb25DbGljayh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCd2YWw6JywgdmFsLCAn5LiN5piv5LiA5LiqZnVuY3Rpb24nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHNka0QgPSBnZXRTZGsoKS5zZGtEXHJcbiAgICAgIGxldCBzZGsyRCA9IGdldDJEU2RrKCkuc2RrRFxyXG4gICAgICBpZiAoc2RrRCAmJiB0aGlzLnNkayA9PT0gc2RrRCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNsaWNrQ2FsbEJhY2sgPT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmlkKSB7XHJcbiAgICAgICAgICByZWdMZWZ0Q2xpY2tDYWxsYmFjazIodGhpcy5vcHRpb25zLmlkLCB0aGlzLmxlZnRDbGlja0NCLCB0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzZGsyRCAmJiB0aGlzLnNkayA9PT0gc2RrMkQpIHtcclxuICAgICAgICBpZiAodGhpcy5jbGlja0NhbGxCYWNrID09IG51bGwgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5pZCkge1xyXG4gICAgICAgICAgcmVnTGVmdENsaWNrQ2FsbGJhY2szKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5sZWZ0Q2xpY2tDQiwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xpY2tDYWxsQmFjayA9PSBudWxsICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaWQpIHtcclxuICAgICAgICAgIHJlZ0xlZnRDbGlja0NhbGxiYWNrKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5sZWZ0Q2xpY2tDQiwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jbGlja0NhbGxCYWNrID0gdmFsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgb25SaWdodENsaWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmlnaHRDbGlja0NhbGxCYWNrXHJcbiAgfVxyXG5cclxuICBzZXQgb25SaWdodENsaWNrKHZhbCkge1xyXG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3ZhbDonLCB2YWwsICfkuI3mmK/kuIDkuKpmdW5jdGlvbicpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgc2RrRCA9IGdldFNkaygpLnNka0RcclxuICAgICAgbGV0IHNkazJEID0gZ2V0MkRTZGsoKS5zZGtEXHJcbiAgICAgIGlmIChzZGtEICYmIHRoaXMuc2RrID09PSBzZGtEKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmlnaHRDbGlja0NhbGxCYWNrID09IG51bGwgJiYgdGhpcy5lbnRpdHkgJiYgdGhpcy5lbnRpdHkuaWQpIHtcclxuICAgICAgICAgIHJlZ1JpZ2h0Q2xpY2tDYWxsYmFjazIodGhpcy5lbnRpdHkuaWQsIHRoaXMucmlnaHRDbGlja0NCLCB0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzZGsyRCAmJiB0aGlzLnNkayA9PT0gc2RrMkQpIHtcclxuICAgICAgICBpZiAodGhpcy5jbGlja0NhbGxCYWNrID09IG51bGwgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5pZCkge1xyXG4gICAgICAgICAgcmVnUmlnaHRDbGlja0NhbGxiYWNrMyh0aGlzLm9wdGlvbnMuaWQsIHRoaXMubGVmdENsaWNrQ0IsIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnJpZ2h0Q2xpY2tDYWxsQmFjayA9PSBudWxsICYmIHRoaXMuZW50aXR5ICYmIHRoaXMuZW50aXR5LmlkKSB7XHJcbiAgICAgICAgICByZWdSaWdodENsaWNrQ2FsbGJhY2sodGhpcy5lbnRpdHkuaWQsIHRoaXMucmlnaHRDbGlja0NCLCB0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJpZ2h0Q2xpY2tDYWxsQmFjayA9IHZhbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9uTW91c2VNb3ZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW91c2VNb3ZlQ2FsbEJhY2tcclxuICB9XHJcblxyXG4gIHNldCBvbk1vdXNlTW92ZSh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCd2YWw6JywgdmFsLCAn5LiN5piv5LiA5LiqZnVuY3Rpb24nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHNka0QgPSBnZXRTZGsoKS5zZGtEXHJcbiAgICAgIGxldCBzZGsyRCA9IGdldDJEU2RrKCkuc2RrRFxyXG4gICAgICBpZiAoc2RrRCAmJiB0aGlzLnNkayA9PT0gc2RrRCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vdXNlTW92ZUNhbGxCYWNrID09IG51bGwgJiYgdGhpcy5lbnRpdHkgJiYgdGhpcy5lbnRpdHkuaWQpIHtcclxuICAgICAgICAgIHJlZ01vdmVDYWxsYmFjazIodGhpcy5lbnRpdHkuaWQsIHRoaXMubW91c2VNb3ZlQ0IsIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHNkazJEICYmIHRoaXMuc2RrID09PSBzZGsyRCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNsaWNrQ2FsbEJhY2sgPT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmlkKSB7XHJcbiAgICAgICAgICByZWdNb3ZlQ2FsbGJhY2szKHRoaXMub3B0aW9ucy5pZCwgdGhpcy5sZWZ0Q2xpY2tDQiwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW91c2VNb3ZlQ2FsbEJhY2sgPT0gbnVsbCAmJiB0aGlzLmVudGl0eSAmJiB0aGlzLmVudGl0eS5pZCkge1xyXG4gICAgICAgICAgcmVnTW92ZUNhbGxiYWNrKHRoaXMuZW50aXR5LmlkLCB0aGlzLm1vdXNlTW92ZUNCLCB0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vdXNlTW92ZUNhbGxCYWNrID0gdmFsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY3VzdG9tVmlld1xyXG4gIH1cclxuXHJcbiAgLy8g6K6+572u6KeG6KeSXHJcbiAgYXN5bmMgc2V0Q3VzdG9tVmlldyh2YWwpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcgPSB2YWxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgY2FtZXJhID0gdGhpcy5zZGsudmlld2VyLmNhbWVyYVxyXG4gICAgICBsZXQgY2FtZXJhUG9zaXRpb244NCA9IHRoaXMuY2FydGVzaWFuM1Rvd2dzODQoY2FtZXJhLnBvc2l0aW9uLCB0aGlzLnNkay52aWV3ZXIpXHJcblxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB7IGxuZzogMCwgbGF0OiAwIH1cclxuICAgICAgbGV0IHJlbGF0aXZlUG9zaXRpb24gPSB7IC4uLmNhbWVyYVBvc2l0aW9uODQgfVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBvc2l0aW9uICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLm9wdGlvbnMucG9zaXRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMucG9zaXRpb24gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbnMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmxpbmUgJiYgdGhpcy5vcHRpb25zLmxpbmUucG9zaXRpb25zKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB7IC4uLnRoaXMub3B0aW9ucy5saW5lLnBvc2l0aW9uc1swXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmNlbnRlcikge1xyXG4gICAgICAgIHBvc2l0aW9uID0geyAuLi50aGlzLm9wdGlvbnMuY2VudGVyIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RhcnQpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgLi4udGhpcy5vcHRpb25zLnN0YXJ0IH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmdlb2pzb24pIHtcclxuICAgICAgICBsZXQgcmFuZ2UgPSB0dXJmLmJib3godGhpcy5nZW9qc29uKTtcclxuICAgICAgICBwb3NpdGlvbiA9IHsgbG5nOiByYW5nZVswXSwgbGF0OiByYW5nZVsxXSB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbG5nJykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxuZyA9IHRoaXMub3B0aW9ucy5sbmdcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGF0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmxhdCA9IHRoaXMub3B0aW9ucy5sYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYWx0JykpIHtcclxuICAgICAgICAgIHBvc2l0aW9uLmFsdCA9IHRoaXMub3B0aW9ucy5hbHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5rKh5pyJ6auY5bqm5YC877yM5YiZ6I635Y+W57Sn6LS06auY5bqm6K6h566XXHJcbiAgICAgIGlmICghcG9zaXRpb24uaGFzT3duUHJvcGVydHkoJ2FsdCcpKSB7XHJcbiAgICAgICAgcG9zaXRpb24uYWx0ID0gYXdhaXQgdGhpcy5nZXRDbGFtcFRvSGVpZ2h0KHBvc2l0aW9uKVxyXG4gICAgICB9XHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb24gPSB7XHJcbiAgICAgICAgbG5nOiBjYW1lcmFQb3NpdGlvbjg0LmxuZyAtIHBvc2l0aW9uLmxuZyxcclxuICAgICAgICBsYXQ6IGNhbWVyYVBvc2l0aW9uODQubGF0IC0gcG9zaXRpb24ubGF0LFxyXG4gICAgICAgIGFsdDogY2FtZXJhUG9zaXRpb244NC5hbHQgLSBwb3NpdGlvbi5hbHRcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcgPSB7XHJcbiAgICAgICAgb3JpZW50YXRpb246IHsgaGVhZGluZzogQ2VzaXVtLk1hdGgudG9EZWdyZWVzKGNhbWVyYS5oZWFkaW5nKSwgcGl0Y2g6IENlc2l1bS5NYXRoLnRvRGVncmVlcyhjYW1lcmEucGl0Y2gpLCByb2xsOiBDZXNpdW0uTWF0aC50b0RlZ3JlZXMoY2FtZXJhLnJvbGwpIH0sXHJcbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogcmVsYXRpdmVQb3NpdGlvblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zICYmICh0aGlzLm9yaWdpbmFsT3B0aW9ucy5jdXN0b21WaWV3ID0gdGhpcy5vcHRpb25zLmN1c3RvbVZpZXcpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDph43nva7op4bop5JcclxuICByZXNldEN1c3RvbVZpZXcoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmlldyA9IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcblxyXG4gIC8v5q+P5Liq6IqC54K555qE57yW6L6R6aG16Z2iXHJcbiAgZWRpdCgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBsZWZ0Q2xpY2tDQihtbywgaWQsIHAsIHRoYXQpIHtcclxuICAgIGlmICh0aGF0LmNsaWNrQ2FsbEJhY2sgJiYgdHlwZW9mIHRoYXQuY2xpY2tDYWxsQmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGF0LmNsaWNrQ2FsbEJhY2sobW8sIGlkLCBwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmlnaHRDbGlja0NCKG1vLCBpZCwgcCwgdGhhdCkge1xyXG4gICAgaWYgKHRoYXQucmlnaHRDbGlja0NhbGxCYWNrICYmIHR5cGVvZiB0aGF0LnJpZ2h0Q2xpY2tDYWxsQmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGF0LnJpZ2h0Q2xpY2tDYWxsQmFjayhtbywgaWQsIHApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZU1vdmVDQihtbywgaWQsIHAsIHRoYXQpIHtcclxuICAgIGlmICh0aGF0Lm1vdXNlTW92ZUNhbGxCYWNrICYmIHR5cGVvZiB0aGF0Lm1vdXNlTW92ZUNhbGxCYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoYXQubW91c2VNb3ZlQ2FsbEJhY2sobW8sIGlkLCBwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R3VpZCgpIHtcclxuICAgIHJldHVybiBDZXNpdW0uY3JlYXRlR3VpZCgpXHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWUoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuaWQgPSB0aGlzLm9wdGlvbnMuaWQgPz8gdGhpcy5nZXRHdWlkKClcclxuICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdGhpcy5vcHRpb25zLnNob3cgPz8gdHJ1ZVxyXG4gICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZSA/PyBcIuacquWRveWQjeWvueixoVwiXHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHsgfVxyXG5cclxuICBlbmQoKSB7IH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUF6RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQXhEQTtBQUFBO0FBQUE7QUFBQTtBQTBEQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Base/index.js\n"); /***/ }), /***/ "./src/Obj/Element/Dialog/eventBinding.js": /*!************************************************!*\ !*** ./src/Obj/Element/Dialog/eventBinding.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar EventBinding = /*#__PURE__*/function () {\n function EventBinding() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EventBinding);\n this.element = {};\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EventBinding, [{\n key: \"getEvent\",\n value: function getEvent(name) {\n return EventBinding.event[name];\n }\n }, {\n key: \"getEventAll\",\n value: function getEventAll() {\n return EventBinding.event;\n }\n }, {\n key: \"setEvent\",\n value: function setEvent(name, event) {\n EventBinding.event[name] = event;\n }\n }, {\n key: \"on\",\n value: function on(that, elements) {\n var _this = this;\n return;\n this.element = {};\n var _loop = function _loop() {\n if (!elements[i] || !elements[i].attributes) {\n return 1; // continue\n }\n var Event = {\n 'input': [],\n 'change': [],\n 'blur': [],\n 'click': []\n };\n var isEvent = false;\n var removeName = [];\n var _iterator = _createForOfIteratorHelper(elements[i].attributes),\n _step;\n try {\n var _loop3 = function _loop3() {\n var m = _step.value;\n switch (m.name) {\n case '@model':\n {\n isEvent = true;\n if (elements[i].type == 'checkbox') {\n Event.change.push(function (e) {\n that[m.value] = e.target.checked;\n });\n elements[i].checked = that[m.value];\n } else {\n if (elements[i].type == 'number') {\n Event.input.push(function (e) {\n if (e.target.value || e.target.value === 0) {\n var value = e.target.value;\n value = Number(value);\n if (e.data != '.' && (e.data != '-' || e.target.value)) {\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n }\n });\n Event.blur.push(function (e) {\n var value = e.target.value;\n if (e.target.value || e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null)) {\n value = Number(value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n if (e.target.dataset.min && value < Number(e.target.dataset.min)) {\n value = Number(e.target.dataset.min);\n }\n }\n that[m.value] = value;\n });\n } else {\n Event.input.push(function (e) {\n that[m.value] = e.target.value;\n });\n }\n if (elements[i].nodeName == 'IMG') {\n elements[i].src = that[m.value];\n } else {\n elements[i].value = that[m.value];\n }\n }\n if (_this.element[m.value]) {\n _this.element[m.value].push(elements[i]);\n } else {\n _this.element[m.value] = [elements[i]];\n }\n removeName.push(m.name);\n break;\n }\n case '@click':\n {\n isEvent = true;\n Event.click.push(function (e) {\n if (typeof that[m.value] === 'function') {\n that[m.value](e);\n }\n });\n removeName.push(m.name);\n break;\n }\n }\n // elements[i].attributes[m] = undefined\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop3();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n for (var n = 0; n < removeName.length; n++) {\n elements[i].attributes.removeNamedItem(removeName[n]);\n }\n if (isEvent) {\n var _loop2 = function _loop2(key) {\n if (Event[key].length > 0) {\n elements[i].addEventListener(key, function (e) {\n for (var t = 0; t < Event[key].length; t++) {\n Event[key][t](e);\n }\n });\n }\n };\n for (var key in Event) {\n _loop2(key);\n }\n }\n };\n for (var i = 0; i < elements.length; i++) {\n if (_loop()) continue;\n }\n }\n }]);\n}();\n_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(EventBinding, \"event\", {});\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventBinding);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvRGlhbG9nL2V2ZW50QmluZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovRWxlbWVudC9EaWFsb2cvZXZlbnRCaW5kaW5nLmpzP2IxMWEiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgRXZlbnRCaW5kaW5nIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHt9XHJcbiAgfVxyXG4gIHN0YXRpYyBldmVudCA9IHt9XHJcblxyXG4gIGdldEV2ZW50KG5hbWUpIHtcclxuICAgIHJldHVybiBFdmVudEJpbmRpbmcuZXZlbnRbbmFtZV1cclxuICB9XHJcblxyXG4gIGdldEV2ZW50QWxsKCkge1xyXG4gICAgcmV0dXJuIEV2ZW50QmluZGluZy5ldmVudFxyXG4gIH1cclxuXHJcbiAgc2V0RXZlbnQobmFtZSwgZXZlbnQpIHtcclxuICAgIEV2ZW50QmluZGluZy5ldmVudFtuYW1lXSA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBvbih0aGF0LCBlbGVtZW50cykge1xyXG4gICAgcmV0dXJuXHJcbiAgICB0aGlzLmVsZW1lbnQgPSB7fVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIWVsZW1lbnRzW2ldIHx8ICFlbGVtZW50c1tpXS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEV2ZW50ID0ge1xyXG4gICAgICAgICdpbnB1dCc6IFtdLFxyXG4gICAgICAgICdjaGFuZ2UnOiBbXSxcclxuICAgICAgICAnYmx1cic6IFtdLFxyXG4gICAgICAgICdjbGljayc6IFtdXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGlzRXZlbnQgPSBmYWxzZVxyXG4gICAgICBsZXQgcmVtb3ZlTmFtZSA9IFtdXHJcbiAgICAgIGZvciAobGV0IG0gb2YgZWxlbWVudHNbaV0uYXR0cmlidXRlcykge1xyXG4gICAgICAgIHN3aXRjaCAobS5uYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdAbW9kZWwnOiB7XHJcbiAgICAgICAgICAgIGlzRXZlbnQgPSB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICBFdmVudC5jaGFuZ2UucHVzaCgoZSkgPT4geyB0aGF0W20udmFsdWVdID0gZS50YXJnZXQuY2hlY2tlZCB9KVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoZWNrZWQgPSB0aGF0W20udmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLnR5cGUgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIEV2ZW50LmlucHV0LnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlIHx8IGUudGFyZ2V0LnZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICE9ICcuJyAmJiAoZS5kYXRhICE9ICctJyB8fCBlLnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWF4KSAmJiB2YWx1ZSA+IE51bWJlcihlLnRhcmdldC5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1heClcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5taW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQuZGF0YXNldC5taW4pICYmIHZhbHVlIDwgTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbilcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBFdmVudC5ibHVyLnB1c2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlIHx8IChlLnRhcmdldC5kYXRhc2V0Lm51bGwgIT09ICd1bmRlZmluZWQnICYmIGUudGFyZ2V0LmRhdGFzZXQubnVsbCAhPT0gJycgJiYgIUJvb2xlYW4oZS50YXJnZXQuZGF0YXNldC5udWxsKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0LmRhdGFzZXQubWluKSAmJiB2YWx1ZSA8IE51bWJlcihlLnRhcmdldC5kYXRhc2V0Lm1pbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgRXZlbnQuaW5wdXQucHVzaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0W20udmFsdWVdID0gZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uc3JjID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gdGhhdFttLnZhbHVlXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50W20udmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdLnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50W20udmFsdWVdID0gW2VsZW1lbnRzW2ldXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQGNsaWNrJzoge1xyXG4gICAgICAgICAgICBpc0V2ZW50ID0gdHJ1ZVxyXG4gICAgICAgICAgICBFdmVudC5jbGljay5wdXNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhhdFttLnZhbHVlXSkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoYXRbbS52YWx1ZV0oZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJlbW92ZU5hbWUucHVzaChtLm5hbWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW21dID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZW1vdmVOYW1lLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgZWxlbWVudHNbaV0uYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ocmVtb3ZlTmFtZVtuXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRXZlbnQpIHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gRXZlbnQpIHtcclxuICAgICAgICAgIGlmIChFdmVudFtrZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcihrZXksIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBFdmVudFtrZXldLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICBFdmVudFtrZXldW3RdKGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50QmluZGluZztcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0VBO0FBQUE7QUFBQTtBQTZFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBekdBO0FBQUE7QUFFQTtBQXdHQTtBQUFBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Element/Dialog/eventBinding.js\n"); /***/ }), /***/ "./src/Obj/Element/Dialog/index.js": /*!*****************************************!*\ !*** ./src/Obj/Element/Dialog/index.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"./node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _BaseDialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../BaseDialog */ \"./src/BaseDialog/index.js\");\n\n\n\n\n\n\n\nfunction _callSuper(t, o, e) { return o = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(o), _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(t).constructor) : o.apply(t, e)); }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\n\nvar Dialog = /*#__PURE__*/function (_BaseDialog) {\n function Dialog(sdk, info, options, only) {\n var _this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Dialog);\n _this = _callSuper(this, Dialog, [sdk.viewer._container, options, only]);\n _this.sdk = sdk;\n _this.viewer = sdk.viewer;\n _this.info = info;\n _this._init();\n return _this;\n }\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(Dialog, _BaseDialog);\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Dialog, [{\n key: \"_init\",\n value: function () {\n var _init2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee() {\n var _this2 = this;\n var confirmBtn, deleteBtn, rotateBtn, div, heightBtn, secondaryEditBtn, translationalBtn, i, elm;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.init();\n case 2:\n _context.next = 4;\n return this._attribute();\n case 4:\n if (this.options.confirmCallBack) {\n confirmBtn = document.createElement('button');\n confirmBtn.className = 'confirm';\n confirmBtn.innerHTML = '确认';\n this.footAppChild(confirmBtn);\n confirmBtn.addEventListener('click', function () {\n // console.log('确认')\n if (_this2.options.confirmCallBack) {\n _this2.options.confirmCallBack(_this2.info);\n }\n });\n }\n if (this.options.removeCallBack) {\n deleteBtn = document.createElement('button');\n deleteBtn.className = 'delete';\n deleteBtn.innerHTML = '删除';\n this.footAppChild(deleteBtn);\n deleteBtn.addEventListener('click', function () {\n // console.log('删除')\n _this2.close();\n if (_this2.options.removeCallBack) {\n _this2.options.removeCallBack();\n }\n });\n }\n\n // if (this.options.resetCallBack) {\n // let resetBtn = document.createElement('button');\n // resetBtn.className = 'reset';\n // resetBtn.innerHTML = '重置'\n // this.footAppChild(resetBtn)\n\n // resetBtn.addEventListener('click', () => {\n // // console.log('重置')\n // if (this.options.resetCallBack) {\n // this.options.resetCallBack()\n // }\n // });\n // }\n\n if (this.options.rotateCallBack) {\n rotateBtn = document.createElement('button');\n rotateBtn.className = 'rotate';\n rotateBtn.innerHTML = '旋转';\n this.footAppChild(rotateBtn);\n rotateBtn.addEventListener('click', function () {\n // console.log('旋转')\n if (_this2.options.rotateCallBack) {\n _this2.options.rotateCallBack();\n }\n });\n }\n if (this.options.translationalCallBack || this.options.updateHeightCallBack || this.options.secondaryEditCallBack) {\n div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '24px';\n div.style.flet = '0';\n div.style.display = 'flex';\n this.footAppChild(div);\n if (this.options.updateHeightCallBack) {\n heightBtn = document.createElement('button');\n heightBtn.innerHTML = '更新高程';\n heightBtn.style.width = 'auto';\n heightBtn.addEventListener('click', function () {\n _this2.options.updateHeightCallBack();\n });\n div.appendChild(heightBtn);\n }\n if (this.options.secondaryEditCallBack) {\n secondaryEditBtn = document.createElement('button');\n secondaryEditBtn.className = 'secondaryEdit';\n secondaryEditBtn.innerHTML = '二次编辑';\n if (this.options.updateHeightCallBack) {\n secondaryEditBtn.style.marginLeft = '10px';\n }\n div.appendChild(secondaryEditBtn);\n secondaryEditBtn.addEventListener('click', function () {\n // console.log('二次编辑')\n if (_this2.options.secondaryEditCallBack) {\n _this2.options.secondaryEditCallBack();\n }\n });\n }\n if (this.options.translationalCallBack) {\n translationalBtn = document.createElement('button');\n translationalBtn.className = 'translational';\n translationalBtn.innerHTML = \"\\u5E73\\u79FB\";\n if (this.options.updateHeightCallBack || this.options.secondaryEditCallBack) {\n translationalBtn.style.marginLeft = '10px';\n }\n div.appendChild(translationalBtn);\n translationalBtn.addEventListener('click', function () {\n // console.log('平移')\n if (_this2.options.translationalCallBack) {\n _this2.options.translationalCallBack();\n }\n });\n }\n }\n if (this.options.addFootElm) {\n for (i = 0; i < this.options.addFootElm.length; i++) {\n elm = document.createElement(this.options.addFootElm[i].tagName);\n elm.className = this.options.addFootElm[i].className;\n elm.innerHTML = this.options.addFootElm[i].innerHTML;\n if (this.options.addFootElm[i].event && this.options.addFootElm[i].event.length == 2) {\n elm.addEventListener(this.options.addFootElm[i].event[0], this.options.addFootElm[i].event[1]);\n }\n this.footAppChild(elm);\n }\n }\n\n // if (this.options.showCallBack) {\n // let showBox = document.createElement('div');\n // showBox.className = 'show';\n // showBox.style = 'display: flex;align-items: center;'\n // showBox.innerHTML = `隐藏显示`\n // this.footAppChild(showBox)\n // let showBtn = showBox.querySelector(\"input[name='show']\")\n // this.showBtn = showBtn\n // showBtn.checked = this.info.show\n\n // showBtn.addEventListener('input', (e) => {\n // this.info.show = e.target.checked\n // if (this.options.showCallBack) {\n // this.options.showCallBack(this.info.show)\n // }\n // });\n // }\n case 9:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function _init() {\n return _init2.apply(this, arguments);\n }\n return _init;\n }()\n }, {\n key: \"_attribute\",\n value: function _attribute() {\n var attribute = this._element.content.getElementsByClassName('attribute')[0];\n if (!attribute || attribute.length === 0) {\n return;\n }\n var attributeSelectOption = attribute.getElementsByClassName('attribute-select')[0].getElementsByTagName('option');\n for (var i = attributeSelectOption.length - 1; i >= 0; i--) {\n for (var key in this.info.attribute) {\n if (attributeSelectOption[i].value === key) {\n if (this.info.attribute[key].disabled) {\n attributeSelectOption[i].disabled = true;\n }\n break;\n }\n }\n }\n }\n }]);\n}(_BaseDialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Dialog);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvRGlhbG9nL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9FbGVtZW50L0RpYWxvZy9pbmRleC5qcz82OTA4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlRGlhbG9nIGZyb20gJy4uLy4uLy4uL0Jhc2VEaWFsb2cnO1xyXG5cclxuY2xhc3MgRGlhbG9nIGV4dGVuZHMgQmFzZURpYWxvZyB7XHJcbiAgY29uc3RydWN0b3Ioc2RrLCBpbmZvLCBvcHRpb25zLCBvbmx5KSB7XHJcbiAgICBzdXBlcihzZGsudmlld2VyLl9jb250YWluZXIsIG9wdGlvbnMsIG9ubHkpO1xyXG4gICAgdGhpcy5zZGsgPSBzZGtcclxuICAgIHRoaXMudmlld2VyID0gc2RrLnZpZXdlclxyXG4gICAgdGhpcy5pbmZvID0gaW5mb1xyXG4gICAgdGhpcy5faW5pdCgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBfaW5pdCgpIHtcclxuICAgIGF3YWl0IHRoaXMuaW5pdCgpXHJcbiAgICBhd2FpdCB0aGlzLl9hdHRyaWJ1dGUoKVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29uZmlybUNhbGxCYWNrKSB7XHJcbiAgICAgIGxldCBjb25maXJtQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgIGNvbmZpcm1CdG4uY2xhc3NOYW1lID0gJ2NvbmZpcm0nO1xyXG4gICAgICBjb25maXJtQnRuLmlubmVySFRNTCA9ICfnoa7orqQnXHJcbiAgICAgIHRoaXMuZm9vdEFwcENoaWxkKGNvbmZpcm1CdG4pXHJcbiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+ehruiupCcpXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb25maXJtQ2FsbEJhY2spIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jb25maXJtQ2FsbEJhY2sodGhpcy5pbmZvKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVDYWxsQmFjaykge1xyXG4gICAgICBsZXQgZGVsZXRlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgIGRlbGV0ZUJ0bi5jbGFzc05hbWUgPSAnZGVsZXRlJztcclxuICAgICAgZGVsZXRlQnRuLmlubmVySFRNTCA9ICfliKDpmaQnXHJcbiAgICAgIHRoaXMuZm9vdEFwcENoaWxkKGRlbGV0ZUJ0bilcclxuICAgICAgZGVsZXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCfliKDpmaQnKVxyXG4gICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlQ2FsbEJhY2spIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmVDYWxsQmFjaygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLnJlc2V0Q2FsbEJhY2spIHtcclxuICAgIC8vICAgbGV0IHJlc2V0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAvLyAgIHJlc2V0QnRuLmNsYXNzTmFtZSA9ICdyZXNldCc7XHJcbiAgICAvLyAgIHJlc2V0QnRuLmlubmVySFRNTCA9ICfph43nva4nXHJcbiAgICAvLyAgIHRoaXMuZm9vdEFwcENoaWxkKHJlc2V0QnRuKVxyXG5cclxuICAgIC8vICAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJ+mHjee9ricpXHJcbiAgICAvLyAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNldENhbGxCYWNrKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLm9wdGlvbnMucmVzZXRDYWxsQmFjaygpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnJvdGF0ZUNhbGxCYWNrKSB7XHJcbiAgICAgIGxldCByb3RhdGVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgcm90YXRlQnRuLmNsYXNzTmFtZSA9ICdyb3RhdGUnO1xyXG4gICAgICByb3RhdGVCdG4uaW5uZXJIVE1MID0gJ+aXi+i9rCdcclxuICAgICAgdGhpcy5mb290QXBwQ2hpbGQocm90YXRlQnRuKVxyXG5cclxuICAgICAgcm90YXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCfml4vovawnKVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucm90YXRlQ2FsbEJhY2spIHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5yb3RhdGVDYWxsQmFjaygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zbGF0aW9uYWxDYWxsQmFjayB8fCB0aGlzLm9wdGlvbnMudXBkYXRlSGVpZ2h0Q2FsbEJhY2sgfHwgdGhpcy5vcHRpb25zLnNlY29uZGFyeUVkaXRDYWxsQmFjaykge1xyXG4gICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9J2Fic29sdXRlJ1xyXG4gICAgICBkaXYuc3R5bGUubGVmdCA9JzI0cHgnXHJcbiAgICAgIGRpdi5zdHlsZS5mbGV0ID0gJzAnXHJcbiAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcblxyXG4gICAgICB0aGlzLmZvb3RBcHBDaGlsZChkaXYpXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBkYXRlSGVpZ2h0Q2FsbEJhY2spIHtcclxuICAgICAgICBsZXQgaGVpZ2h0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgaGVpZ2h0QnRuLmlubmVySFRNTCA9ICc8c3ZnIGNsYXNzPVwiaWNvbi11cGRhdGVoZWlnaFwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXVwZGF0ZWhlaWdodFwiPjwvdXNlPjwvc3ZnPuabtOaWsOmrmOeoiydcclxuICAgICAgICBoZWlnaHRCdG4uc3R5bGUud2lkdGggPSAnYXV0bydcclxuICAgICAgICBoZWlnaHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudXBkYXRlSGVpZ2h0Q2FsbEJhY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGhlaWdodEJ0bilcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNlY29uZGFyeUVkaXRDYWxsQmFjaykge1xyXG4gICAgICAgIGxldCBzZWNvbmRhcnlFZGl0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgc2Vjb25kYXJ5RWRpdEJ0bi5jbGFzc05hbWUgPSAnc2Vjb25kYXJ5RWRpdCc7XHJcbiAgICAgICAgc2Vjb25kYXJ5RWRpdEJ0bi5pbm5lckhUTUwgPSAnPHN2ZyBjbGFzcz1cImljb24tZWRpdFwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLWVkaXRcIj48L3VzZT48L3N2Zz7kuozmrKHnvJbovpEnXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGRhdGVIZWlnaHRDYWxsQmFjaykge1xyXG4gICAgICAgICAgc2Vjb25kYXJ5RWRpdEJ0bi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzEwcHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChzZWNvbmRhcnlFZGl0QnRuKVxyXG4gIFxyXG4gICAgICAgIHNlY29uZGFyeUVkaXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygn5LqM5qyh57yW6L6RJylcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2Vjb25kYXJ5RWRpdENhbGxCYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWNvbmRhcnlFZGl0Q2FsbEJhY2soKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNsYXRpb25hbENhbGxCYWNrKSB7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uYWxCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQnRuLmNsYXNzTmFtZSA9ICd0cmFuc2xhdGlvbmFsJztcclxuICAgICAgICB0cmFuc2xhdGlvbmFsQnRuLmlubmVySFRNTCA9IGA8c3ZnIGNsYXNzPVwiaWNvbi1weVwiPjx1c2UgeGxpbms6aHJlZj1cIiN5ai1pY29uLXB5XCI+PC91c2U+PC9zdmc+5bmz56e7YFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBkYXRlSGVpZ2h0Q2FsbEJhY2sgfHwgdGhpcy5vcHRpb25zLnNlY29uZGFyeUVkaXRDYWxsQmFjaykge1xyXG4gICAgICAgICAgdHJhbnNsYXRpb25hbEJ0bi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzEwcHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZCh0cmFuc2xhdGlvbmFsQnRuKVxyXG4gIFxyXG4gICAgICAgIHRyYW5zbGF0aW9uYWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygn5bmz56e7JylcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNsYXRpb25hbENhbGxCYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2xhdGlvbmFsQ2FsbEJhY2soKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hZGRGb290RWxtKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmFkZEZvb3RFbG0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMuYWRkRm9vdEVsbVtpXS50YWdOYW1lKTtcclxuICAgICAgICBlbG0uY2xhc3NOYW1lID0gdGhpcy5vcHRpb25zLmFkZEZvb3RFbG1baV0uY2xhc3NOYW1lXHJcbiAgICAgICAgZWxtLmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy5hZGRGb290RWxtW2ldLmlubmVySFRNTFxyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5hZGRGb290RWxtW2ldLmV2ZW50ICYmIHRoaXMub3B0aW9ucy5hZGRGb290RWxtW2ldLmV2ZW50Lmxlbmd0aD09Mikge1xyXG4gICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5vcHRpb25zLmFkZEZvb3RFbG1baV0uZXZlbnRbMF0sIHRoaXMub3B0aW9ucy5hZGRGb290RWxtW2ldLmV2ZW50WzFdKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvb3RBcHBDaGlsZChlbG0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5vcHRpb25zLnNob3dDYWxsQmFjaykge1xyXG4gICAgLy8gICBsZXQgc2hvd0JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgLy8gICBzaG93Qm94LmNsYXNzTmFtZSA9ICdzaG93JztcclxuICAgIC8vICAgc2hvd0JveC5zdHlsZSA9ICdkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7J1xyXG4gICAgLy8gICBzaG93Qm94LmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImxhYmVsXCI+6ZqQ6JePPC9zcGFuPjxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkIG5hbWU9XCJzaG93XCI+PHNwYW4gY2xhc3M9XCJsYWJlbFwiPuaYvuekujwvc3Bhbj5gXHJcbiAgICAvLyAgIHRoaXMuZm9vdEFwcENoaWxkKHNob3dCb3gpXHJcbiAgICAvLyAgIGxldCBzaG93QnRuID0gc2hvd0JveC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT0nc2hvdyddXCIpXHJcbiAgICAvLyAgIHRoaXMuc2hvd0J0biA9IHNob3dCdG5cclxuICAgIC8vICAgc2hvd0J0bi5jaGVja2VkID0gdGhpcy5pbmZvLnNob3dcclxuXHJcbiAgICAvLyAgIHNob3dCdG4uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZSkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuaW5mby5zaG93ID0gZS50YXJnZXQuY2hlY2tlZFxyXG4gICAgLy8gICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0NhbGxCYWNrKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLm9wdGlvbnMuc2hvd0NhbGxCYWNrKHRoaXMuaW5mby5zaG93KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBfYXR0cmlidXRlKCkge1xyXG4gICAgbGV0IGF0dHJpYnV0ZSA9IHRoaXMuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUnKVswXVxyXG4gICAgaWYgKCFhdHRyaWJ1dGUgfHwgYXR0cmlidXRlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBhdHRyaWJ1dGVTZWxlY3RPcHRpb24gPSBhdHRyaWJ1dGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLXNlbGVjdCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKVxyXG4gICAgZm9yIChsZXQgaSA9IGF0dHJpYnV0ZVNlbGVjdE9wdGlvbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5pbmZvLmF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVTZWxlY3RPcHRpb25baV0udmFsdWUgPT09IGtleSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5mby5hdHRyaWJ1dGVba2V5XS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVTZWxlY3RPcHRpb25baV0uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGlhbG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE5SUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Element/Dialog/index.js\n"); /***/ }), /***/ "./src/Obj/Element/Pagination.js": /*!***************************************!*\ !*** ./src/Obj/Element/Pagination.js ***! \***************************************/ /*! exports provided: generatePagination */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generatePagination\", function() { return generatePagination; });\nfunction generatePagination(pagination, total, pageSize, pageIndex, cd) {\n /* \r\n 需要一个
        标签\r\n total; // 总数据的数量\r\n pageSize; // 一页显示数量\r\n pageIndex; // 当前页\r\n */\n var totalPage = Math.ceil(total / pageSize) || 1; // 总页数\n function initPagination() {\n var pageHtml; // 按钮内容\n var prevButton = \"
      • \\u2039
      • \"; // 向左\n var nextButton = \"
      • \\u203A
      • \"; // 向右\n var firstPage = \"
      • 1
      • \"; // 第一页\n var lastPage = \"
      • \").concat(totalPage, \"
      • \"); // 最后一页\n var leftOmitPage = \"
      • ...
      • \"; // 省略号\n var rightOmitPage = \"
      • ...
      • \"; // 省略号\n var pageTips = \"
        \\u5171 \".concat(total, \" \\u6761
        \");\n pageHtml = prevButton; // 添加向左的按钮\n\n /* 生成页数 */\n if (totalPage <= 6) {\n // 总页数小于等于10页全部显示\n for (var i = 1; i <= totalPage; i++) {\n pageHtml += \"
      • \").concat(i, \"
      • \");\n }\n }\n\n //页码大于5页的情况 当前页大于5的话,并且页码是大于11页的\n else if (pageIndex <= 4) {\n //总页数大于10且当前页远离总页数\n for (var _i = 1; _i <= 5; _i++) {\n pageHtml += \"
      • \").concat(_i, \"
      • \");\n }\n pageHtml += rightOmitPage;\n pageHtml += lastPage;\n } else if (pageIndex > totalPage - 3) {\n //pageindex>=9 的时候并且页数》10页的时候\n\n // console.log('totalPage - 2:' + (totalPage - 3));\n // console.log('pageindex:' + pageIndex);\n //总页数大于10且当前页接近总页数\n pageHtml += firstPage;\n pageHtml += leftOmitPage;\n for (var _i2 = totalPage - 4; _i2 <= totalPage; _i2++) {\n pageHtml += \"
      • \").concat(_i2, \"
      • \");\n }\n } else {\n //除开上面两个情况 当前页在中间\n pageHtml += firstPage;\n pageHtml += leftOmitPage;\n for (var _i3 = pageIndex - 1; _i3 <= pageIndex + 1; _i3++) {\n pageHtml += \"
      • \").concat(_i3, \"
      • \");\n }\n pageHtml += rightOmitPage;\n pageHtml += lastPage;\n }\n pageHtml += nextButton; // 添加向右的按钮\n pageHtml += pageTips;\n pagination.innerHTML = pageHtml;\n pagination.querySelector(\"li[pagenumber='\" + pageIndex + \"']\").classList.add('active');\n var pagenumberBtns = pagination.querySelectorAll('li[pagenumber]'); // 获取所有的页码按钮\n\n /* 点击页码按钮进行翻页 */\n pagenumberBtns.forEach(function (elements) {\n elements.onclick = function () {\n pageIndex = Number(this.innerHTML); // 当前页\n pagination.querySelector(\"li[pagenumber='\" + pageIndex + \"']\").classList.add('active');\n pageHtml = \"\";\n initPagination();\n cd && cd(pageIndex);\n };\n });\n\n /* 向左翻页 */\n pagination.getElementsByClassName('btnPrev')[0].addEventListener('click', function () {\n if (pageIndex > 1) {\n pageIndex--;\n pageHtml = '';\n initPagination();\n cd && cd(pageIndex);\n }\n });\n\n /* 向右翻页 */\n pagination.getElementsByClassName('btnNext')[0].addEventListener('click', function () {\n if (pageIndex < totalPage) {\n pageIndex++;\n pageHtml = '';\n initPagination();\n cd && cd(pageIndex);\n }\n });\n\n /* 向左快速翻页 */\n var btnGoLeft = pagination.getElementsByClassName('btnGoLeft')[0];\n if (btnGoLeft) {\n btnGoLeft.addEventListener('mouseenter', function () {\n this.innerHTML = '<';\n });\n btnGoLeft.addEventListener('mouseleave', function () {\n this.innerHTML = '...';\n });\n btnGoLeft.addEventListener('click', function () {\n if (pageIndex > 10) {\n pageIndex -= 10;\n pageHtml = '';\n initPagination();\n cd && cd(pageIndex);\n }\n });\n }\n\n /* 向右快速翻页 */\n var btnGoRight = pagination.getElementsByClassName('btnGoRight')[0];\n if (btnGoRight) {\n btnGoRight.addEventListener('mouseenter', function () {\n this.innerHTML = '>';\n });\n btnGoRight.addEventListener('mouseleave', function () {\n this.innerHTML = '...';\n });\n btnGoRight.addEventListener('click', function () {\n if (pageIndex < totalPage - 10) {\n pageIndex += 10;\n pageHtml = '';\n initPagination();\n cd && cd(pageIndex);\n }\n });\n }\n }\n initPagination();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvUGFnaW5hdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovRWxlbWVudC9QYWdpbmF0aW9uLmpzPzhkOTgiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb24sIHRvdGFsLCBwYWdlU2l6ZSwgcGFnZUluZGV4LCBjZCkge1xyXG5cclxuICAvKiBcclxuICAg6ZyA6KaB5LiA5LiqPHVsIGlkPVwicGFnaW5hdGlvblwiPjwvdWw+5qCH562+XHJcbiAgIHRvdGFsOyAvLyDmgLvmlbDmja7nmoTmlbDph49cclxuICAgcGFnZVNpemU7IC8vIOS4gOmhteaYvuekuuaVsOmHj1xyXG4gICBwYWdlSW5kZXg7IC8vIOW9k+WJjemhtVxyXG4gICovXHJcbiAgbGV0IHRvdGFsUGFnZSA9IE1hdGguY2VpbCh0b3RhbCAvIHBhZ2VTaXplKSB8fCAxOyAvLyDmgLvpobXmlbBcclxuICBmdW5jdGlvbiBpbml0UGFnaW5hdGlvbigpIHtcclxuICAgIGxldCBwYWdlSHRtbDsgLy8g5oyJ6ZKu5YaF5a65XHJcbiAgICBsZXQgcHJldkJ1dHRvbiA9IGA8bGkgY2xhc3M9J2xpc3QtaXRlbXMgbGJsIGJ0blByZXYnPuKAuTwvbGk+YDsgLy8g5ZCR5bemXHJcbiAgICBsZXQgbmV4dEJ1dHRvbiA9IGA8bGkgY2xhc3M9J2xpc3QtaXRlbXMgbGJyIGJ0bk5leHQnPuKAujwvbGk+YDsgLy8g5ZCR5Y+zXHJcbiAgICBsZXQgZmlyc3RQYWdlID0gYDxsaSBjbGFzcz0nbGlzdC1pdGVtcycgcGFnZW51bWJlcj0xPjE8L2xpPmA7IC8vIOesrOS4gOmhtVxyXG4gICAgbGV0IGxhc3RQYWdlID0gYDxsaSBjbGFzcz0nbGlzdC1pdGVtcycgcGFnZW51bWJlcj0ke3RvdGFsUGFnZX0+JHt0b3RhbFBhZ2V9PC9saT5gOyAvLyDmnIDlkI7kuIDpobVcclxuICAgIGxldCBsZWZ0T21pdFBhZ2UgPSBgPGxpIGNsYXNzPSdsaXN0LWl0ZW1zIGJ0bkdvTGVmdCc+Li4uPC9saT5gOyAvLyDnnIHnlaXlj7dcclxuICAgIGxldCByaWdodE9taXRQYWdlID0gYDxsaSBjbGFzcz0nbGlzdC1pdGVtcyBidG5Hb1JpZ2h0Jz4uLi48L2xpPmA7IC8vIOecgeeVpeWPt1xyXG4gICAgbGV0IHBhZ2VUaXBzID0gYDxkaXYgc3R5bGU9J2xpbmUtaGVpZ2h0OjIwcHg7JyBjbGFzcz0ncGFnZVRpcHMnPuWFsSAke3RvdGFsfSDmnaE8L2RpdiA+IGA7XHJcbiAgICBwYWdlSHRtbCA9IHByZXZCdXR0b247IC8vIOa3u+WKoOWQkeW3pueahOaMiemSrlxyXG4gXHJcbiAgICAvKiDnlJ/miJDpobXmlbAgKi9cclxuICAgIGlmICh0b3RhbFBhZ2UgPD0gNikge1xyXG4gICAgICAvLyDmgLvpobXmlbDlsI/kuo7nrYnkuo4xMOmhteWFqOmDqOaYvuekulxyXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbFBhZ2U7IGkrKykge1xyXG4gICAgICAgIHBhZ2VIdG1sICs9IGA8bGkgY2xhc3M9J2xpc3QtaXRlbXMnIHBhZ2VudW1iZXI9JHtpfT4ke2l9PC9saT5gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiBcclxuICAgIC8v6aG156CB5aSn5LqONemhteeahOaDheWGtSAg5b2T5YmN6aG15aSn5LqONeeahOivne+8jOW5tuS4lOmhteeggeaYr+Wkp+S6jjEx6aG155qEXHJcbiAgICBlbHNlIGlmIChwYWdlSW5kZXggPD0gNCkge1xyXG4gICAgICAvL+aAu+mhteaVsOWkp+S6jjEw5LiU5b2T5YmN6aG16L+c56a75oC76aG15pWwXHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDU7IGkrKykge1xyXG4gICAgICAgIHBhZ2VIdG1sICs9IGA8bGkgY2xhc3M9J2xpc3QtaXRlbXMnIHBhZ2VudW1iZXI9JHtpfT4ke2l9PC9saT5gO1xyXG4gICAgICB9XHJcbiAgICAgIHBhZ2VIdG1sICs9IHJpZ2h0T21pdFBhZ2U7XHJcbiAgICAgIHBhZ2VIdG1sICs9IGxhc3RQYWdlO1xyXG4gICAgfSBlbHNlIGlmIChwYWdlSW5kZXggPiB0b3RhbFBhZ2UgLSAzKSB7XHJcbiAgICAgIC8vcGFnZWluZGV4Pj05IOeahOaXtuWAmeW5tuS4lOmhteaVsOOAizEw6aG155qE5pe25YCZXHJcbiBcclxuICAgICAgLy8gY29uc29sZS5sb2coJ3RvdGFsUGFnZSAtIDI6JyArICh0b3RhbFBhZ2UgLSAzKSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdwYWdlaW5kZXg6JyArIHBhZ2VJbmRleCk7XHJcbiAgICAgIC8v5oC76aG15pWw5aSn5LqOMTDkuJTlvZPliY3pobXmjqXov5HmgLvpobXmlbBcclxuICAgICAgcGFnZUh0bWwgKz0gZmlyc3RQYWdlO1xyXG4gICAgICBwYWdlSHRtbCArPSBsZWZ0T21pdFBhZ2U7XHJcbiAgICAgIGZvciAobGV0IGkgPSB0b3RhbFBhZ2UgLSA0OyBpIDw9IHRvdGFsUGFnZTsgaSsrKSB7XHJcbiAgICAgICAgcGFnZUh0bWwgKz0gYDxsaSBjbGFzcz0nbGlzdC1pdGVtcycgcGFnZW51bWJlcj0ke2l9PiR7aX08L2xpPmA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8v6Zmk5byA5LiK6Z2i5Lik5Liq5oOF5Ya1IOW9k+WJjemhteWcqOS4remXtFxyXG4gICAgICBwYWdlSHRtbCArPSBmaXJzdFBhZ2U7XHJcbiAgICAgIHBhZ2VIdG1sICs9IGxlZnRPbWl0UGFnZTtcclxuICAgICAgZm9yIChsZXQgaSA9IHBhZ2VJbmRleCAtIDE7IGkgPD0gcGFnZUluZGV4ICsgMTsgaSsrKSB7XHJcbiAgICAgICAgcGFnZUh0bWwgKz0gYDxsaSBjbGFzcz0nbGlzdC1pdGVtcycgcGFnZW51bWJlcj0ke2l9PiR7aX08L2xpPmA7XHJcbiAgICAgIH1cclxuICAgICAgcGFnZUh0bWwgKz0gcmlnaHRPbWl0UGFnZTtcclxuICAgICAgcGFnZUh0bWwgKz0gbGFzdFBhZ2U7XHJcbiAgICB9XHJcbiAgICBwYWdlSHRtbCArPSBuZXh0QnV0dG9uOyAvLyDmt7vliqDlkJHlj7PnmoTmjInpkq5cclxuICAgIHBhZ2VIdG1sICs9IHBhZ2VUaXBzO1xyXG4gICAgcGFnaW5hdGlvbi5pbm5lckhUTUwgPSBwYWdlSHRtbDtcclxuICAgIHBhZ2luYXRpb25cclxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCJsaVtwYWdlbnVtYmVyPSdcIiArIHBhZ2VJbmRleCArIFwiJ11cIilcclxuICAgICAgLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gXHJcbiAgICBsZXQgcGFnZW51bWJlckJ0bnMgPSBwYWdpbmF0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpW3BhZ2VudW1iZXJdJyk7IC8vIOiOt+WPluaJgOacieeahOmhteeggeaMiemSrlxyXG4gXHJcbiAgICAvKiDngrnlh7vpobXnoIHmjInpkq7ov5vooYznv7vpobUgKi9cclxuICAgIHBhZ2VudW1iZXJCdG5zLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnRzKSB7XHJcbiAgICAgIGVsZW1lbnRzLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFnZUluZGV4ID0gTnVtYmVyKHRoaXMuaW5uZXJIVE1MKTsgLy8g5b2T5YmN6aG1XHJcbiAgICAgICAgcGFnaW5hdGlvblxyXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCJsaVtwYWdlbnVtYmVyPSdcIiArIHBhZ2VJbmRleCArIFwiJ11cIilcclxuICAgICAgICAgIC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICBwYWdlSHRtbCA9IGBgO1xyXG4gICAgICAgIGluaXRQYWdpbmF0aW9uKClcclxuICAgICAgICBjZCAmJiBjZChwYWdlSW5kZXgpXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuIFxyXG4gICAgLyog5ZCR5bem57+76aG1ICovXHJcbiAgICBwYWdpbmF0aW9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2J0blByZXYnKVswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKHBhZ2VJbmRleCA+IDEpIHtcclxuICAgICAgICBwYWdlSW5kZXgtLTtcclxuICAgICAgICBwYWdlSHRtbCA9ICcnO1xyXG4gICAgICAgIGluaXRQYWdpbmF0aW9uKCk7XHJcbiAgICAgICAgY2QgJiYgY2QocGFnZUluZGV4KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuIFxyXG4gICAgLyog5ZCR5Y+z57+76aG1ICovXHJcbiAgICBwYWdpbmF0aW9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2J0bk5leHQnKVswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKHBhZ2VJbmRleCA8IHRvdGFsUGFnZSkge1xyXG4gICAgICAgIHBhZ2VJbmRleCsrO1xyXG4gICAgICAgIHBhZ2VIdG1sID0gJyc7XHJcbiAgICAgICAgaW5pdFBhZ2luYXRpb24oKVxyXG4gICAgICAgIGNkICYmIGNkKHBhZ2VJbmRleClcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiBcclxuICAgIC8qIOWQkeW3puW/q+mAn+e/u+mhtSAqL1xyXG4gICAgbGV0IGJ0bkdvTGVmdCA9IHBhZ2luYXRpb24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYnRuR29MZWZ0JylbMF07XHJcbiAgICBpZiAoYnRuR29MZWZ0KSB7XHJcbiAgICAgIGJ0bkdvTGVmdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5uZXJIVE1MID0gJzwnO1xyXG4gICAgICB9KTtcclxuICAgICAgYnRuR29MZWZ0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pbm5lckhUTUwgPSAnLi4uJztcclxuICAgICAgfSk7XHJcbiAgICAgIGJ0bkdvTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAocGFnZUluZGV4ID4gMTApIHtcclxuICAgICAgICAgIHBhZ2VJbmRleCAtPSAxMDtcclxuICAgICAgICAgIHBhZ2VIdG1sID0gJyc7XHJcbiAgICAgICAgICBpbml0UGFnaW5hdGlvbigpO1xyXG4gICAgICAgICAgY2QgJiYgY2QocGFnZUluZGV4KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiBcclxuICAgIC8qIOWQkeWPs+W/q+mAn+e/u+mhtSAqL1xyXG4gICAgbGV0IGJ0bkdvUmlnaHQgPSBwYWdpbmF0aW9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2J0bkdvUmlnaHQnKVswXTtcclxuICAgIGlmIChidG5Hb1JpZ2h0KSB7XHJcbiAgICAgIGJ0bkdvUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlubmVySFRNTCA9ICc+JztcclxuICAgICAgfSk7XHJcbiAgICAgIGJ0bkdvUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlubmVySFRNTCA9ICcuLi4nO1xyXG4gICAgICB9KTtcclxuICAgICAgYnRuR29SaWdodC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAocGFnZUluZGV4IDwgdG90YWxQYWdlIC0gMTApIHtcclxuICAgICAgICAgIHBhZ2VJbmRleCArPSAxMDtcclxuICAgICAgICAgIHBhZ2VIdG1sID0gJyc7XHJcbiAgICAgICAgICBpbml0UGFnaW5hdGlvbigpO1xyXG4gICAgICAgICAgY2QgJiYgY2QocGFnZUluZGV4KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXRQYWdpbmF0aW9uKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGdlbmVyYXRlUGFnaW5hdGlvbiB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Element/Pagination.js\n"); /***/ }), /***/ "./src/Obj/Element/cy_html_slider.js": /*!*******************************************!*\ !*** ./src/Obj/Element/cy_html_slider.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar cy_slider = /*#__PURE__*/function () {\n function cy_slider(ele) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, cy_slider);\n var that = this;\n this.options = options;\n //slider 盒子,顶层元素\n this.slider_box = ele;\n if (this.slider_box == null) {\n return;\n }\n //slider 手柄\n this.handler = this.slider_box.querySelector('.handler');\n //slider 有值块\n this.light = this.slider_box.querySelector('.light');\n //是否是垂直\n if (this.slider_box.classList.contains(\"vertical\")) {\n this.is_vertical = true;\n }\n //是否是禁用\n if (this.slider_box.attributes.getNamedItem(\"disabled\") && this.slider_box.attributes.getNamedItem(\"disabled\").value.toLowerCase() != \"false\") {\n this.is_disabled = true;\n }\n this.is_initialize = true;\n this.max_data = 100;\n this.min_data = 0;\n this.step_separates = [];\n this.step_percents = [];\n if (options) {\n //参数校验,必要内置参数预算\n var u_max_data = parseFloat(options.max_data);\n if (u_max_data || u_max_data == 0) {\n this.max_data = u_max_data;\n }\n var u_min_data = parseFloat(options.min_data);\n if (u_min_data || u_min_data == 0) {\n if (u_min_data < this.max_data) {\n this.min_data = u_min_data;\n } else {\n this.min_data = this.max_data;\n }\n }\n //步长分割\n var data_area = this.max_data - this.min_data;\n var u_step = Math.abs(parseFloat(options.step));\n if (u_step) {\n if (data_area / u_step > 200) {\n u_step = data_area / 200;\n }\n } else {\n u_step = Math.floor(data_area / 100);\n }\n var added_step = this.min_data;\n this.step_separates.push(added_step);\n while (added_step < this.max_data) {\n added_step += parseFloat(u_step);\n added_step = parseFloat(added_step.toFixed(3));\n if (added_step > this.max_data) {\n added_step = this.max_data;\n }\n this.step_separates.push(added_step);\n }\n for (var i = 0; i < this.step_separates.length; i++) {\n if (this.step_separates.length == 1) {\n this.step_percents.push(1);\n break;\n }\n var step_percent = i / (this.step_separates.length - 1);\n this.step_percents.push(step_percent);\n }\n }\n this.slider_box.addEventListener('click', function (ev) {\n //点击设置值\n if (that.is_disabled) {\n return;\n }\n if (ev.target.nodeName != \"SPAN\") {\n if (that.is_vertical) {\n if (ev.target.classList.contains(\"light\")) {\n that._setPosition(that.slider_box.offsetHeight - (that.slider_box.offsetHeight - that.light.offsetHeight + ev.offsetY));\n } else {\n that._setPosition(that.slider_box.offsetHeight - ev.offsetY);\n }\n } else {\n that._setPosition(ev.offsetX);\n }\n }\n });\n this.movementX = 0;\n this.movementY = 0;\n this.previousTouch = null;\n this.crt_val = 0;\n this.slider_box.addEventListener('mousedown', function (ev) {\n //标准端拖动开始\n if (that.is_disabled) {\n return;\n }\n that.movementX = 0;\n that.movementY = 0;\n that.previousTouch = null;\n if (that.is_vertical) {\n that.crt_val = that.slider_box.offsetHeight * (that.handler.style.bottom.replace(\"%\", \"\") / 100);\n } else {\n that.crt_val = that.slider_box.offsetWidth * (that.handler.style.left.replace(\"%\", \"\") / 100);\n }\n document.documentElement.addEventListener('mousemove', _dragMove);\n document.documentElement.addEventListener('mouseup', function () {\n document.documentElement.removeEventListener('mousemove', _dragMove);\n });\n });\n this.slider_box.addEventListener('touchstart', function (ev) {\n //touch端拖动开始\n if (that.is_disabled) {\n return;\n }\n that.movementX = 0;\n that.movementY = 0;\n that.previousTouch = null;\n if (that.is_vertical) {\n that.crt_val = that.slider_box.offsetHeight * (that.handler.style.bottom.replace(\"%\", \"\") / 100);\n } else {\n that.crt_val = that.slider_box.offsetWidth * (that.handler.style.left.replace(\"%\", \"\") / 100);\n }\n document.documentElement.addEventListener('touchmove', _dragMove);\n document.documentElement.addEventListener('touchend', function () {\n document.documentElement.removeEventListener('touchmove', _dragMove);\n });\n });\n function _dragMove(ev) {\n if (ev.type == \"touchmove\") {\n //touch端\n if (that.previousTouch) {\n that.movementX += ev.touches[0].pageX - that.previousTouch.pageX;\n that.movementY += ev.touches[0].pageY - that.previousTouch.pageY;\n }\n ;\n that.previousTouch = ev.touches[0];\n if (that.is_vertical) {\n var new_val = that.crt_val - that.movementY;\n if (new_val < 0) {\n new_val = 0;\n } else if (new_val > that.slider_box.offsetHeight) {\n new_val = that.slider_box.offsetHeight;\n }\n that._setPosition(new_val);\n } else {\n var new_val = that.crt_val + that.movementX;\n if (new_val < 0) {\n new_val = 0;\n } else if (new_val > that.slider_box.offsetWidth) {\n new_val = that.slider_box.offsetWidth;\n }\n that._setPosition(new_val);\n }\n } else {\n //标准端\n that.movementX += ev.movementX;\n that.movementY += ev.movementY;\n if (that.is_vertical) {\n var new_val = that.crt_val - that.movementY;\n if (new_val < 0) {\n new_val = 0;\n } else if (new_val > that.slider_box.offsetHeight) {\n new_val = that.slider_box.offsetHeight;\n }\n that._setPosition(new_val);\n } else {\n var new_val = that.crt_val + that.movementX;\n if (new_val < 0) {\n new_val = 0;\n } else if (new_val > that.slider_box.offsetWidth) {\n new_val = that.slider_box.offsetWidth;\n }\n that._setPosition(new_val);\n }\n }\n ev.preventDefault();\n }\n //根据相关值设置 slider 样式\n this._setPosition = function (val, noCallback) {\n var percent;\n if (this.is_vertical) {\n percent = parseFloat(val) / this.slider_box.offsetHeight;\n } else {\n percent = parseFloat(val) / this.slider_box.offsetWidth;\n }\n var resultData;\n var closest_index = Math.floor(this.step_separates.length * percent);\n if (closest_index >= this.step_separates.length) {\n closest_index = this.step_separates.length - 1;\n }\n resultData = this.step_separates[closest_index];\n percent = this.step_percents[closest_index];\n var percentCss = percent * 100 + '%';\n if (this.is_vertical) {\n this.light.style.height = percentCss;\n this.handler.style.bottom = percentCss;\n } else {\n this.light.style.width = percentCss;\n this.handler.style.left = percentCss;\n }\n this.slider_box.dataset.value = resultData;\n if (!this.is_initialize) {\n if (this.options) {\n if (this.options.callback instanceof Function && !noCallback) {\n this.options.callback(resultData);\n }\n }\n }\n };\n //设置初始默认值\n if (this.options) {\n var default_data = parseFloat(this.options.default_data);\n if (default_data || default_data == 0) {\n this.setSliderData(default_data);\n } else {\n this.setSliderData(this.min_data);\n }\n this.is_initialize = false;\n }\n }\n //用户公开的方法,设置 slider 值\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(cy_slider, [{\n key: \"setSliderData\",\n value: function setSliderData(data) {\n var noCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (data < this.min_data) {\n data = this.min_data;\n }\n if (data > this.max_data) {\n data = this.max_data;\n }\n var percent;\n var min_differ = Number.MAX_VALUE;\n for (var i = 0; i < this.step_separates.length; i++) {\n var crt_differ = Math.abs(data - this.step_separates[i]);\n if (crt_differ < min_differ) {\n min_differ = crt_differ;\n percent = this.step_percents[i];\n }\n if (crt_differ == 0) {\n break;\n }\n }\n var move_val;\n if (this.is_vertical) {\n move_val = parseFloat(this.slider_box.offsetHeight * percent);\n } else {\n move_val = parseFloat(this.slider_box.offsetWidth * percent);\n }\n this._setPosition(move_val, noCallback);\n }\n //用户公开的方法,设置是否禁用\n }, {\n key: \"setDisabled\",\n value: function setDisabled(is_disabled) {\n this.is_disabled = is_disabled;\n if (!this.slider_box || !this.slider_box.attributes) {\n return;\n }\n if (is_disabled) {\n var attr_disabled = document.createAttribute(\"disabled\");\n this.slider_box.attributes.setNamedItem(attr_disabled);\n } else {\n this.slider_box.attributes.removeNamedItem(\"disabled\");\n }\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (cy_slider);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvY3lfaHRtbF9zbGlkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0VsZW1lbnQvY3lfaHRtbF9zbGlkZXIuanM/ZTA4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBjeV9zbGlkZXIge1xyXG4gICAgY29uc3RydWN0b3IoZWxlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xyXG4gICAgICAgIC8vc2xpZGVyIOebkuWtkO+8jOmhtuWxguWFg+e0oFxyXG4gICAgICAgIHRoaXMuc2xpZGVyX2JveCA9IGVsZVxyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlcl9ib3ggPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9zbGlkZXIg5omL5p+EXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gdGhpcy5zbGlkZXJfYm94LnF1ZXJ5U2VsZWN0b3IoJy5oYW5kbGVyJylcclxuICAgICAgICAvL3NsaWRlciDmnInlgLzlnZdcclxuICAgICAgICB0aGlzLmxpZ2h0ID0gdGhpcy5zbGlkZXJfYm94LnF1ZXJ5U2VsZWN0b3IoJy5saWdodCcpXHJcbiAgICAgICAgLy/mmK/lkKbmmK/lnoLnm7RcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJfYm94LmNsYXNzTGlzdC5jb250YWlucyhcInZlcnRpY2FsXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNfdmVydGljYWwgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5piv5ZCm5piv56aB55SoXHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVyX2JveC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShcImRpc2FibGVkXCIpICYmIHRoaXMuc2xpZGVyX2JveC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShcImRpc2FibGVkXCIpLnZhbHVlLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNfZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzX2luaXRpYWxpemUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5tYXhfZGF0YSA9IDEwMFxyXG4gICAgICAgIHRoaXMubWluX2RhdGEgPSAwXHJcbiAgICAgICAgdGhpcy5zdGVwX3NlcGFyYXRlcyA9IFtdXHJcbiAgICAgICAgdGhpcy5zdGVwX3BlcmNlbnRzID0gW11cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgLy/lj4LmlbDmoKHpqozvvIzlv4XopoHlhoXnva7lj4LmlbDpooTnrpdcclxuICAgICAgICAgICAgdmFyIHVfbWF4X2RhdGEgPSBwYXJzZUZsb2F0KG9wdGlvbnMubWF4X2RhdGEpXHJcbiAgICAgICAgICAgIGlmICh1X21heF9kYXRhIHx8IHVfbWF4X2RhdGEgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhfZGF0YSA9IHVfbWF4X2RhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdV9taW5fZGF0YSA9IHBhcnNlRmxvYXQob3B0aW9ucy5taW5fZGF0YSlcclxuICAgICAgICAgICAgaWYgKHVfbWluX2RhdGEgfHwgdV9taW5fZGF0YSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodV9taW5fZGF0YSA8IHRoaXMubWF4X2RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbl9kYXRhID0gdV9taW5fZGF0YVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbl9kYXRhID0gdGhpcy5tYXhfZGF0YVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5q2l6ZW/5YiG5YmyXHJcbiAgICAgICAgICAgIHZhciBkYXRhX2FyZWEgPSB0aGlzLm1heF9kYXRhIC0gdGhpcy5taW5fZGF0YVxyXG4gICAgICAgICAgICB2YXIgdV9zdGVwID0gTWF0aC5hYnMocGFyc2VGbG9hdChvcHRpb25zLnN0ZXApKVxyXG4gICAgICAgICAgICBpZiAodV9zdGVwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YV9hcmVhIC8gdV9zdGVwID4gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdV9zdGVwID0gZGF0YV9hcmVhIC8gMjAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1X3N0ZXAgPSBNYXRoLmZsb29yKGRhdGFfYXJlYSAvIDEwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWRkZWRfc3RlcCA9IHRoaXMubWluX2RhdGFcclxuICAgICAgICAgICAgdGhpcy5zdGVwX3NlcGFyYXRlcy5wdXNoKGFkZGVkX3N0ZXApXHJcbiAgICAgICAgICAgIHdoaWxlIChhZGRlZF9zdGVwIDwgdGhpcy5tYXhfZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgYWRkZWRfc3RlcCArPSBwYXJzZUZsb2F0KHVfc3RlcClcclxuICAgICAgICAgICAgICAgIGFkZGVkX3N0ZXAgPSBwYXJzZUZsb2F0KGFkZGVkX3N0ZXAudG9GaXhlZCgzKSlcclxuICAgICAgICAgICAgICAgIGlmIChhZGRlZF9zdGVwID4gdGhpcy5tYXhfZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkX3N0ZXAgPSB0aGlzLm1heF9kYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBfc2VwYXJhdGVzLnB1c2goYWRkZWRfc3RlcClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RlcF9zZXBhcmF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBfc2VwYXJhdGVzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwX3BlcmNlbnRzLnB1c2goMSlcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHN0ZXBfcGVyY2VudCA9IGkgLyAodGhpcy5zdGVwX3NlcGFyYXRlcy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwX3BlcmNlbnRzLnB1c2goc3RlcF9wZXJjZW50KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2xpZGVyX2JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldikgPT4ge1xyXG4gICAgICAgICAgICAvL+eCueWHu+iuvue9ruWAvFxyXG4gICAgICAgICAgICBpZiAodGhhdC5pc19kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2LnRhcmdldC5ub2RlTmFtZSAhPSBcIlNQQU5cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuaXNfdmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXYudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImxpZ2h0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3NldFBvc2l0aW9uKHRoYXQuc2xpZGVyX2JveC5vZmZzZXRIZWlnaHQgLSAodGhhdC5zbGlkZXJfYm94Lm9mZnNldEhlaWdodCAtIHRoYXQubGlnaHQub2Zmc2V0SGVpZ2h0ICsgZXYub2Zmc2V0WSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZXRQb3NpdGlvbih0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0IC0gZXYub2Zmc2V0WSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3NldFBvc2l0aW9uKGV2Lm9mZnNldFgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubW92ZW1lbnRYID0gMFxyXG4gICAgICAgIHRoaXMubW92ZW1lbnRZID0gMFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNUb3VjaCA9IG51bGxcclxuICAgICAgICB0aGlzLmNydF92YWwgPSAwXHJcbiAgICAgICAgdGhpcy5zbGlkZXJfYm94LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChldikgPT4ge1xyXG4gICAgICAgICAgICAvL+agh+WHhuerr+aLluWKqOW8gOWni1xyXG4gICAgICAgICAgICBpZiAodGhhdC5pc19kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhhdC5tb3ZlbWVudFggPSAwXHJcbiAgICAgICAgICAgIHRoYXQubW92ZW1lbnRZID0gMFxyXG4gICAgICAgICAgICB0aGF0LnByZXZpb3VzVG91Y2ggPSBudWxsXHJcbiAgICAgICAgICAgIGlmICh0aGF0LmlzX3ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LmNydF92YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0ICogKHRoYXQuaGFuZGxlci5zdHlsZS5ib3R0b20ucmVwbGFjZShcIiVcIiwgXCJcIikgLyAxMDApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LmNydF92YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0V2lkdGggKiAodGhhdC5oYW5kbGVyLnN0eWxlLmxlZnQucmVwbGFjZShcIiVcIiwgXCJcIikgLyAxMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIF9kcmFnTW92ZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgX2RyYWdNb3ZlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5zbGlkZXJfYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgLy90b3VjaOerr+aLluWKqOW8gOWni1xyXG4gICAgICAgICAgICBpZiAodGhhdC5pc19kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhhdC5tb3ZlbWVudFggPSAwXHJcbiAgICAgICAgICAgIHRoYXQubW92ZW1lbnRZID0gMFxyXG4gICAgICAgICAgICB0aGF0LnByZXZpb3VzVG91Y2ggPSBudWxsXHJcbiAgICAgICAgICAgIGlmICh0aGF0LmlzX3ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LmNydF92YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0ICogKHRoYXQuaGFuZGxlci5zdHlsZS5ib3R0b20ucmVwbGFjZShcIiVcIiwgXCJcIikgLyAxMDApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LmNydF92YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0V2lkdGggKiAodGhhdC5oYW5kbGVyLnN0eWxlLmxlZnQucmVwbGFjZShcIiVcIiwgXCJcIikgLyAxMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIF9kcmFnTW92ZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIF9kcmFnTW92ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZ1bmN0aW9uIF9kcmFnTW92ZShldikge1xyXG4gICAgICAgICAgICBpZiAoZXYudHlwZSA9PSBcInRvdWNobW92ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAvL3RvdWNo56uvXHJcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5wcmV2aW91c1RvdWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5tb3ZlbWVudFggKz0gZXYudG91Y2hlc1swXS5wYWdlWCAtIHRoYXQucHJldmlvdXNUb3VjaC5wYWdlWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Lm1vdmVtZW50WSArPSBldi50b3VjaGVzWzBdLnBhZ2VZIC0gdGhhdC5wcmV2aW91c1RvdWNoLnBhZ2VZO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoYXQucHJldmlvdXNUb3VjaCA9IGV2LnRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5pc192ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsID0gdGhhdC5jcnRfdmFsIC0gdGhhdC5tb3ZlbWVudFlcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3X3ZhbCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IDBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld192YWwgPiB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3NldFBvc2l0aW9uKG5ld192YWwpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsID0gdGhhdC5jcnRfdmFsICsgdGhhdC5tb3ZlbWVudFhcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3X3ZhbCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IDBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld192YWwgPiB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IHRoYXQuc2xpZGVyX2JveC5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZXRQb3NpdGlvbihuZXdfdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy/moIflh4bnq69cclxuICAgICAgICAgICAgICAgIHRoYXQubW92ZW1lbnRYICs9IGV2Lm1vdmVtZW50WFxyXG4gICAgICAgICAgICAgICAgdGhhdC5tb3ZlbWVudFkgKz0gZXYubW92ZW1lbnRZXHJcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5pc192ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsID0gdGhhdC5jcnRfdmFsIC0gdGhhdC5tb3ZlbWVudFlcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3X3ZhbCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IDBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld192YWwgPiB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWwgPSB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3NldFBvc2l0aW9uKG5ld192YWwpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsID0gdGhhdC5jcnRfdmFsICsgdGhhdC5tb3ZlbWVudFhcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3X3ZhbCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IDBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld192YWwgPiB0aGF0LnNsaWRlcl9ib3gub2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbCA9IHRoYXQuc2xpZGVyX2JveC5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZXRQb3NpdGlvbihuZXdfdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/moLnmja7nm7jlhbPlgLzorr7nva4gc2xpZGVyIOagt+W8j1xyXG4gICAgICAgIHRoaXMuX3NldFBvc2l0aW9uID0gZnVuY3Rpb24gKHZhbCwgbm9DYWxsYmFjaykge1xyXG4gICAgICAgICAgICB2YXIgcGVyY2VudFxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc192ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgcGVyY2VudCA9IHBhcnNlRmxvYXQodmFsKSAvIHRoaXMuc2xpZGVyX2JveC5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBwYXJzZUZsb2F0KHZhbCkgLyB0aGlzLnNsaWRlcl9ib3gub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0RGF0YVxyXG4gICAgICAgICAgICB2YXIgY2xvc2VzdF9pbmRleCA9IE1hdGguZmxvb3IodGhpcy5zdGVwX3NlcGFyYXRlcy5sZW5ndGggKiBwZXJjZW50KVxyXG4gICAgICAgICAgICBpZiAoY2xvc2VzdF9pbmRleCA+PSB0aGlzLnN0ZXBfc2VwYXJhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VzdF9pbmRleCA9IHRoaXMuc3RlcF9zZXBhcmF0ZXMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdERhdGEgPSB0aGlzLnN0ZXBfc2VwYXJhdGVzW2Nsb3Nlc3RfaW5kZXhdXHJcbiAgICAgICAgICAgIHBlcmNlbnQgPSB0aGlzLnN0ZXBfcGVyY2VudHNbY2xvc2VzdF9pbmRleF1cclxuICAgICAgICAgICAgdmFyIHBlcmNlbnRDc3MgPSBwZXJjZW50ICogMTAwICsgJyUnXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzX3ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0LnN0eWxlLmhlaWdodCA9IHBlcmNlbnRDc3NcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5zdHlsZS5ib3R0b20gPSBwZXJjZW50Q3NzXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0LnN0eWxlLndpZHRoID0gcGVyY2VudENzc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnN0eWxlLmxlZnQgPSBwZXJjZW50Q3NzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zbGlkZXJfYm94LmRhdGFzZXQudmFsdWUgPSByZXN1bHREYXRhXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc19pbml0aWFsaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmICFub0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jYWxsYmFjayhyZXN1bHREYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+iuvue9ruWIneWni+m7mOiupOWAvFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRfZGF0YSA9IHBhcnNlRmxvYXQodGhpcy5vcHRpb25zLmRlZmF1bHRfZGF0YSlcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRfZGF0YSB8fCBkZWZhdWx0X2RhdGEgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZXJEYXRhKGRlZmF1bHRfZGF0YSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVyRGF0YSh0aGlzLm1pbl9kYXRhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNfaW5pdGlhbGl6ZSA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/nlKjmiLflhazlvIDnmoTmlrnms5XvvIzorr7nva4gc2xpZGVyIOWAvFxyXG4gICAgc2V0U2xpZGVyRGF0YShkYXRhLCBub0NhbGxiYWNrID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoZGF0YSA8IHRoaXMubWluX2RhdGEpIHtcclxuICAgICAgICAgICAgZGF0YSA9IHRoaXMubWluX2RhdGFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGEgPiB0aGlzLm1heF9kYXRhKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1heF9kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwZXJjZW50XHJcbiAgICAgICAgdmFyIG1pbl9kaWZmZXIgPSBOdW1iZXIuTUFYX1ZBTFVFXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0ZXBfc2VwYXJhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjcnRfZGlmZmVyID0gTWF0aC5hYnMoZGF0YSAtIHRoaXMuc3RlcF9zZXBhcmF0ZXNbaV0pXHJcbiAgICAgICAgICAgIGlmIChjcnRfZGlmZmVyIDwgbWluX2RpZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbWluX2RpZmZlciA9IGNydF9kaWZmZXJcclxuICAgICAgICAgICAgICAgIHBlcmNlbnQgPSB0aGlzLnN0ZXBfcGVyY2VudHNbaV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3J0X2RpZmZlciA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtb3ZlX3ZhbFxyXG4gICAgICAgIGlmICh0aGlzLmlzX3ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgIG1vdmVfdmFsID0gcGFyc2VGbG9hdCh0aGlzLnNsaWRlcl9ib3gub2Zmc2V0SGVpZ2h0ICogcGVyY2VudClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtb3ZlX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5zbGlkZXJfYm94Lm9mZnNldFdpZHRoICogcGVyY2VudClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2V0UG9zaXRpb24obW92ZV92YWwsIG5vQ2FsbGJhY2spXHJcbiAgICB9XHJcbiAgICAvL+eUqOaIt+WFrOW8gOeahOaWueazle+8jOiuvue9ruaYr+WQpuemgeeUqFxyXG4gICAgc2V0RGlzYWJsZWQoaXNfZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLmlzX2Rpc2FibGVkID0gaXNfZGlzYWJsZWRcclxuICAgICAgICBpZiAoIXRoaXMuc2xpZGVyX2JveCB8fCAhdGhpcy5zbGlkZXJfYm94LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc19kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB2YXIgYXR0cl9kaXNhYmxlZCA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyX2JveC5hdHRyaWJ1dGVzLnNldE5hbWVkSXRlbShhdHRyX2Rpc2FibGVkKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyX2JveC5hdHRyaWJ1dGVzLnJlbW92ZU5hbWVkSXRlbShcImRpc2FibGVkXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjeV9zbGlkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Element/cy_html_slider.js\n"); /***/ }), /***/ "./src/Obj/Element/cy_html_tabs.js": /*!*****************************************!*\ !*** ./src/Obj/Element/cy_html_tabs.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar cy_tabs = /*#__PURE__*/function () {\n function cy_tabs(boxElm, clickTabCallBack, sdk) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, cy_tabs);\n var elm;\n if (typeof boxElm === 'string') {\n elm = document.getElementById(boxElm);\n } else {\n elm = boxElm;\n }\n // let elm = document.getElementById(id);\n var pane = elm.getElementsByTagName('DIV-cy-tab-pane');\n var tabTop = \"
        \";\n var tabContent = \"
        \";\n var tabindex = 0;\n for (var i = 0; i < pane.length; i++) {\n var flag = false;\n if (sdk && sdk.tabHide && Array.isArray(sdk.tabHide)) {\n for (var m = 0; m < sdk.tabHide.length; m++) {\n if (pane[i].getAttribute('label') === sdk.tabHide[m]) {\n flag = true;\n break;\n }\n }\n }\n if (flag) {\n continue;\n }\n var style = 'display: none;';\n var active = '';\n if (tabindex == 0) {\n style = '';\n active = 'is-active';\n }\n tabTop = tabTop + \"\\n
        \\n
        \" + pane[i].getAttribute('label') + \"
        \\n
        \\n \";\n tabContent = tabContent + \"
        \" + pane[i].innerHTML + \"
        \";\n tabindex++;\n }\n tabTop = tabTop + \"
        \";\n tabContent = tabContent + \"
        \";\n var BoxElm = document.createElement('div');\n if (typeof boxElm === 'string') {\n BoxElm.setAttribute('id', boxElm);\n }\n BoxElm.setAttribute('class', 'DIV-cy-tabs');\n BoxElm.innerHTML = tabTop + tabContent;\n elm.parentNode.insertBefore(BoxElm, elm);\n elm.parentNode.removeChild(elm);\n\n // 点击事件\n var tabs = BoxElm.getElementsByClassName('DIV-cy-tab-pane-title-p');\n for (var _i = 0; _i < tabs.length; _i++) {\n tabs[_i].addEventListener('click', function (e) {\n var tabindex = e.target.getAttribute('tabindex');\n var contentElm = BoxElm.getElementsByClassName('DIV-cy-tab-content-pane');\n clickTabCallBack && clickTabCallBack(tabindex);\n for (var _i2 = 0; _i2 < contentElm.length; _i2++) {\n if (_i2 === parseInt(tabindex)) {\n contentElm[_i2].style.display = '';\n tabs[_i2].className = 'DIV-cy-tab-pane-title-p is-active';\n } else {\n contentElm[_i2].style.display = 'none';\n tabs[_i2].className = 'DIV-cy-tab-pane-title-p';\n }\n }\n contentElm[parseInt(tabindex)].style.display = '';\n });\n }\n this.clickTabCallBack = clickTabCallBack;\n }\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(cy_tabs, [{\n key: \"clickTabCallBack\",\n value: function clickTabCallBack() {\n if (this.clickTabCallBack) {\n this.clickTabCallBack();\n }\n }\n }]);\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (cy_tabs);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvY3lfaHRtbF90YWJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL09iai9FbGVtZW50L2N5X2h0bWxfdGFicy5qcz80YjM5Il0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIGN5X3RhYnMge1xyXG4gIGNvbnN0cnVjdG9yKGJveEVsbSwgY2xpY2tUYWJDYWxsQmFjaywgc2RrKSB7XHJcbiAgICBsZXQgZWxtXHJcbiAgICBpZih0eXBlb2YgYm94RWxtID09PSAnc3RyaW5nJykge1xyXG4gICAgICBlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChib3hFbG0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGVsbSA9IGJveEVsbVxyXG4gICAgfVxyXG4gICAgLy8gbGV0IGVsbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxldCBwYW5lID0gZWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdESVYtY3ktdGFiLXBhbmUnKVxyXG5cclxuICAgIGxldCB0YWJUb3AgPSBgPGRpdiBjbGFzcz1cIkRJVi1jeS10YWItdG9wXCI+YFxyXG4gICAgbGV0IHRhYkNvbnRlbnQgPSBgPGRpdiBjbGFzcz1cIkRJVi1jeS10YWItY29udGVudFwiPmBcclxuICAgIGxldCB0YWJpbmRleCA9IDBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgIGlmIChzZGsgJiYgc2RrLnRhYkhpZGUgJiYgQXJyYXkuaXNBcnJheShzZGsudGFiSGlkZSkpIHtcclxuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHNkay50YWJIaWRlLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICBpZiAocGFuZVtpXS5nZXRBdHRyaWJ1dGUoJ2xhYmVsJykgPT09IHNkay50YWJIaWRlW21dKSB7XHJcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBsZXQgc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXHJcbiAgICAgIGxldCBhY3RpdmUgPSAnJ1xyXG4gICAgICBpZiAodGFiaW5kZXggPT0gMCkge1xyXG4gICAgICAgIHN0eWxlID0gJydcclxuICAgICAgICBhY3RpdmUgPSAnaXMtYWN0aXZlJ1xyXG4gICAgICB9XHJcbiAgICAgIHRhYlRvcCA9IHRhYlRvcCArIGBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIkRJVi1jeS10YWItcGFuZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIkRJVi1jeS10YWItcGFuZS10aXRsZS1wIGArIGFjdGl2ZSArIGBcIiB0YWJpbmRleD1cImAgKyB0YWJpbmRleCArIGBcIj48c3Bhbj5gICsgcGFuZVtpXS5nZXRBdHRyaWJ1dGUoJ2xhYmVsJykgKyBgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgYFxyXG4gICAgICB0YWJDb250ZW50ID0gdGFiQ29udGVudCArIGA8ZGl2IGNsYXNzPVwiRElWLWN5LXRhYi1jb250ZW50LXBhbmUgJHtwYW5lW2ldLmNsYXNzTmFtZX1cIiBzdHlsZT1cImAgKyBzdHlsZSArIGBcIj5gICsgcGFuZVtpXS5pbm5lckhUTUwgKyBgPC9kaXY+YFxyXG4gICAgICB0YWJpbmRleCsrXHJcbiAgICB9XHJcbiAgICB0YWJUb3AgPSB0YWJUb3AgKyBgPC9kaXY+YFxyXG4gICAgdGFiQ29udGVudCA9IHRhYkNvbnRlbnQgKyBgPC9kaXY+YFxyXG5cclxuICAgIGxldCBCb3hFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGlmKHR5cGVvZiBib3hFbG0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIEJveEVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgYm94RWxtKVxyXG4gICAgfVxyXG4gICAgQm94RWxtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnRElWLWN5LXRhYnMnKVxyXG4gICAgQm94RWxtLmlubmVySFRNTCA9IHRhYlRvcCArIHRhYkNvbnRlbnRcclxuICAgIGVsbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCb3hFbG0sIGVsbSk7XHJcbiAgICBlbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbG0pO1xyXG5cclxuICAgIC8vIOeCueWHu+S6i+S7tlxyXG4gICAgbGV0IHRhYnMgPSBCb3hFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnRElWLWN5LXRhYi1wYW5lLXRpdGxlLXAnKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRhYnNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCB0YWJpbmRleCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKVxyXG4gICAgICAgIGxldCBjb250ZW50RWxtID0gQm94RWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ0RJVi1jeS10YWItY29udGVudC1wYW5lJylcclxuICAgICAgICBjbGlja1RhYkNhbGxCYWNrICYmIGNsaWNrVGFiQ2FsbEJhY2sodGFiaW5kZXgpXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50RWxtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gcGFyc2VJbnQodGFiaW5kZXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRFbG1baV0uc3R5bGUuZGlzcGxheSA9ICcnXHJcbiAgICAgICAgICAgIHRhYnNbaV0uY2xhc3NOYW1lID0gJ0RJVi1jeS10YWItcGFuZS10aXRsZS1wIGlzLWFjdGl2ZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZW50RWxtW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgICAgdGFic1tpXS5jbGFzc05hbWUgPSAnRElWLWN5LXRhYi1wYW5lLXRpdGxlLXAnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbnRFbG1bcGFyc2VJbnQodGFiaW5kZXgpXS5zdHlsZS5kaXNwbGF5ID0gJydcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrVGFiQ2FsbEJhY2sgPSBjbGlja1RhYkNhbGxCYWNrXHJcbiAgfVxyXG5cclxuICBjbGlja1RhYkNhbGxCYWNrKCkge1xyXG4gICAgaWYgKHRoaXMuY2xpY2tUYWJDYWxsQmFjaykge1xyXG4gICAgICB0aGlzLmNsaWNrVGFiQ2FsbEJhY2soKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3lfdGFic1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Element/cy_html_tabs.js\n"); /***/ }), /***/ "./src/Obj/Element/datalist.js": /*!*************************************!*\ !*** ./src/Obj/Element/datalist.js ***! \*************************************/ /*! exports provided: legp */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"legp\", function() { return _legp; });\nvar _legp = function legp(parentElement, ele) {\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var targetValue = null;\n return {\n that: Array.prototype.slice.call(parentElement.querySelectorAll(ele), 0),\n stopPropagation: function stopPropagation(e) {\n e = e || window.event;\n if (e.stopPropagation) {\n //W3C阻止冒泡方法\n e.stopPropagation();\n } else {\n e.cancelBubble = true; //IE阻止冒泡方法\n }\n },\n hide: function hide() {\n _legp(parentElement, ele).that.forEach(function (item) {\n item.style.cssText += \"display:none;\";\n });\n },\n show: function show(num) {\n if (num !== undefined) {\n _legp(parentElement, ele).that[num].style.cssText += \"display:block;\";\n } else {\n _legp(parentElement, ele).that.forEach(function (item) {\n item.style.cssText += \"display:block;\";\n });\n }\n },\n legp_searchList: function legp_searchList(name) {\n var arr = [];\n _legp(parentElement, \"input[name=\" + name + \"]\").that.forEach(function (item) {\n arr.push(item.value);\n });\n return arr;\n },\n legp_search: function legp_search(tagData) {\n var search = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // var domId = legp(parentElement, ele).that[0];\n var domId = _legp(parentElement, ele).that[index];\n if (!domId) {\n return;\n }\n var html = \"
        \\n \".concat(search ? \"\" : \"\"), \"\\n
        \\n
        \\n
        \");\n domId.innerHTML = html;\n // domId.appendChild(dom);\n //获取当前广告\n function myClick() {\n _legp(parentElement, \".cy_datalist dl dd\").that.forEach(function (item) {\n item.onclick = function (e) {\n if (!this || !this.attributes) {\n return;\n }\n var value = this.attributes.value.value;\n targetValue = value;\n e.currentTarget.parentNode.previousElementSibling.value = value;\n // 为了触发绑定的事件处理器,我们可以手动创建一个事件并触发它\n var event = new Event('input', {\n bubbles: true\n });\n e.currentTarget.parentNode.previousElementSibling.dispatchEvent(event);\n // if (id != '') {\n // legp(\".AD\").that[0].innerHTML += \"\" + this.innerHTML + \"x\";\n // legp(\".AD\").that[0].parentNode.style.cssText += \"display:block;\";\n // for (var i = 0; i < tagData.length; i++) {\n // if (tagData[i].id == id) {\n // tagData.splice(i, 1);\n // i = tagData.length;\n // }\n // }\n // removeAdvertising();\n // }\n // legp(\".cy_datalist dl\").hide();\n // legp(\".cy_datalist input\").that[0].value = '';\n // e.stopPropagation();\n };\n });\n }\n\n //筛选\n _legp(parentElement, \".cy_datalist input\").that[index].oninput = function (e) {\n var val = this.value; //获取input值\n _legp(parentElement, \".cy_datalist dl\").hide();\n if (tagData.length > 0) {\n _legp(parentElement, \".cy_datalist dl\").show();\n var sear_1 = new RegExp(val);\n var judge_1 = false;\n _legp(parentElement, \".cy_datalist dl\").that[index].innerHTML = \"\";\n tagData.forEach(function (item) {\n if (sear_1.test(item.name)) {\n judge_1 = true;\n _legp(parentElement, \".cy_datalist dl\").that[index].innerHTML += \"
        \" + item.name + \"
        \";\n }\n });\n if (!judge_1) {\n _legp(parentElement, \".cy_datalist dl\").that[index].innerHTML = \"
        \\u6682\\u65E0\\u6570\\u636E
        \";\n }\n myClick();\n }\n };\n //显示没被选择的\n _legp(parentElement, \".cy_datalist input\").that[index].onclick = function (e) {\n _legp(parentElement, \".cy_datalist dl\").hide();\n var num = e.srcElement.classList[1] * 1;\n num = num || 0;\n if (_legp(parentElement, \".cy_datalist dl\").that[num].style.display === 'none') {\n if (tagData.length == 0) {\n this.innerHTML = \"暂无数据\";\n } else {\n _legp(parentElement, \".cy_datalist dl\").show(num);\n }\n _legp(parentElement, \".cy_datalist dl\").that[num].innerHTML = \"\";\n tagData.forEach(function (item) {\n _legp(parentElement, \".cy_datalist dl\").that[num].innerHTML += \"
        \" + item.name + \"
        \";\n });\n myClick();\n }\n e.stopPropagation();\n };\n // //封装\n // function clickoutSide(nameClass, callback) {\n // \t// 全局注册点击事件\n // \tdocument.onclick = function (e) {\n // \t\t//若点击元素为目标元素则返回\n // \t\tif (e.target.className === nameClass) return\n // \t\t//否则执行回调函数\n // \t\tcallback()\n // \t}\n // }\n //隐藏\n document.addEventListener('click', function () {\n _legp(parentElement, \".cy_datalist dl\").hide();\n // legp(parentElement, \".cy_datalist input\").that[0].value = \"\";\n });\n },\n legp_searchActive: function legp_searchActive(value) {\n targetValue = value;\n }\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvZGF0YWxpc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0VsZW1lbnQvZGF0YWxpc3QuanM/YmRhYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbGVncCA9IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50LCBlbGUsIGluZGV4ID0gMCkge1xyXG4gIGxldCB0YXJnZXRWYWx1ZSA9IG51bGxcclxuICByZXR1cm4gKHtcclxuICAgIHRoYXQ6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGUpLCAwKSxcclxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHsgLy9XM0PpmLvmraLlhpLms6Hmlrnms5VcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsgLy9JRemYu+atouWGkuazoeaWueazlVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaGlkZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIGVsZSkudGhhdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5zdHlsZS5jc3NUZXh0ICs9IFwiZGlzcGxheTpub25lO1wiO1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBzaG93OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgICAgIGlmIChudW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxlZ3AocGFyZW50RWxlbWVudCwgZWxlKS50aGF0W251bV0uc3R5bGUuY3NzVGV4dCArPSBcImRpc3BsYXk6YmxvY2s7XCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVncChwYXJlbnRFbGVtZW50LCBlbGUpLnRoYXQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgaXRlbS5zdHlsZS5jc3NUZXh0ICs9IFwiZGlzcGxheTpibG9jaztcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGxlZ3Bfc2VhcmNoTGlzdDogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgbGV0IGFyciA9IFtdO1xyXG4gICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiaW5wdXRbbmFtZT1cIiArIG5hbWUgKyBcIl1cIikudGhhdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKGl0ZW0udmFsdWUpXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYXJyO1xyXG4gICAgfSxcclxuICAgIGxlZ3Bfc2VhcmNoOiBmdW5jdGlvbiAodGFnRGF0YSwgc2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgLy8gdmFyIGRvbUlkID0gbGVncChwYXJlbnRFbGVtZW50LCBlbGUpLnRoYXRbMF07XHJcbiAgICAgIHZhciBkb21JZCA9IGxlZ3AocGFyZW50RWxlbWVudCwgZWxlKS50aGF0W2luZGV4XTtcclxuICAgICAgaWYgKCFkb21JZCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHZhciBodG1sID0gYDxkaXYgY2xhc3M9XCJjeV9kYXRhbGlzdFwiPjxpIGNsYXNzPVwieWotY3VzdG9tLWljb24tYXJyb3ctZG93blwiPjwvaT5cXG4gICR7c2VhcmNoID8gJzxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiXFx1OEY5M1xcdTUxNjVcXHU2MjE2XFx1OTAwOVxcdTYyRTlcIiBhdXRvY29tcGxldGU9XCJvZmZcIj4nIDogYDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZGF0YWxpc3QgJHtpbmRleH1cIiByZWFkb25seT1cInJlYWRvbmx5XCIgcGxhY2Vob2xkZXI9XCJcXHU4YmY3XFx1OTAwOVxcdTYyZTlcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5gfVxcbiAgICAgICAgICAgICAgICAgICAgPGRsIHN0eWxlPVwiZGlzcGxheTogbm9uZTtwb3NpdGlvbjogYWJzb2x1dGU7YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO2NvbG9yOiByZ2JhKHZhcigtLWNvbG9yLXNkay1iYXNlLXJnYiksIDEpO2JvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0tY29sb3Itc2RrLWJhc2UtcmdiKSwgMC4yKTtib3JkZXItcmFkaXVzOiAzcHg7bWFyZ2luOiAycHggMHB4O21heC1oZWlnaHQ6IDMwMHB4O292ZXJmbG93LXg6IGhpZGRlbjt3aGl0ZS1zcGFjZTogbm93cmFwOyBmb250LXNpemU6IDEycHg7ei1pbmRleDogODtcIj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGw+XFxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XHJcbiAgICAgIGRvbUlkLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgIC8vIGRvbUlkLmFwcGVuZENoaWxkKGRvbSk7XHJcbiAgICAgIC8v6I635Y+W5b2T5YmN5bm/5ZGKXHJcbiAgICAgIGZ1bmN0aW9uIG15Q2xpY2soKSB7XHJcbiAgICAgICAgbGVncChwYXJlbnRFbGVtZW50LCBcIi5jeV9kYXRhbGlzdCBkbCBkZFwiKS50aGF0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgIGl0ZW0ub25jbGljayA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5hdHRyaWJ1dGVzLnZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcudmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAvLyDkuLrkuobop6blj5Hnu5HlrprnmoTkuovku7blpITnkIblmajvvIzmiJHku6zlj6/ku6XmiYvliqjliJvlu7rkuIDkuKrkuovku7blubbop6blj5HlroNcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50Tm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgICAgICAvLyBpZiAoaWQgIT0gJycpIHtcclxuICAgICAgICAgICAgLy8gICAgIGxlZ3AoXCIuQURcIikudGhhdFswXS5pbm5lckhUTUwgKz0gXCI8YSBocmVmPVxcXCJqYXZhc2NyaXB0OjtcXFwiIGNsYXNzPVxcXCJsYWJlbFxcXCI+PHNwYW4+XCIgKyB0aGlzLmlubmVySFRNTCArIFwiPC9zcGFuPjxpbnB1dCB0eXBlPVxcXCJoaWRkZW5cXFwiIG5hbWU9XFxcIlwiICsgbmFtZSArIFwiXFxcIiBpZD1cXFwiXCIgKyBpZCArIFwiXFxcIiB2YWx1ZT1cXFwiXCIgKyBpZCArIFwiXFxcIi8+PHNwYW4gY2xhc3M9XFxcImNsb3NlXFxcIj54PC9zcGFuPjwvYT5cIjtcclxuICAgICAgICAgICAgLy8gICAgIGxlZ3AoXCIuQURcIikudGhhdFswXS5wYXJlbnROb2RlLnN0eWxlLmNzc1RleHQgKz0gXCJkaXNwbGF5OmJsb2NrO1wiO1xyXG4gICAgICAgICAgICAvLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKHRhZ0RhdGFbaV0uaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGFnRGF0YS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGkgPSB0YWdEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICByZW1vdmVBZHZlcnRpc2luZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGxlZ3AoXCIuY3lfZGF0YWxpc3QgZGxcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICAvLyBsZWdwKFwiLmN5X2RhdGFsaXN0IGlucHV0XCIpLnRoYXRbMF0udmFsdWUgPSAnJztcclxuICAgICAgICAgICAgLy8gZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8v562b6YCJXHJcbiAgICAgIGxlZ3AocGFyZW50RWxlbWVudCwgXCIuY3lfZGF0YWxpc3QgaW5wdXRcIikudGhhdFtpbmRleF0ub25pbnB1dCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7IC8v6I635Y+WaW5wdXTlgLxcclxuICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLmhpZGUoKTtcclxuICAgICAgICBpZiAodGFnRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLnNob3coKTtcclxuICAgICAgICAgIHZhciBzZWFyXzEgPSBuZXcgUmVnRXhwKHZhbCk7XHJcbiAgICAgICAgICB2YXIganVkZ2VfMSA9IGZhbHNlO1xyXG4gICAgICAgICAgbGVncChwYXJlbnRFbGVtZW50LCBcIi5jeV9kYXRhbGlzdCBkbFwiKS50aGF0W2luZGV4XS5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgdGFnRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWFyXzEudGVzdChpdGVtLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAganVkZ2VfMSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgbGVncChwYXJlbnRFbGVtZW50LCBcIi5jeV9kYXRhbGlzdCBkbFwiKS50aGF0W2luZGV4XS5pbm5lckhUTUwgKz0gXCI8ZGQgY2xhc3M9XFxcIlwiICsgKCh0YXJnZXRWYWx1ZSA9PT0gaXRlbS52YWx1ZSkgPyAnYWN0aXZlJyA6ICcnKSArIFwiXFxcIiBzdHlsZT1cXFwibWFyZ2luOiAwOyBwYWRkaW5nOiA1cHggNXB4OyBjb2xvcjogI2ZmZjtjdXJzb3I6IHBvaW50ZXI7XFxcIiB2YWx1ZT1cXFwiXCIgKyBpdGVtLnZhbHVlICsgXCJcXFwiPlwiICsgaXRlbS5uYW1lICsgXCI8L2RkPlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghanVkZ2VfMSkge1xyXG4gICAgICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLnRoYXRbaW5kZXhdLmlubmVySFRNTCA9IFwiPGRkIHN0eWxlPVxcXCJwYWRkaW5nOiAxMHB4IDIwcHg7IGNvbG9yOiAjZmZmO1xcXCI+XFx1NjY4MlxcdTY1RTBcXHU2NTcwXFx1NjM2RTwvZGQ+XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBteUNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICAvL+aYvuekuuayoeiiq+mAieaLqeeahFxyXG4gICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGlucHV0XCIpLnRoYXRbaW5kZXhdLm9uY2xpY2sgPSBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLmhpZGUoKTtcclxuICAgICAgICBsZXQgbnVtID0gZS5zcmNFbGVtZW50LmNsYXNzTGlzdFsxXSAqIDFcclxuICAgICAgICBudW0gPSBudW0gfHwgMFxyXG4gICAgICAgIGlmIChsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLnRoYXRbbnVtXS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcclxuICAgICAgICAgIGlmICh0YWdEYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gXCLmmoLml6DmlbDmja5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLnNob3cobnVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxlZ3AocGFyZW50RWxlbWVudCwgXCIuY3lfZGF0YWxpc3QgZGxcIikudGhhdFtudW1dLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICB0YWdEYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgbGVncChwYXJlbnRFbGVtZW50LCBcIi5jeV9kYXRhbGlzdCBkbFwiKS50aGF0W251bV0uaW5uZXJIVE1MICs9IFwiPGRkIGNsYXNzPVxcXCJcIiArICgodGFyZ2V0VmFsdWUgPT09IGl0ZW0udmFsdWUpID8gJ2FjdGl2ZScgOiAnJykgKyBcIlxcXCIgc3R5bGU9XFxcIm1hcmdpbjogMDsgcGFkZGluZzogNXB4IDVweDsgY29sb3I6ICNmZmY7Y3Vyc29yOiBwb2ludGVyO1xcXCIgdmFsdWU9XFxcIlwiICsgaXRlbS52YWx1ZSArIFwiXFxcIj5cIiArIGl0ZW0ubmFtZSArIFwiPC9kZD5cIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgbXlDbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9O1xyXG4gICAgICAvLyAvL+WwgeijhVxyXG4gICAgICAvLyBmdW5jdGlvbiBjbGlja291dFNpZGUobmFtZUNsYXNzLCBjYWxsYmFjaykge1xyXG4gICAgICAvLyBcdC8vIOWFqOWxgOazqOWGjOeCueWHu+S6i+S7tlxyXG4gICAgICAvLyBcdGRvY3VtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAvLyBcdFx0Ly/oi6Xngrnlh7vlhYPntKDkuLrnm67moIflhYPntKDliJnov5Tlm55cclxuICAgICAgLy8gXHRcdGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT09IG5hbWVDbGFzcykgcmV0dXJuXHJcbiAgICAgIC8vIFx0XHQvL+WQpuWImeaJp+ihjOWbnuiwg+WHveaVsFxyXG4gICAgICAvLyBcdFx0Y2FsbGJhY2soKVxyXG4gICAgICAvLyBcdH1cclxuICAgICAgLy8gfVxyXG4gICAgICAvL+makOiXj1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGRsXCIpLmhpZGUoKTtcclxuICAgICAgICAvLyBsZWdwKHBhcmVudEVsZW1lbnQsIFwiLmN5X2RhdGFsaXN0IGlucHV0XCIpLnRoYXRbMF0udmFsdWUgPSBcIlwiO1xyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGxlZ3Bfc2VhcmNoQWN0aXZlOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgdGFyZ2V0VmFsdWUgPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IHsgbGVncCB9XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Obj/Element/datalist.js\n"); /***/ }), /***/ "./src/Obj/Element/elm_html.js": /*!*************************************!*\ !*** ./src/Obj/Element/elm_html.js ***! \*************************************/ /*! exports provided: attributeElm, labelStyleElm1, labelStyleElm2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"attributeElm\", function() { return attributeElm; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"labelStyleElm1\", function() { return labelStyleElm1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"labelStyleElm2\", function() { return labelStyleElm2; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../on */ \"./src/on/index.js\");\n/* harmony import */ var _Pagination__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Pagination */ \"./src/Obj/Element/Pagination.js\");\n/* harmony import */ var _datalist__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./datalist */ \"./src/Obj/Element/datalist.js\");\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\nfunction attributeElm(that) {\n var host = Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getHost\"])();\n that.cameraSelect = cameraSelect;\n that.ISCSelect = ISCSelect;\n that.goodsSelect = goodsSelect;\n that.goodsFilter = goodsFilter;\n that.cameraName = '';\n that.ISCName = '';\n var type = {\n '1': '海康',\n '2': '大华'\n };\n var cameraPageSize = 5;\n var iscPageSize = 5;\n var goodsPageSize = 999999;\n function cameraSelect(page) {\n if (!that.attributeSelect) {\n return;\n } else {\n var flag = false;\n for (var i = 0; i < that.attributeSelect.length; i++) {\n if (that.attributeSelect[i].key === 'camera') {\n flag = true;\n break;\n }\n }\n if (!flag) {\n return;\n }\n }\n var firstPage = page;\n page = !page || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(page) === 'object' ? 1 : page;\n var attributeCameraElm;\n if (that._DialogObject && that._DialogObject._element && that._DialogObject._element.content) {\n var paginationElm = that._DialogObject._element.content.getElementsByClassName('pagination')[0];\n attributeCameraElm = that._DialogObject._element.content.getElementsByClassName('attribute-content-camera')[0];\n if (!paginationElm) {\n return;\n }\n if (!attributeCameraElm) {\n return;\n }\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(paginationElm, 1, 10, 1);\n } else {\n return;\n }\n var url = \"\";\n var params = {\n cameraName: that.cameraName,\n page: page,\n pageSize: cameraPageSize\n };\n var queryString = new URLSearchParams(params).toString();\n if (host.endsWith(\"yjearth4.0\")) url = \"\".concat(host, \"/api/v1/cameraData/list?\").concat(queryString);else url = \"\".concat(host, \"/yjearth4.0/api/v1/cameraData/list?\").concat(queryString);\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!that._DialogObject || !that._DialogObject._element || !that._DialogObject._element.content || !attributeCameraElm) {\n return;\n }\n var _paginationElm = attributeCameraElm.getElementsByClassName('pagination')[0];\n var table = that._DialogObject._element.content.getElementsByClassName('camera-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (data.rows) {\n data.data = {\n list: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(data.rows),\n total: data.total\n };\n }\n if (data.data) {\n if (data.data.list && data.data.list.length > 0) {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm, data.data.total, cameraPageSize, 1, function (pageIndex) {\n that.cameraSelect(pageIndex);\n });\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'inline-flex';\n var checkboxArray = [];\n var _loop = function _loop(_i) {\n var tr = \"\\n
        \\n
        \\n \\n \\u7ED1\\u5B9A\\n
        \\n
        \").concat(data.data.list[_i].cameraName, \"
        \\n
        \").concat(type[data.data.list[_i].type], \"
        \\n
        \").concat(data.data.list[_i].ip, \"
        \\n
        \").concat(data.data.list[_i].port, \"
        \\n
        \").concat(data.data.list[_i].userName, \"
        \\n
        \").concat(data.data.list[_i].passWord || data.data.list[_i].password, \"
        \\n
        \");\n var trElm = document.createRange().createContextualFragment(tr);\n var checkbox = trElm.querySelector('input[type=\"checkbox\"]');\n checkboxArray.push(checkbox);\n checkbox.addEventListener('change', function () {\n if (checkbox.checked) {\n // 只选中一个\n that.attributeCamera = [];\n that.attributeCamera.push(data.data.list[_i]);\n for (var j = 0; j < checkboxArray.length; j++) {\n if (checkboxArray[j] !== checkbox) {\n checkboxArray[j].checked = false;\n }\n }\n } else {\n var newArray = that.attributeCamera.filter(function (item) {\n if ('deviceId' in data.data.list[_i]) {\n return item.deviceId !== data.data.list[_i].deviceId;\n }\n });\n that.attributeCamera = newArray;\n }\n });\n tableContent.appendChild(trElm);\n for (var m = 0; m < that.attributeCamera.length; m++) {\n if ('deviceId' in data.data.list[_i] ? that.attributeCamera[m].deviceId === data.data.list[_i].deviceId : false) {\n checkbox.checked = true;\n break;\n }\n }\n };\n for (var _i = 0; _i < data.data.list.length; _i++) {\n _loop(_i);\n }\n }\n if (data.data && data.data.total) {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm, data.data.total, cameraPageSize, page, function (pageIndex) {\n that.cameraSelect(pageIndex);\n });\n }\n } else {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm, 1, cameraPageSize, 1);\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n\n // 查询全部\n if (!firstPage) {\n var params2 = {\n page: 1,\n pageSize: 99999999\n };\n var queryString2 = new URLSearchParams(params2).toString();\n if (host.endsWith(\"yjearth4.0\")) url = \"\".concat(host, \"/api/v1/cameraData/list?\").concat(queryString2);else url = \"\".concat(host, \"/yjearth4.0/api/v1/cameraData/list?\").concat(queryString2);\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!that._DialogObject || !that._DialogObject._element || !that._DialogObject._element.content || !attributeCameraElm) {\n return;\n }\n if (data.rows) {\n data.data = {\n list: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(data.rows),\n total: data.total\n };\n }\n if (data.data) {\n if (data.data.list) {\n for (var _i2 = that.attributeCamera.length - 1; _i2 >= 0; _i2--) {\n var _flag = false;\n for (var m = 0; m < data.data.list.length; m++) {\n if (that.attributeCamera[_i2].deviceId === data.data.list[m].deviceId) {\n _flag = true;\n break;\n }\n }\n if (!_flag) {\n that.attributeCamera.splice(_i2, 1);\n }\n }\n } else {\n that.attributeCamera = [];\n }\n } else {\n that.attributeCamera = [];\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n }\n }\n function ISCSelect(page) {\n if (!that.attributeSelect) {\n return;\n } else {\n var flag = false;\n for (var i = 0; i < that.attributeSelect.length; i++) {\n if (that.attributeSelect[i].key === 'isc') {\n flag = true;\n break;\n }\n }\n if (!flag) {\n return;\n }\n }\n page = !page || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(page) === 'object' ? 1 : page;\n var attributeCameraElm;\n if (that._DialogObject && that._DialogObject._element && that._DialogObject._element.content) {\n var paginationElm = that._DialogObject._element.content.getElementsByClassName('pagination')[0];\n attributeCameraElm = that._DialogObject._element.content.getElementsByClassName('attribute-content-isc')[0];\n if (!paginationElm) {\n return;\n }\n if (!attributeCameraElm) {\n return;\n }\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(paginationElm, 1, 10, 1);\n } else {\n return;\n }\n var url = \"\";\n var params = {\n // name: that.iscName,\n page: page,\n page_size: iscPageSize\n };\n var queryString = new URLSearchParams(params).toString();\n if (host.endsWith(\"yjearth4.0\")) url = \"\".concat(host, \"/api/v1/isc/list?\").concat(queryString);else url = \"\".concat(host, \"/yjearth4.0/api/v1/isc/list?\").concat(queryString);\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!that._DialogObject || !that._DialogObject._element || !that._DialogObject._element.content || !attributeCameraElm) {\n return;\n }\n var _paginationElm2 = attributeCameraElm.getElementsByClassName('pagination')[0];\n var table = that._DialogObject._element.content.getElementsByClassName('isc-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (data.rows) {\n data.data = {\n list: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(data.rows),\n total: data.total\n };\n }\n if (data.data) {\n if (data.data.list && data.data.list.length > 0) {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm2, data.data.total, iscPageSize, 1, function (pageIndex) {\n that.ISCSelect(pageIndex);\n });\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'flex';\n var _loop2 = function _loop2(_i3) {\n var tr = \"\\n
        \\n
        \\n \\n \\u7ED1\\u5B9A\\n
        \\n
        \").concat(data.data.list[_i3].name, \"
        \\n
        \").concat(data.data.list[_i3].status ? '在线' : '离线', \"
        \\n
        \");\n var trElm = document.createRange().createContextualFragment(tr);\n var checkbox = trElm.querySelector('input[type=\"checkbox\"]');\n checkbox.addEventListener('change', function () {\n if (checkbox.checked) {\n that.attributeISC.push(data.data.list[_i3]);\n } else {\n var newArray = that.attributeISC.filter(function (item) {\n if ('ID' in data.data.list[_i3]) {\n return item.ID !== data.data.list[_i3].ID;\n } else {\n return item.id !== data.data.list[_i3].id;\n }\n });\n that.attributeISC = newArray;\n }\n });\n tableContent.appendChild(trElm);\n for (var m = 0; m < that.attributeISC.length; m++) {\n if ('ID' in data.data.list[_i3] ? that.attributeISC[m].ID === data.data.list[_i3].ID : that.attributeISC[m].id === data.data.list[_i3].id) {\n checkbox.checked = true;\n break;\n }\n }\n };\n for (var _i3 = 0; _i3 < data.data.list.length; _i3++) {\n _loop2(_i3);\n }\n }\n if (data.data && data.data.total) {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm2, data.data.total, iscPageSize, page, function (pageIndex) {\n that.ISCSelect(pageIndex);\n });\n }\n } else {\n Object(_Pagination__WEBPACK_IMPORTED_MODULE_4__[\"generatePagination\"])(_paginationElm2, 1, iscPageSize, 1);\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n }\n function goodsSelect(page) {\n if (!that.attributeSelect) {\n return;\n } else {\n var flag = false;\n for (var i = 0; i < that.attributeSelect.length; i++) {\n if (that.attributeSelect[i].key === 'goods') {\n flag = true;\n break;\n }\n }\n if (!flag) {\n return;\n }\n }\n page = !page || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(page) === 'object' ? 1 : page;\n var attributeElm;\n if (that._DialogObject && that._DialogObject._element && that._DialogObject._element.content) {\n var paginationElm = that._DialogObject._element.content.getElementsByClassName('pagination')[0];\n attributeElm = that._DialogObject._element.content.getElementsByClassName('attribute-content-goods')[0];\n if (!paginationElm) {\n return;\n }\n if (!attributeElm) {\n return;\n }\n // generatePagination(paginationElm, 1, 10, 1);\n } else {\n return;\n }\n var url = \"\";\n var params = {\n page: page,\n page_size: goodsPageSize\n };\n var queryString = new URLSearchParams(params).toString();\n if (host.endsWith(\"yjearth4.0\")) url = \"\".concat(host, \"/api/v1/goods/list?\").concat(queryString);else url = \"\".concat(host, \"/yjearth4.0/api/v1/goods/list?\").concat(queryString);\n fetch(url, {\n method: 'get',\n headers: {\n 'Content-Type': 'application/json',\n \"token\": Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])(),\n \"Authorization\": \"Bearer \" + Object(_on__WEBPACK_IMPORTED_MODULE_3__[\"getToken\"])()\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (data) {\n if (data.code === 200 || data.code === 0) {\n if (!that._DialogObject || !that._DialogObject._element || !that._DialogObject._element.content || !attributeElm) {\n return;\n }\n var _paginationElm3 = attributeElm.getElementsByClassName('pagination')[0];\n var table = that._DialogObject._element.content.getElementsByClassName('goods-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (data.rows) {\n data.data = {\n list: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(data.rows),\n total: data.total\n };\n }\n if (data.data) {\n if (data.data.list && data.data.list.length > 0) {\n that._allGoodsList = data.data.list;\n // generatePagination(paginationElm, data.data.total, goodsPageSize, 1, (pageIndex) => {\n // that.goodsSelect(pageIndex)\n // });\n for (var _i4 = that.attributeGoods.length - 1; _i4 >= 0; _i4--) {\n var _flag2 = false;\n for (var m = 0; m < data.data.list.length; m++) {\n if ('ID' in data.data.list[m]) {\n if (data.data.list[m].ID === that.attributeGoods[_i4].ID) {\n _flag2 = true;\n break;\n }\n } else if ('id' in data.data.list[m]) {\n if (data.data.list[m].id === that.attributeGoods[_i4].id) {\n _flag2 = true;\n break;\n }\n }\n }\n if (!_flag2) {\n that.attributeGoods.splice(_i4, 1);\n }\n }\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'block';\n tableContent.style.maxHeight = '150px';\n var _loop3 = function _loop3(_i5) {\n var tr = \"\\n
        \\n
        \\n \".concat(_i5 + 1, \"\\n
        \\n
        \").concat(data.data.list[_i5].name, \"
        \\n
        \\n
        \");\n var trElm = document.createRange().createContextualFragment(tr);\n var inputElm = trElm.querySelector('input[type=\"number\"]');\n inputElm.value = 0;\n for (var _m = 0; _m < that.attributeGoods.length; _m++) {\n if ('ID' in data.data.list[_i5]) {\n if (data.data.list[_i5].ID === that.attributeGoods[_m].ID) {\n inputElm.value = that.attributeGoods[_m].cnt;\n that.attributeGoods[_m].name = data.data.list[_i5].name;\n }\n } else if ('id' in data.data.list[_i5]) {\n if (data.data.list[_i5].id === that.attributeGoods[_m].id) {\n inputElm.value = that.attributeGoods[_m].cnt;\n }\n }\n }\n inputElm.addEventListener('blur', function (e) {\n var value = Number(e.target.value);\n inputElm.value = value;\n var flag = false;\n for (var _m2 = that.attributeGoods.length - 1; _m2 >= 0; _m2--) {\n if ('ID' in data.data.list[_i5]) {\n if (data.data.list[_i5].ID === that.attributeGoods[_m2].ID) {\n flag = true;\n if (value) {\n that.attributeGoods[_m2].cnt = value;\n } else {\n that.attributeGoods.splice(_m2, 1);\n }\n break;\n }\n } else if ('id' in data.data.list[_i5]) {\n if (data.data.list[_i5].id === that.attributeGoods[_m2].id) {\n flag = true;\n if (value) {\n that.attributeGoods[_m2].cnt = value;\n } else {\n that.attributeGoods.splice(_m2, 1);\n }\n break;\n }\n }\n }\n if (!flag) {\n if (!value) {\n return;\n }\n var item = {\n name: data.data.list[_i5].name,\n cnt: value\n };\n if ('ID' in data.data.list[_i5]) {\n item.ID = data.data.list[_i5].ID;\n } else if ('id' in data.data.list[_i5]) {\n item.id = data.data.list[_i5].id;\n }\n that.attributeGoods.push(_objectSpread({}, item));\n }\n });\n inputElm.addEventListener('input', function (e) {\n if (e.data && isNaN(Number(e.data))) {\n if (e.data != '.') {\n inputElm.value = Number(inputElm.value);\n }\n return;\n }\n var value = Number(e.target.value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n inputElm.value = value;\n var flag = false;\n for (var _m3 = that.attributeGoods.length - 1; _m3 >= 0; _m3--) {\n if ('ID' in data.data.list[_i5]) {\n if (data.data.list[_i5].ID === that.attributeGoods[_m3].ID) {\n flag = true;\n if (value) {\n that.attributeGoods[_m3].cnt = value;\n } else {\n that.attributeGoods.splice(_m3, 1);\n }\n break;\n }\n } else if ('id' in data.data.list[_i5]) {\n if (data.data.list[_i5].id === that.attributeGoods[_m3].id) {\n flag = true;\n if (value) {\n that.attributeGoods[_m3].cnt = value;\n } else {\n that.attributeGoods.splice(_m3, 1);\n }\n break;\n }\n }\n }\n if (!flag) {\n if (!value) {\n return;\n }\n var item = {\n name: data.data.list[_i5].name,\n cnt: value\n };\n if ('ID' in data.data.list[_i5]) {\n item.ID = data.data.list[_i5].ID;\n } else if ('id' in data.data.list[_i5]) {\n item.id = data.data.list[_i5].id;\n }\n that.attributeGoods.push(_objectSpread({}, item));\n }\n });\n tableContent.appendChild(trElm);\n };\n for (var _i5 = 0; _i5 < data.data.list.length; _i5++) {\n _loop3(_i5);\n }\n }\n if (data.data && data.data.total) {\n // generatePagination(paginationElm, data.data.total, goodsPageSize, page, (pageIndex) => {\n // that.goodsSelect(pageIndex)\n // });\n }\n } else {\n // generatePagination(paginationElm, 1, goodsPageSize, 1);\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n } else {\n console.error(data.message);\n }\n });\n }\n });\n }\n function goodsFilter() {\n var list = [];\n if (that._allGoodsList && that._allGoodsList.length) {\n var keywords = that._DialogObject._element.content.getElementsByClassName('goods-select-input')[0].value;\n list = that._allGoodsList.filter(function (item) {\n return item.name.indexOf(keywords) !== -1;\n });\n }\n var table = that._DialogObject._element.content.getElementsByClassName('goods-table')[0];\n var tableContent = table.getElementsByClassName('table-body')[0];\n tableContent.innerHTML = '';\n if (list.length > 0) {\n // generatePagination(paginationElm, data.data.total, goodsPageSize, 1, (pageIndex) => {\n // that.goodsSelect(pageIndex)\n // });\n table.getElementsByClassName('table-empty')[0].style.display = 'none';\n tableContent.style.display = 'block';\n tableContent.style.maxHeight = '150px';\n var _loop4 = function _loop4(i) {\n var tr = \"\\n
        \\n
        \\n \".concat(i + 1, \"\\n
        \\n
        \").concat(list[i].name, \"
        \\n
        \\n
        \");\n var trElm = document.createRange().createContextualFragment(tr);\n var inputElm = trElm.querySelector('input[type=\"number\"]');\n inputElm.value = 0;\n for (var m = 0; m < that.attributeGoods.length; m++) {\n if ('ID' in list[i]) {\n if (list[i].ID === that.attributeGoods[m].ID) {\n inputElm.value = that.attributeGoods[m].cnt;\n }\n } else if ('id' in list[i]) {\n if (list[i].id === that.attributeGoods[m].id) {\n inputElm.value = that.attributeGoods[m].cnt;\n }\n }\n }\n inputElm.addEventListener('blur', function (e) {\n var value = Number(e.target.value);\n inputElm.value = value;\n var flag = false;\n for (var _m4 = that.attributeGoods.length - 1; _m4 >= 0; _m4--) {\n if ('ID' in list[i]) {\n if (list[i].ID === that.attributeGoods[_m4].ID) {\n flag = true;\n if (value) {\n that.attributeGoods[_m4].cnt = value;\n } else {\n that.attributeGoods.splice(_m4, 1);\n }\n break;\n }\n } else if ('id' in list[i]) {\n if (list[i].id === that.attributeGoods[_m4].id) {\n flag = true;\n if (value) {\n that.attributeGoods[_m4].cnt = value;\n } else {\n that.attributeGoods.splice(_m4, 1);\n }\n break;\n }\n }\n }\n if (!flag) {\n if (!value) {\n return;\n }\n var item = {\n name: list[i].name,\n cnt: value\n };\n if ('ID' in list[i]) {\n item.ID = list[i].ID;\n } else if ('id' in list[i]) {\n item.id = list[i].id;\n }\n that.attributeGoods.push(_objectSpread({}, item));\n }\n });\n inputElm.addEventListener('input', function (e) {\n if (e.data && isNaN(Number(e.data))) {\n if (e.data != '.') {\n inputElm.value = Number(inputElm.value);\n }\n return;\n }\n var value = Number(e.target.value);\n if (e.target.max && value > Number(e.target.max)) {\n value = Number(e.target.max);\n }\n if (e.target.min && value < Number(e.target.min)) {\n value = Number(e.target.min);\n }\n inputElm.value = value;\n var flag = false;\n for (var _m5 = that.attributeGoods.length - 1; _m5 >= 0; _m5--) {\n if ('ID' in list[i]) {\n if (list[i].ID === that.attributeGoods[_m5].ID) {\n flag = true;\n if (value) {\n that.attributeGoods[_m5].cnt = value;\n } else {\n that.attributeGoods.splice(_m5, 1);\n }\n break;\n }\n } else if ('id' in list[i]) {\n if (list[i].id === that.attributeGoods[_m5].id) {\n flag = true;\n if (value) {\n that.attributeGoods[_m5].cnt = value;\n } else {\n that.attributeGoods.splice(_m5, 1);\n }\n break;\n }\n }\n }\n if (!flag) {\n if (!value) {\n return;\n }\n var item = {\n name: list[i].name,\n cnt: value\n };\n if ('ID' in list[i]) {\n item.ID = list[i].ID;\n } else if ('id' in list[i]) {\n item.id = list[i].id;\n }\n that.attributeGoods.push(_objectSpread({}, item));\n }\n });\n tableContent.appendChild(trElm);\n };\n for (var i = 0; i < list.length; i++) {\n _loop4(i);\n }\n\n // else {\n // table.getElementsByClassName('table-empty')[0].style.display = 'flex'\n // tableContent.style.display = 'none'\n // }\n } else {\n table.getElementsByClassName('table-empty')[0].style.display = 'flex';\n tableContent.style.display = 'none';\n }\n }\n return \"
        \\n
        \\n
        \\n \\u5185\\u5BB9\\u7C7B\\u578B\\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n \\u7F16\\u8F91\\u5185\\u5BB9\\n \\n
        \\n
        \\n
        \\n
        \\n
        \\n \\u6DFB\\u52A0\\u94FE\\u63A5\\n
        \\n \\n \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\u540D\\u79F0
        \\n
        \\u94FE\\u63A5
        \\n
        \\u64CD\\u4F5C
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n

        \\u6682\\u65E0\\u6570\\u636E

        \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n \\u7F16\\u8F91\\u5185\\u5BB9\\n \\n \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n
        \\u64CD\\u4F5C
        \\n
        \\u8BBE\\u5907\\u540D\\u79F0
        \\n
        \\u8BBE\\u5907\\u7C7B\\u578B
        \\n
        \\u8BBE\\u5907IP
        \\n
        \\u8BBE\\u5907\\u7AEF\\u53E3
        \\n
        \\u7528\\u6237\\u540D
        \\n
        \\u5BC6\\u7801
        \\n
        \\n
        \\n
        \\n
        \\n
        \\n \\n \\u7ED1\\u5B9A\\n
        \\n
        \\u8BBE\\u5907\\u540D\\u79F0
        \\n
        \\u8BBE\\u5907\\u7C7B\\u578B
        \\n
        \\u8BBE\\u5907IP
        \\n
        \\u8BBE\\u5907\\u7AEF\\u53E3
        \\n
        \\u7528\\u6237\\u540D
        \\n
        \\u5BC6\\u7801
        \\n
        \\n
        \\n
        \\n
        \\n

        \\u6682\\u65E0\\u6570\\u636E

        \\n
        \\n
        \\n
        \\n
        \\n
          \\n
          \\n
          \\n
          \\n \\n
          \\n
          \\n
          \\n
          \\n
          \\u64CD\\u4F5C
          \\n
          \\u8BBE\\u5907\\u540D\\u79F0
          \\n
          \\u8BBE\\u5907\\u72B6\\u6001
          \\n
          \\n
          \\n
          \\n
          \\n
          \\n \\n \\u7ED1\\u5B9A\\n
          \\n
          \\u8BBE\\u5907\\u540D\\u79F0
          \\n
          \\u8BBE\\u5907\\u72B6\\u6001
          \\n
          \\n
          \\n
          \\n
          \\n

          \\u6682\\u65E0\\u6570\\u636E

          \\n
          \\n
          \\n
          \\n
          \\n
            \\n
            \\n
            \\n
            \\n
            \\n \\u6DFB\\u52A0\\u94FE\\u63A5\\n
            \\n \\n \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\u540D\\u79F0
            \\n
            \\u94FE\\u63A5
            \\n
            \\u64CD\\u4F5C
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n

            \\u6682\\u65E0\\u6570\\u636E

            \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n \\u7F16\\u8F91\\u5185\\u5BB9\\n \\n \\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\u5E8F\\u53F7
            \\n
            \\u540D\\u79F0
            \\n
            \\u6570\\u91CF
            \\n
            \\n
            \\n
            \\n
            \\n
            \\u5E8F\\u53F7
            \\n
            \\u540D\\u79F0
            \\n
            \\u6570\\u91CF
            \\n
            \\n
            \\n
            \\n
            \\n

            \\u6682\\u65E0\\u6570\\u636E

            \\n
            \\n
            \\n
            \\n
            \\n
            \";\n}\nfunction labelStyleElm1(that) {\n return \"\\n
            \\n
            \\n \\u6807\\u6CE8\\u5F00\\u5173\\n \\n
            \\n
            \\n
            \\n
            \\n \\u5B57\\u4F53\\u989C\\u8272\\n
            \\n
            \\n
            \\n \\u5B57\\u4F53\\u9009\\u62E9\\n
            \\n
            \\n
            \\n \\u5B57\\u4F53\\u5927\\u5C0F\\n
            \\n \\n px\\n \\n
            \\n
            \\n
            \\n
            \\n
            \\n \\u89C6\\u91CE\\u7F29\\u653E\\n \\n
            \\n
            \\n \\u6700\\u8FD1\\u8DDD\\u79BB\\n
            \\n \\n m\\n \\n
            \\n
            \\n
            \\n \\u6700\\u8FDC\\u8DDD\\u79BB\\n
            \\n \\n m\\n \\n
            \\n
            \\n
            \\n \";\n}\nfunction labelStyleElm2(that) {\n return \"\\n
            \\n
            \\n \\u5F15\\u7EBF\\u989C\\u8272\\n
            \\n
            \\n
            \\n \\u80CC\\u666F\\u989C\\u8272\\n
            \\n
            \\n
            \\n
            \\n
            \\n
            \\n \\u5F15\\u7EBF\\u5BBD\\u5EA6\\n
            \\n \\n px\\n \\n
            \\n
            \\n
            \\n \\u5F15\\u7EBF\\u957F\\u5EA6\\n
            \\n \\n px\\n \\n
            \\n
            \\n
            \\n \";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvZWxtX2h0bWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2JqL0VsZW1lbnQvZWxtX2h0bWwuanM/YzQ3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRIb3N0LCBnZXRUb2tlbiB9IGZyb20gXCIuLi8uLi9vblwiO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVBhZ2luYXRpb24gfSBmcm9tIFwiLi9QYWdpbmF0aW9uXCI7XHJcbmltcG9ydCB7IGxlZ3AgfSBmcm9tICcuL2RhdGFsaXN0JztcclxuXHJcbmZ1bmN0aW9uIGF0dHJpYnV0ZUVsbSh0aGF0KSB7XHJcbiAgbGV0IGhvc3QgPSBnZXRIb3N0KClcclxuXHJcbiAgdGhhdC5jYW1lcmFTZWxlY3QgPSBjYW1lcmFTZWxlY3RcclxuICB0aGF0LklTQ1NlbGVjdCA9IElTQ1NlbGVjdFxyXG4gIHRoYXQuZ29vZHNTZWxlY3QgPSBnb29kc1NlbGVjdFxyXG4gIHRoYXQuZ29vZHNGaWx0ZXIgPSBnb29kc0ZpbHRlclxyXG4gIHRoYXQuY2FtZXJhTmFtZSA9ICcnXHJcbiAgdGhhdC5JU0NOYW1lID0gJydcclxuICBjb25zdCB0eXBlID0ge1xyXG4gICAgJzEnOiAn5rW35bq3JyxcclxuICAgICcyJzogJ+Wkp+WNjidcclxuICB9XHJcblxyXG4gIGxldCBjYW1lcmFQYWdlU2l6ZSA9IDVcclxuICBsZXQgaXNjUGFnZVNpemUgPSA1XHJcbiAgbGV0IGdvb2RzUGFnZVNpemUgPSA5OTk5OTlcclxuXHJcbiAgZnVuY3Rpb24gY2FtZXJhU2VsZWN0KHBhZ2UpIHtcclxuICAgIGlmICghdGhhdC5hdHRyaWJ1dGVTZWxlY3QpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQuYXR0cmlidXRlU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoYXQuYXR0cmlidXRlU2VsZWN0W2ldLmtleSA9PT0gJ2NhbWVyYScpIHtcclxuICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0UGFnZSA9IHBhZ2VcclxuICAgIHBhZ2UgPSAhcGFnZSB8fCB0eXBlb2YgcGFnZSA9PT0gJ29iamVjdCcgPyAxIDogcGFnZVxyXG4gICAgbGV0IGF0dHJpYnV0ZUNhbWVyYUVsbVxyXG4gICAgaWYgKHRoYXQuX0RpYWxvZ09iamVjdCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQgJiYgdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQpIHtcclxuICAgICAgbGV0IHBhZ2luYXRpb25FbG0gPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwYWdpbmF0aW9uJylbMF1cclxuICAgICAgYXR0cmlidXRlQ2FtZXJhRWxtID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0cmlidXRlLWNvbnRlbnQtY2FtZXJhJylbMF1cclxuICAgICAgaWYgKCFwYWdpbmF0aW9uRWxtKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFhdHRyaWJ1dGVDYW1lcmFFbG0pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgMSwgMTAsIDEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IHVybCA9IFwiXCJcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgY2FtZXJhTmFtZTogdGhhdC5jYW1lcmFOYW1lLFxyXG4gICAgICBwYWdlOiBwYWdlLFxyXG4gICAgICBwYWdlU2l6ZTogY2FtZXJhUGFnZVNpemVcclxuICAgIH07XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xyXG4gICAgaWYgKGhvc3QuZW5kc1dpdGgoXCJ5amVhcnRoNC4wXCIpKVxyXG4gICAgICB1cmwgPSBgJHtob3N0fS9hcGkvdjEvY2FtZXJhRGF0YS9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgZWxzZVxyXG4gICAgICB1cmwgPSBgJHtob3N0fS95amVhcnRoNC4wL2FwaS92MS9jYW1lcmFEYXRhL2xpc3Q/JHtxdWVyeVN0cmluZ31gXHJcbiAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgXCJ0b2tlblwiOiBnZXRUb2tlbigpLFxyXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGdldFRva2VuKCksXHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDAgfHwgZGF0YS5jb2RlID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhhdC5fRGlhbG9nT2JqZWN0IHx8ICF0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQgfHwgIXRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50IHx8ICFhdHRyaWJ1dGVDYW1lcmFFbG0pIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcGFnaW5hdGlvbkVsbSA9IGF0dHJpYnV0ZUNhbWVyYUVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwYWdpbmF0aW9uJylbMF1cclxuICAgICAgICAgICAgbGV0IHRhYmxlID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FtZXJhLXRhYmxlJylbMF1cclxuICAgICAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgICAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgaWYgKGRhdGEucm93cykge1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGxpc3Q6IFsuLi5kYXRhLnJvd3NdLFxyXG4gICAgICAgICAgICAgICAgdG90YWw6IGRhdGEudG90YWxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEubGlzdCAmJiBkYXRhLmRhdGEubGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgZGF0YS5kYXRhLnRvdGFsLCBjYW1lcmFQYWdlU2l6ZSwgMSwgKHBhZ2VJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmNhbWVyYVNlbGVjdChwYWdlSW5kZXgpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgdGFibGVDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWZsZXgnXHJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2tib3hBcnJheSA9IFtdXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuZGF0YS5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ciA9IGBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCIke2RhdGEuZGF0YS5saXN0W2ldLmRldmljZUlkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5Hlrpo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7ZGF0YS5kYXRhLmxpc3RbaV0uY2FtZXJhTmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBjZW50ZXJcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7IG1pbi13aWR0aDogODBweDtcIj4ke3R5cGVbZGF0YS5kYXRhLmxpc3RbaV0udHlwZV19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgY2VudGVyXCIgc3R5bGU9XCJ3aWR0aDogMTI2cHg7IGZsZXg6IDAgMTI2cHg7bWluLXdpZHRoOiAxMjZweDtcIj4ke2RhdGEuZGF0YS5saXN0W2ldLmlwfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGNlbnRlclwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+JHtkYXRhLmRhdGEubGlzdFtpXS5wb3J0fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkIGNlbnRlclwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IGZsZXg6IDAgODBweDttaW4td2lkdGg6IDgwcHg7XCI+JHtkYXRhLmRhdGEubGlzdFtpXS51c2VyTmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBjZW50ZXJcIj4ke2RhdGEuZGF0YS5saXN0W2ldLnBhc3NXb3JkIHx8IGRhdGEuZGF0YS5saXN0W2ldLnBhc3N3b3JkfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IHRyRWxtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpXHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrYm94QXJyYXkucHVzaChjaGVja2JveClcclxuICAgICAgICAgICAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyDlj6rpgInkuK3kuIDkuKpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlQ2FtZXJhID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlQ2FtZXJhLnB1c2goZGF0YS5kYXRhLmxpc3RbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoZWNrYm94QXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrYm94QXJyYXlbal0gIT09IGNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hBcnJheVtqXS5jaGVja2VkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3QXJyYXkgPSB0aGF0LmF0dHJpYnV0ZUNhbWVyYS5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdkZXZpY2VJZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5kZXZpY2VJZCAhPT0gZGF0YS5kYXRhLmxpc3RbaV0uZGV2aWNlSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlQ2FtZXJhID0gbmV3QXJyYXlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdGhhdC5hdHRyaWJ1dGVDYW1lcmEubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCdkZXZpY2VJZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pID8gKHRoYXQuYXR0cmlidXRlQ2FtZXJhW21dLmRldmljZUlkID09PSBkYXRhLmRhdGEubGlzdFtpXS5kZXZpY2VJZCk6ZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhICYmIGRhdGEuZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIGRhdGEuZGF0YS50b3RhbCwgY2FtZXJhUGFnZVNpemUsIHBhZ2UsIChwYWdlSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5jYW1lcmFTZWxlY3QocGFnZUluZGV4KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCAxLCBjYW1lcmFQYWdlU2l6ZSwgMSk7XHJcbiAgICAgICAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgICAgdGFibGVDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDmn6Xor6Llhajpg6hcclxuICAgIGlmICghZmlyc3RQYWdlKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtczIgPSB7XHJcbiAgICAgICAgcGFnZTogMSxcclxuICAgICAgICBwYWdlU2l6ZTogOTk5OTk5OTlcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcXVlcnlTdHJpbmcyID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMyKS50b1N0cmluZygpO1xyXG4gICAgICBpZiAoaG9zdC5lbmRzV2l0aChcInlqZWFydGg0LjBcIikpXHJcbiAgICAgICAgdXJsID0gYCR7aG9zdH0vYXBpL3YxL2NhbWVyYURhdGEvbGlzdD8ke3F1ZXJ5U3RyaW5nMn1gXHJcbiAgICAgIGVsc2VcclxuICAgICAgICB1cmwgPSBgJHtob3N0fS95amVhcnRoNC4wL2FwaS92MS9jYW1lcmFEYXRhL2xpc3Q/JHtxdWVyeVN0cmluZzJ9YFxyXG4gICAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICBcInRva2VuXCI6IGdldFRva2VuKCksXHJcbiAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICAgIH1cclxuICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCB8fCBkYXRhLmNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoYXQuX0RpYWxvZ09iamVjdCB8fCAhdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCAhYXR0cmlidXRlQ2FtZXJhRWxtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEucm93cykge1xyXG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICBsaXN0OiBbLi4uZGF0YS5yb3dzXSxcclxuICAgICAgICAgICAgICAgICAgdG90YWw6IGRhdGEudG90YWxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGF0LmF0dHJpYnV0ZUNhbWVyYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGRhdGEuZGF0YS5saXN0Lmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5hdHRyaWJ1dGVDYW1lcmFbaV0uZGV2aWNlSWQgPT09IGRhdGEuZGF0YS5saXN0W21dLmRldmljZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVDYW1lcmEuc3BsaWNlKGksIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVDYW1lcmEgPSBbXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlQ2FtZXJhID0gW11cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gSVNDU2VsZWN0KHBhZ2UpIHtcclxuICAgIGlmICghdGhhdC5hdHRyaWJ1dGVTZWxlY3QpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQuYXR0cmlidXRlU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoYXQuYXR0cmlidXRlU2VsZWN0W2ldLmtleSA9PT0gJ2lzYycpIHtcclxuICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGFnZSA9ICFwYWdlIHx8IHR5cGVvZiBwYWdlID09PSAnb2JqZWN0JyA/IDEgOiBwYWdlXHJcbiAgICBsZXQgYXR0cmlidXRlQ2FtZXJhRWxtXHJcbiAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hdGlvbkVsbSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BhZ2luYXRpb24nKVswXVxyXG4gICAgICBhdHRyaWJ1dGVDYW1lcmFFbG0gPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1pc2MnKVswXVxyXG4gICAgICBpZiAoIXBhZ2luYXRpb25FbG0pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWF0dHJpYnV0ZUNhbWVyYUVsbSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCAxLCAxMCwgMSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdXJsID0gXCJcIlxyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAvLyBuYW1lOiB0aGF0LmlzY05hbWUsXHJcbiAgICAgIHBhZ2U6IHBhZ2UsXHJcbiAgICAgIHBhZ2Vfc2l6ZTogaXNjUGFnZVNpemVcclxuICAgIH07XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xyXG4gICAgaWYgKGhvc3QuZW5kc1dpdGgoXCJ5amVhcnRoNC4wXCIpKVxyXG4gICAgICB1cmwgPSBgJHtob3N0fS9hcGkvdjEvaXNjL2xpc3Q/JHtxdWVyeVN0cmluZ31gXHJcbiAgICBlbHNlXHJcbiAgICAgIHVybCA9IGAke2hvc3R9L3lqZWFydGg0LjAvYXBpL3YxL2lzYy9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXNwb25zZS5qc29uKCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwIHx8IGRhdGEuY29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoYXQuX0RpYWxvZ09iamVjdCB8fCAhdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCAhYXR0cmlidXRlQ2FtZXJhRWxtKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBhZ2luYXRpb25FbG0gPSBhdHRyaWJ1dGVDYW1lcmFFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGFnaW5hdGlvbicpWzBdXHJcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lzYy10YWJsZScpWzBdXHJcbiAgICAgICAgICAgIGxldCB0YWJsZUNvbnRlbnQgPSB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1ib2R5JylbMF1cclxuICAgICAgICAgICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgICAgIGlmIChkYXRhLnJvd3MpIHtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0OiBbLi4uZGF0YS5yb3dzXSxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLnRvdGFsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmRhdGEpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhLmxpc3QgJiYgZGF0YS5kYXRhLmxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIGRhdGEuZGF0YS50b3RhbCwgaXNjUGFnZVNpemUsIDEsIChwYWdlSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5JU0NTZWxlY3QocGFnZUluZGV4KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgICAgICAgIHRhYmxlQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuZGF0YS5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ciA9IGBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCIkeydJRCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0gPyBkYXRhLmRhdGEubGlzdFtpXS5JRCA6IGRhdGEuZGF0YS5saXN0W2ldLmlkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5Hlrpo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPiR7ZGF0YS5kYXRhLmxpc3RbaV0ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCBjZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxODBweDsgZmxleDogMCAxODBweDsgbWluLXdpZHRoOiAxODBweDtcIj4ke2RhdGEuZGF0YS5saXN0W2ldLnN0YXR1cyA/ICflnKjnur8nIDogJ+emu+e6vyd9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICBsZXQgdHJFbG0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0cilcclxuICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrYm94ID0gdHJFbG0ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJylcclxuICAgICAgICAgICAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUlTQy5wdXNoKGRhdGEuZGF0YS5saXN0W2ldKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdBcnJheSA9IHRoYXQuYXR0cmlidXRlSVNDLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLklEICE9PSBkYXRhLmRhdGEubGlzdFtpXS5JRFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlkICE9PSBkYXRhLmRhdGEubGlzdFtpXS5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVJU0MgPSBuZXdBcnJheVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgdGFibGVDb250ZW50LmFwcGVuZENoaWxkKHRyRWxtKVxyXG5cclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0aGF0LmF0dHJpYnV0ZUlTQy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkgPyAodGhhdC5hdHRyaWJ1dGVJU0NbbV0uSUQgPT09IGRhdGEuZGF0YS5saXN0W2ldLklEKSA6ICh0aGF0LmF0dHJpYnV0ZUlTQ1ttXS5pZCA9PT0gZGF0YS5kYXRhLmxpc3RbaV0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCBkYXRhLmRhdGEudG90YWwsIGlzY1BhZ2VTaXplLCBwYWdlLCAocGFnZUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXQuSVNDU2VsZWN0KHBhZ2VJbmRleClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBnZW5lcmF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbkVsbSwgMSwgaXNjUGFnZVNpemUsIDEpO1xyXG4gICAgICAgICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICAgIHRhYmxlQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS5tZXNzYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnb29kc1NlbGVjdChwYWdlKSB7XHJcbiAgICBpZiAoIXRoYXQuYXR0cmlidXRlU2VsZWN0KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LmF0dHJpYnV0ZVNlbGVjdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGF0LmF0dHJpYnV0ZVNlbGVjdFtpXS5rZXkgPT09ICdnb29kcycpIHtcclxuICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGFnZSA9ICFwYWdlIHx8IHR5cGVvZiBwYWdlID09PSAnb2JqZWN0JyA/IDEgOiBwYWdlXHJcbiAgICBsZXQgYXR0cmlidXRlRWxtXHJcbiAgICBpZiAodGhhdC5fRGlhbG9nT2JqZWN0ICYmIHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudCAmJiB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hdGlvbkVsbSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BhZ2luYXRpb24nKVswXVxyXG4gICAgICBhdHRyaWJ1dGVFbG0gPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRyaWJ1dGUtY29udGVudC1nb29kcycpWzBdXHJcbiAgICAgIGlmICghcGFnaW5hdGlvbkVsbSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICghYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgLy8gZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIDEsIDEwLCAxKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCB1cmwgPSBcIlwiXHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIHBhZ2U6IHBhZ2UsXHJcbiAgICAgIHBhZ2Vfc2l6ZTogZ29vZHNQYWdlU2l6ZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoaG9zdC5lbmRzV2l0aChcInlqZWFydGg0LjBcIikpXHJcbiAgICAgIHVybCA9IGAke2hvc3R9L2FwaS92MS9nb29kcy9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgZWxzZVxyXG4gICAgICB1cmwgPSBgJHtob3N0fS95amVhcnRoNC4wL2FwaS92MS9nb29kcy9saXN0PyR7cXVlcnlTdHJpbmd9YFxyXG4gICAgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIFwidG9rZW5cIjogZ2V0VG9rZW4oKSxcclxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBnZXRUb2tlbigpLFxyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXNwb25zZS5qc29uKCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwIHx8IGRhdGEuY29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoYXQuX0RpYWxvZ09iamVjdCB8fCAhdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50IHx8ICF0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudCB8fCAhYXR0cmlidXRlRWxtKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBhZ2luYXRpb25FbG0gPSBhdHRyaWJ1dGVFbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGFnaW5hdGlvbicpWzBdXHJcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IHRoYXQuX0RpYWxvZ09iamVjdC5fZWxlbWVudC5jb250ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dvb2RzLXRhYmxlJylbMF1cclxuICAgICAgICAgICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgICAgICAgICB0YWJsZUNvbnRlbnQuaW5uZXJIVE1MID0gJydcclxuICAgICAgICAgICAgaWYgKGRhdGEucm93cykge1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGxpc3Q6IFsuLi5kYXRhLnJvd3NdLFxyXG4gICAgICAgICAgICAgICAgdG90YWw6IGRhdGEudG90YWxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEubGlzdCAmJiBkYXRhLmRhdGEubGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0Ll9hbGxHb29kc0xpc3QgPSBkYXRhLmRhdGEubGlzdFxyXG4gICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIGRhdGEuZGF0YS50b3RhbCwgZ29vZHNQYWdlU2l6ZSwgMSwgKHBhZ2VJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICB0aGF0Lmdvb2RzU2VsZWN0KHBhZ2VJbmRleClcclxuICAgICAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoYXQuYXR0cmlidXRlR29vZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGRhdGEuZGF0YS5saXN0Lmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCdJRCcgaW4gZGF0YS5kYXRhLmxpc3RbbV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEubGlzdFttXS5JRCA9PT0gdGhhdC5hdHRyaWJ1dGVHb29kc1tpXS5JRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgnaWQnIGluIGRhdGEuZGF0YS5saXN0W21dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhLmxpc3RbbV0uaWQgPT09IHRoYXQuYXR0cmlidXRlR29vZHNbaV0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kcy5zcGxpY2UoaSwgMSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGFibGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFibGUtZW1wdHknKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICAgICAgICAgIHRhYmxlQ29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSAnMTUwcHgnXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuZGF0YS5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ciA9IGBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwid2lkdGg6IDYwcHg7IGZsZXg6IDAgNjBweDttaW4td2lkdGg6IDYwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR7aSArIDF9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwiZmxleDogMCAwIDI4MHB4O1wiPiR7ZGF0YS5kYXRhLmxpc3RbaV0ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPjxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OTk5OTk5OVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgICAgICAgbGV0IHRyRWxtID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodHIpXHJcbiAgICAgICAgICAgICAgICAgIGxldCBpbnB1dEVsbSA9IHRyRWxtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nKVxyXG4gICAgICAgICAgICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IDBcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCB0aGF0LmF0dHJpYnV0ZUdvb2RzLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCdJRCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEubGlzdFtpXS5JRCA9PT0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5JRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IHRoYXQuYXR0cmlidXRlR29vZHNbbV0uY250XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHNbbV0ubmFtZSA9IGRhdGEuZGF0YS5saXN0W2ldLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJ2lkJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0W2ldLmlkID09PSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxtLnZhbHVlID0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5jbnRcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlucHV0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSB0aGF0LmF0dHJpYnV0ZUdvb2RzLmxlbmd0aCAtIDE7IG0gPj0gMDsgbS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhLmxpc3RbaV0uSUQgPT09IHRoYXQuYXR0cmlidXRlR29vZHNbbV0uSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5jbnQgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHMuc3BsaWNlKG0sIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0W2ldLmlkID09PSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHNbbV0uY250ID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnNwbGljZShtLCAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLmRhdGEubGlzdFtpXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbnQ6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLklEID0gZGF0YS5kYXRhLmxpc3RbaV0uSURcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCA9IGRhdGEuZGF0YS5saXN0W2ldLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnB1c2goeyAuLi5pdGVtIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBpbnB1dEVsbS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAmJiBpc05hTihOdW1iZXIoZS5kYXRhKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxtLnZhbHVlID0gTnVtYmVyKGlucHV0RWxtLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWF4KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQubWluKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSB0aGF0LmF0dHJpYnV0ZUdvb2RzLmxlbmd0aCAtIDE7IG0gPj0gMDsgbS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhLmxpc3RbaV0uSUQgPT09IHRoYXQuYXR0cmlidXRlR29vZHNbbV0uSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5jbnQgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHMuc3BsaWNlKG0sIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5saXN0W2ldLmlkID09PSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHNbbV0uY250ID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnNwbGljZShtLCAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLmRhdGEubGlzdFtpXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbnQ6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0lEJyBpbiBkYXRhLmRhdGEubGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLklEID0gZGF0YS5kYXRhLmxpc3RbaV0uSURcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gZGF0YS5kYXRhLmxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCA9IGRhdGEuZGF0YS5saXN0W2ldLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnB1c2goeyAuLi5pdGVtIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlQ29udGVudC5hcHBlbmRDaGlsZCh0ckVsbSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCBkYXRhLmRhdGEudG90YWwsIGdvb2RzUGFnZVNpemUsIHBhZ2UsIChwYWdlSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgdGhhdC5nb29kc1NlbGVjdChwYWdlSW5kZXgpXHJcbiAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gZ2VuZXJhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb25FbG0sIDEsIGdvb2RzUGFnZVNpemUsIDEpO1xyXG4gICAgICAgICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICAgIHRhYmxlQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS5tZXNzYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnb29kc0ZpbHRlcigpIHtcclxuICAgIGxldCBsaXN0ID0gW11cclxuICAgIGlmICh0aGF0Ll9hbGxHb29kc0xpc3QgJiYgdGhhdC5fYWxsR29vZHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICBsZXQga2V5d29yZHMgPSB0aGF0Ll9EaWFsb2dPYmplY3QuX2VsZW1lbnQuY29udGVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdnb29kcy1zZWxlY3QtaW5wdXQnKVswXS52YWx1ZVxyXG4gICAgICBsaXN0ID0gdGhhdC5fYWxsR29vZHNMaXN0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiAoaXRlbS5uYW1lLmluZGV4T2Yoa2V5d29yZHMpICE9PSAtMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlID0gdGhhdC5fRGlhbG9nT2JqZWN0Ll9lbGVtZW50LmNvbnRlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ29vZHMtdGFibGUnKVswXVxyXG4gICAgbGV0IHRhYmxlQ29udGVudCA9IHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWJvZHknKVswXVxyXG4gICAgdGFibGVDb250ZW50LmlubmVySFRNTCA9ICcnXHJcbiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIGdlbmVyYXRlUGFnaW5hdGlvbihwYWdpbmF0aW9uRWxtLCBkYXRhLmRhdGEudG90YWwsIGdvb2RzUGFnZVNpemUsIDEsIChwYWdlSW5kZXgpID0+IHtcclxuICAgICAgLy8gICB0aGF0Lmdvb2RzU2VsZWN0KHBhZ2VJbmRleClcclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICB0YWJsZUNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgdGFibGVDb250ZW50LnN0eWxlLm1heEhlaWdodCA9ICcxNTBweCdcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHRyID0gYFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cIndpZHRoOiA2MHB4OyBmbGV4OiAwIDYwcHg7bWluLXdpZHRoOiA2MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgJHtpICsgMX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiBzdHlsZT1cImZsZXg6IDAgMCAyODBweDtcIj4ke2xpc3RbaV0ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj48aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cIlwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5OTk5OTlcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgICAgIGxldCB0ckVsbSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRyKVxyXG4gICAgICAgIGxldCBpbnB1dEVsbSA9IHRyRWxtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nKVxyXG4gICAgICAgIGlucHV0RWxtLnZhbHVlID0gMFxyXG4gICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgdGhhdC5hdHRyaWJ1dGVHb29kcy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgaWYgKCdJRCcgaW4gbGlzdFtpXSkge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtpXS5JRCA9PT0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5JRCkge1xyXG4gICAgICAgICAgICAgIGlucHV0RWxtLnZhbHVlID0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5jbnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoJ2lkJyBpbiBsaXN0W2ldKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W2ldLmlkID09PSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmlkKSB7XHJcbiAgICAgICAgICAgICAgaW5wdXRFbG0udmFsdWUgPSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmNudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dEVsbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC52YWx1ZSlcclxuICAgICAgICAgIGlucHV0RWxtLnZhbHVlID0gdmFsdWVcclxuICAgICAgICAgIGxldCBmbGFnID0gZmFsc2VcclxuICAgICAgICAgIGZvciAobGV0IG0gPSB0aGF0LmF0dHJpYnV0ZUdvb2RzLmxlbmd0aCAtIDE7IG0gPj0gMDsgbS0tKSB7XHJcbiAgICAgICAgICAgIGlmICgnSUQnIGluIGxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICBpZiAobGlzdFtpXS5JRCA9PT0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5JRCkge1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmNudCA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kcy5zcGxpY2UobSwgMSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gbGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgIGlmIChsaXN0W2ldLmlkID09PSB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHNbbV0uY250ID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnNwbGljZShtLCAxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogbGlzdFtpXS5uYW1lLFxyXG4gICAgICAgICAgICAgIGNudDogdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJ0lEJyBpbiBsaXN0W2ldKSB7XHJcbiAgICAgICAgICAgICAgaXRlbS5JRCA9IGxpc3RbaV0uSURcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgnaWQnIGluIGxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICBpdGVtLmlkID0gbGlzdFtpXS5pZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHMucHVzaCh7IC4uLml0ZW0gfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlucHV0RWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHtcclxuICAgICAgICAgIGlmIChlLmRhdGEgJiYgaXNOYU4oTnVtYmVyKGUuZGF0YSkpKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgIT0gJy4nKSB7XHJcbiAgICAgICAgICAgICAgaW5wdXRFbG0udmFsdWUgPSBOdW1iZXIoaW5wdXRFbG0udmFsdWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpXHJcbiAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1heCkgJiYgdmFsdWUgPiBOdW1iZXIoZS50YXJnZXQubWF4KSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5tYXgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKGUudGFyZ2V0Lm1pbikgJiYgdmFsdWUgPCBOdW1iZXIoZS50YXJnZXQubWluKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihlLnRhcmdldC5taW4pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnB1dEVsbS52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICBsZXQgZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICBmb3IgKGxldCBtID0gdGhhdC5hdHRyaWJ1dGVHb29kcy5sZW5ndGggLSAxOyBtID49IDA7IG0tLSkge1xyXG4gICAgICAgICAgICBpZiAoJ0lEJyBpbiBsaXN0W2ldKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGxpc3RbaV0uSUQgPT09IHRoYXQuYXR0cmlidXRlR29vZHNbbV0uSUQpIHtcclxuICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5jbnQgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoYXQuYXR0cmlidXRlR29vZHMuc3BsaWNlKG0sIDEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgnaWQnIGluIGxpc3RbaV0pIHtcclxuICAgICAgICAgICAgICBpZiAobGlzdFtpXS5pZCA9PT0gdGhhdC5hdHRyaWJ1dGVHb29kc1ttXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzW21dLmNudCA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhhdC5hdHRyaWJ1dGVHb29kcy5zcGxpY2UobSwgMSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcclxuICAgICAgICAgICAgICBjbnQ6IHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCdJRCcgaW4gbGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgIGl0ZW0uSUQgPSBsaXN0W2ldLklEXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJ2lkJyBpbiBsaXN0W2ldKSB7XHJcbiAgICAgICAgICAgICAgaXRlbS5pZCA9IGxpc3RbaV0uaWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0LmF0dHJpYnV0ZUdvb2RzLnB1c2goeyAuLi5pdGVtIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWJsZUNvbnRlbnQuYXBwZW5kQ2hpbGQodHJFbG0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIHRhYmxlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhYmxlLWVtcHR5JylbMF0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAvLyAgIHRhYmxlQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0YWJsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWJsZS1lbXB0eScpWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgdGFibGVDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGF0dHJpYnV0ZS1zZWxlY3QtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDMycHg7XCI+5YaF5a6557G75Z6LPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dCBpbnB1dC1zZWxlY3QgYXR0cmlidXRlLXNlbGVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtcmljaFRleHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nvJbovpHlhoXlrrk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwib3BlblJpY2hUZXh0RWRpdG9yXCI+5omT5byA5paH5pys57yW6L6R5ZmoPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtbGlua1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mt7vliqDpk77mjqU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7cG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBsaW5rX2FkZFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlua19hZGRfYnRuXCIgQGNsaWNrPVwiX2FkZExpbmtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuWQjeensDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6ZO+5o6lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7mk43kvZw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtZW1wdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD7mmoLml6DmlbDmja48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1jYW1lcmFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7nvJbovpHlhoXlrrk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBAbW9kZWw9XCJjYW1lcmFOYW1lXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3QgYnRuXCIgQGNsaWNrPVwiY2FtZXJhU2VsZWN0XCI+5pCc57SiPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlIGNhbWVyYS10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5pON5L2cPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+6K6+5aSH5ZCN56ewPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgZmxleDogMCA4MHB4O21pbi13aWR0aDogODBweDtcIj7orr7lpIfnsbvlnos8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxMjZweDsgZmxleDogMCAxMjZweDttaW4td2lkdGg6IDEyNnB4O1wiPuiuvuWkh0lQPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgZmxleDogMCA4MHB4O21pbi13aWR0aDogODBweDtcIj7orr7lpIfnq6/lj6M8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBmbGV4OiAwIDgwcHg7bWluLXdpZHRoOiA4MHB4O1wiPueUqOaIt+WQjTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPuWvhueggTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nu5Hlrpo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+6K6+5aSH5ZCN56ewPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+6K6+5aSH57G75Z6LPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+6K6+5aSHSVA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7orr7lpIfnq6/lj6M8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7nlKjmiLflkI08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIj7lr4bnoIE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaW1nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7mmoLml6DmlbDmja48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCJyb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPjwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC1pc2NcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPue8lui+keWGheWuuTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIEBtb2RlbD1cIklTQ05hbWVcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbGVjdCBidG5cIiBAY2xpY2s9XCJJU0NTZWxlY3RcIj7mkJzntKI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlIGlzYy10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogNzRweDsgZmxleDogMCA3NHB4O21pbi13aWR0aDogNzRweDtcIj7mk43kvZw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7orr7lpIflkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxODBweDsgZmxleDogMCAxODBweDsgbWluLXdpZHRoOiAxODBweDtcIj7orr7lpIfnirbmgIE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+57uR5a6aPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiPuiuvuWkh+WQjeensDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwid2lkdGg6IDE4MHB4OyBmbGV4OiAwIDE4MHB4OyBtaW4td2lkdGg6IDE4MHB4O1wiPuiuvuWkh+eKtuaAgTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtZW1wdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pbWdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPuaaguaXoOaVsOaNrjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcInJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+PC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC12clwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7mt7vliqDpk77mjqU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7cG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCB2cl9hZGRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInZyX2FkZF9idG5cIiBAY2xpY2s9XCJfYWRkUnJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtY29udGVudCBhdHRyaWJ1dGUtY29udGVudC12clwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7lkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiPumTvuaOpTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCI+5pON5L2cPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pbWdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+5pqC5peg5pWw5o2uPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRlbnQgYXR0cmlidXRlLWNvbnRlbnQtZ29vZHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+57yW6L6R5YaF5a65PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgZ29vZHMtc2VsZWN0LWlucHV0XCIgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxODBweDttYXJnaW4tcmlnaHQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VsZWN0IGJ0blwiIEBjbGljaz1cImdvb2RzRmlsdGVyXCI+5pCc57SiPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZSBnb29kcy10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogNjBweDsgZmxleDogMCA2MHB4O21pbi13aWR0aDogNjBweDtcIj7luo/lj7c8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiBzdHlsZT1cImZsZXg6IDAgMCAyODBweDtcIj7lkI3np7A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIj7mlbDph488L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiIHN0eWxlPVwid2lkdGg6IDYwcHg7IGZsZXg6IDAgNjBweDttaW4td2lkdGg6IDYwcHg7XCI+5bqP5Y+3PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCIgc3R5bGU9XCJmbGV4OiAwIDAgMjgwcHg7XCI+5ZCN56ewPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRkXCI+5pWw6YePPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1lbXB0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+5pqC5peg5pWw5o2uPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PmBcclxufVxyXG5cclxuZnVuY3Rpb24gbGFiZWxTdHlsZUVsbTEodGhhdCkge1xyXG4gIHJldHVybiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7moIfms6jlvIDlhbM8L3NwYW4+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tc3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgQG1vZGVsPVwibGFiZWxTaG93XCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBzdHlsZT1cImZsZXg6IDAgMCAxMTRweDtcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj7lrZfkvZPpopzoibI8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb2xvclwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBmb250LXNlbGVjdC1ib3hcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBzdHlsZT1cImZsZXg6IG5vbmU7XCI+5a2X5L2T6YCJ5oupPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0IGlucHV0LXNlbGVjdCBmb250LXNlbGVjdFwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuWtl+S9k+Wkp+Wwjzwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5XCIgQG1vZGVsPVwibGFiZWxGb250U2l6ZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPnB4PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwiZmxleDogMCAwIDExNHB4O1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuinhumHjue8qeaUvjwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1zd2l0Y2hcIiB0eXBlPVwiY2hlY2tib3hcIiBAbW9kZWw9XCJsYWJlbFNjYWxlQnlEaXN0YW5jZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuacgOi/kei3neemuzwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5OTk5OTk5XCIgQG1vZGVsPVwibGFiZWxOZWFyXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+bTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+5pyA6L+c6Led56a7PC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW51bWJlciBpbnB1dC1udW1iZXItdW5pdC0xXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgdGl0bGU9XCJcIiBtaW49XCIxXCIgbWF4PVwiOTk5OTk5OTlcIiBAbW9kZWw9XCJsYWJlbEZhclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdFwiPm08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGBcclxufVxyXG5mdW5jdGlvbiBsYWJlbFN0eWxlRWxtMih0aGF0KSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuW8lee6v+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbExpbmVDb2xvclwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuiDjOaZr+minOiJsjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbEJhY2tncm91bmRDb2xvclN0YXJ0XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHg7XCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxCYWNrZ3JvdW5kQ29sb3JFbmRcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuW8lee6v+WuveW6pjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMVwiIG1heD1cIjk5OVwiIEBtb2RlbD1cImxhYmVsTGluZVdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bml0XCI+cHg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPuW8lee6v+mVv+W6pjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1udW1iZXIgaW5wdXQtbnVtYmVyLXVuaXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cIm51bWJlclwiIHRpdGxlPVwiXCIgbWluPVwiMFwiIG1heD1cIjk5OVwiIEBtb2RlbD1cImxhYmVsUGl4ZWxPZmZzZXRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXRcIj5weDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG59XHJcblxyXG5leHBvcnQgeyBhdHRyaWJ1dGVFbG0sIGxhYmVsU3R5bGVFbG0xLCBsYWJlbFN0eWxlRWxtMiB9XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUFBQTtBQUFBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcENBO0FBQUE7QUFBQTtBQXFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBdklBO0FBQUE7QUFBQTtBQXdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcElBO0FBQUE7QUFBQTtBQUNBO0FBcUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBcUxBO0FBRUE7QUFDQTtBQWdEQTtBQUNBO0FBQ0E7QUErQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Obj/Element/elm_html.js\n"); /***/ }), /***/ "./src/Obj/Element/fontSelect.js": /*!***************************************!*\ !*** ./src/Obj/Element/fontSelect.js ***! \***************************************/ /*! exports provided: getFontList, getFontFamily, getFontFamilyName */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFontList\", function() { return getFontList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFontFamily\", function() { return getFontFamily; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFontFamilyName\", function() { return getFontFamilyName; });\nvar fontData = [{\n name: '黑体',\n value: '黑体',\n font: 'SimHei',\n key: '0'\n}, {\n name: '思源黑体',\n value: '思源黑体',\n font: 'SourceHanSansTi',\n key: '1'\n}, {\n name: '庞门正道标题体',\n value: '庞门正道标题体',\n font: 'PMZDBTTi',\n key: '2'\n}, {\n name: '数黑体',\n value: '数黑体',\n font: 'AlimamaShuHeiTi',\n key: '3'\n}];\nfunction getFontList() {\n return fontData;\n}\nfunction getFontFamily(key) {\n for (var i = 0; i < fontData.length; i++) {\n if (fontData[i].key == key) {\n return fontData[i].font;\n }\n }\n}\nfunction getFontFamilyName(key) {\n for (var i = 0; i < fontData.length; i++) {\n if (fontData[i].key == key) {\n return fontData[i].name;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvT2JqL0VsZW1lbnQvZm9udFNlbGVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9PYmovRWxlbWVudC9mb250U2VsZWN0LmpzPzkwZTMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IGZvbnREYXRhID0gW1xyXG4gIHtcclxuICAgIG5hbWU6ICfpu5HkvZMnLFxyXG4gICAgdmFsdWU6ICfpu5HkvZMnLFxyXG4gICAgZm9udDogJ1NpbUhlaScsXHJcbiAgICBrZXk6ICcwJ1xyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogJ+aAnea6kOm7keS9kycsXHJcbiAgICB2YWx1ZTogJ+aAnea6kOm7keS9kycsXHJcbiAgICBmb250OiAnU291cmNlSGFuU2Fuc1RpJyxcclxuICAgIGtleTogJzEnXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiAn5bqe6Zeo5q2j6YGT5qCH6aKY5L2TJyxcclxuICAgIHZhbHVlOiAn5bqe6Zeo5q2j6YGT5qCH6aKY5L2TJyxcclxuICAgIGZvbnQ6ICdQTVpEQlRUaScsXHJcbiAgICBrZXk6ICcyJ1xyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogJ+aVsOm7keS9kycsXHJcbiAgICB2YWx1ZTogJ+aVsOm7keS9kycsXHJcbiAgICBmb250OiAnQWxpbWFtYVNodUhlaVRpJyxcclxuICAgIGtleTogJzMnXHJcbiAgfVxyXG5dXHJcblxyXG5mdW5jdGlvbiBnZXRGb250TGlzdCgpIHtcclxuICByZXR1cm4gZm9udERhdGFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Rm9udEZhbWlseShrZXkpIHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAoZm9udERhdGFbaV0ua2V5ID09IGtleSkge1xyXG4gICAgICByZXR1cm4gZm9udERhdGFbaV0uZm9udDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZvbnRGYW1pbHlOYW1lKGtleSkge1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChmb250RGF0YVtpXS5rZXkgPT0ga2V5KSB7XHJcbiAgICAgIHJldHVybiBmb250RGF0YVtpXS5uYW1lO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgZ2V0Rm9udExpc3QsIGdldEZvbnRGYW1pbHksIGdldEZvbnRGYW1pbHlOYW1lIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Obj/Element/fontSelect.js\n"); /***/ }), /***/ "./src/Obj/Element/richText.js": /*!*************************************!*\ !*** ./src/Obj/Element/richText.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../on */ \"./src/on/index.js\");\n\n\n\n\nfunction _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }\nfunction _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); }\nfunction _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }\nfunction _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }\nfunction _assertClassBrand(e, t, n) { if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError(\"Private element is not present on this object\"); }\n\nvar _customUploadVideo = /*#__PURE__*/new WeakMap();\nvar _customUploadContent = /*#__PURE__*/new WeakMap();\nvar _primaryCallBack = /*#__PURE__*/new WeakMap();\nvar richText = /*#__PURE__*/function () {\n function richText() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, richText);\n _classPrivateFieldInitSpec(this, _customUploadVideo, void 0);\n _classPrivateFieldInitSpec(this, _customUploadContent, void 0);\n _classPrivateFieldInitSpec(this, _primaryCallBack, void 0);\n this.richTextBox = document.createElement('div');\n this.richTextBox.className = 'richText-box';\n this.richTextBox.style.position = 'absolute';\n this.richTextBox.style.width = '60%';\n this.richTextBox.style.height = '70%';\n this.richTextBox.style.backgroundColor = '#ffffff';\n this.richTextBox.style.zIndex = '999999';\n this.richTextBox.style.left = '20%';\n this.richTextBox.style.top = '15%';\n this.richTextBox.style.display = 'flex';\n this.richTextBox.style.flexDirection = 'column';\n this.uploadImageServer;\n this.uploadVideoServer;\n }\n\n // 打开\n return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(richText, [{\n key: \"open\",\n value: function open(id) {\n var _this2 = this;\n var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var content = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var _this = this;\n this.title = title;\n this.objectId = id;\n if (document.body.getElementsByClassName('richText-box')[0]) {\n document.body.removeChild(this.richTextBox);\n }\n this.editor = null;\n var html = \"\\n
            \\n
            \\n
            \\n

            \".concat(title, \"

            \\n \\n
            \\n
            \\n
            \\n
            \\n \\n \\n
            \\n
            \\n \");\n\n // let elm = document.createRange().createContextualFragment(html)\n this.richTextBox.innerHTML = html;\n document.body.appendChild(this.richTextBox);\n var _window$wangEditor = window.wangEditor,\n createEditor = _window$wangEditor.createEditor,\n createToolbar = _window$wangEditor.createToolbar;\n var editorConfig = {\n placeholder: '请输入正文...',\n MENU_CONF: {\n uploadImage: {\n fieldName: 'file',\n // maxFileSize: 50 * 1024 * 1024,\n // base64LimitSize: 50 * 1024 * 1024, // 50M 以下插入 base64\n server: this.uploadImageServer,\n // // 上传之前触发\n // onBeforeUpload(file) { // TS 语法\n // // onBeforeUpload(file) { // JS 语法\n // // file 选中的文件,格式如 { key: file }\n // return file\n // // 可以 return\n // // 1. return file 或者 new 一个 file ,接下来将上传\n // // 2. return false ,不上传这个 file\n // },\n // // 上传进度的回调函数\n // onProgress(progress) { // TS 语法\n // // onProgress(progress) { // JS 语法\n // // progress 是 0-100 的数字\n // console.log('progress', progress)\n // },\n // // 单个文件上传成功之后\n // onSuccess(file, res) { // TS 语法\n // // onSuccess(file, res) { // JS 语法\n // console.log(`${file.name} 上传成功`, res)\n // },\n // // 单个文件上传失败\n // onFailed(file, res) { // TS 语法\n // // onFailed(file, res) { // JS 语法\n // console.log(`${file.name} 上传失败`, res)\n // },\n // // 上传错误,或者触发 timeout 超时\n // onError(file, err, res) { // TS 语法\n // // onError(file, err, res) { // JS 语法\n // console.log(`${file.name} 上传出错`, err, res)\n // },\n // 自定义上传\n customUpload: function customUpload(file, insertFn) {\n return _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee() {\n var url;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _this.upload(file);\n case 2:\n url = _context.sent;\n insertFn((_this.host = _this.host || Object(_on__WEBPACK_IMPORTED_MODULE_4__[\"getHost\"])()) + '/' + url);\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }))();\n }\n },\n uploadVideo: {\n // maxFileSize: 500 * 1024 * 1024,\n server: this.uploadVideoServer,\n allowedFileTypes: ['video/mp4', 'video/mp3', 'video/ogg', 'video/webm', 'video/avi'],\n // 自定义上传\n customUpload: function customUpload(file, insertFn) {\n return _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2() {\n var url;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this.upload(file);\n case 2:\n url = _context2.sent;\n insertFn((_this.host = _this.host || Object(_on__WEBPACK_IMPORTED_MODULE_4__[\"getHost\"])()) + '/' + url);\n // if(_this.#customUploadVideo) {\n // let url = await _this.#customUploadVideo(file)\n // insertFn(url, file.name)\n // }\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))();\n }\n }\n },\n onChange: function onChange(editor) {\n var html = editor.getHtml();\n // 也可以同步到